天天看點

聊聊TCP/IP網絡模型

作者:JAVA後端架構
聊聊TCP/IP網絡模型

在網絡模型中有分為7層模型(OSI模型)和5層模型和TCP/IP模型

聊聊TCP/IP網絡模型

OSI模型将應用層和表示層作為獨立的兩層,而TCP/IP模型将它們合并為一個應用層。

兩種對比來說,TCP/IP模型更符合實際開發應用

聊聊TCP/IP網絡模型

應用層

應用層是最上層的一層,也是在開發中接觸到最多的,因為在開發中一般需要提供HTTP接口來傳回資訊

應用層支援HTTP、FTP、DNS、Telnet等傳輸資料等協定,應用層是不用去關心資料是如何傳輸的,隻需要把要傳輸的資料交給下邊的層

而且應用層是工作在作業系統中的使用者态,傳輸層及以下則工作在核心态,

從應用層到傳輸層的操作是在作業系統中去完成的,通過網絡協定棧的Api(Socket)來完成

應用程式通過 Socket 将資料發送出去時,作業系統核心會将資料從使用者空間傳輸到核心空間,

然後将資料封裝成 TCP、UDP 或其他協定的資料包,準備進行傳輸

總結應用層的大緻作用:

  1. 提供HTTP、FTP等網絡服務
  2. 實作應用程式間的資料交換
  3. 建立和維護應用程式之間的通信

傳輸層

運輸層的任務就是負責向兩個主機中程序之間的通信提供通用的資料傳輸服務。應用程序利用該服務傳送應用層封包。

傳輸層中的最重要的任務是資料傳輸的可靠性和完整性的保障。為此,它使用了一些技術,如流量控制、擁塞控制、糾錯和校驗等等,以確定資料傳輸的正确性。

另外,它還提供了多路複用和即時連接配接等技術,以幫助應用程式高效地使用網絡資源

在傳輸層會有兩個傳輸協定,分别是 TCP(傳輸控制協定) 和 UDP(使用者資料報協定)

在TCP使用了包括資料分段、确認應答、逾時重傳、流量控制等機制來保證資料傳輸的正确性和可靠性

UDP 相對來說就很簡單,簡單到隻負責發送資料包,不保證資料包是否能抵達對方,但它實時性相對更好,傳輸效率也高

TCP和UDP的差別分别是:

  1. 可靠性:TCP 是一種面向連接配接的協定,可以提供可靠的資料傳輸,保證資料不會丢失和損壞。UDP 是一種無連接配接的協定,不提供任何可靠性保障,資料發送後可能會丢失或損壞。
  2. 連接配接方式:TCP 是面向連接配接的協定,通過三次握手建立連接配接,傳輸資料完成後還需要四次握手釋放連接配接。UDP 是無連接配接的協定,直接發送資料,無需建立和釋放連接配接。
  3. 延遲性:由于 TCP 需要在建立連接配接後再傳輸資料,會造成一定的延遲,是以 TCP 在實時性要求不高的場景下表現并不出色。UDP 直接發送資料,幾乎沒有延遲,适合實時性要求高的場景。
  4. 資料量:TCP 在資料傳輸時需要分段并封裝成 TCP 封包段,還需要建立和維護資料傳輸控制塊,是以相對來說占用的網絡資源較多,适合資料量較大、要求完整傳輸的場景。UDP 直接将資料封裝成 UDP 資料報,相對來說占用的網絡資源較少,适合短資料量、快速傳輸的場景。

總之,TCP 适合要求資料傳輸可靠、資料量較大、不要求實時性的場景;UDP 适合對實時性要求高、資料量較小、可丢失的場景

網絡層

網絡層負責将資料從一個裝置傳輸到另一個裝置,網絡層通過 IP (Internet Protocol)協定實作

可以了解為通過IP協定的尋址操作,在尋址的過程中,先比對到相同的網絡号(表示要找到同一個子網),才會去找對應的主機

