計算機網絡(八)——數據轉發過程


數據傳輸過程是一個非常復雜的過程,例如數據在轉發的過程中會進行一系列的封裝和解封裝。

數據轉發過程概述

數據可以在同一網絡內或者不同網絡間傳輸,數據轉發過程也分為本地轉發(同網段)遠程轉發(跨網段),但兩者的數據轉發原理是基本一樣的,都是遵循TCP/IP協議簇。對數據進行一系列的封裝與解封裝的操作。同一網段中封裝的是目的地的MAC,不同網段封裝的是網關MAC。

轉發過程大致如下:

1、TCP數據段封裝

首先當主機建立了到達目的地的TCP連接后,便開始對應用層數據進行TCP封裝
  • 主機A會對待發送的應用數據首先執行加密和壓縮等相關操作,之后進行傳輸層封裝。Web應用是基於傳輸層的TCP協議傳輸數據的。
  • 主機A使用TCP進行報文封裝時,必須填充源端口目的端口字段,初始序列號確認序列號字段,標識位窗口字段以及校驗和字段
  • 此例中數據段的源端口號為主機A隨機選擇的1027號端口,目的端口號為服務器A的TCP知名端口80。
  • 將封裝完成的數據向下傳遞給網絡層進行IP封裝。

2. IP數據包封裝

將應用數據完成TCP封裝之后,通過接口將數據傳輸到網絡層進行IP封裝。
  • 主機A完成傳輸層封裝后,一般會進行網絡層數據封裝,在使用IP進行封裝時,需要明確IP報文的源和目的地址。如果IP報文的大小大於網絡的最大傳輸單元(MTU),則該報文有可能在傳輸過程中被分片。
  • 生存時間(TTL)字段用來減少網絡環路造成的影響ARG3系列路由器產生的數據包,默認TTL值為255。路由器轉發一個數據包時,該值會被減1,如果路由器發現該值被減為0,就會丟棄該數據包。這樣,即使網絡中存在環路,數據包也不會在網絡上一直被轉發。
  • 協議字段標識了傳輸層所使用的協議。本例中,傳輸層使用的是TCP協議,所以該字段的填充值為0X06。

查找路由:確認目的IP地址

主機A必須要擁有到達目的地的路由。每個主機都會獨自維護各自的路由表項。主機A在發送數據前需要先檢查是否能夠到達目的端,這個過程是通過查找路由來完成的。

在此示例中,主機A擁有一條到達“任何網絡”的路由,它發往其他網絡的數據都會通過IP地址為10.1.1.1的接口轉發到下一跳,即網關10.1.1.254。

ARP:確認目的MAC

接下來的數據幀封裝需要目的MAC地址,所以需要通過ARP協議獲取下一步目的MAC。

3、以太網封裝——數據鏈路層封裝

在網絡層獲取完相關數據,結束IP封裝之后,通過接口進入數據鏈路層完成以太網封裝(封裝MAC地址)。
  • 主機A在鏈路層封裝數據幀時,會遵循IEEE 802.3或Ethernet_II標准,Ethernet_II幀頭中的類型字段填充為0x0800,以表示網絡層使用的是IP協議。
  • 源MAC地址為主機A的MAC地址,目的MAC地址為網關路由器E0/0接口的MAC地址。

4、數據幀的轉發過程

數據在完成數據幀封裝之后,就可以進入物理層進行數據傳輸了。

主機A工作在半雙工狀態下,所以會使用CSMA/CD來檢測鏈路是否空閑。如果鏈路空閑,主機A會將一個前導碼(Preamble)和一個幀首定界符(SFD)附加到幀頭然后進行傳輸。

  • 前導碼的作用是,使接收設備進行同步並做好接收數據幀的准備,是包括了7個字節的二進制“1”、“0”交替的代碼,即1010…10共56位。
  • 幀首定界符的作用是,使接收端對幀的第一位進行定位,是長度為1個字節的10101011二進制序列。

本例中,

  • 主機A發送數據幀到共享以太網,此網絡中的所有網絡設備都會收到該幀。(廣播)
  • 設備收到幀之后,首先會進行FCS校驗。如果FCS校驗未能通過,則幀被立即丟棄。
  • 對於通過了FCS校驗的幀,設備會檢查幀中的目的MAC地址。如果幀中的目的MAC地址與自己的MAC地址不同,設備將丟棄幀,如果相同,則會繼續處理。
  • 處理過程中,幀頭幀尾會被剝去(也就是解封裝),剩下的數據報文會被根據幀頭中的類型字段的值來送到網絡層中的對應協議模塊去處理。

