1.为什么要三次握手?
按理说为了通信,只要两次就够了,即一来一回,就能表示能接受和发送信息,通信正常。为什么客户机还要再确认一次?
为了防止无效链接请求的干扰。
因为TCP是可靠协议,假设服务机了一次请求连接,由于网络问题没有送达服务器,发送第二次连接请求送到了服务器,并且服务器发送了ack。此时第一次发送的请求连接送达服务机,若没有第三次确认,服务机便会将此连接作为新的连接请求。若有三次握手,则服务器会不理此无效请求连接报文,也不建立TCP连接了。
**
2.为什么要四次挥手
挥手是为了结束TCP连接。前三次可以理解是为了让数据完整的发送完,第四次挥手又是为了什么呢?
同样的道理,由于TCP是可靠链接,假使没有第四次挥手,服务器在发送完FIN报文后即关闭连接,那么在第二和第三挥手之间的数据就没有了保障,数据中途丢失也无法重新发送。所以需要第四次挥手。
那为什么客户机在发送ACK报文之后还要等待2MSL呢?
同理,也是为了保障通信的可靠。假使最后一次由客户端发送的确认报文丢失,那么在接下来的2MSL里,服务器没有接受到ACK就会重复发送FIN,只要在2MSL里客户机重复收到FIN报文,则可以重新发送ACK报文,保证通信的顺畅。
本段引用自知乎
tcp是全双工通信,服务端和客服端都能发送和接收数据。
tcp在断开连接时,需要服务端和客服端都确定对方将不再发送数据。
第1次挥手
由客户端向服务端发起,服务端收到信息后就能确定客户端已经停止发送数据。
第2次挥手
由服务端向客户端发起,客户端收到消息后就能确定服务端已经知道客户端不会再发送数据。
第3次握手
由服务端向客户端发起,客户端收到消息后就能确定服务端已经停止发送数据。
第4次挥手
由客户端向服务端发起,服务端收到信息后就能确定客户端已经知道服务端不会再发送数据。
为什么不是3次挥手?
在客服端第1次挥手时,服务端可能还在发送数据。所以第2次挥手和第3次挥手不能合并。