socket传送文件,每个tcp数据包都会重发

痴心笨笨 2012-09-20 03:26:32
如题,服务端、客户端我都是通过socket实现的,通过抓包软件查看,每个tcp数据包都是要重发一次,这是什么问题呢?
查看资料得知,可能是tcp中的重传计时器的问题,该如何解决呢?
附图,数据包情况
...全文
1239 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
_暮落_ 2012-09-27
  • 打赏
  • 举报
回复
缓冲区不够大?
痴心笨笨 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
自己程序逻辑的问题,怪到TCP的头上了。
[/Quote]
这位大神,可能啥逻辑错误呢
痴心笨笨 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]
还有,lz那是什么抓包软甲,瞧着挺不错的。
[/Quote]
国产精品,科来软件
wjb_yd 2012-09-24
  • 打赏
  • 举报
回复
还有,lz那是什么抓包软甲,瞧着挺不错的。
wjb_yd 2012-09-24
  • 打赏
  • 举报
回复
是不是目标端回发的太狠了,百兆网卡,12.5M/S,看一下你的对端每秒发来的数据量是不是远远大于12.5M了,是的话必然会出现重传。 再者就是把你的接受缓冲区弄大一些。
Joseph-Growth 2012-09-21
  • 打赏
  • 举报
回复
你的抓包工具确实挺不错的。
我看你是在本机上自己发自己收。我分析的是这样的:当接收缓冲区阻塞的时候,你发送的数据包发送给接收端,此时,接收端不能接收,也就是不能返回ACK,它也不能返回RST,所以就会不处理,这时候超时时间到,发送端以为接收端没收到,就又发了一个SYN,这样就重发了。

我建议的是,提高接收线程的优先级,或者说降低发送线程的优先级。让接收端缓冲队列时刻保持能接收的状态。
痴心笨笨 2012-09-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
链路太堵了,tcp通信的ACK数据包未及时收到原因,降低I\O,可以解决这个问题。
[/Quote]

如何降低I/O呢?
geziliu 2012-09-21
  • 打赏
  • 举报
回复
应该是代码问题,TCP是流的。
UDX协议 2012-09-21
  • 打赏
  • 举报
回复
自己程序逻辑的问题,怪到TCP的头上了。
Gloveing 2012-09-20
  • 打赏
  • 举报
回复
应该是你发送的速率太快了,网络环境传输速率跟不上
Joseph-Growth 2012-09-20
  • 打赏
  • 举报
回复
链路太堵了,tcp通信的ACK数据包未及时收到原因,降低I\O,可以解决这个问题。
痴心笨笨 2012-09-20
  • 打赏
  • 举报
回复
这个tcp数据包的发送不是直接控制的,我是通过
if(send(m_Socket, sBuffer, nLen, 0) == nLen)

直接发送的一个819200大小的sBuffer实现的...
痴心笨笨 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 4 楼 的回复:
引用 3 楼 的回复:
1.证明你网络很卡
2.你代码有问题

谢谢啊,应该是哪个地方处理的有问题啊~~

网络应该没问题吧,我现在是局域网对传呢?
我最纳闷的就是那个两个重传的数据包之间时间间隔仅仅是20微秒上下,咋会这么短时间就重传呢?

我好奇的是20微秒上下你就发送1000左右,那你1秒钟得发多少东西?
要是你发的包一出门堵塞了,就被丢弃了,……
[/Quote]

韩信将兵多多益善啊,哈哈

“要是你发的包一出门堵塞了,就被丢弃了”倒是也有这种可能,研究中
guolaikk 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 3 楼 的回复:
1.证明你网络很卡
2.你代码有问题

谢谢啊,应该是哪个地方处理的有问题啊~~

网络应该没问题吧,我现在是局域网对传呢?
我最纳闷的就是那个两个重传的数据包之间时间间隔仅仅是20微秒上下,咋会这么短时间就重传呢?
[/Quote]
我好奇的是20微秒上下你就发送1000左右,那你1秒钟得发多少东西?
要是你发的包一出门堵塞了,就被丢弃了,会不会这么短时间就重传呢?
痴心笨笨 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
1.证明你网络很卡
2.你代码有问题
[/Quote]
谢谢啊,应该是哪个地方处理的有问题啊~~

网络应该没问题吧,我现在是局域网对传呢?
我最纳闷的就是那个两个重传的数据包之间时间间隔仅仅是20微秒上下,咋会这么短时间就重传呢?
看不见的裂痕 2012-09-20
  • 打赏
  • 举报
回复
1.证明你网络很卡
2.你代码有问题

痴心笨笨 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
对方最终收到的数据重复吗?
[/Quote]
没有重复数据,客户端接收到得数据完全正确~~
guolaikk 2012-09-20
  • 打赏
  • 举报
回复
对方最终收到的数据重复吗?

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