淺談通信網絡(四)——報文轉發(IP/MAC)


看此文前,建議先看:

http://www.cnblogs.com/daiaiai/p/8994932.html

https://www.cnblogs.com/daiaiai/p/9047713.html

前面說過數據包的處理順序為:數據鏈路層、網絡層、傳輸層、最后才是應用層。

路由轉發:通過IP地址轉發
二層轉發:在處理數據鏈路層的時候,一般說的即通過MAC地址轉發報文,就是二層轉發。
三層轉發:在處理網絡層的時候,一次路由(首包CPU轉發並建立三層硬件表項)、多次交換(后續包芯片硬件轉發)
具體細節如下:
路由轉發:
1.接收數據
檢查目的MAC;
處理部件:網絡接口——網卡、光模塊、電模塊等。
三層網絡接口一般只接收兩種MAC地址的數據:
目的MAC是自己、目的MAC是全1的廣播地址
其他MAC地址的數據包將丟棄。
但是如果開啟混雜模式,mac同樣會接收所有監聽到的數據包。
二層網絡接口會接收所有MAC地址的數據報文。
2.MAC地址表學習
剝離目的MAC,再檢查源MAC
核實MAC地址表里面,是否已經學習了MAC地址:
如果已經學習,則刷新老化時間為最新;
如果沒有學習,則將MAC地址和和接收到該數據包的接口加入MAC地址表
備注:廣播MAC地址不加入MAC地址表
3.剝離源MAC地址,檢查目的IP
處理部件:TCP/IP協議棧
如果是自己的IP地址,則交由TCP層處理;
如果不是自己的IP地址內,在同一個網段內,直接進行下一步,查詢目的IP的ARP;
如果在不同網段內,查詢路由表,進行三層轉發
查詢路由表的最終結果是查詢到最小子網掩碼直連路由,得到下一跳的IP地址(如果沒有指定下一跳IP地址,則目的IP地址作為下一跳IP地址)

4.學習/查詢ARP表
查詢ARP表到下一跳IP地址的目的MAC地址和出接口
如果其中沒有該IP地址的記錄,則發起ARP學習得到MAC地址;
如果其中有記錄,則標記該數據包的目的MAC地址
備注:該處並未開始封裝目的MAC地址,因為源MAC地址需要優先封裝,但是還沒確定
5.根據出接口,得到源MAC地址,並完成源MAC和目的MAC封裝
備注:三層接口,從接口直接獲得源MAC地址;二層接口則從所在vlan的邏輯接口處獲得源MAC
6.發送數據
網絡接口對局域網內,進行轉發

 

二層轉發(交換機):
一般只發生在一個交換設備內多個接口處於同一個VLAN內的情況。
1.接收數據,並不會篩選目的MAC,二層接收所有數據包
2.MAC地址表學習/刷新,同上
3.查找目的MAC:若目的MAC是廣播或組播,則在所屬的Vlan中廣播或組播;

否則在MAC表中查找是否存在Vid對應的目的MAC表項

如果在,則根據查詢到的端口,直接轉發;
如果不在,則在VLAN內除了接收口外的所有接口轉發

三層轉發(三層交換機)
一次路由:
過程同路由轉發,
並學習了三層轉發信息表,包括目的IP、目的MAC、出口VLAN、出接口
多次交換(精確地址匹配轉發):
當后續有同樣目的IP的數據包流,直接查詢三層轉發信息表進行轉發。過程如下:
1.刷新源MAC地址表項;
2.篩選目的MAC地址為自己,查詢三層表項
3.精確IP地址匹配,查詢三層轉發信息表,直接得到出接口予以轉發。

備注一:
交換機只有一個MAC地址,所有vlanif接口共享一個MAC地址;
路由器每個三層接口(包括vlanif)對應一個MAC地址。
備注二:
為了便於理解查詢路由表的最終結果是查詢到最小子網掩碼直連路由,首先羅列如下幾個概念:
I.路由選路原則
a.子網掩碼最長匹配
b.管理距離最小優先
c.度量值最小優先

