在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好?
当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,我这里仅对
像ICQ一类的发送聊天消息的情况作分析,对于其他情况,你或许也能得到一点帮助:
首先,我们知道,TCP/IP通常被认为是一个四层协议系统,包括链路层,网络层,运输层,应用层.
UDP属于运输层,下面我们由下至上一步一步来看:
以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的.
这个1500字节被称为链路层的MTU(最大传输单元).
但这并不是指链路层的长度被限制在1500字节,其实这这个MTU指的是链路层的数据区.
并不包括链路层的首部和尾部的18个字节.
所以,事实上,这个1500字节就是网络层IP数据报的长度限制.
因为IP数据报的首部为20字节,所以IP数据报的数据区长度最大为1480字节.
而这个1480字节就是用来放TCP传来的TCP报文段或UDP传来的UDP数据报的.
又因为UDP数据报的首部8字节,所以UDP数据报的数据区最大长度为1472字节.
这个1472字节就是我们可以使用的字节数。:)

当我们发送的UDP数据大于1472的时候会怎样呢?
这也就是说IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation).
把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组.
这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便
无法重组数据报.将导致丢弃整个UDP数据报。

因此,在普通的局域网环境下,我建议将UDP的数据控制在1472字节以下为好.

进行Internet编程时则不同,因为Internet上的路由器可能会将MTU设为不同的值.
如果我们假定MTU为1500来发送数据的,而途经的某个网络的MTU值小于1500字节,那么系统将会使用一系列的机
制来调整MTU值,使数据报能够顺利到达目的地,这样就会做许多不必要的操作.

目前大多数的路由设备的MTU都为1500
鉴于Internet上的标准MTU值为576字节,所以我建议在进行Internet的UDP编程时.
最好将UDP的数据长度控件在548字节(576-8-20)以内.

//-------------------------------------------------------------------------------------------------

看到另外一篇文章说,还应该有个PPP的包头包尾的开销(8Bytes),那就为1492了

UDP 包的大小就应该是 1492 - IP头(20) - UDP头(8) = 1464(BYTES)
TCP 包的大小就应该是 1492 - IP头(20) - TCP头(20) = 1452(BYTES)

总结:

我们设定包的大小对于UDP和TCP协议是不同的,关键是看系统性能和网络性能,网络是状态很好的局域网,那么UDP包分大点,提高系统的性能。不好,就分小于1464,这样可以减低丢包率。对于TCP来说,这个就要靠经验了,因为,TCP丢包可以自动重传,分大了,系统性能提高了,分包和错误重组可能会耗费时间,使传送时间延长,分小了,系统性能又降低了。

总之 ,如果网络不好,包大小最好为1400以下

UDP包的大小与MTU相关推荐

  1. TCP,UDP数据包的大小以及MTU

    TCP.UDP数据包大小的确定 UDP和TCP协议利用端口号实现多项应用同时发送和接收数据.数据通过源端口发送出去,通过目标端口接收.有的网络应用只能使用预留或注册的静态端口:而另外一些网络应用则可以 ...

  2. 最大可传输单元 MTU 对 UDP/TCP 包的大小限制

    目录 一.MTU 简述 - 分包后数据包最大长度 1.定义 2.网络中 MTU 值的由来: 1>.最大值: 2>.最佳值的推导: 3>.最佳值: 4>.最小值: 5>.碎 ...

  3. 第一篇,怎么增加SYN数据包的大小(syn flood攻击实验)

    新人学习,如有错误请见谅和指正.如果大家参考,请多找资料和实验进行比对研究.谢谢 iphdr->tot_len 总长度字段(16位)是指整个IP数据报的长度,以字节为单位.利用首部长度字段和总长 ...

  4. UDP传输报文大小详解

    UDP的传输方式:面向报文 面向报文的传输方式决定了UDP的数据发送方式是一份一份的,也就是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文.那么UDP的报文大小由哪些影响因素呢?UD ...

  5. 数据包分片和重组 MTU与MSS

    前言 任何一台主机都有必要对IP分片进行相应的处理. 分片往往出现在网络上遇到比较大的报文无法一下子发送出去才会进行处理. 正文 比如说在前一个FDDI链路中的报文大小为4352字节,小于其MTU所以 ...

  6. LinuxC下获取UDP包中的路由目的IP地址和头标识目的地址

    在接受到UDP包后,有时候我们需要根据所接收到得UDP包,获取它的路由目的IP地址和头标识目的地址. (一)主要的步骤: 在setsockopt中设置IP_PKTINFO,然后通过recvmsg来获取 ...

  7. tcpdump显示udp包_TCPdump抓包命令详解

    TCPdump抓包命令 tcpdump是一个用于截取网络分组,并输出分组内容的工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具. tcpdu ...

  8. 讨论:如何降低Cocos2d开发的游戏包体大小

    众所周知,通过Cocos2d开发的手游包体普遍偏大,动则几百M的安装包,而包体大则会导致手游推广的成本增大,也会影响到用户转化率.除去其他因素,用户在选择下载时,会着重关注游戏包体大小,游戏包体体积过 ...

  9. 以太网数据包、IP包、TCP/UDP 包的结构(转)

    源:以太网数据包.IP包.TCP/UDP 包的结构 版本号(Version):长度4比特.标识目前采用的IP协议的版本号.一般的值为0100(IPv4),0110(IPv6). IP包头长度(Head ...

最新文章

  1. 摆脱 FM!这些推荐系统模型真香
  2. 图解HTTPS建立过程
  3. Vijos P1131 最小公倍数和最大公约数问题【暴力】
  4. 【SQL】SQL语句大全(XIMND导图梳理)
  5. 以图搜图 图像匹配_图像匹配,基于深度学习DenseNet实现以图搜图功能
  6. Java高并发编程详解系列-7种单例模式
  7. jquery与json的结合
  8. nginx 配置文件详解 深入理解nginx配置文件
  9. Java程序设计(基础)- 概述
  10. 证件照,手把手教你通过在线工具给所需证件照进行换底色处理
  11. 六度空间理论(数据结构图,c语言版)
  12. Dracena:实时数字孪生平台
  13. 部署论坛代码(linux)
  14. xtu ACM Eason
  15. 【报错解决】错误代码18456,SQL Server 登录失败
  16. python 招聘 海盐_聚焦普高新课标 提升信息核心素养——海盐县初中信息技术Python课堂教学研讨活动在武原中学举行...
  17. 牛客网Java选择题练习
  18. kafka的broker配置
  19. 客制化键盘编程_客制化键盘QMK固件入门-修改keyboard和keymap
  20. Per tile sequence quality

热门文章

  1. 军武科技获5000万元B轮融资 男性用户占比达到90%以上...
  2. 大数据升级治霾手段:拒绝“一刀切”误伤
  3. Python 实战分析某招聘网站数据分析岗位的招聘情况
  4. 数字计算机模拟人脑,人造突触问世,计算机模拟人脑不是梦
  5. 真正的360桌面助手/护眼助手绿色免安装版
  6. 自定义jsp标签实现按钮权限控制
  7. 计算机专硕考博 什么时候准备,【干货】如果想要申请博士,那么在研究生期间该做哪些准备?...
  8. thinkjs-redis配置问题
  9. Android 12 应用兼容性适配指导
  10. Gated Mechanism for Attention Based Multi Modal Sentiment Analysis 阅读笔记