看此文前,建議先看:html
http://www.cnblogs.com/daiaiai/p/8994932.html網絡
http://www.javashuo.com/article/p-uxixidcx-cu.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地址,查詢獲得須要轉發的出接口
6.根據出接口,獲得源MAC地址,並完成源MAC和目的MAC封裝
備註:三層接口,從接口直接得到源MAC地址;二層接口則從所在vlan的邏輯接口處得到源MAC
7.發送數據
網絡接口對局域網內,進行轉發spa
二層轉發(交換機):
通常只發生在一個交換設備內多個接口處於同一個VLAN內的狀況。
1.接收數據,並不會篩選目的MAC,二層接收全部數據包
2.MAC地址表學習/刷新,同上
3.查找目的MAC:若目的MAC是廣播或組播,則在所屬的Vlan中廣播或組播;htm
不然在MAC表中查找是否存在Vid對應的目的MAC表項blog
若是在,則根據查詢到的端口,直接轉發;
若是不在,則在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產品幫助手冊