https://www.cnblogs.com/lialong1st/p/10623256.html

CPU:RK3288

系统:Android 5.1
MTU:通信术语 最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。

查看当前网络mtu:

8000 已经超出了当前的 mtu,所以报错,并且后面括号中显示了当前网络 mtu 值为 1500

`root@rk3288:/ ``# ping -c 2 -M do -s 8000 www.baidu.com``ping` `-c 2 -M ``do` `-s 8000 www.baidu.com``PING www.a.shifen.com (14.215.177.38) 8000(8028) bytes of data.``From android-59027ac919feb197 (192.168.0.178): icmp_seq=1 Frag needed and DF ``set` `(mtu = 1500)``From android-59027ac919feb197 (192.168.0.178): icmp_seq=1 Frag needed and DF ``set` `(mtu = 1500)` `--- www.a.shifen.com ``ping` `statistics ---``0 packets transmitted, 0 received, +2 errors`

临时修改测试,设备重启后就恢复原始值

1、4G网络

`# 查看4G网络mtu``root@rk3288:/ ``# cat /sys/class/net/ppp0/mtu``cat` `/sys/class/net/ppp0/mtu``1500``# 修改mtu``root@rk3288:/ ``# echo 1492 > /sys/class/net/ppp0/mtu``echo` `1492 > ``/sys/class/net/ppp0/mtu``root@rk3288:/ ``# cat /sys/class/net/ppp0/mtu``cat` `/sys/class/net/ppp0/mtu``1492`

2、WLAN

`# 查看wifi网络mtu``root@rk288:/ ``# cat /sys/class/net/wlan0/mtu``cat` `/sys/class/net/wlan0/mtu``1500``# 修改wifi网络mtu``root@rk3288:/ ``# echo 1492 > /sys/class/net/wlan0/mtu``root@rk3288:/ ``# cat /sys/class/net/wlan0/mtu``1492`

3、以太网

`# 查看以太网mtu``root@rk3288:/ ``# cat /sys/class/net/eth0/mtu``cat` `/sys/class/net/eth0/mtu``1500``# 修改以太网mtu``root@rk3288:/ ``# echo 1492 > /sys/class/net/eth0/mtu``echo` `1492 > ``/sys/class/net/eth0/mtu``1|root@rk3288:/ ``# cat /sys/class/net/eth0/mtu``cat` `/sys/class/net/eth0/mtu``1500``# 修改失败` `# 设备上关闭以太网,不要拔掉网线` `#修改以太网mtu``root@rk3288:/ ``# echo 1492 > /sys/class/net/eth0/mtu``echo` `1492 > ``/sys/class/net/eth0/mtu``# 修改成功``root@rk3288:/ ``# cat /sys/class/net/eth0/mtu``cat` `/sys/class/net/eth0/mtu``1492`

固定网络的 mtu,重启后不恢复
以太网

diff --git a/kernel/include/uapi/linux/if_ether.h b/kernel/include/uapi/linux/if_ether.h
index ade07f1..0b780bf 100755
--- a/kernel/include/uapi/linux/if_ether.h
+++ b/kernel/include/uapi/linux/if_ether.h
@@ -31,7 +31,7 @@#define ETH_ALEN       6               /* Octets in one ethernet addr   */#define ETH_HLEN       14              /* Total octets in header.       */#define ETH_ZLEN       60              /* Min. octets in frame sans FCS */
-#define ETH_DATA_LEN   1500            /* Max. octets in payload        */
+#define ETH_DATA_LEN   1492            /* Max. octets in payload        */#define ETH_FRAME_LEN  1514            /* Max. octets in frame sans FCS */#define ETH_FCS_LEN    4               /* Octets in the FCS             */

TCP/IP协议:最大传输单元MTU 和 最大分段大小MSS (TCP的分段和IP的分片)

2017-12-07 11:20:10 更多

MTU = MSS + TCP Header + IP Header.
mtu是网络传输最大报文包。 mss是网络传输数据最大值。
MTU:maximum transmission unit,最大传输单元,由硬件规定,如以太网的MTU为1500字节。
MSS:maximum segment size,最大分节大小,为TCP数据包每次传输的最大数据分段大小,一般由发送端向对端TCP通知对端在每个分节中能发送的最大TCP数据。MSS值为MTU值减去IPv4 Header(20 Byte)和TCP header(20 Byte)得到。

