面向連線的協議端對端的協議 TCP 報文的關鍵字:
SYN:建立新的連線請求 ACK:確認請求序號(必須是1,ack才有效) seq:傳送資料的位元組流的序號標記 fin:釋放一個連線,bu'f
全雙工:兩個方向都可以傳輸 單工:只有一個單方向可以傳輸 半雙工:傳輸方向不固定,但每次只能有一個方向傳輸狀態處於啟用狀態
需要注意的是: (A)不要將確認序號Ack與標誌位中的ACK搞混了。 (B)確認方Ack=發起方Req+1,兩端配對。
三次握手:
![面試必問之 TCP/IP協議的三次握手 四次揮手](https://i.iter01.com/images/f557d2ca564191e8d83f0ee7d605b39a116757715d1cf6e3e99951058b1b29b8.png)
這一過程由客戶端執行connect來觸發,整個流程如上圖所示: TCP三次握手 (1)第一次握手:Client將標誌位SYN置為1,隨機產生一個值seq=J,並將該資料包傳送給Server,Client進入SYN_SENT狀態,等待Server確認。 (2)第二次握手:Server收到資料包後由標誌位SYN=1知道Client請求建立連線,Server將標誌位SYN和ACK都置為1,ack=J+1,隨機產生一個值seq=K,並將該資料包傳送給Client以確認連線請求,Server進入SYN_RCVD狀態。 (3)第三次握手:Client收到確認後,檢查ack是否為J+1,ACK是否為1,如果正確則將標誌位ACK置為1,ack=K+1,並將該資料包傳送給Server,Server檢查ack是否為K+1,ACK是否為1,如果正確則連線建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間可以開始傳輸資料了。
四次揮手: 三次握手耳熟能詳,所謂四次揮手(Four-Way Wavehand)即終止TCP連線,就是指斷開一個TCP連線時,需要客戶端和服務端總共傳送4個包以確認連線的斷開。在socket程式設計中,這一過程由客戶端或服務端任一方執行close來觸發,整個流程如下圖所示:
![面試必問之 TCP/IP協議的三次握手 四次揮手](https://i.iter01.com/images/e3e749841318f3d27152060706c98e902bcf3060e7231d11de913c08d01915d1.png)