社区
网络通信/分布式开发
帖子详情
TCP丢包和异常断开。
mastersky
2010-05-26 12:06:32
在TCP通讯过程中,有时在服务器发送数据给某个客户端时,重试3次,依然没有回复,则该连接被异常断开,但是不久之后还能收到该客户端的数据,然后windows会发送RST中断该连接。
这种情况偶尔会出现。
分析原因,可能是1.数据未能发出去,2.客户端未收到数据(公网网关丢失)。
请问如何得知数据已从通过局域网网关发出去了呢?
可以通过监控软件监控本机,发现数据重传和收到客户端数据的所有情况。如何监控该数据包从本机到局域网网关到公网网关的情况呢?
...全文
813
23
打赏
收藏
TCP丢包和异常断开。
在TCP通讯过程中,有时在服务器发送数据给某个客户端时,重试3次,依然没有回复,则该连接被异常断开,但是不久之后还能收到该客户端的数据,然后windows会发送RST中断该连接。 这种情况偶尔会出现。 分析原因,可能是1.数据未能发出去,2.客户端未收到数据(公网网关丢失)。 请问如何得知数据已从通过局域网网关发出去了呢? 可以通过监控软件监控本机,发现数据重传和收到客户端数据的所有情况。如何监控该数据包从本机到局域网网关到公网网关的情况呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Mit1208
2010-06-25
打赏
举报
回复
太强大了.只有留个脚丫
qiujunwang198577
2010-06-25
打赏
举报
回复
学习,路过,顶下
麦客来了
2010-06-25
打赏
举报
回复
MARK
tataishan
2010-06-25
打赏
举报
回复
接分的。。。
李_军
2010-06-19
打赏
举报
回复
自己采用底层socket写试试
bigbiga
2010-06-11
打赏
举报
回复
Indy是阻塞式的,windows收到数据,但是达到indy想要的结果,所以indy不会有返回的。
windows一向提昌非阻塞式,但需要线程和自己组合数据,而UNIX是阻塞式,开发简单。
sanguomi
2010-06-05
打赏
举报
回复
在TCP通讯过程中,有时在服务器发送数据给某个客户端时,重试3次,依然没有回复,则该连接被异常断开,但是不久之后还能收到该客户端的数据,然后windows会发送RST中断该连接。
--------------------------
用GETLASIT看有没有异常,
不喜欢用INDY,绕来绕去的, 不如自己写SOCKET清爽
sanguomi
2010-06-05
打赏
举报
回复
检查下看是不是你粘包了
MinxSoft
2010-06-05
打赏
举报
回复
最怕的是单片机的TCP/IP协议栈没有实现完整...那么,对于上位机来说就是一个噩梦
MinxSoft
2010-06-05
打赏
举报
回复
Socket断开往往只是一个"假象",Indy把Socket都封装了,更加看不到底层了;可以去看看WinSock2那些函数,例如setsockopt,可以设置在执行closesocket后,保留Socket一段时间,直到数据收发完毕.
xiaowei_001
2010-06-05
打赏
举报
回复
jf
回复内容太短了!
SQLDebug_Fan
2010-05-28
打赏
举报
回复
我想知道,都断开连接了,你怎么知道还有数据包发上来?是通过截包实现的吗?
mastersky
2010-05-28
打赏
举报
回复
看来是不会有人答得出来的。散了,来接分吧。
haitao
2010-05-28
打赏
举报
回复
网络环境,路由器-交换机-网线。。。。。。。。
imho888
2010-05-28
打赏
举报
回复
server端断开了,客户端没断开及时,只要你的端口是开着的,windows肯定是收到信息的
iqyely
2010-05-28
打赏
举报
回复
来学习下。
SQLDebug_Fan
2010-05-26
打赏
举报
回复
如果连接异常断开了,就不会再收到数据,另外你的重试3次是间隔多少?
你是不是用的INDY控件?
SQLDebug_Fan
2010-05-26
打赏
举报
回复
检查一下异常断开的原因,有时INDY报异常,但是没有真正断开,线程还在。
mastersky
2010-05-26
打赏
举报
回复
不行啊,客户端是单片机。
java程序员zbin
2010-05-26
打赏
举报
回复
可以试下,在原客户端建个SERVER端
加载更多回复(2)
tcp
丢包
的排查
服务端在高并发的情况, 主动关闭连接, 会出现大量的socket处于timewait状态,timewait数目超过
tcp
_max_tw_buckets(默认是65536)值后,新来的连接直接进入close状态。半连接队列中存放等待完成3次握手的连接,这些连接的状态为Syn_RECV ,该队列长度为max(64,/proc/sys/net/ipv4/
tcp
_max_syn_backlog)1 - RFC3704定义的严格模式:对每个收到的数据包,查询反向路由,如果数据包入口和反向路由出口不一致,则不通过。
实验模拟
TCP
连接的各种
异常
情况(三次握手
丢包
,两端
异常
)
无
网络层
tcp
丢包
排查
确保服务端已经接收到了由客户端发送过去的 ACK 报文,如果没有收到ACK报文的话,服务端会再起发送一个 FIN 报文给客户端,因为 TIME_WAIT 的时间至少是一个报文的来回时间,一般会使用及时,时间到了客户端就进入 CLOSE 状态。确保服务端已经接收到了由客户端发送过去的 ACK 报文,如果没有收到ACK报文的话,服务端会再起发送一个 FIN 报文给客户端,因为 TIME_WAIT 的时间至少是一个报文的来回时间,一般会使用及时,时间到了客户端就进入 CLOSE 状态。
TCP
的连接和
断开
详解
IP 层是「不可靠」的,它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。如果需要保障网络数据包的可靠性,那么就需要由上层(传输层)的
TCP
协议来负责。因为
TCP
是一个工作在传输层的可靠数据传输的服务,它能确保接收端接收的网络包是。
协议-
TCP
协议-基础概念04-可能发生
丢包
的位置-linux配置项梳理(
TCP
连接的建立和
断开
、收发包过程)
tcp
协议中收发数据对应过程状态以及linux配置项的对应实现。
网络通信/分布式开发
1,594
社区成员
32,958
社区内容
发帖
与我相关
我的任务
网络通信/分布式开发
Delphi 网络通信/分布式开发
复制链接
扫一扫
分享
社区描述
Delphi 网络通信/分布式开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章