執(zhí)行的簡單拓撲如圖所示:
由以上拓撲圖可知,主機1通過端口1與OF交換機相連,主機2通過端口3與交換機相連,主機3通過端口2與交換機相連。并且交換機鏈接控制器。此時,要討論的是當執(zhí)行主機1ping主機2時,在Ryu控制器下的具體執(zhí)行過程。
1.ping命令的具體執(zhí)行過程
首先,如果主機A,要去ping主機B,那么主機A,就要封裝二層報文,他會先查自己的MAC地址表,如果沒有B的MAC地址,就會向外發(fā)送一個ARP廣播包,具體ARP報文格式請自行查閱。
交換機會收到這個報文后,交換機有學習MAC地址的功能,所以他會檢索自己有沒有保存主機B的MAC地址,如果有,就返回給主機A,如果沒有,就會向所有端口發(fā)送ARP廣播,其它主機收到后,發(fā)現(xiàn)不是在找自己,就紛紛丟棄了該報文,不去理會。直到主機B收到了報文后,就立即響應,我的MAC地址是多少,同時學到主機A的MAC地址,并按同樣的ARP報文格式返回給主機A。主機A學到了主機B的MAC地址,就把這個MAC地址封裝到ICMP協(xié)議的二層報文中向主機B發(fā)送。
即在ping命令過程中,主要執(zhí)行兩個過程,當沒有MAC地址表的時候,先進行廣播,廣播后得到MAC地址,則進行發(fā)送ICMP過程。
注:此過程為同一網段內的ping過程,不同網段要添加路由和網關的轉發(fā)解析步驟。
2.在存在控制器的網絡中ping命令的執(zhí)行過程
在此ping命令執(zhí)行過程中,會產生三次Packet-in發(fā)送給控制器。
2.1 第一次packet-in
如上網絡拓撲圖,當H1 ping H2時,H1的ARP 緩存表為空,因此會產生APR Request數據包發(fā)送至交換機S1,當交換機S1收到ARP Request數據包時,對初始的流表項(當控制器鏈接交換機后,會對交換機下發(fā)初始流表,且此流表優(yōu)先級最低,當數據包沒有對應的流表項進行匹配時,匹配此流表,將其發(fā)送至控制器)進行匹配,并通過Packet-in方式發(fā)送給控制器。
控制器對接收到的packet-in數據包在mac-to-port中查找是否存在對應的MAC地址和端口。若不存在,則發(fā)送packet-out,對除源端口之外的所有端口進行泛洪處理,并將H1的對應MAC地址和端口信息存儲到mac-to-port 表中,這個過程控制器并不下發(fā)流表。
具體流程如圖所示:
1.2 第二次packet-in
當H2收到泛洪信息后,將會回復一條ARP Reply,因H2中也不存在MAC地址緩存表,且此時控制器沒有下發(fā)流表,所以ARP Reply也會執(zhí)行packet-in發(fā)送到控制器,在控制器的mac-to-port 中存在了H1的信息,所以控制器會通過packet-out直接發(fā)送到端口1,同時下發(fā)關于入端口3,目的地址H1,輸出端口1的流表項,并且記錄H2相應的信息到mac-to-port表中。
具體流程如下所示:
1.3 第三次packet-in
H1收到H2的回應后,發(fā)送ICMP報文,但交換機中并不存在流表項來處理ICMP數據包,因此會用同樣的方式將報文發(fā)送到控制器,但此時,控制器中的mac-to-port表中存在了H2的相應信息,所以通過packet-out直接發(fā)送到端口,并同時下發(fā)關于入端口為1,目的地址H2,輸出端口3的流表項,增加交換機流表中的流表項。
具體過程如圖所示: