標籤:介面 images 簡單 javascrip 區域網路 放大 目錄 line 技術分享
×目錄[1]客戶機處理 [2]集線器處理 [3]路由器1處理[4]路由器2處理[5]交換器處理[6]伺服器處理[7]反向傳輸前面的話
上一篇中,介紹了網路基礎。本文將詳細介紹客戶機在瀏覽網頁abc.com時,資料在網路中的傳輸過程
以圖為例,PC1通過HTTP協議訪問位於Server上的網頁。那麼,網頁資料在網路中是如何傳輸的呢?下面是具體的實現步驟
步驟一:客戶機處理
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
網路層封裝後的資料包下沉到資料連結層,封裝幀頭和幀尾。幀尾是添加被稱做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發送過來的包相反,即把源連接埠變成目的連接埠,目的連接埠變成源連接埠
前端學HTTP之資料轉送