首先需要知道,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不能在这个时候也请求断开连接,也就是中间两次不能合并。