一个报文的路由器之旅_【NE探秘】一个报文的路由器之旅
什么是二層橋接轉發?
二層所指的是數據鏈路層。二層橋接轉發,是指數據幀在數據鏈路層是怎樣被轉發的。
數據鏈路層有很多不同的網絡類型,Token ring(令牌環網)、Ethernet、FDDI(光纖網絡)等等,其中用得最廣泛的就是以太網Ethernet,本帖要介紹的是以太網的轉發原理。
以太網是根據二層幀頭信息,切確的說是根據MAC地址,進行轉發的。MAC地址對于二層轉發而言,是相當的重要。
?
MAC地址簡介MAC地址是48bit二進制的地址,如:00-e0-fc-00-00-06,MAC地址是全球唯一的,由IEEE統一管理和分配。MAC地址可以分為單播地址、多播地址和廣播地址:
-? 單播地址:第一字節最低位為0,如:00-e0-fc-00-00-06。
-? 多播地址:第一字節最低位為1,如:01-e0-fc-00-00-06。
-? 廣播地址:48位全1,如:ff-ff-ff-ff-ff-ff。
?
二層橋接單播轉發過程
下圖是個最簡單的二層橋接轉發場景,某局域網的主機PC-A發送報文給主機PC-B,中間經過一臺二層交換機的交換。由主機PC-A向主機PC-B發送以太幀,那么該以太幀的目的MAC地址就是MAC2,源MAC就是MAC1。
???????二層交換機轉發過程:交換機收到這個以太幀,解析發現其目的MAC為MAC2,查MAC表,發現對應的出端口為Port2,于是將這個以太幀從Port2發送出去。這樣,PC-B就收到了這個以太幀。
?
二層橋接廣播幀轉發過程如果上圖中,PC-A初始的時候并不知道PC-B的MAC,怎么辦呢?這時,PC-A會發ARP請求,這個ARP請求的目的MAC為廣播地址,源MAC為自己的MAC,交換機收到這個廣播幀,會發給除了Port1以外的所有端口。這樣,局域網內所有主機都能收到這個廣播幀。
PC-B發現請求的是咨詢自己MAC,于是返回ARP響應報文,交換機對ARP響應報文進行單播轉發給PC-A。
?
MAC地址學習機制
上圖中,二層交換機上的MAC地址表是MAC地址和端口的映射表,那么這個映射表是怎么得到的呢?上一貼“一個報文的路由器之旅-(8)“中介紹過,路由器通過ARP機制學習到IP和MAC的映射關系,那么,MAC表是怎么得到的呢?
下面舉個例子說明MAC地址的學習過程:
仍然以上圖為例,當二層交換機剛上電啟動時,其MAC地址表是空的。假設此時PC-A要發數據給PC-B,當交換機收到PC-A發給PC-B的數據幀時:
1、交換機首先是讀取該數據幀的源MAC地址,并且映射該地址和收到數據幀的端口,加入到MAC地址表。
2、接著,交換機讀取數據幀中的目的MAC地址,并且在MAC地址表中查詢該MAC地址對應的端口,因為此時交換機的MAC表還沒有PC-B的MAC,所以交換機會向所有的端口“洪泛”該數據幀,這樣PC-B就能收到這個數據幀了。
上面是交換機學習PC-A的MAC地址的過程。按此方法,當PC-B、PC-C、PC-D都向交換機發送了數據幀后,交換機就學到了所有端口所連接的設備的MAC地址。
MAC地址表的老化機制假設上圖的PC-D被搬走,或者交換機連接PC-D和鏈接PC-C的端口互換了如果不及時更正過來,交換機可能會把數據幀發錯地方怎么辦呢?交換機的處理方式是:對每條MAC地址都設置一個計時器,如果一臺主機在指定的老化時間之內沒有發送數據幀到交換機,交換機就會認為它超時,把它的MAC地址從MAC地址表中清除,下次它要發數據幀,交換機再重新學習MAC。
?
VLAN基礎上面過程中可知,交換機對廣播幀、未知單播都進行廣播泛洪,這樣,局域網內就存在很多廣播幀,消耗很多鏈路資源,還會占用主機處理廣播幀的時間。實際上,廣播幀是經常出現的,比如上面的未知單播的泛洪、還有ARP請求;此外,還有DHCP、RIP協議也會頻繁發送廣播幀。
為了減少廣播幀,VLAN(Virtual Area Network,虛擬局域網)誕生了。VLAN將一個局域網在邏輯上劃分成多個廣播域,所有同一個VLAN的主機可以互相通信。那么VLAN是如何實現廣播隔離的呢?
首先,交換機每個端口都指定了所屬VLAN。交換機和交換機之間的接口可以屬于多個VLAN。如下圖,交換機收到VLAN10的PC-A發的廣播幀,只轉發給含有VLAN10的接口,這樣,同一個VLAN的廣播幀只有VLAN的成員才能收到,不會傳輸到其他VLAN中去。
VLAN內如何實現互通?
由于交換機端口配了所屬VLAN,交換機的每條轉發表項指示了所屬VLAN。
交換機收到報文時,根據入接口給報文加上對應VLAN,并根據VLAN和目的MAC轉發。打上VLAN的以太幀格式如下:
對端交換機收到報文后,剝除其攜帶的VLAN,并根據VLAN和目的MAC轉發。
注意:VLAN間是無法直接互通的,除非通過路由器中轉。
上述例子中,有的交換機端口只允許一個VLAN通過,有的允許多個VLAN通過。它們的處理有什么區別嗎?
實際上,VLAN端口可分為三類型:
-? Access端口:只屬于一個VLAN,用于連接不支持802.1Q封裝的設備,如用戶計算機。
-? Trunk端口:可以屬于多個VLAN,允許接收和發送多個VLAN的報文。用于網絡設備之間互聯。
-? Hybrid端口:可以屬于多個VLAN,允許接收和發送多個VLAN的報文。可以用于網絡設備之間互聯,也可以用于連接不支持802.1Q封裝的設備。
報文處理機制
為了快速高效的處理,交換機內部,報文都是帶VLAN轉發的,而且,交換機在處理VLAN報文時,在報文入方向和出方向是分別處理的,不同類型的接口處理方式各不相同,而且不同設備處理方式也會不同。在華為高端路由器上的處理方式如下表所示:
入方向
出方向
?端口類型
收到不帶VLAN的報文
收到帶VLAN的報文
發送報文的方式
Access端口
接收并打上缺省VLAN后轉發
報文帶的VLAN與端口缺省VLAN相等,則轉發,否則丟棄。
剝離VLAN后發送。
Trunk端口
丟棄該報文
報文帶的VLAN在允許的VLAN列表中則轉發;否則丟棄。
直接發送報文。
Hybrid端口
接收并打上缺省VLAN,如果缺省VLAN在允許的VLAN列表中則轉發;否則丟棄。
報文帶的VLAN在允許的VLAN列表中則轉發;否則丟棄。
報文帶的VLAN與端口缺省VLAN相等,則剝離VLAN后轉發,否則直接轉發。
?
?
?
二層破環技術――生成樹協議以太網絡環形組網是一種常見的組網方式,如下圖所示。然而這樣組網有環路,容易造成廣播風暴。
廣播風暴如何產生的?舉個例子,假設A要與D通訊,但A不知道D的MAC地址,于是發ARP請求。由于ARP請求是MAC廣播幀,SW1收到該廣播幀,進行泛洪;接著,SW3和SW2也都收到了該廣播幀,也進行泛洪,于是SW1和SW2收到了SW3泛洪的廣播幀,同時SW1和SW3收到了SW2泛洪的廣播幀;如此無限循環,造成廣播風暴。
為了檢測和消除二層環路,誕生了STP(Spanning-Tree Protocol,生成樹協議)及其改進的技術RSTP(Rapid Spanning-Tree Protocol,快速生成樹協議)和MSTP(Multiple Spanning-Tree Protocol,多生成樹協議)。這些生成樹協議都是用于探知鏈路層拓撲,并對交換機的鏈路層轉發行為進行控制。如果發現網絡中存在環路,會在環路上選擇一個恰當的位置阻塞鏈路上的端口――阻止端口轉發或接收以太網幀,通過這種方式消除二層網絡中可能產生的廣播風暴。
本帖關注的是數據幀的轉發,因此不討論這三種生成樹協議的細節,需要關注的是生成樹協議設置的端口狀態及其定義的轉發行為。
STP定義了5種端口狀態:
- Forwarding:端口既轉發用戶流量也轉發BPDU報文(生成樹協議報文被稱為BPDU報文)。
- Learning:設備會根據收到的用戶流量構建MAC地址表,但不轉發用戶流量。
- Listening:確定端口角色,將選舉出根橋、根端口和指定端口,不轉發用戶流量。
- Blocking:端口僅僅接收并處理BPDU報文,不轉發用戶流量。
- Disabled:端口不僅不轉發BPDU報文,也不轉發用戶流量,接口狀態為Down。
MSTP和RSTP中,將STP的5種端口狀態精簡為3種:
- Forwarding:端口既轉發用戶流量也轉發BPDU報文。
- Listening:僅接收并處理BPDU報文,不轉發用戶流量。
- Discarding:不轉發BPDU報文,也不轉發用戶流量。
綜上可知,只有Forwarding狀態的端口才轉發用戶流量。下面介紹用戶以太幀的轉發流程。
總結
以上是生活随笔為你收集整理的一个报文的路由器之旅_【NE探秘】一个报文的路由器之旅的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我国055型驱逐舰是亚洲之王
- 下一篇: java file取不到linux文件_