社区
C语言
帖子详情
TCP是否会自动重发?
james_hw
2011-03-13 04:47:06
现在有一个现象,客户端发送了一条消息,服务器端有较小概率收到2条一模一样的消息。
当时的链路情况不是很稳定,不知道有没有朋友遇到同样的问题?
怀疑会不会在链路不稳定时,底层socket会自动重发
...全文
507
10
打赏
收藏
TCP是否会自动重发?
现在有一个现象,客户端发送了一条消息,服务器端有较小概率收到2条一模一样的消息。 当时的链路情况不是很稳定,不知道有没有朋友遇到同样的问题? 怀疑会不会在链路不稳定时,底层socket会自动重发
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yanghehong
2011-03-13
打赏
举报
回复
TCP作为一种可靠传输协议,是有超时自动重传机制没错。
RFC 793:
. If the ACK is not received within a timeout
interval, the data is retransmitted.
不过这个重传对应用程序是透明的,对应用来说,这会收到一个,因为TCP加序号然后做了重复的过滤:
At the receiver, the sequence
numbers are used to correctly order segments that may be received
out of order and to eliminate duplicates.
楼主这个问题,得再自己对自己的发送和接受应用程序做更仔细的调试。基本上和TCP无关。
-
千里孤行
maoxing63570
2011-03-13
打赏
举报
回复
记得,如果因为网络传输超时,TCP协议会对重复得到的包直接丢弃,然后发送确认
arong1234
2011-03-13
打赏
举报
回复
虽然都可能出错,但是TCP底层出错的可能性比你程序出错的可能性要小得多,因此仅仅根据自己日志就去怀疑TCP是没有道理的。
最直观的办法是在发送端和接收端同时用netmon或者其他sniffer抓包,看看到底谁发了重复的报文
[Quote=引用 6 楼 jamesf1982 的回复:]
引用 4 楼 qq120848369 的回复:
再咋样收到两条说明客户端用户自主发送了两次,与协议无关。
通过日志验证的确只send了一次
[/Quote]
arong1234
2011-03-13
打赏
举报
回复
TCP会自动过滤多余的自动重传消息,你服务器收到重复的消息应该和TCP无关,因为TCP确保你收到且只收到一份你发出的消息
[Quote=引用 2 楼 jamesf1982 的回复:]
引用 1 楼 csuxiaowu 的回复:
TCP 协议中的自适应的超时重传
能说明一下这个超时重传机制么?有没有办法防止服务器端收到2条一模一样的消息?
[/Quote]
james_hw
2011-03-13
打赏
举报
回复
[Quote=引用 4 楼 qq120848369 的回复:]
再咋样收到两条说明客户端用户自主发送了两次,与协议无关。
[/Quote]
通过日志验证的确只send了一次
james_hw
2011-03-13
打赏
举报
回复
[Quote=引用 3 楼 freefice 的回复:]
异步通信机制,需要添加流水号与校验码,根据流水号确定是否是重发信息,根据校验码确定是否要重发。
[/Quote]
这是一个办法,不过服务器端为每个客户端分配流水号与校验码则工作量亦不轻松。能否从socket上配置避免其自动重发?
qq120848369
2011-03-13
打赏
举报
回复
再咋样收到两条说明客户端用户自主发送了两次,与协议无关。
庄鱼
2011-03-13
打赏
举报
回复
异步通信机制,需要添加流水号与校验码,根据流水号确定是否是重发信息,根据校验码确定是否要重发。
james_hw
2011-03-13
打赏
举报
回复
[Quote=引用 1 楼 csuxiaowu 的回复:]
TCP 协议中的自适应的超时重传
[/Quote]
能说明一下这个超时重传机制么?有没有办法防止服务器端收到2条一模一样的消息?
Csuxiaowu
2011-03-13
打赏
举报
回复
TCP 协议中的自适应的超时重传
C#与Android进行
Tcp
通讯(心跳包;长连接,
自动
重连,发送失败时
自动
重发
)
c#写
tcp
Listener;Android写
tcp
Client 具有心跳包,长连接,
自动
重连,发送失败
自动
重发
等功能 电脑与Android需要同属一个局域网
tcp
Listener设计成只能与一个
tcp
Client通信(当多个客户端接入时,
会
自动
与前一个接入的客户端断开)
tcp
Client具有重连,长连接,与
tcp
Listener进行心跳包通讯
TCP
是什么意思?.docx
TCP
是什么意思?.docx
c#多线程
tcp
高并发林业监测硬件设备模拟器.zip
c#多线程
tcp
高并发模拟器 可以同时启动几千条发送进程和接收进程 可以模拟硬件发送数据 一、通信协议 1 设备与服务器之间使用
TCP
/IP通信。 2 当设备与服务器之间建立连接后,设备应在60秒内将所有数据发送到服务器。并在数据上传完毕后
自动
断开与服务器的连接。 3 设备向服务器发送上报数据后,服务器
会
按照Remote Control Interface Data Structrue的协议格式给出成功/失败的响应。 4 设备应具备数据
自动
重发
功能。(当设备发送数据到服务器失败时,
会
自动
将失败的数据主动
重发
到服务器) 5 协议中提及的按顺序的12个采集因子,分别是:温度,湿度,地湿,3秒平均风速,3秒平均风向,2分平均风速,2分平均风向,10分平均风速,10分平均风向,日雨量,气压,连续无雨日 6 约定所有数值型的数据传输,除特殊指定(如ASCII字符)外,均以高位在前的方式传输。
TCP
&UDP测试工具.rar
用于
TCP
,UDP发包的调试工具,支持客户端及服务端模式,支持
自动
重发
,字符及十六进制格式,及文件发送
104规约超时和报文丢失
重发
的处理机制
IEC104规约的超时和报文丢失
重发
的处理机制--104规约的超时的理解
C语言
70,022
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章