社区
Linux/Unix社区
帖子详情
udp网络传输数据的最大长度问题?
kitty1982
2007-08-23 10:26:25
请问,udp传输的发送和接收的缓冲区的最大长度是怎么限制的,可以设置吗,最大长度一般是一次可以传多少个字节啊,谢谢,请指点一下.
...全文
1978
15
打赏
收藏
udp网络传输数据的最大长度问题?
请问,udp传输的发送和接收的缓冲区的最大长度是怎么限制的,可以设置吗,最大长度一般是一次可以传多少个字节啊,谢谢,请指点一下.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hanb99
2008-01-28
打赏
举报
回复
消息的尺寸有限制:理论上UDP数据报的最大尺寸略小于64KB,但实际上许多UNIX主机只提供32KB的最大尺寸,有的甚至只有8KB,最终套接口接收程序还会把这个最大尺寸限制为接收缓冲区的大小,许多程序UDP消息尺寸只有512B或更小.
以上摘自<实战linux socket编程>
穆伦
2008-01-27
打赏
举报
回复
BSD相关系统上UDP默认最大发送8k,应用程序也可以通过设置选项放大。
其他系统不清楚
bigbee
2008-01-27
打赏
举报
回复
1500字节的长度限制来自于以太网物理层的规范,传输层如果想要发送超过1500字节的单包,只能依赖IP层分包,到目的地组装。但这会额外增加TCP/IP协议栈的开销。并且这种不加控制的发送加剧网络拥塞的可能,在不面向连接的UDP这里,当然也就增加了丢包的可能。
cceczjxy
2008-01-25
打赏
举报
回复
实际上,你发128k也好,32k也好,linux内核都会根据网络协议给拆分成1500个字节左右发送出去,内核不负责重发.就因为如此,你数据包很大的情况下,拆分后的数据包如果有丢失的,那你接收端接收的数据就会不正确的.即是只有一个包失败,所要的数据你都要重发,因为那些分包对于你的程序来说是不可控的.因此在linux下,尽量不要把数据包的大小设置的
超过1500个字节
ght21
2008-01-25
打赏
举报
回复
问题按goodyun82 的方法,先ping一下地方,等ping通了再发送,就能发送完了,呵呵....
ght21
2008-01-25
打赏
举报
回复
1
我也遇到了这样的问题,在linux的下,用udp发送数据的时候超过1500后对方就根本收不到..
hzcpig
2007-08-26
打赏
举报
回复
同问,sendto返回值正确(发送长度1500字节)但recvfrom收不到,发送1200字节时就可以收到。感觉超过了1500字节不是丢包的问题,而是根本就收不到。以上send和recv还是在一台机器上。
--------------------------
我曾经在XP上测试过发128K的UDP包,测试通过,虽然是在局域网上,但至少说明UDP上没有长度限制,Linux上没试过,但相信32K以下是没问题的。
goodyun82
2007-08-26
打赏
举报
回复
此问题很有可能是跟你的协议实现有关
你可以做个简单的实验,同样的发送1500字节的程序,一个在你先ping一下目的地址后运行,一个在命令行里面运行arp -d后运行,看看结果是不是不一样??如果是的话,那就是这样的原因:发送1500的数据肯定是分片了,而协议栈里面发送之前如果不知道目的地址的ARP影射,则会发一个arp请求包,在等这个包的应答之前会把需要发送的IP包保存起来,但是只保存一个(注意他只保存一个发送请求),这时如果在arp应答到来之前第二片UDP分片要求发送,这时就会出现第二片IP包覆盖第一片的情况,导致只发出了后面的之带IP的包(令人奇怪的是协议栈确实还会厚颜无耻的返回说发了1500个字节,因为上层协议看不到下层协议),目的方自然不认识该包,因为没有连接能与之匹配。
以上是我在做TCPIP协议栈的时候测试并且找到的一个问题,应该和你的原因一样的。为了证实你也可以将你发出去的包抓下来看下就清楚了。
另外,书上推荐的是UDP不要超过500字节,因为如果跨网络的话,他们的MTU是不一样的,比如ethernet到ATM???
ideawu
2007-08-25
打赏
举报
回复
UDP的缓冲和包的最大长度没有直接的联系.
UDP包的最大长度理论上是 64K, 但是实现上一般是 8K.
you3700
2007-08-25
打赏
举报
回复
同问,sendto返回值正确(发送长度1500字节)但recvfrom收不到,发送1200字节时就可以收到。感觉超过了1500字节不是丢包的问题,而是根本就收不到。以上send和recv还是在一台机器上。
lirui_sky
2007-08-24
打赏
举报
回复
我现在写的代码一般都是1500以内,丢包是免不了的,有重发机制就行了
hzcpig
2007-08-23
打赏
举报
回复
win98时代有最大限制,32K还是64K忘记了,反正就是记事本的最大长度限制。
到了XP年代,已经没有最大限制了,你完全可以自己定义数据包的大小,不过通常建议不要超过32K
cceczjxy
2007-08-23
打赏
举报
回复
大概是1500个字节
可以设置,具体忘了.
happy_flying
2007-08-23
打赏
举报
回复
可以使用setsockopt的SO_RCVBUF和SO_SNDBUF来设置.
建议看一下UNIX网络编程第一卷的相关章节.
jwwu
2007-08-23
打赏
举报
回复
最好不要超过1500,否则容易丢包
UDP
和TCP
最大
数据传输
长度
#
UDP
和TCP
最大
数据传输
长度
UDP
可发送的数据
最大
长度
为IP包的
最大
长度
减去IP头部和
UDP
头部的
长度
, 不过,这个
长度
为MTU,MSS不是一个层面上的概念。MTU和MSS是基于以太网和通信线路上
网络
包的
最大
长度
来计算的,而...
网络
-
UDP
,TCP数据包的
最大
传输
长度
分析
UDP
允许传输的
最大
长度
理论上2^16 -
udp
head - iphead( 65507 字节 = 65535 - 20 - 8) 但是实际上
UDP
数据报的数据区
最大
长度
为1472字节。分析如下: 首先,我们知道,TCP/IP通常被认为是一个四层协议系统,...
UDP
数据包
最大
传输
长度
所以,事实上,这个1500字节就是
网络
层IP数据报的
长度
限制. 因为IP数据报的首部为20字节,所以IP数据报的数据区
长度
最大
为1480字节。而这个1480字节就是用来放TCP传来的TCP报文段或
UDP
传来的
UDP
数据
udp
包
最大
数据
长度
是多少
每个
udp
包的
最大
大小是多少? 65507 约等于 64K 为什么
最大
是65507?... 因为
udp
包头有2个byte用于记录包体
长度
. 2个byte可表示
最大
值为: 2^16-1=64K-1=65535
udp
包头占8字节, ip包头占20字节, ...
最大
数据段
长度
最大
数据段
长度
_
UDP
数据包允许的
最大
数据
长度
是多少_互联网编程博客本资讯是关于
UDP
数据包允许的
最大
数据
长度
是多少,
UDP
最大
数据段
长度
是多少,MSS的
最大
报文段
长度
选项,TCP 、
UDP
包的
最大
长度
是多少相关的内容,由...
Linux/Unix社区
23,120
社区成员
74,507
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章