MTU: Maxitum Transmission Unit 最大传输单元

MSS: Maxitum Segment Size 最大分段大小

以太网(Ethernet)数据帧的长度必须在 64Bytes-1518Bytes 字节之间,这是由于以太网传输电气方面限制的,EthernetII 协议报头结构如下:

| 目的地址(DMAC) | 源地址(SMAC) | 类型(TYPE) | 数据(DATA) | 校验(CRC) |

6Bytes 6Bytes 4Bytes 46-1500Bytes 2Bytes

由于以太网最大的数据帧是 1518Bytes,刨去以太网帧的帧头(目标MAC地址,源MAC地址和类型)14Bytes 以及帧尾 CRC(大家有时候叫它: FCS) 校验部分4Bytes 那么剩下承载上层协议的地方也就是 Data 域最大就只能有1500Bytes 这个值我们就把它称之为 MTU。

UDP 包的大小(MSS)是 1500 - IP头(20) - UDP头(8) = 1472(BYTES)

TCP 包的大小(MSS)是 1500 - IP头(20) - TCP头(20) = 1460 (BYTES)

注:PPPoE导致MTU变小了,以太网的 MTU 是 1500,再减去PPP的包头包尾的开销(8Bytes),MTU 就变成1492。

MTU 对我们的 UDP 编程很重要,那如何查看路由的MTU值呢?

# windows OS: ping -f -l

$ ping -f -l 1472 www.bing.com

#如果提示:需要拆分数据包但是设置 DF。

#则表明 MTU 小于1500,不断改小data_length值,可以最终测算出gateway的MTU值。

#linux OS: ping -c -M do -s

$ ping -c 1 -M do -s 1472 www.bing.com

#如果提示 Frag needed and DF set……

#则表明 MTU 小于 1500,可以再测以推算 gateway 的 MTU。

如果数据超过 MTU 范围,既 IP 数据报大于 1500 字节,发送方 IP 层就需要将数据包分成若干片,而接收方 IP 层就需要进行数据报的重组。更严重的是,如果使用UDP协议,当IP层组包发生错误,那么包就会被丢弃,接收方无法重组数据报,将导致丢弃整个IP数据报。UDP 不保证可靠传输。但是 TCP 发生组包错误时,该包会被重传,保证可靠传输。

因此,在普通的局域网环境下,建议将UDP的数据控制在1472字节以下为好。鉴于 Internet 上的标准 MTU 值为 576 字节,所以建议在进行 Internet 的 UDP 编程时,最好将 UDP 的数据长度控件在 548 字节(576-20-8)以内。

udp超过mtu长度 linux,TCP UDP 数据包长度(MSS)总结相关推荐

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

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

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

    Linux内核网络数据包发送(二)--UDP协议层分析 1. 前言 2. `udp_sendmsg` 2.1 UDP corking 2.2 获取目的 IP 地址和端口 2.3 Socket 发送:b ...

  3. Linux内核网络数据包发送(四)——Linux netdevice 子系统

    Linux内核网络数据包发送(四)--Linux netdevice 子系统 1. 前言 2. `dev_queue_xmit` and `__dev_queue_xmit` 2.1 `netdev_ ...

  4. Linux内核网络数据包发送(三)——IP协议层分析

    Linux内核网络数据包发送(三)--IP协议层分析 1. 前言 2. `ip_send_skb` 3. `ip_local_out` and `__ip_local_out` 3.1 netfilt ...

  5. ibm aix 抓包命令_在IBM AIX上模拟丢弃的TCP / IP数据包

    本文介绍: AIX内核扩展,允许来往于指定主机的指定百分比的TCP / IP数据包被随机丢弃,以模拟不利的网络状况. 加载,激活和卸载内核扩展的实用程序. C和Java™实用程序,用于监视到达目标主机 ...

  6. 网络技术入门 :HTTP报文和TCP/IP数据包

    本章把HTTP报文和TCP/IP数据包放在一起.是因为: 报文是一个完成的有意义的数据. 数据包可以理解为组成报文的传输单元. 应用程序的数据一般都比较大,因此TCP会按照网络包的大小对数据进行拆分. ...

  7. Linux内核网络数据包发送(一)

    Linux内核网络数据包发送(一) 1. 前言 2. 数据包发送宏观视角 3. 协议层注册 4. 通过 socket 发送网络数据 4.1 `sock_sendmsg`, `__sock_sendms ...

  8. TCP/IP数据包结构具体解释

    [关键词] TCP IP 数据包 结构 具体解释 网络 协议 一般来说,网络编程我们仅仅须要调用一些封装好的函数或者组件就能完毕大部分的工作,可是一些特殊的情况下,就须要深入的理解 网络数据包的结构, ...

  9. linux如何查看丢弃数据包,导致Linux服务器丢弃数据包?

    我们使用Linux作为服务器操作系统时,为了达到高并发处理能力,充分利用机器性能,经常会进行一些内核参数的调整优化,但不合理的调整常常也会引起意想不到的其他问题,本文就一次Linux服务器丢包故障的处 ...

  10. Linux系统捕获数据包流程

    Linux系统捕获数据包流程 为了提高数据包的捕获效率,瓶颈问题是一个需要非常关注的焦点.减少在捕获数据包过程中的瓶颈,就能够提高数据包捕获的整体性能.下面本文将以Linux操作系统为平台,分析捕获数 ...

最新文章

  1. Postfix邮件服务搭建
  2. Vue+axios 实现http拦截及vue-router拦截
  3. 控制台输入与Math Random的基本使用
  4. hdu2594 简单KMP
  5. jQuery的入口函数
  6. linux go语言运行环境,安装Go语言运行环境
  7. PHP 修改memory_limit方法
  8. 前端学习(2131):作用域插槽的使用
  9. 尼康d7200拍照_为什么尼康和佳能的全画幅旗舰单反却只有2000多万像素?
  10. 创造11,你pick哪位讲师?
  11. quarz设置定时器任务的有效时间段_quartz定时任务时间设置
  12. Poly Network现已支持以太坊至币安智能链及火币生态链一键跨链
  13. Android--Handler
  14. java学习笔记14-多态
  15. uniapp 自定义unicode 并使用
  16. 高等代数第3版下 [丘维声 著] 2015年版_书籍推荐 | 关于数学分析和高等代数
  17. java建设银行支付_基于JAVA的建设银行账目管理系统的设计
  18. 1《游戏脚本高级编程》之命令脚本的随想
  19. 浙大PAT甲级1001-1020题目详细代码解答|标准答案|C++语言|浙软机考
  20. matlab已知上三角实现对角矩阵,MATLAB及其应用考试卷B卷2010-2011

热门文章

  1. Navicat Premium15安装与激活(完整激活版)
  2. 安装程序使用计算机做准备,IBM 3850 X5 win2008R2停留在“安装程序正在为首次使用计算机做准备”画...
  3. 【源码更新】活动报名登记预约问卷表单系统微信小程序支持导入导出自定义表单填报字段
  4. eNSP教程 —— 物理机如何使用web登录到防火墙
  5. 远程桌面与本计算机共享文件,win7系统开启远程桌面共享文件的方法
  6. 记录:ubuntu安装zlog及使用
  7. Linux-虚拟机封装
  8. AD14一般使用流程
  9. java工具类(六)根据经纬度计算距离
  10. Kali Linux无线网络渗透测试教程(大学霸内部资料)