二三層轉發


現代社會的人們幾乎時時刻刻都在接觸網絡,但幾乎很少有人會去思考在網絡通信過程中究竟發生了些什么,因為網絡對於人們來說就是一個黑匣子,屏蔽掉了所有的細節,我們只需要知道如何使用即可。但作為一名從事於網絡工作的人員,我們則必須知道其中的細節。我們需要知道當我ping一台處於網絡中的計算機時所發生的事情,即報文在網絡設備上的轉發處理。提到轉發就不得不提二三層轉發的概念。

現有如下網絡結構圖,我們在此網絡結構圖的基礎上簡單描述一下二三層轉發的流程。

                      

二層轉發原理

在OSI模型中,二層為數據鏈路層,介乎於物理層和網絡層之間。數據鏈路層在物理層提供的服務基礎上向網絡層提供服務,其最基本的服務室負責直接相連的網絡設備之間的通訊。數據在進入二層以后被封裝或者解封裝為數據幀的形式。

       數據鏈路層轉發的主要依據鏈路層信息MAC地址來完成的。MAC地址就是我們常說的硬件地址,網絡中每個通訊設備都有自己唯一的MAC地址,這個地址是獨一無二的,設備根據MAC地址判斷出要把數據包轉發到何處,以及數據包是從何處來的。因此,交換機中需要一張MAC地址與端口號一一對應的表,以便在交換機內部實現二層數據轉發,這張二層轉發表就是FDB(Forwarding Database)表。

1)ARP請求

       在圖中,當PC-A向PC-B發起一個ICMP請求回應報文時,計算機上的IP模塊發包時,首先比較自己的IP和網關相與是否等於PC-B的IP和網關相與的值,發現相等,於是認為只需要進行二層轉發。

       於是,PC-A查找自己的ARP緩存表里有沒有PC-B對應的MAC地址,沒有查找到,於是發起一個ARP請求的廣播報文,請求PC-B的IP對應的MAC地址,在這個廣播報文中,幀頭部的目的MAC地址為廣播地址ffff-ffff-ffff,而報文段里,源IP與源MAC都是PC-A的,目的IP為PC-B,而目的MAC則全為0。

       PC-A將這個幀封裝好后從接口發送出去,交換機接收到這個幀以后,首先檢查幀的頭部信息,發現幀的頭部信息中,源MAC地址在自己的MAC表里沒有查到,於是首先進行學習,將此幀的源MAC地址和接收的端口號添加到自己的MAC表中。

       隨后交換機檢查幀頭部的目的MAC地址,發現這是一個廣播地址,於是向除了接收這個幀的接口以外的所有接口進行轉發。連接在交換機上的計算機在接收到這個幀以后進行進行解析,除PC-B以外的計算機發現請求的IP地址不是自己,於是將其拋棄。而PC-B解析后發現報文中的目的IP地址正是自己的IP地址,並且發現報文中的源MAC地址和源IP地址在自己的ARP表里沒有,於是將其添加到自己的ARP表里,隨后又發現這個ARP報文是一個ARP請求回應報文,於是封裝一個ARP回應報文,在這個ARP報文里,源MAC地址是PC-B,目的MAC地址是PC-A,隨后將這個幀發送給交換機。

       交換機接收到這個幀后,發現幀的源MAC地址在自己的MAC表里沒有,於是學習,將其添加到自己的MAC表中。隨后根據幀里的目的MAC在自己的MAC表里進行查找,找到了對應項,據此將此幀轉發出去。

PC-A接收到交換機轉發的幀以后,發現該幀的目的MAC正是自己,確認這個幀是發送給自己的,於是繼續解封裝,發現該幀為ARP回應,目的IP是自己,源IP正是PC-B,於是將PC-B對應的IP和MAC添加到自己的ARP表中。

2) ICMP請求回應過程

現在PC-A已經獲得了PC-B的MAC地址,那么現在把剛開始放入緩存中的ICMP報文取出,將目的MAC設置為PC-B的MAC地址,並將這個報文發送出去。

交換機接收到這個幀后,檢查幀的頭部信息,發現源MAC地址在自己的MAC表里,然后再根據目的MAC地址進行查找,查到了對應的表項,於是將這個幀從對應的端口發送出去。

PC-B接收到這個幀后發現其目的MAC是自己,於是繼續解封裝,在IP報文里發現這是一ICMP的請求回應報文,於是自己封裝一個ICMP的回應請求,源IP、源MAC為自己,目的IP、目的MAC為PC-A。

交換機接收到這個幀后,檢查幀的頭部信息,發現源MAC地址在自己的MAC表里,然后再根據目的MAC地址進行查找,查到了對應的表項,於是將這個幀從對應的端口發送出去。

PC-A接收到這個幀以后,發現目的MAC是自己,於是接收這個幀,並進行解析,發現這個幀是PC-B對自己剛才發送的ICMP請求報文的回應。

三層轉發原理

1)PC-A ping PC-C

       PC-A開始封裝一個ICMP請求回應報文,當封裝IP報頭的時候,發現目的IP和自己不屬於同一個網段。

2)PC-A把這段報文交給網關處理

       由於不處於同一個網段,PC-A繼續封裝報文,在封裝幀的時候目的MAC尋找自己的ARP表中網關的MAC地址,沒有查找到,於是把這段報文緩存起來。

3)PC-A向網關發起一個ARP請求

       PC-A向網關發起一個ARP請求,尋求網關的ARP地址。路由器接收到這個請求,查看到幀頭部信息里的目的發現這是一個廣播幀,於是接受下這個幀但不進行轉發,繼續解析,發現ARP報文中的源MAC以及源IP地址不在自己的ARP表中,於是進行ARP學習。繼續解析,發現目的IP正是自己,於是,路由器發起一個ARP回應給PC-A。

       PC-A接收到這個幀后,發現目的MAC正是自己,於是接收下這個幀並進行解析,發現這個幀正是網關發來的ARP回應,於是在自己的ARP表里添加網關對應的MAC,然后取出緩存的ICMP報文,將幀頭部的目的MAC置換為網關的MAC地址,並發送出去。

       路由器接收到這個幀后,查看到目的MAC是自己的MAC地址,於是接收下來並開始解析,在自己的路由表中的路由條目中查找IP首部中的目的IP,查找出該IP對應的目的網絡號和端口,於是,重新進行二層封裝,但發現自己的ARP表中沒有PC-C的MAC地址,於是將這個幀緩存起來,並發出一個ARP請求廣播報文。

4)路由器發起ARP請求尋找PC-C的MAC地址

 


免責聲明!

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



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