TCP状态转移

这里写图片描述


对于服务器端的状态转移:

1、服务器程序运行,listen监听之后服务器进入LISTEN状态,等待客户端的连接
2、当服务器监听到服务请求(接收到同步报文段),会发送SYN同步报文段和确认报文段,并进入SYN_RCVD状态。
3、当服务器接收到客户端返回的ACK确认报文段,服务器进入ESTABLISHED状态
情况一:
4、当服务器先发起断开连接(执行close)向客户端发送FIN结束报文段,进入FIN_WAIT_1状态。
5、服务器接收到客户端ACK确认报文段进入FIN_WAIT_2状态
6、服务器收到客户端的FIN结束报文段并发送ACK确认报文段进入TIME_WAIT状态
7、2MSL时间之后(2min),进入CLOSED状态。
情况二:
1、客户端发起断开连接(先执行close),服务器接收到客户端的FIN结束报文段,并发送ACK确认报文段,进入CLOSE_WAIT状态
2、服务器处理完任务准备关闭执行close,发送FIN结束报文段,进入LAST_ACK状态
3、接收到客户端的ACK确认报文段进入CLOSED状态


对客户端的状态转移:

1、客户端运行程序,connect之后首先发出SYN同步报文段,进入SYN_SENT状态
2、客户端接收到服务器的SYN和ACK确认报文段,返回ACK确认报文段,进入ESTABLISHED状态
情况一:
3当客户端先发起断开连接(执行close)向服务器发送FIN结束报文段,进入FIN_WAIT_1状态。
4、客户端接收到服务器ACK确认报文段进入FIN_WAIT_2状态
5、客户端收到服务器的FIN结束报文段并发送ACK确认报文段进入TIME_WAIT状态
6、2MSL时间之后(2min),进入CLOSED状态。
情况二:
3、服务器先发起断开连接(先执行close),客户端接收到服务器的FIN结束报文段,并发送ACK确认报文段,进入CLOSE_WAIT状态
4、客户端处理完任务准备关闭执行close,发送FIN结束报文段,进入LAST_ACK状态
5、接收到服务器的ACK确认报文段进入CLOSED状态


为什么会有TIME_WAIT状态?

1、可靠终止TCP 连接
(客户端给服务器的第二次ACK丢失,或服务器给客户端的FIN丢失,客户端因为有TIME_WAIT状态存在,服务器再2MSL时间内内收到确认,就会重新发送FIN,,从而可靠终止连接)
2、保证迟来的TCP报文段有足够的时间被识别并丢弃。
(报文段的最大生存周期就是MSL,有TIME_WAITz状态(2MSL),有足够时间处理收到的报文段并处理,从反面来讲,如果立即释放此端口,这时一个与刚关闭相似的新的连接相连接,这个连接将会收到原来连接的数据,这个数据包就会被新的端口丢弃)

有TIME_WAIT存在导致我服务器不能立即重启,怎么做可以服务器重启快一点或者让服务器不受到TIME_WAIT影响?作用?后果?

让客户端先关闭,客户端会进入TIME_WAIT状态,服务器在接收到客户端的ACK确认后就会直接进入CLOSE状态,端口也会直接被释放。如果先关闭服务器,服务器会进入TIME_WAIT状态,服务器所占用的端口要等2MSL时间之后才会被释放,重启服务器,bind命名一直会失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值