分片:若一IP数据报大小超过相应链路的MTU的时候,IPV4和IPV6都执行分片(fragmentation),各片段到达目的地前通常不会被重组(re-assembling)。IPV4主机对其产生的数据报执行分片,IPV4路由器对其转发的数据也执行分片。然而IPV6只在数据产生的主机执行分片;IPV6路由器对其转发的数据不执行分片。

例如:一个以太网上的主机和一个令牌环网上的主机间建立连接,其中以太网上主机通告的MSS为1460,令牌环网上主机通告的MSS为4096。观察分组,在两个方向上都找不到大于1460字节的数据,为什么?

​ 令牌环网上发送到以太网的数据大小不大于1460字节的原因是因为以太网上主要通告的MSS值就为1460个字节,所以令牌环网上发送出去的数据的长度不能够大于MSS值;令牌环网上主机通告的MSS值为4096,也即是说以太网能够发送到令牌环网上的TCP净荷值为4096,但是以太网的MTU值又是由硬件所决定的,最大只支持1500(包括IP头至少20B和TCP头至少20B),为避免分片,因此以太网发送到令牌环网的数据的净荷也为1500-20-20=1460B,所以两个方向的净数据长度不会大于1460字节。

下面这张图是数据进入协议栈时的封装过程

最大传输单元MTU
以太网和8 0 2 . 3对数据帧的长度都有一个限制,其最大值分别是1 5 0 0和1 4 9 2字节。链路层的这个特性称作M T U,最大传输单元。不同类型的网络大多数都有一个上限。
如果I P层有一个数据报要传,而且数据的长度比链路层的M T U还大,那么I P层就需要进行分片( f r a g m e n t a t i o n),把数据报分成若干片,这样每一片都小于M T U。
图2 - 5列出了一些典型的M T U值,它们摘自RFC 1191[Mogul and Deering 1990]。点到点的链路层(如S L I P和P P P)的M T U并非指的是网络媒体的物理特性。相反,它是一个逻辑限制,目的是为交互使用提供足够快的响应时间。

路径MTU
当在同一个网络上的两台主机互相进行通信时,该网络的M T U是非常重要的。但是如果
两台主机之间的通信要通过多个网络,那么每个网络的链路层就可能有不同的M T U。重要的
不是两台主机所在网络的M T U的值,重要的是两台通信主机路径中的最小M T U。它被称作路
径M T U。
两台主机之间的路径M T U不一定是个常数。它取决于当时所选择的路由。而选路不一定
是对称的(从A到B的路由可能与从B到A的路由不同),因此路径M T U在两个方向上不一定是
一致的。
RFC 1191[Mogul and Deering 1990]描述了路径M T U的发现机制,即在任何时候确定路径
M T U的方法。

MSS 是TCP选项中最经常出现,也是最早出现的选项。MSS选项占4byte。MSS是每一个TCP报文段中数据字段的最大长度,注意:只是数据部分的字段,不包括TCP的头部。TCP在三次握手中,每一方都会通告其期望收到的MSS(MSS只出现在SYN数据包中)如果一方不接受另一方的MSS值则定位默认值536byte。
MSS值太小或太大都是不合适。太小,例如MSS值只有1byte,那么为了传输这1byte数据,至少要消耗20字节IP头部+20字节TCP头部=40byte,这还不包括其二层头部所需要的开销,显然这种数据传输效率是很低的。MSS过大,导致数据包可以封装很大,那么在IP传输中分片的可能性就会增大,接受方在处理分片包所消耗的资源和处理时间都会增大,如果分片在传输中还发生了重传,那么其网络开销也会增大。因此合理的MSS是至关重要的。MSS的合理值应为保证数据包不分片的最大值。对于以太网MSS可以达到1460byte.
与MSS相似的在IP层也有一个类似的概念—MTU(Maximum Transfer Unit)下图可以清晰翻译MSS不MTU 的关系:

