我們當今使用電子設備都離不開網路,通過網路我們可以聊天、玩游戲、看電影都操作,
網路的本質就是交換資料,
本文我們就來看下資料是如何在網路中傳輸的,
計算機網路模型
現在有兩種計算機網路模型,分別為OSI七層模型和TCP/IP四層模型
OSI將計算機網路分為了7層,TCP/IP將計算機網路分為了4層

計算機網路書中為了更好的解釋運行原理,將TCP/IP模型改變成了五層模型,將TCP/IP四層模型中的網路介面層分為了資料鏈路層和物理層,

本文也采用五層模型來解釋資料在網路中的傳輸流程,
TCP/IP五層模型從上到下分為五層,下層為上層提供服務,
1、應用層
應用層是最頂層,直接為用戶提供各種各樣的傳輸功能,比如超文本傳輸協議HTTP用于網頁瀏覽、電子郵件傳輸協議SMTP用于郵件傳送等,
2、傳輸層
應用層的提供的傳輸功能多種多樣,傳輸層會對應用層的資料進行包裝,通過引入埠號來唯一標識一種傳輸功能,并且保證資料傳輸的流量控制、差錯控制,
3、網路層
網路層又是對傳輸層的包裝,網路層引入IP地址的邏輯地址資訊,將資料在網路中傳輸,
4、資料鏈路層
5、物理層
傳輸流程詳解
本文以一個資料包的傳輸為例,來說明傳輸流程,我們就以一個HTTP請求資料包為例子來說明,
發送資料的計算機叫做源計算機,接收資料的計算機叫做目標計算機,
應用層
首先一個HTTP資料包在應用層中大概包含以下資訊,比如HTTP協議的版本號、各種欄位屬性值、最后是包含的要發送的實際資料,

傳輸層
傳輸層對應著有UDP和TCP兩種協議,HTTP采用的是TCP協議,因為TCP能夠提供差錯控制,
每一種應用層協議都對應著一個埠號,接著應用層會將HTTP資料包委托給傳輸層來進一步包裝,
TCP對HTTP報文的包裝如下,

傳輸層會為將HTTP資料包包裝上源埠號和目的埠號等資訊,
目的埠號是為了在資料包到達目的計算機的時候讓其了解需要將資料包交給什么應用層協議進行處理,
源埠號是為了讓目標計算機想要回傳資料的時候,知道給源計算機的哪個應用層協議發送資料,
埠號是最重要的資訊,序號、確認序列號等資訊是為了保證可靠傳輸的,后續的文章我們會專門分析TCP的可靠傳輸、流量控制等特性,
這里我們在額外說一下,HTTP報文的頭部資訊占用的位元組大小是固定的,后面的具體資料占用的空間是不定的,會隨著傳輸資料的多少而改變,
資料鏈路層規定的最大傳輸單元MTU不能超過1500位元組,如果HTTP報文的大小超過了MSS = (MTU-N)(因為傳輸層、IP層會依次進行封裝,也會占用空間 N 位元組,HTTP報文的最大傳輸大小應該是MTU-N),

超過了怎么辦呢?TCP會對HTTP報文進行拆解,將HTTP報文拆分成多個滿足傳輸要求的報文并包裝,這些報文之間是有先后順序的,TCP對這些報文進行順序編號,保證資料的正確讀寫,

網路層
傳輸層包裝好資訊后,會進入網路層,
網路層會為其加入源IP和目標IP等資訊,
源IP 指的是源計算機的IP
目標IP 指的是目標計算機的IP

資料鏈路層
在資料鏈路層中會在資料包中加入發送方MAC地址和接收方MAC地址,
發送方MAC地址 就是源計算機的MAC地址,
接收方MAC地址 并不是目標計算機的MAC地址,而是資料包的下一跳的MAC地址,
重點:
重點:
重點:
接收方MAC地址怎么獲取到呢?
首先源計算機中存在一個路由表,其主要包含以下資訊:

