正因?yàn)镃ontroller有所有交換機(jī)的拓?fù)浼拔恢眯畔ⅲ藭r(shí)Controller會(huì)給全網(wǎng)中每臺(tái)SDN交換機(jī)都發(fā)送一個(gè)10.0.0.0/8網(wǎng)段的ARP請(qǐng)求消息,來(lái)請(qǐng)求10.0.0.2的MAC地址。但源IP并非10.0.0.1,而是Controller的網(wǎng)關(guān)地址,此處為10.0.0.254。此時(shí)報(bào)文均為packet-out,即通過(guò)Controller手工泛洪,但此泛洪是有選擇性的,只針對(duì)同網(wǎng)段(10.0.0.0/8)
所有交換機(jī)都能收到此ARP單播請(qǐng)求,而只有Switch B會(huì)做出回應(yīng),因?yàn)镠2接在Switch B下游。此時(shí)通過(guò)packet-in,所有SDN交換機(jī)會(huì)將此ARP泛洪發(fā)送到同網(wǎng)段的端口。
H2收到此時(shí)的ARP請(qǐng)求,正常做出回應(yīng)。
Switch B收到H2的ARP響應(yīng),無(wú)腦上送到Controller。Controller收到ARP響應(yīng),發(fā)現(xiàn)正是前面發(fā)出的ARP請(qǐng)求的響應(yīng)報(bào)文。記錄此時(shí)的H2位置信息及ARP信息。
Controller通過(guò)Openflow將ARP響應(yīng)回應(yīng)給Switch A,Switch A將報(bào)文回送給H1。
Controller已經(jīng)完整知道SwitchA/SwitchB/H1/H2的位置信息及MAC/ARP信息。Switch A/H1知道完整的ARP/MAC信息。而SwitchB也有H1/H2的完整IP。唯獨(dú)H2此時(shí)只知道H1的IP,而不知道H1的MAC。
H1的整個(gè)ARP請(qǐng)求過(guò)程已經(jīng)完成。接下來(lái)要輸送ICMP請(qǐng)求報(bào)文。報(bào)文經(jīng)由Switch A正常輸送到H2(此時(shí)是實(shí)際轉(zhuǎn)發(fā)流量,而且Switch A已有完整轉(zhuǎn)發(fā)路徑,不需要再上送Controller)
H2收到ICMP報(bào)文,想要回應(yīng),但是沒(méi)有H1的MAC,需要再次做ARP請(qǐng)求。此時(shí)H2請(qǐng)求H1的MAC地址,報(bào)文被Switch B上送Controller,Controller已有H1的MAC,則Controller做出回應(yīng),將H1的MAC回應(yīng)給H2。
H2收到ARP,則整個(gè)過(guò)程完整?;貞?yīng)ICMP報(bào)文。整個(gè)業(yè)務(wù)流打通。
可以看到,最關(guān)鍵的應(yīng)該是第三步,即Controller發(fā)送偽裝ARP報(bào)文給全局同網(wǎng)段交換機(jī),以此來(lái)實(shí)現(xiàn)ARP廣播的同樣效果。但也正是這樣一個(gè)看似合理的安全行為,帶來(lái)了很多不安全的隱患??梢韵胂?,Controller有幾種方式可以獲取終端主機(jī)的MAC情況:1.通過(guò)免費(fèi)ARP的方式、2.定時(shí)申請(qǐng)下游終端的MAC方式,都可以保證對(duì)下游終端MAC的始終更新。
但同樣,集中Controller的方式也帶來(lái)了單點(diǎn)安全的風(fēng)險(xiǎn)考慮,一旦一臺(tái)下游主機(jī)中毒,不斷變化自己的MAC不斷做出更新動(dòng)作,此時(shí)會(huì)極大消耗Controller的資源,形成DOS攻擊。同樣,Controller的安全如果不是很堅(jiān)固,則一旦被攻破,所有終端信息一覽無(wú)余。