UDP数据包大小问题?

 所属目录:Java   |   类型:技术问答   |   时间:2007-05-21
 问题:

问题如下:  
        我有tidudpserver控件(indy的),和nmudp控件(fastnet面版里面),我用端口映射把本udp的udp端口映射到本网的外网的ip,当我向这个外网端口发数据的时候,只要数据包大于1464个字节,就收不到,小于等于1464字节都可以收到,另外一个外网的ip向我这个外网端口发数据的时候情况也一样。奇怪的是我向本网内的其它机器和我本机发大于1464字节的数据,却可以收到。  
        谁能告诉我这是为什么?如果我要发大于1464字节的数据该如何解决啊?

· 网友精彩回答:

发表者:constantine

应该是1472吧,  
  跟mtu(最大传送单元)有关吧,以太网的mtu是1500字节  
  ip首部是20字节,udp首部是8字节  
  那么数据实际就只能1500-20-8=1472  
  如果超过就就要分包  
  或许还有其他的影响你的,所以你只能1464,最好把包改小一点  
  如果说错了请高手指正

发表者:ach999

udp一个包最大字节是2^32-1,当然发送这样大包的话,会被分包.  
  出现大于某一字节的包就不能发(2^32-1是很大的^_^),的原因很多.协议不对,如校验和,长度等等,找个抓包工具看看,仔细比较。你如果是用多线程发送的话,可能是缓冲区那一块有问题。

发表者:wohow

mtu的问题。很多路由器超过最大mtu就丢掉这个包,局域网没有路由器问题,所以超过mtu也能接到

.
处理 SSI 文件时出错
© 2006-2008 All Rights Reserved