MTU =MSS + TCP Header + IP Header.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mMt53e7T-1570582907120)(http://support.huawei.com/ecommunity/showimage-10046027-10000035-6fb84a4a7338f2861a3402bf9fdecf4d.jpg)]

TCP/IP详解–TCP的分段和IP的分片

分组可以发生在运输层和网络层,运输层中的TCP会分段,网络层中的IP会分片。IP层的分片更多的是为运输层的UDP服务的,由于TCP自己会避免IP的分片,所以使用TCP传输在IP层都不会发生分片的现象。

我们在学习TCP/IP协议时都知道,TCP报文段如果很长的话,会在发送时发生分段,在接受时进行重组,同样IP数据报在长度超过一定值时也会发生分片,在接收端再将分片重组。

​ 我们先来看两个与TCP报文段分段和IP数据报分片密切相关的概念。
​ MTU(最大传输单元)
​ MTU前面已经说过了,是链路层中的网络对数据帧的一个限制,依然以以太网为例,MTU为1500个字节。一个IP数据报在以太网中 传输,如果它的长度大于该MTU值,就要进行分片传输,使得每片数据报的长度小于MTU。分片传输的IP数据报不一定按序到达,但IP首部中的信息能让这些数据报片按序组装。IP数据报的分片与重组是在网络层进完成的。

​ MSS(最大分段大小)
​ MSS是TCP里的一个概念(首部的选项字段中)。MSS是TCP数据包每次能够传输的最大数据分段,TCP报文段的长度大于MSS时,要进行分段传输。TCP协议在建立连接的时候通常要协商双方的MSS值,每一方都有用于通告它期望接收的MSS选项(MSS选项只出现在SYN报文段中,即TCP三次握手的前两次)。MSS的值一般为MTU值减去两个首部大小(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以如果用链路层以太网,MSS的值往往为1460。而Internet上标准的MTU(最小的MTU,链路层网络为x2.5时)为576,那么如果不设置,则MSS的默认值就为536个字节。很多时候,MSS的值最好取512的倍数。TCP报文段的分段与重组是在运输层完成的。

​ 到了这里有一个问题自然就明了了,TCP分段的原因是MSS,IP分片的原因是MTU,由于一直有MSS<=MTU,很明显,分段后的每一段TCP报文段再加上IP首部后的长度不可能超过MTU,因此也就不需要在网络层进行IP分片了。因此TCP报文段很少会发生IP分片的情况。

​ 再来看UDP数据报,由于UDP数据报不会自己进行分段,因此当长度超过了MTU时,会在网络层进行IP分片。同样,ICMP(在网络层中)同样会出现IP分片情况。

​ 总结:UDP不会分段,就由IP来分。TCP会分段,当然就不用IP来分了

​ 另外,IP数据报分片后,只有第一片带有UDP首部或ICMP首部,其余的分片只有IP头部,到了端点后根据IP头部中的信息再网络层进行重组。而TCP报文段的每个分段中都有TCP首部,到了端点后根据TCP首部的信息在传输层进行重组。IP数据报分片后,只有到达目的地后才进行重组,而不是向其他网络协议,在下一站就要进行重组。

​ 最后一点,对IP分片的数据报来说,即使只丢失一片数据也要重新传整个数据报(既然有重传,说明运输层使用的是具有重传功能的协议,如TCP协议)。这是因为IP层本身没有超时重传机制------由更高层(比如TCP)来负责超时和重传。当来自TCP报文段的某一段(在IP数据报的某一片中)丢失后,TCP在超时后会重发整个TCP报文段,该报文段对应于一份IP数据报(可能有多个IP分片),没有办法只重传数据报中的一个数据分片。

在IP层分片时,只有第一个分片存在运输层协议头部,其余分片都不包含运输层协议的首部,这一点很重要。然后TCP的分段,每一个分段都包含TCP首部信息。再有就是IP分片时到达目的地之后再进行重组的,IP层的重组是发生在目的地的IP层TCP的重组是发生在目的地的传输层中

转自:
http://blog.csdn.net/yygydjkthh/article/details/7359281
http://blog.csdn.net/xiaofei0859/article/details/51052752
https://blog.csdn.net/yusiguyuan/article/details/39860303

2. MTU调试

参考:http://www.right.com.cn/forum/thread-147203-1-1.html

关于 MTU
MTU (最大传输单元)是网络设备传输的信息包最大值。对于各种路由器,最佳的MTU值通常都是默认值。有时,更改MTU值可提高设备工作性能,做起来很简单,但事实上,这样做往往会导致出现其他问题。最好保持MTU不变,除非有以下情况出现:
1). 当连接不到ISP或者不能使用其他的因特网服务时,且他们的技术支持人员建议更改MTU值
2). 当您使用 VPN,遇到性能问题时可以考虑更改MTU
为了提高网络的某些性能,使用了可优化MTU 值的应用程序,而这引起了连通性和其他性能方面的问题