5、數據包的轉發過程

RTA收到此數據報文后,網絡層會對該報文進行處理。RTA首先根據IP頭部信息中的校驗和字段,檢查IP數據報文頭部的完整性,然后根據目的IP地址查看路由表,確定是否能夠將數據包轉發到目的端。RTA還必須對TTL的值進行處理。另外,報文大小不能超過MTU值。如果報文大小超過MTU值,則報文將被分片。

網絡層處理完成后,報文將被送到數據鏈路層重新進行封裝,成為一個新的數據幀,該幀的頭部會封裝新的源MAC地址和目的MAC地址如果當前網絡設備不知道下一跳的MAC地址,將會使用ARP來獲得。

6、數據幀解封裝

該示例中,服務器A處於一個共享以太網中,兩台服務器都會收到RTB發送的數據幀。該幀的目的MAC地址與服務器B的接口MAC地址不匹配,所以會被服務器B丟棄

服務器A成功收到該幀,並通過FCS校驗。服務器A將利用幀中的類型字段來識別在網絡層處理該數據的協議。該示例中,服務器A會將解封裝后的此數據交給網絡層的IP協議來進行處理。

RTB以服務器A的MAC地址作為目的MAC繼續轉發。服務器A接收到該數據幀后,發現目的MAC為自己的MAC,於是會繼續處理該數據幀。

7、數據包解封裝

服務器A通過IP協議來處理該報文,首先會通過校驗和字段來驗證報文頭的完整性,然后檢查IP報文頭中的目的IP地址是否與自己當前的IP地址匹配。

如果在源與目的之間的數據傳輸期間數據發生了報文分片,則報文會被目的端重新組合。標識字段用於標識屬於同一數據源的分片報文,偏移量表示該分片在原分組中的相對位置。標志字段目前只有兩位有意義,標志字段最低位為1,表示后面還有分片,為0表示這已經是最后一個數據片;中間一位為1表示不能分片,為0表示允許分片。所有的分片報文必須被目的端全部接收到后才會進行重新組合。

協議字段表示此數據包攜帶的上層數據是哪種協議的數據。需要注意的是,下一個報頭並非總是傳輸層報頭。例如,ICMP報文也是使用IP協議封裝,協議字段值為0x01。

服務器A檢查數據包的目的IP地址,發現目的IP與自己的IP地址相同。則服務器A剝掉數據包的IP頭部后,會送往上層協議TCP繼續進行處理。

8、數據段解封裝(TCP解封裝)

當IP報文頭被處理完並剝離后,數據段會被發送到傳輸層進行處理。在此示例中,傳輸層協議使用的是TCP,且發送端和接收端已經通過三次握手建立了連接。傳輸層收到該數據段后,TCP協議會查看並處理該數據段頭部信息,其中目的端口號為80,用於表示處理該數據的應用層協議為HTTP協議。

TCP處理完頭部信息后會將此數據段頭部進行剝離,然后將剩下的應用數據發送到HTTP協議進行處理。

數據在進行二層和三層封裝之前,主機需要了解哪些信息?

主機在封裝數據包之前,必須要知道目的端IP地址。在封裝數據幀之前,必須要知道去往目的網絡的路由以及下一跳的MAC地址。

當數據幀發送到非目的主機時,非目的主機將會如何處理?

如果主機接收到一個不是發往自己的數據幀,在檢驗幀頭中的目的MAC地址之后會丟棄該幀。

傳輸層如何能夠准確的將數據交給特定應用?

傳輸層會檢查TCP或UDP報文頭中的目的端口號,以此來識別特定應用。

當兩台主機同時訪問服務器的HTTP服務,該服務器如何區分數據屬於哪個會話?

服務器可以只通過源IP地址識別兩台主機的HTTP流量,另外TCP報文頭中包含的源端口也可以被用來區分同一台主機通過不同的瀏覽器發起的不同的會話。例如,兩個來自源IP為10.1.1.1的HTTP流量使用的目的端口號都是80,但源端口號為1028和1035。

 


免責聲明!

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



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