发送大量tcp包,丢包问题

satanaelzhou 2010-12-03 09:46:20
我现在有个程序,在手动操作一个一个tcp包发送的时候,tcp相连接的两端正常收发,没有问题。
但是在,写脚本,大量不间断的发送tcp包的时候,存在那个显示发送了,这边没收到的情况,两个进程
都是挂在一个ip上的不同的端口上。
os:LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
两个程序都是通过 select 复用端口来完成收发的。

麻烦大家说说可能会存在的问题。常见的解决方法。谢谢~~~
...全文
496 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
satanaelzhou 2010-12-08
  • 打赏
  • 举报
回复
问题找见了,正如大家所说,是由于应用程序没有处理。tcp一个包体里带了两份应用层的数据,我只处理了前半部分,剩余的没有去read,这个应该是属于tcp的粘包问题吧。
谢谢大家的意见。结贴~~~
快乐田伯光 2010-12-04
  • 打赏
  • 举报
回复
select返回后要循环read
[Quote=引用 8 楼 satanaelzhou 的回复:]
引用 7 楼 justkk 的回复:

没来得及处理,是说数据仍然停留在缓冲区中

噢 您的意思是没处理的那个包停留在缓冲区,select跳过这个包,处理下个tcp包去了。是这样的逻辑么?
[/Quote]
快乐田伯光 2010-12-04
  • 打赏
  • 举报
回复
不会丢包,发收都要确认返回码。
satanaelzhou 2010-12-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 justkk 的回复:]

没来得及处理,是说数据仍然停留在缓冲区中
[/Quote]
噢 您的意思是没处理的那个包停留在缓冲区,select跳过这个包,处理下个tcp包去了。是这样的逻辑么?
justkk 2010-12-03
  • 打赏
  • 举报
回复
没来得及处理,是说数据仍然停留在缓冲区中
satanaelzhou 2010-12-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 justkk 的回复:]

TCP不会丢包的..
缓冲区满了,发送方会暂停发送的

“存在那个显示发送了,这边没收到的情况” --会不会是发送方已经把数据写入缓冲区,而接收方还没有来得及处理..
[/Quote]

恩,我用select复用的端口,如何写到了缓冲区,至少select应该会触发的吧。只要select触发我就有日志输出。但是现在没有日志输出,所以我觉得select是没有触发的应该。您说的,接收方没有来得及处理,假设确实没来得及处理,会出现这个包就彻底从缓冲区删除,以及应用程序也没处理,然后处理下个包了是这样么。
justkk 2010-12-03
  • 打赏
  • 举报
回复
TCP不会丢包的..
缓冲区满了,发送方会暂停发送的

“存在那个显示发送了,这边没收到的情况” --会不会是发送方已经把数据写入缓冲区,而接收方还没有来得及处理..
satanaelzhou 2010-12-03
  • 打赏
  • 举报
回复
有个疑问,当前的socket它的接收buffer是一定的,如果发送端一直发送,不停止。是不是只有当应用程序取走了buffer中的数据,才能腾出空间。这样的话,就存在了由于应用程序在某个地方阻塞,但是socket上还在不停的接收数据,到一定程度,超出buffer,就会造成丢包了。请问是这样么?有这个可能性么?
手机写程序 2010-12-03
  • 打赏
  • 举报
回复
TCP不会到应用层丢包的,应该是你接收的问题,或者是接收显示的问题.
satanaelzhou 2010-12-03
  • 打赏
  • 举报
回复
超出接收的缓冲区,程序不dump的么? 就直接将此包扔掉? 是么?
Wind_Runner 2010-12-03
  • 打赏
  • 举报
回复
可能超出接受缓冲区了

freefei 2010-12-03
  • 打赏
  • 举报
回复
先用wireshark等抓包工具定位一下,问题发生在哪。
justkk 2010-12-03
  • 打赏
  • 举报
回复
为什么老是要跳过呢??
没人说跳过
排队买票,没轮到你..

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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