一个信息包被发送到MTU值较小的设备时,将被分解为若干小块。理论上,在所有电脑、交换机、路由器及您能访问到的因特网的所有设备上的MTU值应该设置为同一大小。但是您不能控制因特网上的 MTU 值,而事实上在一个局域网中的最佳MTU值取决于硬件、软件、无线接口等等。

在一种情形下修改MTU的大小可使设备很好地工作, 但在其他方面却可能引起性能和连接性问题
当具有不同MTU值的设备相互通信时,信息包将会被分成多个以便能传给具有最小的MTU值的设备
Windows XP自动设置MTU ,换句话说,它使MTU对于各种应用综合性能最优化。微软的文章解释了使用Windows XP的宽带用户不能连接到ISP的原因

一旦网络设备分解了一个信息包,此信息包在到达目的地前一直保持分解的状态

各种应用下的最佳MTU值

设置MTU大小是一个反复试验的过程: 由最大值1500开始下降,直至问题解决。使用下列值之一或许能解决一些由MTU值引起的问题:

1500. 以太网信息包最大值,也是默认值。是没有PPPoE和VPN 的网络连接的典型设置。是各种路由器、网络适配器和交换机的默认设置
  1. PPPoE 的最佳值
  2. 使用 ping 的最大值 (大于此值的信息包会先被分解)
  3. DHCP的最佳值
  4. VPN和PPTP 的最佳值
  5. 拨号连接到ISP的标准值
好了,注意一下,以上资料是正常普通情况下MTU的值,不同地区不同运营商不同机房或许也会导致MTU值的不一致!
如何查看MTU值呢?
电脑直接插网线到modem进行ADSL拨号上网,在cmd命令下输入:

netsh interface ipv4 show subinterfaces


如上图显示就是当地ADSL运营商MTU值。而并非固件默认的1500.
如何测试MTU值的最大值?
MTU值越大,发包量就大,发包时间减小,理论上是可以提高网络的。怎样测试自己的MTU值的最大值呢?
首先,在CMD命令下输入:

ping -f -l 1500 www.baidu.com
1500是默认值,先来测试一下是否能达到1500.
命令返回:“需要拆分数据包但是设置 DF。” 说明MTU值过大!我们把MTU值降低试试

ping -f -l 1450 www.baidu.com

PING值出来了,说明MTU设置1450可以通过。
再测试一下1451。

ping -f -l 1451 www.baidu.com


命令返回:“需要拆分数据包但是设置 DF。” 说明MTU值最大就是1450了。

于是有人就疑问,为什么在modem下测试是1478,而ping值测试 是1450?
上面ping得到的MTU值不能直接用于本地设置上,还应在此基础上加上28(数据包头大小28字节),因此最终在WAN设置页面修改MTU大小为1478。
最后,我就在路由器的WAN接口设置MTU值1478.

