間接連接定理:
只要滿足以下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表完全沒有數據。