文章出處

前面的話

  上一篇中,介紹了網絡基礎。本文將詳細介紹客戶機在瀏覽網頁abc.com時,數據在網絡中的傳輸過程

  以圖為例,PC1通過HTTP協議訪問位于Server上的網頁。那么,網頁數據在網絡中是如何傳輸的呢?下面是具體的實現步驟

 

客戶機處理

  HTTP協議的職責是生成針對目標WEB服務器的HTTP請求報文,該報文就是需要傳遞的數據

  下沉到傳輸層后,由于HTTP協議使用的是TCP協議,為了方便通信,將HTTP請求報文按序號分為多個報文段(segment),并對每個報文段進行封裝。PC1使用本地一個大于1024以上的隨機TCP源端口(這里假設是1030)建立到目的服務器TCP80號端口(HTTPS協議對應的端口號是443)的連接,TCP源端口和目的端口被加入到報文段中,學名叫協議數據單元(Protocol Data Unit, PDU)。因TCP是一個可靠的傳輸控制協議,傳輸層還會加入序列號、窗口大小等參數

  傳輸層封裝后的數據分段下沉到網絡層后,封裝網絡層的頭部,主要就是添加源和目的IP地址,成為數據包。用戶通常使用主機名或域名來訪問服務器,這時就需要通過應用層的DNS服務來通過域名查找IP地址,或逆向從IP地址反查域名。這里的源IP地址是193.1.1.2,目的IP地址是195.1.1.2

  網絡層封裝后的數據包下沉到數據鏈路層,封裝幀頭和幀尾。幀尾是添加被稱做CRC的循環冗余校驗部分。幀頭主要是添加數據鏈路層的地址,即數據鏈路層的源地址和目的地址,用在以太網上的體現就是添加源MAC地址和目的MAC地址。PC1比較要去往的目標IP地址,發現服務器的IP地址195.1.1.2不在本地網絡中,PC1知道要發往不同網絡中的數據包,首先要發往網關,也就是圖中路由器R1快速以太網接口Fa0/0的1P地址193.1.1.1。PC1査詢本地的ARP緩存,如果找到193.1.1.1對應的MAC地址則進行封裝;如果在ARP緩存中沒有找到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”

  數據鏈路層封裝后的數據幀下沉到物理層,轉換成二進制形式的比特(Bit)流,從PC1的網卡發送出去。物理層的用途就是處理比特流,把比特轉換成電子、光學或微波信號。反之在接收端,物理層從傳輸媒體中重新得到這些信號,恢復成比特流,傳輸比特流到數據鏈路層

  [注意]協議數據單元在應用層、表示層和會話層被稱做數據(Data),在傳輸層被稱做分段(Segment),在網絡層被稱做包(Packet),在數據鏈路層被稱做幀(Frame),在物理層被稱做比特(Bit)

  

  

  [注意]目的MAC地址是路由器接口的MAC地址,而不是目的服務器網卡的MAC地址。因為MAC只是用在局域網內的尋址,如果封裝的是目的服務器的MAC地址,如何體現這個包是發往路由器的呢?假設封裝的目的MAC地址是服務器的MAC地址 “00-1B-24-7D-25-05”,這樣的數據包被傳到路由器后,路由器比較數據幀中的R的MAC地址,發現與本路由器接口的MAC地址不同,路由器丟棄這個包,數據包不被路由器轉發,更別想能到達目的服務器了

  

集線器處理

  PC1發出的比特流到達集線器,集線器簡單地對比特流進行放大,從除接收端口以外的所有端口轉發出去。PC2接收到這個數據包,把比特流轉換成幀上傳到數據鏈路層,PC2比較數據幀的目的MAC地址,發現與本機網卡的MAC地址不同,PC2丟棄該數據幀,放棄處理

 

路由器1處理

  路由器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,高級數據鏈路控制協議)封裝,這種封裝被用于點對點線路,也就是說,一根線纜只連接兩臺設備,一端發出,另一端肯定可以收到。假設串行線纜上使用的是PPP協議,則數據鏈路層封裝的源和目的地址都是PPP

  數據鏈路層封裝后的數據幀被傳到物理層,轉換成二進制形式的比特流,從路由器R1的S1/1接口發送出去

 

路由器2處理

  路由器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接口發送出去

 

交換機處理

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

 

服務器處理

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

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

  從這個流動過程中,可以發現數據流在中間設備上主要執行的是OSI下三層的操作,物理層的設備不改變幀的格式,廣播式轉發:數據鏈路層的設備也不改變幀的格式,但可以根據數據幀中的目的MAC地址進行轉發;網絡層的設備改變幀的格式,要執行幀的解封裝和再封裝,但不改變數據包中的源和目的IP地址

 

反向傳輸

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


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()