【网络编程】-40 数据链路层之以太网、MAC、MTU详解相关推荐

  1. 网络编程中的SO_REUSEADDR和SO_REUSEPORT参数详解

    1.SO_REUSEADDR: 在BSD中,SO_REUSEADDR选项有两个用户: 如果有socket绑定了0.0.0.0:port:设置该参数后,其他socket可以绑定本机ip:port.(该功 ...

  2. 手把手叫你玩转网络编程系列之三 完成端口(Completion Port)详解

    2019独角兽企业重金招聘Python工程师标准>>> 前 言 本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中--酝 ...

  3. 【Java网络编程与IO流】Http协议详解以及面试有关问题

    HTTP协议详解以及面试有关题目 1 HTTP请求 一个HTTP请求报文由请求行.请求头部.空行和请求数据四个部分组成. 1.1 请求行 请求行中有请求方法字段.URL字段和HTTP协议版本3个字段组 ...

  4. Linux后端服务器网络编程之线程模型丨reactor模型详解

    前言   上一篇文章<后端服务器网络编程之 IO 模型>中讲到服务器端高性能网络编程的核心在于架构,而架构的核心在于进程/线程模型的选择.本文将主要介绍传统的和目前流行的进程/线程模型,在 ...

  5. Linux 网络编程学习笔记——二、IP 协议详解

    目录 一.IP 服务的特点 IP 协议为上层协议提供无状态.无连接.不可靠的服务: 无状态(stateless):指 IP 通信双方不同步传输数据的状态信息,因此所有 IP 数据报的发送.传输和接收都 ...

  6. Linux 网络编程学习笔记——三、TCP 协议详解

    目录 一.TCP 服务的特点 传输层协议主要有 TCP 协议和 UDP 协议,前者相对于后者的特点是:面向连接.字节流和可靠传输. 使用 TCP 协议通信的双方必须先建立连接,然后才能开始数据的读写. ...

  7. 【Linux网络编程】TCP 和 UDP 数据报格式详解

    TCP 报文格式 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议. TCP 报文段的报头有 10 个必需的字段和 ...

  8. 网络编程基础一:TCP/IP 协议详解

    前言 我们知道两个进程如果需要进行通讯最基本的一个前提[能够唯一的标示一个进程],在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候 ...

  9. C++ tcpip网络编程中listen函数和accept函数详解和区别

    listen函数 摘要:listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器,并指定 ...

  10. [C#]网络编程系列专题二:HTTP协议详解

    转自:http://www.cnblogs.com/zhili/archive/2012/08/18/2634475.html 我们在用Asp.net技术开发Web应用程序后,当用户在浏览器输入一个网 ...

最新文章

  1. 小型网站到大型网站-Mysql优化
  2. RT-Thread GCC VSCode等开源工具链 在智能小车制作中的应用
  3. 【解决办法】Oracle登录报错ORA-28000: the account is locked
  4. python 归纳 (十二)_并发队列Queue的使用
  5. ffmpeg内存模型及AVPacket和AVFrame API基本使用
  6. hibernate的多表查询
  7. 白盒测试中几种逻辑覆盖法及其优缺点
  8. 如何主动触发时间选择器弹窗_请合理使用Alert弹窗
  9. Twitter高并发高可用架构
  10. jq中get()和eq()的区别
  11. linux文本编辑命令vim查找,Linux编辑器vi中文本搜索与替换操作
  12. 【计算机组成原理习题(2023王道考研 )】-- 第一章 计算机系统概述(选择+简答)
  13. 如何查看计算机的硬盘序列号,电脑上的硬盘序列号如何查
  14. jsp post中文乱码
  15. 批量替换文件字体,简体-繁体
  16. OpenHarmony 2.0和HarmonyOS发布会快评
  17. 无线路由器服务器连接线,有线路由器接无线路由器怎么设置
  18. IOS支持IPv6 DNS64/NAT64网络
  19. 慌乱的表情,泄露了我的悲伤:伤感心情日志
  20. 选购笔记本要看清液晶屏幕及主流技术

热门文章

  1. 如何用计算机录视频,怎么用电脑录制视频
  2. ecu故障现象_案例-报ECU系统软件重置故障处理方案
  3. android沉浸式状态理解
  4. 深入学习卷积神经网络(CNN)的原理知识
  5. 解决前端 js 中使用 append 动态追加元素标签后,事件和css样式异常问题
  6. 有域名和服务器怎么建设网站新手,新手如何快速搭建一个新的网站【零基础】...
  7. 阿里巴巴矢量图库开源http://www.iconfont.cn/collections/detail?cid=29
  8. 火山PC隐藏任务栏程序图标教程
  9. hmailserver的反垃圾邮件功能
  10. 是什么撑起了极兔快递近200亿美元的估值?