首先需要知道,TCP是雙向連接,即通信兩端能互相發送數據,而單向連接是隻能一端發一端收。
其次,每個TCP報文都需要一個應答消息,確認報文收到了。
所以,需要三次握手,原因如下:
A -----> B :
請求建立連接(第一次握手,SYN=1)。
B----->A :
應答上面的報文,這個時候,只是建立了A到B的單向連接,也就是隻能A發送,B接收(第二次握手,ACK=1)。
B----->A :
請求建立連接,這次建立連接的方向和第一次是相反的(第三次握手,SYN=1)。
A------>B:
應答上面的報文,到這裏TCP的雙向連接才建立完成(第四次握手,ACK=1)。
但是,第二次和第三次都是B向A發送報文,有必要分兩次發送嗎?於是將中間兩次合併到一起(SYN=1,ACK=1),就成了現在的三次握手。
四次揮手是一樣的,但是A請求斷開連接的時候,B可能還有數據要發送,所以B不能在這個時候也請求斷開連接,也就是中間兩次不能合併。