1.概念

以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的。
这个1500字节被称为链路层的MTU(最大传输单元).
但这并不是指链路层的长度被限制在1500字节,其实这这个MTU指的是链路层的数据区.并不包括链路层的首部和尾部的18个字节.
所以,事实上,这个1500字节就是网络层IP数据报的长度限制.
因为IP数据报的首部为20字节,所以IP数据报的数据区长度最大为1480字节。而这个1480字节就是用来放TCP传来的TCP报文段或UDP传来的UDP数据报的。又因为UDP数据报的首部8字节,所以UDP数据报的数据区最大长度为1472字节。这个1472字节就是我们可以使用的字节数。

2.当我们发送的UDP数据大于1472的时候会怎样呢?

这也就是说IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation)。
把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组。
这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收数据后无法重组数据报.将导致丢弃整个UDP数据报。
因此,在普通的局域网环境下,我建议将UDP的数据控制在1472字节以下为好。
进行Internet编程时则不同,因为Internet上的路由器可能会将MTU设为不同的值。
如果我们假定MTU为1500来发送数据的,而途经的某个网络的MTU值小于1500字节,那么系统将会使用一系列的机制来调整MTU值,使数据报能够顺利到达目的地,这样就会做许多不必要的操作。

3.结语

鉴于Internet上的标准MTU值为576字节,所以我建议在进行Internet的UDP编程时。
最好将UDP的数据长度控件在548字节(576-8-20)以内。

UDP数据包最大传输长度相关推荐

  1. IP、TCP、UDP数据包长度问题

      IP数据包长度问题总结 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层. 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或U ...

  2. android+udp传输大小,Android UDP数据包如何接收可变大小的数据包

    我有一个Android应用程序,它监视UDP数据包并调用一个方法来处理收到的消息.我有一个问题,如果传入的消息更长,它将调用方法来处理消息.但是如果传入的消息较短,则不会调用该方法,但如果我发送短消息 ...

  3. 以太网,IP,TCP,UDP数据包分析【转】

    原文地址:http://www.cnblogs.com/feitian629/archive/2012/11/16/2774065.html 1.ISO开放系统有以下几层: 7 应用层 6 表示层 5 ...

  4. 【转】TCP、UDP数据包大小的限制

    [转]TCP.UDP数据包大小的限制 来自:https://blog.csdn.net/caoshangpa/article/details/51530685 1.概述 首先要看TCP/IP协议,涉及 ...

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

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

  6. 分析udp数据报_Linux内核网络udp数据包发送(二)——UDP协议层分析

    1. 前言 本文分享了Linux内核网络数据包发送在UDP协议层的处理,主要分析了udp_sendmsg和udp_send_skb函数,并分享了UDP层的数据统计和监控以及socket发送队列大小的调 ...

  7. Linux内核网络协议栈:udp数据包发送(源码解读)

    <监视和调整Linux网络协议栈:接收数据> <监控和调整Linux网络协议栈的图解指南:接收数据> <Linux网络 - 数据包的接收过程> <Linux网 ...

  8. Linux内核网络udp数据包发送(二)——UDP协议层分析

    1. 前言 本文分享了Linux内核网络数据包发送在UDP协议层的处理,主要分析了udp_sendmsg和udp_send_skb函数,并分享了UDP层的数据统计和监控以及socket发送队列大小的调 ...

  9. 原始套接字SOCK_RAW发送UDP数据包

    使用原始套接字发送udp数据包,从传输层封包到链路层(mac头+ip头+udp头).udp数据包,从传输层封包到链路层(mac头+ip头+udp头). head.h文件如下: #ifndef _HEA ...

  10. UDP数据包的延迟及丢包检测(C++)

    摘要 本文记录通过数据报套接字来检测UDP数据包的延迟和丢包的思路和简单的代码实现. 思路 UDP协议及用户数据报协议在传输层提供了无连接.不可靠的传输服务,端到端的延迟以及丢包率是反应当前网络环境好 ...

最新文章

  1. 欢迎进入 K同学啊 的博客目录(全站式导航)
  2. object的classid收集
  3. 44个Java代码性能优化总结
  4. git 短写设置_如何在短短几分钟内设置一个Git客户端
  5. ic卡消费管理系统_详述食堂消费系统的功能特点
  6. 在ASP.NET AJAX中使用应用程序服务和本地化(5):自定义应用程序服务的服务器端实现...
  7. 工具的使用——windows操作系统的使用(二)
  8. XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Korea
  9. django view返回form error_Django(解决被钓鱼CSRF、Django中间件、反射)
  10. Hdu 1794 【二维成段更新】.cpp
  11. Java中的双冒号::是什么玩意?有这个语法?
  12. 图灵好书推荐——数学+物理+宇宙
  13. 【LaTeX】pdfTex error: pdflatex.exe (file simhei.ttf): cannot open TrueType font file for reading解决方案
  14. Mac 录屏制作gif动图
  15. VS2010 下载与安装
  16. 前缀树python实现
  17. 电镀用整流电源设计matlab,高功率因数的大功率开关电镀电源研究
  18. java音乐_用JavaJFugue进行音乐编程
  19. 创新案例分享 | 医院DRG系统建设项目,助力精细化分析医疗数据
  20. 【What if 系列】全球雪封

热门文章

  1. linux - ab测试工具
  2. 用Matlab筛选mirbase,一种基于miRBase数据库的无参的miRNA数据分析方法与流程
  3. AndroidStudio配置一键360加固gradle脚本
  4. Java中常见的异常举例
  5. 最新高通平台驱动开发参考文档
  6. android思维导图软件推荐,免费好用还跨平台!这5款主流思维导图软件,每一个都让人怒赞...
  7. matlab——imhist和histeq函数
  8. leaflet中文文档
  9. dubbo源码解析之dubbo配置解析
  10. 萤火虫小程序_【实用工具】微信小程序及练船表(更新至2020年12月1日)