(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/61621309冷血之心的博客)
关于什么是三次握手、四次挥手的问题,这里就不做解释了,这里说的是其详细的过程细节。直接看下边这张图:
总共有四种状态:主动建立连接、主动断开连接、被动建立连和被动断开连接
两两组合还是4种组合:
(1)主动建立连接、主动断开连接会经历的状态:
SYNC_SENT----ESTABLISHED---FIN_WAIT_1---FIN_WAIT_2---TIME_WAIT
(2)主动建立连接、被动断开连接会经历的状态:
SYNC_SENT----ESTABLISHED---CLOSE_WAIT---LAST_ACK
(3)被动建立连接、主动断开连接会经历的状态:
LISTEN---SYN_RCVD---ESTABLISHED---FIN_WAIT_1---FIN_WAIT_2---TIME_WAIT
(4)被动建立连接、主动被动断开连接会经历的状态:
LISTEN---SYN_RCVD---ESTABLISHED---CLOSE_WAIT---LAST_ACK
这里需要注意的是状态里有SYNC_SENT而不是SYNC_SEND
TCP协议有一个关键特性就是可靠传输,可靠传输的抽象过程如下:
发送端把待发送数据存入发送缓冲区网络设备发送数据接收端接收数据,同时返回一个确认收到数据的ACK信息发送端收到ACK信息之后确认数据已被对端收到,缓冲区的已确认数据删除即,在缓冲区中待确认的数据等待时长是一个网络的RTT(时延),也就是说必须要等待一个网络传输来回才可能收到ACK信息。反过来考虑,在一个网络的RTT的时间间隔内,发送端发送出去的数据都需要缓冲等待ACK,如果ACK错误则需要重发,保证应用层数据的可靠性。
如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~