1 TCP的三次握手與必要性
(1)三次握手圖

(2)必要性:TCP通過三次握手建立可靠的(確保收到)的全雙工通信。
1)第一次握手和第二次握手(ACK部分)建立了從客戶端到服務器傳送數據的可靠連接;
2)第二次握手(SYN部分)和第三次握手建立了從服務器到客戶端傳送數據的可靠連接;
4)由於我們期望建立全雙工連接,所以兩個方向的通信都是需要的,於是合並了服務器發送的ACK和SYN。
5)第三次握手的必要性:防止已失效的請求報文段突然又傳送到了服務端而造成連接的誤判。假如客戶端發出連接請求A,由於網絡原因,服務端並沒有收到A,於是客戶端又發送了連接請求B,並建立了連接,完成通信,斷開連接。這時候,服務端突然又收到了A,於是看作是一次新的連接請求,進行第二次握手,由於不存在第三次握手,所以這時已經建立了TCP連接。但實際上客戶端並沒有發起連接,所以不會傳遞數據,那么這條連接就會變成一條死連接。
2 TCP的四次斷開與必要性
(1)四次斷開圖

(2)必要性:為保證單向通信的可行性,所以多一次握手。
1)主動斷開方發送FIN時,被動斷開方要回復ACK,意思是“我收到你的FIN了”;
2)主動斷開方發送FIN並不意味着立即關閉TCP連接,而是告訴對方自己沒有更多的數據要發送了,只有當對方發完自己的數據再發送FIN后,才意味着關閉TCP連接;
3)被動斷開方收到FIN並回復ACK后,此時TCP處於“半關閉”狀態,為保證被動斷開方可以繼續發送數據,所以第二個FIN並不會伴隨ACK發送,所以比連接時多一個報文段。
