linux time_wait 进程,linux – 如何强制关闭TIME_WAIT中的套接字?

/etc/init.d/networking restart

让我详细说明一下.传输控制协议(TCP)被设计为两个端点(程序)之间的双向,有序和可靠的数据传输协议.在这种情况下,术语“可靠”意味着如果数据包在中间丢失,它将重新传输数据包. TCP通过向从对等体接收的单个或一系列分组发送回确认(ACK)分组来保证可靠性.

对于诸如终止请求/响应之类的控制信号,这是相同的. RFC 793定义TIME-WAIT状态如下:

TIME-WAIT – represents waiting for

enough time to pass to be sure

the remote TCP received the acknowledgment of its connection

termination request.

请参阅以下TCP状态图:

TCP是双向通信协议,因此在建立连接时,客户端和服务器之间没有区别.此外,任何一方都可以调用quits,并且两个对等方都需要同意关闭以完全关闭已建立的TCP连接.

让我们调用第一个调用退出作为主动关闭器,另一个调用被动关闭器.当主动关闭器发送FIN时,状态转到FIN-WAIT-1.然后它收到发送的FIN的ACK,状态转到FIN-WAIT-2.一旦它也从被动闭合器接收FIN,主动闭合器将ACK发送到FIN并且状态进入TIME-WAIT.如果被动关闭器没有收到第二个FIN的ACK,它将重新发送FIN数据包.

RFC 793将TIME-OUT设置为最大段寿命的两倍,即2MSL.由于MSL(数据包可以在Internet上漫游的最长时间)设置为2分钟,因此2MSL为4分钟.

由于ACK没有ACK,如果被动发送器没有收到对其FIN的ACK(理论上),则主动关闭器不能做任何事情,只要等待4分钟,如果它正确地遵守TCP / IP协议. .

实际上,丢失的数据包可能很少见,如果全部发生在局域网内或单个机器内,则非常罕见.

要逐字回答问题,如何在TIME_WAIT中强行关闭套接字?,我仍然会坚持原来的答案:

/etc/init.d/networking restart

实际上,我会对它进行编程,以便在WMR提到时使用SO_REUSEADDR选项忽略TIME-WAIT状态. What exactly does SO_REUSEADDR do?

This socket option tells the kernel that even if this port is busy (in the TIME_WAIT state), go ahead and reuse it anyway. If it is busy, but with another state, you will still get an address already in use error. It is useful if your server has been shut down, and then restarted right away while sockets are still active on its port. You should be aware that if any unexpected data comes in, it may confuse your server, but while this is possible, it is not likely.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值