在網路模型中有分為7層模型(OSI模型)和5層模型和TCP/IP模型
OSI模型將應用層和表示層作為獨立的兩層,而TCP/IP模型將它們合併為一個應用層。
兩種對比來說,TCP/IP模型更符合實際開發應用
應用層
應用層是最上層的一層,也是在開發中接觸到最多的,因為在開發中一般需要提供HTTP介面來返回資訊
應用層支援HTTP、FTP、DNS、Telnet等傳輸資料
等協議,應用層是不用去關心資料是如何傳輸的,只需要把要傳輸的資料交給下邊的層
而且應用層是工作在作業系統中的使用者態,傳輸層及以下則工作在核心態,
從應用層到傳輸層的操作是在作業系統中去完成的,透過網路協議棧的Api(Socket)來完成
應用程式透過 Socket 將資料傳送出去時,作業系統核心會將資料從使用者空間傳輸到核心空間,
然後將資料封裝成 TCP、UDP 或其他協議的資料包,準備進行傳輸
總結應用層的大致作用:
- 提供HTTP、FTP等網路服務
- 實現應用程式間的資料交換
- 建立和維護應用程式之間的通訊
傳輸層
運輸層的任務就是負責向兩個主機中程式之間的通訊提供通用的資料傳輸服務。應用程式利用該服務傳送應用層報文。
傳輸層中的最重要的任務是資料傳輸的可靠性和完整性的保障。為此,它使用了一些技術,如流量控制、擁塞控制、糾錯和校驗等等,以確保資料傳輸的正確性。
另外,它還提供了多路複用和即時連線等技術,以幫助應用程式高效地使用網路資源
在傳輸層會有兩個傳輸協議,分別是 TCP(傳輸控制協議) 和 UDP(使用者資料包協議)
在TCP使用了包括資料分段、確認應答、超時重傳、流量控制等機制來保證資料傳輸的正確性和可靠性
UDP 相對來說就很簡單,簡單到只負責傳送資料包,不保證資料包是否能抵達對方,但它實時性相對更好,傳輸效率也高
TCP和UDP的區別分別是:
-
可靠性:TCP 是一種面向連線的協議,可以提供可靠的資料傳輸,保證資料不會丟失和損壞。UDP 是一種無連線的協議,不提供任何可靠性保障,資料傳送後可能會丟失或損壞。
-
連線方式:TCP 是面向連線的協議,透過三次握手建立連線,傳輸資料完成後還需要四次握手釋放連線。UDP 是無連線的協議,直接傳送資料,無需建立和釋放連線。
-
延遲性:由於 TCP 需要在建立連線後再傳輸資料,會造成一定的延遲,所以 TCP 在實時性要求不高的場景下表現並不出色。UDP 直接傳送資料,幾乎沒有延遲,適合實時性要求高的場景。
-
資料量:TCP 在資料傳輸時需要分段並封裝成 TCP 報文段,還需要建立和維護資料傳輸控制塊,所以相對來說佔用的網路資源較多,適合資料量較大、要求完整傳輸的場景。UDP 直接將資料封裝成 UDP 資料包,相對來說佔用的網路資源較少,適合短資料量、快速傳輸的場景。
總之,TCP 適合要求資料傳輸可靠、資料量較大、不要求實時性的場景;UDP 適合對實時性要求高、資料量較小、可丟失的場景
網路層
網路層負責將資料從一個裝置傳輸到另一個裝置,網路層透過 IP (Internet Protocol)協議實現
可以理解為透過IP協議的定址操作,在定址的過程中,先匹配到相同的網路號(表示要找到同一個子網),才會去找對應的主機
除了定址能力, IP 協議還有另一個重要的能力就是路由。實際場景中,兩臺裝置並不是用一條網線連線起來的,
而是透過很多閘道器、路由器、交換機等眾多網路裝置連線起來的,那麼就會形成很多條網路的路徑,因此當資料包到達一個網路節點,就需要透過路由演算法決定下一步走哪條路徑
IP 協議的定址作用是告訴我們去往下一個目的地該朝哪個方向走,路由則是根據「下一個目的地」選擇路徑
IP協議的定址過程可以分為三個步驟,分別是主機向路由器的定址、路由器向路由器的定址、路由器向主機的定址
-
主機向路由器的定址:主機會根據自己的IP地址和子網掩碼,判斷目標地址是否在本地子網中。
如果在本地子網中,則會直接傳送ARP請求,獲取目標主機的MAC地址。如果目標地址不在本地子網中,則會將資料包傳送到本地閘道器(即本地路由器)的MAC地址。 -
路由器向路由器的定址:路由器會根據路由表中的資訊,選擇下一跳路由器,並將資料包傳送給下一站路由器。如果下一跳路由器不在本地子網中,則會透過ARP協議獲取下一跳路由器的MAC地址。
-
路由器向主機的定址:當資料包到達目標子網時,路由器會使用ARP協議獲取目標主機的MAC地址,然後將資料包傳送到目標主機。如果路由器無法獲取目標主機的MAC地址,則會將資料包傳送到本地閘道器進行轉發。
網路層和傳輸層的基本區別在於,網路層處理的是分組(packet),而傳輸層處理的是資料流(stream)
傳輸層透過協議(如TCP或UDP協議)從上層應用程式接收資料,並將資料分割成較小的報文段(segment),從而能夠被網路層傳輸
網路介面層
每經過一層,都會在資料包上加上請求頭
在透過網路層獲取到目標IP後,會將目標IP加到資料包上,生成了 IP 頭部,接下來要交給網路介面層(Link Layer)在 IP 頭部的前面加上 MAC 頭部,並封裝成資料幀(Data frame)傳送到網路上。
IP 頭部中的接收方 IP 地址表示網路包的目的地,透過這個地址我們就可以判斷要將包發到哪裡,但在乙太網的世界中,這個思路是行不通的
乙太網在判斷網路包目的地時和 IP 的方式不同,因此必須採用相匹配的方式才能在乙太網中將包發往目的地,
而 MAC 頭部就是幹這個用的,所以,在乙太網進行通訊要用到 MAC 地址,MAC 頭部是乙太網使用的頭部,它包含了接收方和傳送方的 MAC 地址等資訊,
我們可以透過 ARP 協議獲取對方的 MAC 地址
所以說,網路介面層主要為網路層提供「鏈路級別」傳輸的服務,負責在乙太網、WiFi 這樣的底層網路上傳送原始資料包,工作在網路卡這個層次,使用 MAC 地址來標識網路上的裝置
總結
這就是TCP/IP分層的大致