2020年6月29日
TCP的三次握手和四次挥手
三次握手:

其中第三次握手是可以携带数据的,前两次握手是不可以携带数据的
为什么是三次握手?



1.防止历史连接初始化新的连接。(客户端收到历史连接的回复,直接返回rst)
2.双方确认序列号,如果是两次连接的话,服务端无法确认自己的序列号客户端是否接受。
四次挥手

假设没有TIME_WAIT或者时间不够长


1.FIN是两边分别发送的,因为服务端收到FIN,可能还有数据要发送,所以先发一个ACK,数据发完之后,再发一个FIN
2.TIME_WAIT 是 2MSL,默认一个MSL是30秒,是一个报文的最大生命时间。
2.1旧的数据包可能被新建的连接接收到。而旧的数据包周期不会超过2MSL,所以等待旧的数据包失效,在彻底关闭连接。
2.2如果客户端的ACK没有被服务端接受,服务端在发一个FIN过来,直到客户端收到,最长不会超过2MSL。如果ACK没有被服务端确认,客户端直接关闭了,建立新的连接,会被服务端拒绝。