linux收到rst包,断链不干净
问题描述:1、客户端client运行在windows,服务端svr运行在linux.
2、client与svr正常建立链接1000个;
3、在运行正常后,ctl+c停掉client;
4、在client所在windows上,发现全部断链;在linux查看链接,发现还有部分链接显示是正常的:netstat 显示是ESTABLISHED,而且也的确没触发上层的断链流程;
5、在windows、linux同时抓包,可以发现windows发送的断链包是rst(不是fin);在linux下抓包,那些未断链端口,没有收到rst包;
问题:windows的client异常关闭,所有发送rst包;那么,linux有些rst包没有收到,导致linux没有完全断链;这个现象是正常的吗?有rst包丢弃机制?如果是正常的,怎么规避这个问题?
回复 1# knull
问题:windows的client异常关闭,所有发送rst包;那么,linux有些rst包没有收到,导致linux没有完全断链;这个现象是正常的吗?有rst包丢弃机制?如果是正常的,怎么规避这个问题?
1、这个不正常,linux收到rst包后会断掉连接的
2、但是不能完全依赖这个,因为可能存在client直接掉电没来得及发送rst的情况,可以通过keepalive机制来探测链接是否正常
瀚海书香 发表于 2016-03-01 16:29 static/image/common/back.gif
回复 1# knull
问题:windows的client异常关闭,所有发送rst包;那么,linux有些rst包没有收到,导致li ...
谢谢回复;
我两端抓包,可以看到,client发送rst包了;linux抓包显示没收到rst包;
linux没断链,就是因为没收到rst包 windows发了1000个rst?
linux收到了多少rst? nswcfd 发表于 2016-03-01 17:52 static/image/common/back.gif
windows发了1000个rst?
linux收到了多少rst?
谢谢回复;
这个情况是不一定的;有些时候,有100多个没断,有些时候,有10几个;(这个是通过netstat统计的,没法通过抓包来统计)
netstat查看某个未断链端口,然后到抓包中查看该端口,发现windows是发送rst包了,但是linux是没有收到rst包 看起来是由于报文没有到达linux的原因?
可以在ctrl+c之前,在windows端和linux端同时开启tcpdump/wireshark,pcap-filter使用tcp & (tcp-rst) != 0 专门过滤tcp rst报文。
页:
[1]