![确定 TCP 连接断开的原因](https://linux22.com/image/1515089/%E7%A1%AE%E5%AE%9A%20TCP%20%E8%BF%9E%E6%8E%A5%E6%96%AD%E5%BC%80%E7%9A%84%E5%8E%9F%E5%9B%A0.png)
因此,有一个服务正在监听某个端口,并且有一个客户端正在连接该端口(TCP 协议)。客户端和服务器会不时尝试“ping”对方。例如,这是客户端 ping 服务器:
00:34:04.343401 IP 192.168.1.10.57927 > myserver.com.mmcc: Flags [P.], seq 86470:86624, ack 6652727, win 4096, options [nop,nop,TS val 585141111 ecr 389969418], length 154
00:34:04.344196 IP myserver.com.mmcc > 192.168.1.10.57927: Flags [.], ack 86624, win 65535, options [nop,nop,TS val 389970019 ecr 585141111], length 0
00:34:04.344419 IP myserver.com.mmcc > 192.168.1.10.57927: Flags [P.], seq 6652727:6652833, ack 86624, win 65535, options [nop,nop,TS val 389970019 ecr 585141111], length 106
00:34:04.344467 IP 192.168.1.10.57927 > myserver.com.mmcc: Flags [.], ack 6652833, win 4092, options [nop,nop,TS val 585141112 ecr 389970019], length 0
但有一个特殊情况,一家移动/GSM 互联网提供商最近更改了设置,现在同样的连接在空闲不到 15 秒后就悄无声息地中断了。如果您每隔一秒继续来回发送数据包,积极使用该服务,那就没问题了。再过一会儿什么也不做,结果就是双方都试图与对方交谈,却得不到回复,当然,这种情况发生在随机时间点,但都在最后一次活动发生后的一分钟内:
客户端(第一行重复,只有时间戳不同,持续约 45 秒):
00:44:57.224638 IP macpro.office.58180 > myserver.com.mmcc: Flags [P.], seq 99638:99792, ack 6984799, win 4096, options [nop,nop,TS val 585785321 ecr 389975387], length 154
00:45:03.319226 IP macpro.office.58180 > myserver.com.mmcc: Flags [R.], seq 99792, ack 6984799, win 4096, length 0
服务器端(完全一样然后静音):
23:59:37.369320 IP 192.168.1.3.fmpro-internal > my.gprs.network.com.27581: P 59596370:59596460(90) ack 21549606 win 65535 <nop,nop,timestamp 389985343 586356990>
23:59:37.369415 IP 192.168.1.3.fmpro-internal > my.gprs.network.com.27581: F 90:90(0) ack 1 win 65535 <nop,nop,timestamp 389985343 586356990>
23:59:38.288366 IP 192.168.1.3.fmpro-internal > my.gprs.network.com.27581: FP 0:90(90) ack 1 win 65535 <nop,nop,timestamp 389985352 586356990>
23:59:40.288991 IP 192.168.1.3.fmpro-internal > my.gprs.network.com.27581: FP 0:90(90) ack 1 win 65535 <nop,nop,timestamp 389985372 586356990>
23:59:44.290952 IP 192.168.1.3.fmpro-internal > my.gprs.network.com.27581: FP 0:90(90) ack 1 win 65535 <nop,nop,timestamp 389985412 586356990>
这种情况发生在位于不同地点的不同服务器上,并且使用保持开放连接的不同服务以及不同的客户端机器进行测试时也会出现。它们之间唯一的共同点是这种移动互联网接入可能仅由客户端使用。只有使用它时才会出现问题。
所以问题是为什么会发生这样的事情以及我能做些什么来了解到底发生了什么。