詳解一次完整的數據包傳輸過程 -- 層層遞進


題記:本文主要是摘自CCNA指南中講的,再加上本身的理解,詳細闡述一次完整的數據傳輸過程。以前在考CCIE的時候也看過,後來有些忘記,特總結記錄。

讀此文章以前,先弄懂下面5個基本知識點:緩存

  1. 封裝報文是從上層到下層(應用層 --> 傳輸層 --> 網絡層 – > 數據鏈路層 --> 物理層),解封裝報文是從下層到上層
    實際例子:從PC1遠程登陸服務器(Server)。
  2. 數據包傳輸的過程當中,源IP和目標IP不會變,除非遇到NAT(SNAT或DNAT),源MAC和目標MAC遇到網關會變
  3. 二層內經過MAC尋址,三層經過IP尋址。
  4. 當一個數據包的目的地址不是本機,因此須要查詢路由表,當查到路由表中的網關以後,須要獲取網關的MAC地址,並將數據包的MAC地址修改爲網關地址,而後發送到對應的網卡。
  5. 協議數據單元在應用層、表示層和會話層被稱作數據(Data),在傳輸層被稱作分段(Segment),在網絡層被稱作(Packet),在數據鏈路層被稱作(Frame),在物理層被稱作比特(Bit)。
  6. PC1或者Server上保留的arp表是:arp和ip的映射關係。而二層交換機是arp和端口的映射關係,也就是這個arp 應該由哪一個端口轉發。三層交換機能夠保留arp和ip的映射關係。

例子 PC1 發送http請求到Server

在這裏插入圖片描述

Step1: PC1封裝數據包

數據包封裝的層次結構:
在這裏插入圖片描述
應用層:HTTP協議是生成針對目標WEB服務器的HTTP請求報文,該報文就是須要傳遞的數據

服務器

傳輸層:HTTP協議使用的是TCP協議,爲了方便通訊,將HTTP請求報文按序號分爲多個報文段(segment),並對每一個報文段進行封裝。PC1使用本地一個大於1024以上的隨機TCP源端口(這裏假設是1030)創建到目的服務器TCP80號端口的鏈接,TCP源端口和目的端口加入到報文段中,學名叫協議數據單元(Protocol Data Unit, PDU)。因TCP是一個可靠的傳輸控制協議,傳輸層還會加入序列號、窗口大小等參數網絡

網絡層:下沉到網絡層後,封裝網絡層的頭部,主要就是添加源和目的IP地址,成爲數據包。用戶一般使用主機名或域名來訪問服務器,這時就須要經過應用層的DNS服務來經過域名查找IP地址,或逆向從IP地址反查域名。這裏的源IP地址是193.1.1.2,目的IP地址是195.1.1.2。學習

數據鏈路層:下沉到數據鏈路層,封幀的頭部,src mac和dst mac。PC1比較去往的目標IP,發現Server IP 195.1.1.2不在本地網絡中,PC1經過查找本地路由表,會有一條默認路由指向網關R1,知道數據包要先發到網關R1的Fa0/0口。PC1查找本地arp cache,若是找到193.1.1.1對應的MAC地址則進行封裝; 若是在ARP cache中沒有找到193.1.1.1對應的MAC地址,則用ARP協議,査詢到網關對應的MAC地址 「00-11-BC-7D-25-03」 。因而,這裏的源MAC地址是PC1的MAC地址「00-1B-24-7D-25-01」,目的MAC地址是網關的MAC地址 「00-11-BC-7D-25-03。spa

從PC1發出的數據幀格式:
在這裏插入圖片描述
3d

物理層:數據鏈路層封裝後的數據幀下沉到物理層,轉換成二進制形式的比特(Bit)流,從PC1的網卡發送出去。blog

Step 2: 數據到達集線器

PC1發出的比特流到達集線器,集線器簡單地對比特流轉發,從除接收端口之外的全部端口轉發出去。PC2接收到這個數據包,把比特流轉換成幀上傳到數據鏈路層,PC2比較數據幀的目的MAC地址,發現與本機網卡的MAC地址不一樣,PC2丟棄該數據幀,放棄處理,數據到達路由器。排序

Step3: 數據到達R1

路由器R1收到該比特流,轉換成幀上傳到數據鏈路層,路由器R1比較數據幀的目的MAC地址,發現與路由器接收端口Fa0/0(快速以太網,簡寫成Fa0/0,指的是0號插槽上編號爲0的接口)的MAC地址相同,路由器知道該數據幀是發往本路由器的。路由器R1的數據鏈路層把數據幀進行解封裝,而後上傳到路由器R1的網絡層,路由器R1看到數據包的目的IP地址是195.1.1.2,並非發給本路由器的,須要路由器進行轉發。接口

