社区
C语言
帖子详情
TCP是否会自动重发?
james_hw
2011-03-13 04:47:06
现在有一个现象,客户端发送了一条消息,服务器端有较小概率收到2条一模一样的消息。
当时的链路情况不是很稳定,不知道有没有朋友遇到同样的问题?
怀疑会不会在链路不稳定时,底层socket会自动重发
...全文
588
10
打赏
收藏
TCP是否会自动重发?
现在有一个现象,客户端发送了一条消息,服务器端有较小概率收到2条一模一样的消息。 当时的链路情况不是很稳定,不知道有没有朋友遇到同样的问题? 怀疑会不会在链路不稳定时,底层socket会自动重发
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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 协议中的自适应的超时重传
在使用
tcp
长连接时,
是否
还需要再引入
重发
机制?
TCP
长连接通常无需额外
重发
机制,因其内建可靠传输。在物联网设备场景中,
重发
应在客户端进行,服务端仅负责稳定通信。服务端重试设计应谨慎,避免过度操作。
TCP
重发
和RST探究
本文探讨了
TCP
协议中的
重发
机制,包括超时
重发
与快速
重发
策略。当
TCP
片段未收到ACK时,发送方
会
依据RTT计算RTO进行
重发
。若多次
重发
失败,可能
会
发送RST终止连接。RST包的发送场景包括建立连接时的错误、不存在的连接分节及取消已建立的连接。同时提到了RST攻击,攻击者通过伪造源端口和序列号中断
TCP
连接。了解这些机制对于网络通信的理解至关重要。
在使用
tcp
长连接时,
是否
还需要再引入
重发
机制?_
tcp
长连接还要重试机制吗
本文介绍了
TCP
长连接的概念,强调了
TCP
内置的重传机制确保数据可靠性。指出在
TCP
长连接中,
重发
机制应在客户端引入,且在极端环境下不建议在服务端自行设计重试。同时,文章提到了一份针对嵌入式和物联网开发的学习资料,提供全面的学习资源。
确认应答机制与超时
重发
机制【
TCP
原理(笔记一)】
文章详细阐述了
TCP
通过序列号和确认应答实现可靠数据传输的过程,包括数据包丢失和确认应答丢失的情况。当发送方未收到确认应答时,
会
依据
重发
超时机制进行数据重传。
重发
超时的计算基于往返时间(RTT)和偏差,确保在网络环境中提供高效且稳定的通信。如果
重发
多次仍无响应,则可能判断为网络异常并关闭连接。
解决eCos系统的lwIP存在的bug,该bug导致
TCP
重发
失效,最终导致
TCP
拒绝服务
本文探讨了在eCos+lwIP环境下
TCP
服务器遇到网络丢包时出现的问题及解决方案。在网络繁忙时,设备可能出现
TCP
拒绝服务现象,由于定时器资源不足,导致无法正确处理超时
重发
。文中提供了两种解决策略并深入分析了根本原因。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章