【[TCP/ip】-TCP三次握手四次揮手

傳輸控制協議TCP

TCP的特點:
(1)TCP是面向連接的協議。(使用前先建立連接,結束釋放)
(2)每條TCP連接只能有兩個端點,點對點的。(進程之間一對一)。
(3)TCP提供可靠傳輸。(傳輸的數據,無差錯、不丟失、不重複、並且按序到達)
(4)TCP提供全雙工通信。(允許通信雙方任意時候都可發送數據)
(5)面向字節流的。(TCP把應用進程交下來的數據塊看成僅僅是一串的無結構字節流)

TCP套接字是一種流套接字,把連接作爲最基本的抽象,套接字是通信端點的抽象,通過套接字抽象的建立連接。
首先了解下TCP頭部中的6位標識位包含如下幾項:
URG:表示緊急指針是否有效
ACK:表示確認號是否有效。稱攜帶ACK標誌的TCP報文段爲確認報文段。
PSH:提示接收端應用進程應該立即從TCP接收緩衝區中讀取數據。
RST:表示要求對方重新建立連接。復位報文段。
SYN:表示請求建立一個連接。同步報文段。
FIN:表示通知對方本端要關閉連接了,結束報文段

TCP連接的建立和釋放

TCP連接建立-TCP三次握手

  建立連接之前首先一定要有一個準備接受連接的服務器進程B。服務器進程B先創建傳輸控制塊TCB,準備接受客戶進程的連接請求。通常服務器進程B需要調用socket,bind,listen這三個函數後使得服務器進程B處於LISTEN(監聽)狀態,等待客戶連接請求。如有請求,則做出如下響應:

  • TCP客戶進程A也首先創建TCB,通過調用connect發起連接主動打開,向B發出請求報文段,這時首部中的SYN=1,告訴服務器待連接中發送數據的序列號,seq=x。SYN報文段不能攜帶數據,但會消耗一個序列號。
  • B接收到A的連接請求報文段後,如果同意連接,向A發送確認。在確認報文段中SYN=1,ACK=1,也爲自己選擇一個初始序號seq=y。
  • TCP客戶進程收到B的確認後,再次向B給去確認。ACK=1
    這裏寫圖片描述
    在建立連接的同時,雙方協商了一些信息,例如雙方發送序號的初始值、最大段尺寸。

TCP的連接釋放-四次揮手

  • A的應用進程首先向其TCP發出連接釋放報文段,並停止再發送數據,主動關閉TCP連接。該端的TCP發送一個一個FIN分節(FIN=1),和連接一樣發送自己的序列號
  • B服務器進程接收這個FIN報文段,立即向A進程發送確認報文段,這時B進入CLOSE-WAIT狀態。這時候從A到B這個方向的連接就釋放了,這時TCP連接處於半關閉狀態,A已經沒有數據要發送,但B如果向A發送數據,A仍人要接收
  • A收到來自B進程的確認後,進入FIN-WAIT2狀態,等待B發出的連接釋放報文段。
  • 若沒有數據要向A發送,B就向A發送連接釋放報文段必須FIN=1。這時B進入LAST-ACK,等待A的最終確認。
  • A在收到B的連接釋放報文段後,必須對此發出確認。ACK置1,發出確認報文段,然後自己進入TIME-WAIT狀態。注意,現在TCP連接還沒有釋放掉。必須經過時間等待計時器設置的時間2MSL後,A才進入CLOSE狀態。TCP連接才真正釋放。

這裏寫圖片描述

這裏提出兩個問題:

  1. TCP連接中爲什麼還要再發送一次確認呢?(爲什麼不是兩次握手)
  2. TIME-WAIT是什麼?主動斷開鏈接的一方爲什麼要進入TIME_WAIT狀態 ?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章