路由器R1査詢本身的路由表,發現數據包應該從串行接口S1/1發出。路由器R1把數據包從Fa0/0接口交換到S1/1接口。圖片

此時R1並不能直接把這個數據包發出去,由於在R1的Fa0/0接口被解封裝,如今須要被從新再封裝。在路由器的入接口解封裝,在路由器的出接口須要再封裝。網絡層的封裝並無被解開,但並不意味着網絡層的信息一點都沒有改變,其實網絡層的數據包中源和目的IP地址都沒有被改變(除非在網絡地址轉換的狀況下),但TTL(生存週期)會減1。網絡層把數據包交給下層的數據鏈路層,數據鏈路層須要封裝二層的地址。串行鏈路不一樣於以太網,由於以太網是一個多路訪問的網絡,要定位到目的設備須要藉助於MAC地址,但串行線路通常的封裝協議都是PPP(Point-to-Point Protocol,點到點協議)或HDLC(High-Level Data Link Control,高級數據鏈路控制協議)封裝,這種封裝被用於點對點線路,也就是說,一根線纜只鏈接兩臺設備,一端發出,另外一端確定能夠收到(有點像容器網絡中用的veth)。假設串行線纜上使用的是PPP協議,則數據鏈路層封裝的源和目的地址都是PPP。

數據鏈路層封裝後的數據幀被傳到物理層,轉換成二進制形式的比特流,從路由器R1的S1/1接口發送出去
在這裏插入圖片描述

Step4: 數據到達R2

路由器R2收到這個比特流,上傳至數據鏈路層,數據鏈路層去掉PPP的封裝。路由器R2査詢數據包的目的IP地址,發現該IP網絡直接鏈接在Fa0/0接口,路由器R2把數據包交換到Fa0/0接口。路由器查看本地的ARP緩存,若是找到195.1.1.2對應的MAC地址,則直接進行封裝;若是沒有找到,則發送ARP的查詢包。路由器R2發出數據幀的源地址是Fa0/0接口的MAC地址,目的地址是服務器網卡的MAC地址。

數據鏈路層封裝後的數據幀被傳到物理層,轉換成二進制形式的比特流,從路由器R2的Fa0/0接口發送出去。
在這裏插入圖片描述

Step5: 交換機處理

路由器R2發出的比特流到達交換機,根據源MAC地址進行學習,根據目的MAC地址進行轉發。交換機根據數據幀中的目的MAC地址査詢MAC地址表,把比特流從對應的端口發送出去,交換機把比特流發往服務器,並無發往PC3。

Step6: 服務器處理

服務器接收到這個比特流,把比特流轉換成幀格式,上傳到數據鏈路層,服務器發現數據幀中的目的MAC地址與本網卡的MAC地址相同,服務器拆除數據鏈路層的封裝後,把數據包上傳到網絡層。服務器的網絡層比較數據包中的目的IP地址,發現與本機的IP地址相同,服務器拆除網絡層的封裝後,把數據分段上傳到傳輸層。傳輸層對數據分段進行確認、排序、重組,確保數據傳輸的可靠性。數據最後被傳到服務器的應用層。

反向傳輸

服務器收到PC1發過來的數據後,對PC1進行響應。和PC1處理的過程相似,服務器也知道要發往一個遠程的網絡,數據鏈路層的目的MAC地址須要封裝網關的MAC地址;網絡層源和目的IP地址與PC1發送過來的包相反,即把源地址變成目的地址,目的地址變成源地址;傳輸層源和目的端口與PC1發送過來的包相反,即把源端口變成目的端口,目的端口變成源端口。
在這裏插入圖片描述

總結

從PC1到Server的整個數據包流動過程,PC1執行OSI七層的封裝,而後把比特流傳到集線器;集線器在物理層把信號簡單放大後,把比特流傳到路由器R1;R1執行OSI下三層的處理後,再把比特流傳到路由器R2;R2執行OSI下三層的處理後,再把比特流傳到交換機;交換機執行OSI下二層的處理後,再把比特流傳到服務器

從這個流動過程當中,能夠發現數據流在中間設備上主要執行的是OSI下三層的操做。

  • 物理層的設備不改變幀的格式,廣播式轉發。
  • 數據鏈路層的設備也不改變幀的格式,但能夠根據數據幀中的目的MAC地址進行轉發;
  • 網絡層的設備改變幀的格式,要執行幀的解封裝和再封裝,但不改變數據包中的源和目的IP地址。

在這裏插入圖片描述

相關文章
相關標籤/搜索