udp传输问题,包长超过1472就收不到

coolboylmk 2007-08-14 09:54:06
我用udp做数据传输,在内网中,每次包长度超过1472就收不到数据,接受端收不到任何数据,没有出现分包的情况,因为一个包都过不来.
我测试了几台机器,相同的程序,在某些win2003的机器能收到.如果每个包长在1472以下,传输效率会降低不少,请高手帮忙
...全文
3014 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
FOXHENGXING 2010-08-12
  • 打赏
  • 举报
回复
楼主以为一次性发送越大的数据就越快么?

可事实不是这样的,你的数据长度超过mtu的大小,IP层会对你你的包进行分片的,对于现在的以太网一般的MTU最大就是1500 ,除开IP包头和UDP的包头,最多能承载的数据长度也就是1472 bytes,

打个比方说明一下,假设你有10M的数据,你一次发个1600 bytes的数据,结果我想会更惨,

“原来分包后的数据都没有udp头部,端口号都乱了,所以收不到了. ”

这话有点欠妥,IP不会这么干的,IP只会对IP包头中的域进行修改的,包括分片的相关几个域和校验值,对UDP的数据只会进行分割,它不会改变你的UDP的数据的,你可以抓包看看问题所在

还是老老实实的发1472吧
Eleven 2010-08-12
  • 打赏
  • 举报
回复
07年的帖子???
freelaxy 2010-08-12
  • 打赏
  • 举报
回复
512是安全的最大值.


=======================================================
FreeLaxy, your backup.
=======================================================
RabbitLBJ 2010-08-12
  • 打赏
  • 举报
回复
和你遇到的问题类似,帮顶!!
王世宏 2010-08-11
  • 打赏
  • 举报
回复
我也遇到这个问题了
不过是在linux里面,ping 也最多是1472个字节
coolboylmk 2007-08-17
  • 打赏
  • 举报
回复
http://support.microsoft.com/kb/824838

SYMPTOMS
When a program sends a large User Datagram Protocol (UDP) broadcast packet, the packet may not be received.
Back to the top

CAUSE
When you send a UDP broadcast packet that must be fragmented, the IP checksum value may be calculated incorrectly. The computer that receives the UDP broadcast packet may identify the UDP broadcast packet as corrupted and discard the UDP broadcast packet. A UDP broadcast packet is fragmented when the UDP broadcast packet is larger than 1,500 bytes on an Ethernet II network. This problem originates on the Windows XP-based computer or on the Windows Server 2003-based computer that sends the packet.

===========================================
好象只有广播和多播有这个问题,反正我的机子不行,单播没测试.
flyfish99 2007-08-16
  • 打赏
  • 举报
回复
有那必要突破以太网协议的MTU限制么??
MTU 限制是具有理论依据的~不是突破了就好哦

100M网卡理论最快也就`12.5M了
用一般的UDP只要不是写的太差,10M应该没问题的
lovejklife 2007-08-16
  • 打赏
  • 举报
回复
分包后ip头部的校验和就改变了,某些xp和2003就不接d收了
----------------------------------------------
文章发出来看看,怎么可能有这种事情
Oversense 2007-08-15
  • 打赏
  • 举报
回复
你说的太对了,就是1472,恭喜你,就是这么大
vcnewer 2007-08-15
  • 打赏
  • 举报
回复
gz
僵哥 2007-08-15
  • 打赏
  • 举报
回复
可能是MTU限制
coolboylmk 2007-08-15
  • 打赏
  • 举报
回复
如果我改用组播是不是会比udp好点呢?急啊.高手快来帮帮忙吧
coolboylmk 2007-08-15
  • 打赏
  • 举报
回复
我要做的是数据广播,不能用tcp,刚才用sniffer抓了一下包,原来分包后的数据都没有udp头部,端口号都乱了,所以收不到了.
各位高手,局域网里用udp能否做到高速传输呢?不要求可靠性,只要速度快,100M的网络能达到多快呢?
ddddfbb 2007-08-15
  • 打赏
  • 举报
回复
MTU限制
貌似qq传文件也是用TCP把..
guogangj 2007-08-15
  • 打赏
  • 举报
回复
速度慢怎么能怪UDP啊,TCP其实也慢不去哪里啊,理论上来说慢一点,为了确保数据有效和完整,从底层看来“废话”稍多了点,但你知道否?你用浏览器浏览网络的协议就是TCP协议。
coolboylmk 2007-08-15
  • 打赏
  • 举报
回复
高手快来帮忙啊,如何用udp高效传输?不是说udp比tcp速度快吗?
我不要求可靠性,只要速度快,能尽可能利用网络带宽就行了.
coolboylmk 2007-08-15
  • 打赏
  • 举报
回复
我只知道大于MTU的包会分包,而且也是发送成功了,怎么收不到呢?
如果包太小的话,用udp传输文件速度就很慢,QQ是怎么做的呢??
coolboylmk 2007-08-15
  • 打赏
  • 举报
回复
搜到微软的一篇文章,因为分包后ip头部的校验和就改变了,某些xp和2003就不接d收了,晕啊
toxyboy 2007-08-15
  • 打赏
  • 举报
回复
组播会好很多.广播会造成风暴.既然是局域网,那就建组播吧.

18,362

社区成员

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

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