三層網絡轉發技術在SDN中的基礎應用
我一定讓很多瀏覽我blog關于描述 Arista’s VARP 和 Enterasys’ Fabric Routing 的讀者感到困惑—- 我得到了很多關于文章中“關于其如何在生產環境下工作”的問題。 接下來我們將就這個問題的細節進行討論。
簡單網絡拓撲
我們以一個簡單的網絡拓撲為例, 拓撲中包括兩臺邊界交換機(E1和E2),一個單獨的核心交換機(C1), 三臺主機(A,B1和B2)分別隸屬于兩個子網(A和B)。
我們假設我們已經完成了一些針對于三層轉發的優化配置, 所以E1和E2將負責子網A和B三層數據的轉發(通常這種轉發我們稱之為路由)。
當A發送網絡流量給B1或者B2時,E1將數據發送給子網B,相對應如果B2想與A通信,E2將會轉發數據流給子網A。
拓撲中誰做了些什么?
在上面拓撲環境中,真正我們應該關心的問題是:在數據轉發路徑中(E1-C1-E2),哪個交換機負責二層轉發(通過查詢目的MAC地址進行轉發),哪個負責三層路由(通過目的IP地址進行路由)?
首先我們對子網內部數據轉發進行分析: B1發送IP數據包給B2。 要想完成數據通信, B1必須將IP數據包封裝進MAC數據幀里, 這時,目的MAC地址將會是什么呢?
B1封裝數據幀時,目的MAC地址是B1通過向B2的IP發送ARP請求去獲取的—-通常來講, 也就是B2的MAC地址。數據幀在由B1到B2的路徑上一直以B2的MAC地址作為目的MAC地址,與此同時,路徑上(E1,C1,E2)的交換機在進行二層轉發時也是根據B2的MAC地址進行轉發的。 以上流程如果能夠工作,那么E1,C1,E2必須同時屬于VLAN-B。
現在我們來討論跨子網數據轉發:A發送IP流量給B2, A知道B2在一個與自身不同的子網中, 這時, A將查詢它自身的IP路由表去找到B2 IP的下一跳地址。 這里,主機通常有一條默認路由,這條默認路由指向默認網關(GW-A – the VARP/VRRP IP,這個IP地址由E1與E2共同維護)—-A將發送IP數據包給網關GW-A,并以GW-A的MAC地址進行數據幀封裝。對于GW-A MAC地址, E1和E2是共享這個MAC地址的;在E1收到這個數據包后, 其將進行三層轉發。
作為三層轉發流程的一部分,E1自身遞減了IP包的TTL并且重寫MAC數據幀幀頭。 重寫后,目的MAC地址將變為新IP的下一跳對應的MAC地址—-在這個拓撲環境中, 這個下一跳為B2(這里注意:E1將會將IP包由子網A轉發至子網B)。在之后的轉發過程中,轉發路徑中的交換機(C1與E2)將遵循二層轉發原則進行基于目的MAC地址轉發數據。
總結:E1 如果要與B2通信,其必須要有B2的ARP表項(否則E1將不知道B2的MAC地址),同時,與B2二層網絡必須暢通(否則數據幀將無法到達B2)。
拓撲中,E1(作為入口交換機)進行三層(跨子網)基于目的IP地址的數據轉發,其他交換機進行二層(子網內)基于目的MAC地址的數據轉發。每個VLAN必須將覆蓋所有邊界及核心交換機。
最優化三層轉發的擴展局限性
既然我們已經知道了轉發流程的細節, 這里可以很容易想到這種最優化三層轉發的擴展局限性:
每一個VLAN必須跨域所有在同一個路由域中的邊界及核心交換機。整個路由域將成為一個單點失效域(single failure domain),換句話說也是一個無法擴展點。
每一個邊界交換機必須知道所有活躍IP主機的MAC地址。
每一個邊界交換機必須具有所有活躍IP主機的ARP表項。
此外,如果我們想用傳統的配置機制(每一個邊界交換機作為一個獨立的可配置設備),每一個邊界交換機需要在每一個子網中有一個網管IP地址。假設我們網絡中有50臺交換機,那么意味著我們將在每個/24 IPv4的子網中浪費50個地址(當然,這個問題在IPv6網絡中我們應該不會那么擔心)。
更多的細節:
從以上的討論中,我想讀者已經得到ARP表項的相關細節了, 而在我們對一個最優三層轉發拓撲架構進行評估時,邊界交換機支持我們去檢查ARP表項(也就是IPv4 主機路由)。 QFX3500( QFX3500 has 8000 ARP entries)擁有8000條ARP表項的存儲,QFX3600也一樣。 Arista 7150較比QFX3500與3600而來,下一跳表項的存儲空間達到了64K。如果需要更多數據,讀者可以從Data Center Fabric Architectures webinar中得到前十名的設備提供商的大多數數據中心交換機的數據。