備注:策略路由優先級最高,即首先匹配策略路由
II.路由分類
一般我們路由分類為:靜態路由和動態路由
靜態路由:黑洞路由、直連路由、缺省路由、甚至包括策略路由等
動態路由:OSPF、RIP、BGP、EBGP、ISIS等
而此處,我想告訴你一個更重要的分類,即:直連路由和迭代路由。
直連路由從何而來?
a.當你的網絡接口上電,這個時候叫物理up;
如果該網絡接口配置了IP地址或者所在VLAN的虛接口配置了IP地址,則會使能協議UP,此時就會生成直連路由
b.另外一種是你手動注入路由表的,凡是你的路由不僅僅指定或者不指定下一跳IP地址,還指定了出接口的時候,則該條路由直接變為直連路由
除了介紹之外的路由,都將是迭代路由。
直連路由的意義為:通過該路由,你可以直接終止路由表查詢,通過它的下一跳IP地址查詢ARP表,或者出接口可以直接到達轉發目的網絡。
迭代路由的意義為:通過該路由得到的下一跳IP,繼而查詢ARP表不一定能夠到達轉發目的網絡;還需要額外查詢到達該下一跳IP的路由如何到達才行。
迭代路由如何理解勒?
比如從昆明開車到北京,中間會經過昆明-成都-西安-北京。當在昆明的時候,聽A說要想去北京,得先到達西安;可問題是如何到達西安勒?又聽B說,要想去西安,得先到達成都。
而從昆明到成都,是可以直接走成昆高速到達的。所以A說的相當於是迭代路由,而B說的是直連路由。

 

一般所謂定義的沖突域、廣播域的概念是怎么回事?
沖突域指都能夠同時監聽學習到信號的同一通道內:

有線使用集成器鏈接的多個主機,當某一個主機發送一個信號的時候,別的所有主機都是可以接受到信號的;

無線,Wifi里面,同一個頻段內的終端也是一個沖突域。

因此在沖突域內,專門制定了CSMA/CA和CSMA/CD來解決沖突的問題。

廣播域是指廣播MAC,即全1MAC可以到達的區域。

可見,所有沖突域都是廣播域。另外由於交換機同一VLAN內,也會廣播,所以同一個VLAN內也是屬於廣播域。

IP層能夠隔離廣播域的根本原因是會剝離MAC地址,所以並不會涉及到廣播MAC的轉發。

雖然可能在同一個物理介質內,但如果采用了多址技術,終端設備能夠區分出來不同的通道。因此也屬於不同的沖突域和廣播域。

比如wifi里面使用不同頻率而構建的不同通道。

 

ARP存在的意義:
我們知道MAC地址表,標記了MAC地址和接口的對應關系;
而ARP表,則標記了IP地址和MAC地址的對應關系。
MAC地址表,通過查詢數據包的源MAC和進接口學習;
ARP表,通過發起ARP學習獲得。

那ARP表,是否也可以通過查詢數據包獲得MAC地址和IP地址的關系學習勒?而並不需要再次發送ARP。甚至都不再需要ARP表,直接在MAC地址表內添加就行了?
答:由於IP地址的數量有千千萬萬,對於維護這個表是完全不可能的。比如對接互聯網設備來的數據流,MAC地址只有一個,但是該MAC地址對應的IP地址卻有千千萬萬個。
那是否可以抓取同一網段內IP的數據包來獲取MAC地址和IP地址對應關系?
答:如果采用這種方式,當需要轉發的IP地址在一個網段內,可是又沒有學習到該IP地址的MAC地址怎么辦呢?那就還是得發送ARP。
采用這種方式,實現起來並不比ARP簡單;
還會不斷刷新老化時間,增加額外開銷;
還需要同時再運行ARP,顯得過於多余,增加性能負擔。

備注:那有沒有直接從數據包層獲取IP/MAC地址表項,而不是發起ARP請求獲得?可以的,當本地接口收到(不包括被接口拒絕的包)的報文,經過ARP處理過,包括對方ARP請求和免費ARP,都可能將源IP和源MAC寫入。具體看廠家實現情況,一般是可配置開關。RFC826告知會學習,但是在個人電腦上測試並不學習,華為交換機告知可以配置,默認是可以學習。


場景1:
如果本段設備要使用路由轉發的原理檢查對端是否存活,該如何構造數據包呢?好吧,這就是單臂還回路由。
場景2:
如果在路由器上,做了關於到公網IP的策略路由的出接口,但是並沒有指定下一跳,是否可以?如果是同時指定下一跳和出接口呢?另外再只指定下一跳呢?

場景3:

如果ping全網絡地址255.255.255.255,是不是就可以到達全世界呢?

不行,因為路由器發現和自己的接口並不在同一個網段,所以就走路由表,路由表是沒有關於該IP地址路由的。

更多場景,空了再繼續添加。

由於確實沒在一個大廠待過,有錯之處還望指正!

如果轉發,請注明出處!

參考文獻和書籍:

1.TCP/IP詳解卷1:協議 作者LawrenceBerkeley

2.華為NE40產品幫助手冊

3.華為93產品幫助手冊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM