理解TCP三次握手/四次断开的必要性
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发送,所以比连接时多一个报文段。