1、目標網路地址 Destination
當前路由器可以直接或者間接到達的目標網路
2、Use Iface
目標網路地址對應的轉發介面,從該介面將資料包轉發出去
3、下一跳IP地址 GateWay
如果為空,說明目標網路地址和當前路由器或者計算機直接相連,通過對應的介面轉發就到達了資料包對應的目標網路,
如果不為空,就代表資料包下一步轉發到的路由器IP地址,每個路由器埠都對應著一個IP地址和MAC地址,也是通過對應的介面進行轉發
4、子網掩碼 Fenmask
目標網路地址對應的子網掩碼,當目標IP地址和子網掩碼&運算后,如果等于目標網路,就說明該目標地址與資料包對應的目標地址相等,可以從對應的介面轉出
如果不存在對應的目標網路,就通過默認路由轉發出去,默認路由的目標網路為0.0.0.0,子網掩碼也為0.0.0.0,
ARP請求
我們需要查看路由表中是否存在對應的目標網路,獲得其GateWay,然后查看ARP快取表,ARP快取表中存的是IP地址與MAC地址的對應記錄,
如果ARP快取表中存在對應的目標網路,就將其MAC地址填入到接收方MAC地址中,并通過對應的介面轉發出去,
如果ARP快取表中不存在對應的目標網路,源計算機就會發出ARP請求,ARP請求就是將自己的IP地址和希望得到的MAC地址的目標計算機的IP地址包裝成資料包通過廣播發出去,當目標計算機接收到這個資料包后會將源IP地址取出來,將自己的MAC地址包裝成資料包發送回去,這樣源計算機就能獲得到對應的MAC地址了,并將其IP地址和MAC的地址加入到ARP快取表中,
通過ARP快取表或者ARP請求可以獲得對應的MAC地址,將其填入到接收方MAC地址中,這樣就將IP資料包包裝完畢了,稱之為幀

物理層
利用網卡將資料通過二進制流寫入到網線或者光纖當設備中,
交換機
資料包首先會發送到交換機中,交換機作業在MAC層,是一個二層網路設備,
交換機中有一個MAC快取表,會存盤MAC地址和對應的轉發埠號,
交換機在接收到資料包后,會取出接收方MAC地址,查看其是否存在快取,如果存在快取,就通過其對應的埠號將資料包發送出去,
如果不存在,就向所有埠號發出資料包,
交換機中的MAC地址是怎么快取的呢?
當資料包通過埠進入交換機時,會將對應的發送方MAC地址和進入的埠號寫入到快取中,
路由器——路由轉發
資料包出了交換機就算是出了家門了,開始進入路由器,
資料包通過埠進入路由器,執行以下步驟:
1、 路由器首先會檢查資料包的接收方MAC地址是否等于路由器埠的MAC地址,如果等于就接收,如果不等于就拋棄,
2、 路由器去除頭部的MAC包裝,暴露出IP地址資訊,取出目標IP地址,然后查看路由表,
取出路由表中的記錄與目標IP地址挨個進行檢驗,檢驗程序如下:
將記錄中的子網掩碼與目標IP地址進行&運算,如果等于記錄中的目標網路,說明存在當前路由器可以到達目標IP地址,就通過記錄中對應的
埠轉發出去,
在轉發出去之前需要包裝MAC地址資訊等,
發送方MAC地址: 將路由器輸出埠的MAC地址填入發送方MAC地址,
接收方MAC地址: 利用ARP快取表或者是ARP請求獲取下一跳地址的MAC地址, 下一跳地址就是對應著下一個經過的路由器埠IP地址,接收方MAC地址就對應著下一個經過的路由器的埠MAC地址,
3、 如果路由表中不存在對應的目標地址,那么就會通過默認路由發出去,默認路由的目標地址和子網掩碼都是 0.0.0.0,MAC的包裝和上述一樣,
從路由轉發的程序來看,源IP地址和目標IP地址一直不變,發送方MAC地址和接收方MAC地址一直在變,
到達目標計算機
就這樣通過路由器的不斷轉發,資料包就到達了目標計算機,
目標計算機在收到資料包后會將資料包從下層往上層拆封,
1、 首先是資料鏈路層,目標計算機會將MAC包裝資訊去除,取出接收方MAC地址,查看是否和自己的MAC地址一致,如果不一致,就拋棄,
2、 接著是網路層,將IP包裝資訊去除,取出目標IP地址,查看是否與自己的IP地址一致,如果不一致,就拋棄,
3、 接著是運輸層,會取出目標埠號,通過埠號獲取對應的行程,將資料包交給對應的行程,比如HTTP資料包的目標埠號是80,就會交給HTTP行程,HTTP會呼叫其業務邏輯,將回傳的資料包裝成資料包通過源IP地址發送給源計算機,
總結
通過上述流程我們看出,資料包首先會在源計算機中從上到下挨個封裝資訊,然后通過IP地址和MAC地址在交換機和路由器中轉發,最終來到目標計算機,目標計算機對資料包從下到上挨個拆封驗證,最終通過埠號見資料包交付給對應的行程,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/298909.html
標籤:其他
