tcp 3次握手 4次挥手

来源:互联网 发布:ios网易新闻app源码 编辑:程序博客网 时间:2024/05/06 13:36

三次握手

客户端状态close 服务器状态listen

客户端发送syn确认序列号,然后状态变成syn-send状态  服务器接收到确认序列号,发送syn+ack报文,然后状态变成syn-rcvd

客户端收到syn+ack报文,然后发送ack报文,双方进入establish状态。


四次挥手

客户端发送fin报文,进入fin-wait1状态,等待服务器发来ack确认,服务器接收fin报文,发送ack确认,进入close-wait。

客户端接收ack报文,进入fin-wait2状态,等待服务器发送第二个fin。

服务端发送fin报文,进入last-ack状态,等待客户端发来ack确认,客户端接收fin报文,发送ack确认,进入time-wait状态。

如果客户端超过2msl时间,客户端会进入close状态,如果服务器收到ack确认,也会进入close状态。


关于2msl与time-wait状态的理解。

为什么客户端最后收到fin报文后,不直接进入close状态,而是进入time-wait状态呢,

如果服务器没有收到客户端的ack,那么服务端会重新发送fin,此时如果已经close了,服务器就永远也不会收到ack,这条链路再也不会关闭了。

那么在time-wait状态,等待2msl时间,客户端可以重新接收fin,然后发送ack确认并且重新计时。

0 0
原创粉丝点击