除了尋址能力, IP 協定還有另一個重要的能力就是路由。實際場景中,兩台裝置并不是用一條網線連接配接起來的,

而是通過很多網關、路由器、交換機等衆多網絡裝置連接配接起來的,那麼就會形成很多條網絡的路徑,是以當資料包到達一個網絡節點,就需要通過路由算法決定下一步走哪條路徑

IP 協定的尋址作用是告訴我們去往下一個目的地該朝哪個方向走,路由則是根據「下一個目的地」選擇路徑

IP協定的尋址過程可以分為三個步驟,分别是主機向路由器的尋址、路由器向路由器的尋址、路由器向主機的尋址

  1. 主機向路由器的尋址:主機會根據自己的IP位址和子網路遮罩,判斷目标位址是否在本地子網中。

    如果在本地子網中,則會直接發送ARP請求,擷取目标主機的MAC位址。如果目标位址不在本地子網中,則會将資料包發送到本地網關(即本地路由器)的MAC位址。

  2. 路由器向路由器的尋址:路由器會根據路由表中的資訊,選擇下一跳路由器,并将資料包發送給下一站路由器。如果下一跳路由器不在本地子網中,則會通過ARP協定擷取下一跳路由器的MAC位址。
  3. 路由器向主機的尋址:當資料包到達目标子網時,路由器會使用ARP協定擷取目标主機的MAC位址,然後将資料包發送到目标主機。如果路由器無法擷取目标主機的MAC位址,則會将資料包發送到本地網關進行轉發。

網絡層和傳輸層的基本差別在于,網絡層處理的是分組(packet),而傳輸層處理的是資料流(stream)

傳輸層通過協定(如TCP或UDP協定)從上層應用程式接收資料,并将資料分割成較小的封包段(segment),進而能夠被網絡層傳輸

網絡接口層

每經過一層,都會在資料包上加上請求頭

在通過網絡層擷取到目标IP後,會将目标IP加到資料包上,生成了 IP 頭部,接下來要交給網絡接口層(Link Layer)在 IP 頭部的前面加上 MAC 頭部,并封裝成資料幀(Data frame)發送到網絡上。

聊聊TCP/IP網絡模型

IP 頭部中的接收方 IP 位址表示網絡包的目的地,通過這個位址我們就可以判斷要将包發到哪裡,但在以太網的世界中,這個思路是行不通的

以太網在判斷網絡包目的地時和 IP 的方式不同,是以必須采用相比對的方式才能在以太網中将包發往目的地,

而 MAC 頭部就是幹這個用的,是以,在以太網進行通訊要用到 MAC 位址,MAC 頭部是以太網使用的頭部,它包含了接收方和發送方的 MAC 位址等資訊,

我們可以通過 ARP 協定擷取對方的 MAC 位址

是以說,網絡接口層主要為網絡層提供「鍊路級别」傳輸的服務,負責在以太網、WiFi 這樣的底層網絡上發送原始資料包,工作在網卡這個層次,使用 MAC 位址來辨別網絡上的裝置

總結

這就是TCP/IP分層的大緻

聊聊TCP/IP網絡模型

為幫助開發者們提升面試技能、有機會入職BATJ等大廠公司,特别制作了這個專輯——這一次整體放出。

大緻内容包括了: Java 集合、JVM、多線程、并發程式設計、設計模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat等大廠面試題等、等技術棧!

聊聊TCP/IP網絡模型

歡迎大家關注公衆号【咕泡Java】,回複【007】,擷取以上最新Java後端架構VIP學習資料以及視訊學習教程,然後一起學習,一文在手,面試我有。

每一個專欄都是大家非常關心,和非常有價值的話題,如果我的文章對你有所幫助,還請幫忙點贊、好評、轉發一下,你的支援會激勵我輸出更高品質的文章,非常感謝!

聊聊TCP/IP網絡模型