天天看點

TCP通信相關知識點

最好的學習方式就是學以緻用。最近在B站學習計算機網絡,發現了一位将計算機網絡講解的非常詳細和通俗的老師。我在下面會把連結貼出來(良心推薦)。學習過程中有了輸入,但是缺少了輸出。為了回顧最近學習的知識點,特地将内容整理出來,供日後學習。

計算機網絡課程

TCP是哪一層的協定

國際标準将計算機網絡體系架構分為7層:

  • 應用層
  • List item
  • 表示層
  • 會話層
  • 傳輸層
  • 網絡層
  • 資料鍊路層
  • 實體層

    實際過程中,在教學和應用方面一般将體系架構分為5層:

  • 應用層
  • 傳輸層
  • 網絡層
  • 資料鍊路層
  • 實體層
    TCP通信相關知識點

這也是視訊中主要講解的體系結構。

其中TCP協定位于傳輸層。

TCP介紹

TCP(Transmission Control Protocol)是面向連接配接的,可靠的以及基于位元組流的傳輸層控制協定。

上面的介紹,基本概括了TCP的特性。依次介紹上面的幾種概念

  • 面向連接配接的

    很多聽過TCP概念的同學,一定都知道TCP“三次握手”的說法。三次握手就是為了讓用戶端與服務端進行端到端的連接配接,與UDP傳輸協定有很大差別。

  • 可靠的

    UDP傳輸協定,存在的最大問題就是資料是否傳輸到對方,我們完全不知道,我們隻關注發送資料,而不能確定資料一定會發送到服務端。而TCP就能夠確定資料一定要發送到服務端,是以資料傳輸是可靠的。

  • 位元組流

    一個位元組等于8個比特,這個概念我們都知道。TCP發送的資料都是以位元組為最小機關發送。

    TCP通信相關知識點

三次握手的具體步驟

“三次握手”主動方一般是用戶端,請求與服務端進行通信。而服務端監聽端口,看是否有連接配接請求。

TCP通信相關知識點

用戶端會首先發送一個資料封包段,SYN屬于同步位,且等于1時,該封包段不攜帶資料。

服務端會發送一個确認封包段,同時SY N=1,ACK=1表示是确認封包段。

接着用戶端也會發送一個确認封包段,表示接受到服務端發送的封包段。

TCP通信相關知識點

不知道大家會不會對進行三次握手産生疑問,将握手次數變多這個原因我們知道,就是在于浪費網絡資源和時間,3次握手已經比較穩定了。

那如果采取“兩封包握手”,可能會發生什麼情況呢?

TCP通信相關知識點

如上圖所示,當用戶端第一次發送的TCP連接配接請求,在網絡中發送逾時了。是以,TCP又發送了一次TCP連接配接請求,且服務端也準确接收到了,發送了确認封包段,且進入連接配接已建立狀态。當用戶端接收到服務端的确認封包段時,也進入進入連接配接已建立狀态。并且在資料傳輸完畢後,關閉連接配接。此時,網絡中用戶端第一次發送的TCP請求連接配接,經過堵塞終于到了服務端,此時服務端接收到了請求,将确認封包段發送出去,并進入進入連接配接已建立狀态。但是由于用戶端已經關閉,是以對這個封包段不予理會,仍處于關閉狀态。此時,我們就會發現服務端一直處于連接配接狀态,但是卻沒有任何資料會發送過來,那麼就會導緻資源浪費。

TCP四次揮手

TCP通過四次揮手,來釋放連接配接。

具體的過程其實和TCP三向交握階段經曆的事情差不多,隻是标志位不同。這裡主要說明為什麼斷開連接配接需要4次?

先說結論:為了防止TCP傳輸确認資料封包時的丢失情況,導緻伺服器一直請求逾時重發(用戶端已經關閉)(浪費網絡資源)

具體過程如下圖所示:

TCP通信相關知識點

這個過程設計用戶端發送了FIN=1的資料封包段,表示自己沒有資料可以發送了,想關閉連接配接。此時服務端接收到此封包段,便發送一個确認封包段。但是注意,此時服務端也許還有資料給用戶端發送,當服務端也沒有資料發送後,也就可以發送FIN=1的資料封包段,表示自己也想關閉連接配接了。此時,用戶端接收到封包後,發送确認封包,如果此時就關閉連接配接。那麼當用戶端發送的确認封包在網絡中丢失後,此時服務端接收不到确認封包,就會一直逾時重發,進而浪費網絡資源。

是以當用戶端發送确認封包後,不能立即關閉,而是會有個等待時間。

繼續閱讀