在 VLAN 這篇文章 中知道,設置 VLAN 目的是隔離大型的廣播域,將其分成很小的廣播域,從而更好的管理。但也就帶來了一些問題:如流量不能在不同的網段中使用 VLAN 間通信。
而為了解決這個問題,可以采用如下技術:
- 添加路由器(單臂路由)
- 三層交換機(SVI)
接着會提到如何通過 Ether-Channel 來如何解決臨時鏈路帶寬不夠用的情況。
單臂路由
首先可以增加一個路由器,采用如下的拓撲結構:
但這同樣有一個問題,就是一個 VLAN 需要占用一個路由器上的接口,那么,能不能向交換機的 Trunk 口那樣,在一個接口上跑所有的 VLAN 呢。
答案是肯定的,就是通過子接口的概念,將一個物理接口虛擬成多個子接口,並且為每個子接口配置一個 VLAN。這一技術也稱為單臂路由。
簡單來說,單臂路由是指在路由器的一個接口上通過配置子接口(邏輯接口)的方式,實現原來相互隔離不同的 VLAN 之間的互聯互通。
配置單臂路由:
# Switch
Switch>en
Switch#conf t
Switch(config)#vlan 10,20
Switch(config)#int e 0/0
Switch(config-if)#switchport mode ac
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 10
Switch(config)#int e 0/1
Switch(config-if)#switchport access vlan 20
Switch(config-if)#no shu
Switch(config-if)#int e 0/2
Switch(config-if)#switchport trunk encapsulation dot1q
Switch(config-if)#switchport mode trunk
Switch(config-if)#no shu
# PC: R1
Router>en
Router#conf t
Router(config)#no ip routing
Router(config)#ho R1
R1(config)#ip default-gateway 192.168.10.254
R1(config)#int e 0/0
R1(config-if)#ip add 192.168.10.1 255.255.255.0
R1(config-if)#no shu
R1(config-if)#do wr
# PC: R2
Router>en
Router#conf t
Router(config)#no ip routing
Router(config)#ho R2
R2(config)#ip default-gateway 192.168.20.254
R2(config)#int e 0/0
R2(config-if)#ip add 192.168.20.1 255.255.255.0
R2(config-if)#no shu
R2(config-if)#do wr
# Router: r4
Router>en
Router#conf t
Router(config)#ho r
r(config)#int e0/0
r(config)#no shu
# configure sub-interface 10
r(config)#int e0/0.10
# config vlan for this sub-interface
r(config-subif)#encapsulation dot1Q 10
r(config-subif)#ip add 192.168.10.254 255.255.255.0
r(config-subif)#no shu
# configure sub-interface 20
r(config)#int e0/0.20
r(config-subif)#encapsulation dot1Q 20
r(config-subif)#ip add 192.168.20.254 255.255.255.0
r(config-subif)#no shu
分析一下通訊過程:
R1 要給 R2 發送 ICMP,發現沒有對應網關的 MAC 地址,將包擱置。發送 ARP 請求網關的 MAC 地址
Switch 學習后進行泛洪,R4 收到 ARP 請求,並做出 ARP 應答。
Switch 再次學習來自 R4 的 Arp 應答,並直接轉發給 R1.
R1 解封裝 ARP 應答包,並且將擱置的 ICMP 包添加 MAC 地址后,發出。
Switch 收到 ICMP 后,之間轉發給 R4,R4 解封裝發現 三層 IP 是給自己能到達網段的,進行封包:
4 層:ICMP 報頭
3 層:IP 報頭,源 IP 192.168.10.1/24 目的 IP 192.168.20.1/24
2 層: 源 MAC:aabb.cc00.4000 目的 MAC:不清楚
將包擱置,發送 Arp 請求 獲取 R2 的MAC 地址
Switch 學習發來的 ARP 請求,並泛洪。R2 收到 Arp 請求做出應答,Switch 再次學習,然后直接轉發給 R1。
R1 解析 ARP 應答,並將擱置的 ICMP 包發給 R2。
R2 又會做出 ICMP 應答,Switch 之間轉發給 R1,R1 解封裝發現 ICMP 的應答報文的目的 IP 是 R1,接着重新封裝轉發給 Switch。
Switch 再直接轉發給 R1。
綜上:我們可以發現一個有趣的現象,在 R4 和 交換機的鏈路上可以看到有雙重的 Icmp 的 reqeust 和 reply 如下:
這里在解釋一下兩個 request 和 reply 的含義:
第一個 request 是:R1 發送 R4 (R4 是 R1 的網關) 並且應該帶有 VLANID = 10 的 Tag,如下
第二個 request 是:R4 發給 R2 的 ICMP 包,並且應該帶有 VLANID = 20 的 TAG,因為是從虛擬的子接口 Vlan20 發出,如下
第一個 reply 是:R2 發給 R4,帶有 VLANID = 20 的 Tag,如下
第二個 replay 是:R4 發給 R1 的,帶有 VLANID = 10 的 TAG,如下
因此我們可以推測出在 R4 內部,進行了 Tag 的去除和封裝。
SVI(Switch Virtual Interface)
另一種方式就是通過三層交換機,來達到路由轉發的功能。
三層交換機,具有二層和三層轉發的功能。
網關接口,用於三層交換機跨 VLAN 間路由,具體可以通過 interface vlan 接口配置命令來創建 svi,然后實現路由功能
SVI 配置:
# switch
Switch(config)#ip routing # 開啟路由功能
Switch(config)#no ip cef # 關閉cef(這個屬於模擬器的bug,真實環境下不用)
# 創建 vlan
Switch(config)# vlan 10,20
# 配置模式
Switch(config-vlan)#int e 0/0
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 10
Switch(config-if)#no shutdown
Switch(config-vlan)#int e 0/1
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 20
Switch(config-if)#no shutdown
# 創建SVI接口
Switch(config)#interface vlan 10
Switch(config-if)#no sh
Switch(config-if)#ip address 192.168.1.254 255.255.255.0
Switch(config)#interface vlan 20
Switch(config-if)#no sh
Switch(config-if)#ip address 192.168.2.254 255.255.255.0
# PC
# 關閉路由功能
PC1(config)#no ip routing
# 配置 ip
PC1(config)#interface e0/0
PC1(config-if)#no sh
PC1(config-if)#ip address 192.168.1.1 255.255.255.0
# PC 配置網關
PC1(config)#ip default-gateway 192.168.1.254
由於是三層交換機,192.168.1.0/24 和 192.168.2.0/24 兩個網段直接就可以互通了,不需要再去配置路由表,我們可以看一下路由表:
對三層交換機內部的講解:
由於 e0/0 口是 access 口,所以會被打上相應 vlan ID=10 的 tag。
由於是三層交換機,通過 SVI 模擬路由器,也就是說明進行的是三層通信,可是傳送過來的數據包中包含 tag,
也就說明存在一個能把 tag 拆掉的 access 口才能通信,所以推測這個口是虛擬的 Vlan 10,同時 Vlan 也是通往新網段的網關。
EtherChannel
有時交換機的帶寬無法滿足轉發流量的需要,就會出現阻塞的情況。一般會升級接口的帶寬,但有時往往特別大型的流量不是時常發生。手動的升級接口麻煩,甚至有些浪費。為了解決這個問題,EtherChannel 接口出現了,它可以將多個物理接口捆綁在一起同時進行流量的轉發,在流量較大時增加連接接口的數量,從鏈路視角看,就是同時連接多根鏈路,實現並行傳輸。
同時也出現了一個問題,在之前介紹交換機 STP 的內容時,了解交換機內部通過 STP 來防止環路,會將某些接口 Block。當如果想用這種並行的鏈路連接,就必須形成環路。
最后為了保證在 STP 不失效的情況下,應用並行鏈路,就會采用 EtherChannel 這種配置。會將所有綁定的接口視為同一個接口,這樣 STP 還能正常的運行。
但想要實現 Port-channel 接口,需要保證所有的接口配置完全相同:
- 物理接口支持 Etherchanbnel
- 物理接口保持一致
- 綁定的數量一致
- 接口模式一樣(如二層接口,三層接口)
- 接口類型必須相同(帶寬)
- 雙工,
- 工作模式,trunk,switch
- vlan 相同
配置了 EtherChannel 的接口,具有如下優點:
- 邏輯聚合接口
- 高帶寬
- 負載均衡
- 為 STP 提供一個邏輯接口
- 冗余(在斷開下,仍能保持運行)
配置 EtherChannel
配置 EtherChannel 有兩種方式:
- 手動
- 手動將交換機上多個端口,捆綁成一個
- 自動學習(PAGP思科私有,LACP公有)
LACP 的模式:
- Passive:等待主動的接口,建立連接
- Active:主動發送消息,和另一端的接口建立連接
下面是 LACP 的建立原則:
# bind interfaces
s1(config)#interface range ethernet 0/0 - 1
s1(config)#shutdown
s1(config)#channel-group 1 mode active
s1(config)#no shutdown
# apply configuration
s1(config)#interface port-channel 1
s1(config)#switchport trunk encapsulation dot1q
s1(config)#switchport mode trunk
s1#show ip int bri
s1#show etherchannel summary
# bind interfaces
s2(config)#interface range ethernet 0/0 - 1
s2(config)#shutdown
s2(config)#channel-group 1 mode active
s2(config)#no shutdown
# apply configuration
s2(config)#interface port-channel 1
s2(config)#switchport trunk encapsulation dot1q
s2(config)#switchport mode trunk
s2#show ip int bri
s2#show etherchannel summary
總結
這篇文章中主要提到了三種技術:
-
單臂路由和 SVI 是為了解決 VLAN 在不同網段間通信的問題。
-
EtherChannel 是為了解決物理端口帶寬不夠時,如果去調整的方案。