间接连接定理:
只要满足以下3个条件之一,就可以确定交换机A和B通过x和y端口间接相连。设交换机A在x端口上学习到的MAC地址的集合为FxA。
1.FxA和FyB中同时存在着对方的MAC地址;
2.FxA中存在B的MAC地址,并且A上存在一个端口k(k≠x),使得FyB∩FkA≠ф;
3.在B上存在两个端口i,j,使得FxA∩FiB≠ф且FxA∩FjB≠ф,并且A上存在端口k(k≠x),使得FkA∩FyB≠ф。
由于交换机之间很少通信,所以条件1和2中要求的交换机A的FxA中存在B的MAC地址很难满足,可以利用IP欺骗的方法尽量地使条件满足。具体做法是:对于子网中的每个交换机Si,利用IP欺骗方法,以Si的IP地址为源地址,向子网中的其他交换机发送ICMP ECHO消息。在Si收到回应后,将导致Si的FDB中保存有其他交换机的MAC地址。
基于间接连接确定直接连接
根据子网内交换机之间的间接连接关系,就可以确定交换机之间的直接连接关系。设子网内的所有交换机构成的集合为G。根据STP协议,交换机之间将构成一棵树。任选其中一个交换机Si为根,假设Si通过n个端口与其他交换机构成间接连接,则可以将G-{Si}构成一个划分Πi,划分中包含n个元素,每个元素是与Si的某个端口p相间接连接的交换机的集合,设为Gp。在Gp中任选一个交换机Sj,则Sj必然通过某个端口q与Si的端口p间接连接,如果Sj不通过端口q与Gp中的其他交换机间接连接,则可以判定Sj通过端口q与Si的端口p直接连接。
------------------------------
这是很久以前看过一篇论文里的一部分。
从间接连接中推出直接连接,这个不难。但要找出间接连接是困难的,为什么?因为要实现那三个条件判断,代码量和运算量都极大,所以我没有选择这个算法。
不过其中提到IP欺骗的方法倒是很实用,因为如果两交换机不通信,那么其中各接口的FDB表就不完整,甚至FDB表完全没有数据。