TCP的连接释放

如果TCP是正常连接,那么双方都是Established的状态。

TCP的连接是两个进程之间的连接,连接的两端是两个套接字。套接字 = IP地址 + 端口号

如果说A主机想要终止一个TCP连接,就在TCP连接的首部FIN字段置为1,然后seq = u, TCP有序号和确认序号。B主机最后一个发的确认序号是 u - 1,这时A进入终止等待状态。请注意:TCP规定,即使FIN报文段不携带数据,也要消耗一个序号。

B主机对其进行确认,然后B主机进入CLOSE-WAIT(关闭等待状态)继而A到B的连接就终止了。

但是B还有可能对A发送数据,因为TCP连接是全双工通信的。所以现在就处于半关闭的状态。

A收到B的确认后,就进入FIN-WAIT-2状态,就是终止等待2状态。

如果B没有数据要发送了,其应用进程就通知TCP释放连接,B就进入LAST-ACK状态,等待A的确认。然后A对其确认、

ACK = 1(只有ACK=1 ,确认序号才是有效的),然seq = u +1,因为FIN报文段肯定是要消耗一个序号的,即使没有携带数据。

然后就进入TIME-WAIT状态。此时TCP还没有断开,必须经过时间等待计时器设置的2MSL,A才进入closed状态,MSL是最长报文段寿命,RFC建议是2min。

为什么客户机A在对B的请求关闭报文确认之后,要等到2MSL呢?

有两个原因:

1、为了保证A发送的最后一个ACK报文能够到达B,因为这个ACK报文段可能会丢失,如果B收不到确认报文,B就会超时重传,2MSL的时间能够保证A能接收到这个超时重传的FIN报文, 然后A就会重传确认报文,重启2MSL计时器。如果A不等待这个时间,B很有可能无法正常结束。

2、防止已失效的连接请求报文段,在A发送最后一个ACK报文后,再经过2MSL,就可以使本连接产生的所有报文段都在网络上消失,这样就使得下一个连接中不会出现这种旧的连接请求报文。

通常都是客户端先请求结束连接。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值