觀察vPC domain二層結構會發(fā)現,對于一個vPC VLAN來說,只要vPC的成員端口狀態(tài)是正常的,那么兩臺vPC交換機的MAC轉發(fā)表是一致的,因此,當只涉及到二層數據轉發(fā)時,正常的流量是不會穿越peer link的。只有當某臺vPC交換機上有成員端口狀態(tài)為Down時,或存在孤端口時,才會有流量穿越peer link,但這些流量又不違反vPC的防環(huán)路機制。因此,對于二層流量,不用擔心數據幀丟失問題。
但是,當涉及到三層,例如vPC交換機上配置了 vPC VLAN 的 SVI,和HSRP同樣的原因,接入層交換機看來,SVI的IP對應的MAC來自PortChannel,均衡算法會導致一部分流量穿越peer link,如果數據包的下一跳IP位于vPC連接的三層設備,毫無疑問會被丟棄。
Cisco的官方文檔給出了一些不支持的vPC三層網絡結構,這里挑選幾個典型的進行分析。分析三層問題時請牢記vPC的防環(huán)路機制,以及接入層設備的上行數據流會通過PortChannel均衡算法,在兩條vPC成員鏈路上分配上行流量。

圖7 不支持的三層結構

圖8 特殊設備應答行為
如圖7所示的三種三層結構,與vPC混用都會出現問題。先說(a),R1(可以是三層交換機)通過vPC與兩臺vPC交換機形成動態(tài)路由(比如OSPF)鄰居關系。在R1看來,它有兩個等值鄰居,分別是7K1和7K2,無論數據包下一跳選擇哪個路由器,必然會有一部分流量穿越peer link,由此導致這部分流量不能被發(fā)送到vPC中。當然,如果數據包的目的主機不在vPC后面,會一切正常。
圖(b),三層設備通過vPC VLAN和STP連接到 vPC domain,STP 會阻斷其中一條鏈路,如虛線所示。在這種情況下運行動態(tài)路由協議,同樣會出現問題。在R1看來,在R1看來,它同樣有兩個等值鄰居,分別是7K1和7K2,如果動態(tài)路由協議采用負載均衡算法,必然會有一部分流量從7K1穿越peer link到 達 7K2。圖(c)中不難看出,兩個單臂路由有類似問題。
Cisco推薦設計三層網絡時,在7K1和7K2之間可以單獨連接一條三層專用鏈路,不要使用peer link傳輸三層數據包。
實際上,只要避免外接的三層設備,比如防火墻、路由器或三層交換機,通過peer link與vPC交換機形成動態(tài)路由鄰居關系,就能避免80%的三層問題。
有一些存貯設備,在回包時會改變自己的IP路由行為。比如,應答包的目的MAC地址,會采用原數據包進入時所使用的源MAC地址,而不是通過ARP獲取缺省網關的MAC。這種情況在非vPC環(huán)境中沒有任何問題,但在vPC中,問題出現了。
觀察圖8,假設服務器B為存貯設備。當主機A訪問服務器B時,一切正常,最終經過7K1或7K2將數據包路由VLAN10到VLAN11,然后假定由7K2將數據包轉發(fā)給了服務器B。注意,7K2轉發(fā)包時使用的源MAC地址是它自己的物理MAC,這里是2222.2222.2222.2222。那么,當B回包時,它會直接使用這個物理MAC作為回包的MAC,而不是通過ARP去解析缺省網關的MAC。回包在選擇vPC路徑時,有可能首先到達7K1,而數據幀的目的MAC是7k2,又帶來了穿越peer link數據流的老問題。
為解決這類問題,Cisco增加了一個特性peer gateway。通過在vPC交換機啟用這個特性,每個本地交換機,當收到的數據幀的目的MAC屬于對端交換機,且目的IP不屬于對端交換機時,將本地轉發(fā)該數據包,而不是通過peer link轉發(fā)給對端交換機。也就是說,只要收到的數據包不是發(fā)給對端交換機本身的,即在本地轉發(fā)該數據包。這個行為類似于HSRP,但HSRP僅僅針對虛擬HSRP組的MAC地址。
那 么, 啟 用peer gateway特性能不能解決原來提到的三層路由問題呢?也許可以,但有一點副作用:原來7K1和7K2之間與外接三層設備是二層連接,三者形成路由鄰居沒任何問題。啟用該特性后,這個連接變成了三層連接,因大部分路由協議鄰居發(fā)現過程中數據包的TTL被設置為1,所以外接設備只能與兩個7K之間的一個能形成鄰居關系。