首页 > 其他分享 >最大传输单元MTU和最大分段大小MSS

最大传输单元MTU和最大分段大小MSS

时间:2023-08-15 10:32:50浏览次数:63  
标签:分段 报文 MSS TCP MTU 数据包 以太网

参考:https://support.huawei.com/enterprise/zh/knowledge/EKB1000052671

https://zhiliao.h3c.com/questions/dispcont/93066

在PPPoE场景出现上网慢的情况时,首先检查设备当前的MTU以及TCP-MSS值。

了解一些基本概念:

1. MTU(Maxitum Transmission Unit):最大传输单元。

EthernetII帧的结构DMAC+SMAC+Type+Data+CRC。

由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64bytes最大不能超过1518bytes,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。(注:小于64Bytes的数据帧一般是由于以太网冲突产生的“碎片”或者线路干扰或者坏的以太网接口产生的,对于大于1518Bytes的数据帧我们一般把它叫做Giant帧,这种一般是由于线路干扰或者坏的以太网口产生)

由于以太网EthernetII最大的数据帧是1518Bytes,这样,刨去以太网帧的帧头(DMAC目的MAC地址48bit=6Bytes+SMAC源 MAC地址48bit=6Bytes+Type域2bytes)14Bytes和帧尾CRC校验部分4Bytes(这个部门有时候大家也把它叫做 FCS),那么剩下承载上层协议的地方也就是Data域最大就只能有1500Bytes这个值我们就把它称之为MTU。

2. MSS(Maxitum Segment Size):最大分段大小。

MSS是TCP协议里面的一个概念。TCP协议在三次握手阶段会协商MSS值,MSS的值决定了每个TCP报文数据段的最大长度。

TCP协议一般使用接口MTU来设置MSS的值,如果接口MTU为1500,减去20字节TCP头,20字节IP头,一般MSS取值为1460。如下下图报文。

最大传输单元MTU和最大分段大小MSS_IP


当两台远程PC互联的时候,它们的数据需要穿过很多的路由器和各种各样的网络媒介才能到达对端,网络中不同媒介的MTU各不相同,就好比一长段的水管,由不同粗细的水管组成(MTU不同)通过这段水管最大水量就要由中间最细的水管决定。

对于网络层的上层协议而言对水管粗细不在意,它们认为这个是网络层的事情。网络层IP协议会检查每个从上层协议下来的数据包的大小,并根据本机MTU的大小决定是否作“分片”处理。

分片最大的坏处就是降低了传输性能,本来一次可以搞定的事情,分成多次搞定,所以在网络层更高一层(就是传输层)的实现中往往会对此加以注意!有些高层协议因为某些原因就会要求我这个报文不能分片,我要完整地报文,所以会在IP数据包包头里面加上一个标签:DF(Donot Fragment)。这样当这个IP数据包在一大段网络传输的时候,如果遇到MTU小于IP数据包的情况,转发设备就会根据要求丢弃这个数据包。然后返回一个错误信息给发送者。这样往往会造成某些通讯上的问题。

对于UDP协议而言,这个协议本身是无连接的协议,对数据包的到达顺序以及是否正确到达不甚关心,所以一般UDP应用对分片没有特殊要求。

对于TCP协议而言就不一样了,这个协议是面向连接的协议,对于TCP协议而言它非常在意数据包的到达顺序以及是否传输中有错误发生。所以有些TCP应用对分片有要求---不能分片(DF)。

回到问题的本身,相对于普通以太报文,PPPoE报文多了8字节的PPPoE头,这样就导致了实际的MTU值变小(1500-8=1492),所以在PPPoE应用中MSS取值不能超过(1492-20-20=1452)。如果还有其他应用,比如L3 VPN,IPSEC等,MSS取值还要小一些。

根因

PPPoE场景,IP报文长度大于MTU,同时设置不分片标志(DF),导致设备丢弃报文,造成业务影响,通过调整防火墙mss解决问题。

解决方案

调整防火墙的tcp-mss小于1452。
[USG] firewall tcp-mss 1400
实际现网使用过程中,并不一定是只有PPPoE场景,当网络中设备有报文长度限制也会碰到调整tcp-mss可以解决上网慢的情况。

标签:分段,报文,MSS,TCP,MTU,数据包,以太网
From: https://blog.51cto.com/u_551173/7085850

相关文章

  • 字符串分段
    1ALTERfunction[dbo].[字符串分段](@STRvarchar(80),@xint,@jgfvarchar(10))2returnsvarchar(100)3begin4set@str=REPLACE(@str,'','')5Declare@lengthint=len(@str)6Declare@indexint=17Declare@yhkvarchar(100)='�......
  • MSSQL 锁机制
    铺垫知识在我开始解释SQLServer锁定体系结构之前,让我们花点时间来描述ACID(原子性,一致性,隔离性和持久性)是什么。ACID是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔......
  • 7-11 分段计算居民水费 (10分)
    7-11 分段计算居民水费 (10分)为鼓励居民节约用水,自来水公司采取按用水量阶梯式计价的办法,居民应交水费y(元)与月用水量x(吨)相关:当x不超过15吨时,y=4x/3;超过后,y=2.5x−17.5。请编写程序实现水费的计算。输入格式:输入在一行中给出非负实数x。输出格式:在一行输出应交的水费,精确到小数点......
  • Mssql手工注入执行命令小记
    文章写于2021-04-08,首发于https://www.anquanke.com/post/id/237031#h2-6前言本次渗透通过某处SQL注入点进行源码分析,并手工利用xp_cmdshell进行了命令执行。初现在某个晴朗夏日午后,闲来无事想测试,这不,马上就掏出xray扫描到了一个sql注入漏洞,不得不说xray真的挺好用的。该项目......
  • Mitsubishi 三菱GX Works2梯形图程序分段显示设置
    一、适用情况用GXWorks2进行梯形图程序编辑时,默认是一整段在一起,程序步数较多时查看起来不是那么方便,本文教大家如何设置可以将程序分段显示。二、启用方法如下第01步,在新建工程时的设置如下图 第02步,编辑的整段示例程序如下第03步,先选择声明编辑第04步,然后双击左母线......
  • MSSQL提权之xp_cmdshell、SP_OACreate、沙盒提权
    在xp_cmdshell被删除或者出错情况下,可以充分利用SP_OACreate进行提权 首先 EXECsp_configure'showadvancedoptions',1;  RECONFIGUREWITHOVERRIDE;  EXECsp_configure'OleAutomationProcedures',1;  RECONFIGUREWITHOVERRIDE;  EXECsp_configure'showad......
  • DHCP服务器无法在NSX-T分段网络下工作
    默认情况下分段安全配置文件,限制了DHCP流量,导致无法使用DHCP服务器。 登录到NSX-T,点击【网络】-->【分段】-->【配置文件】  新建一个配置文件Horizon-segment-security-profile(名称任意即可) 配置如下: 将所有DHCP相关的安全策略,全部取消即可。 然后修改DHCP所在的分段安全......
  • calico报错son: cannot unmarshal string into Go struct field NetConf.mtu of type
     于是describe查看宿主机的配置文件查看日志没有相关日志查看calico的相关配置文件值找到于是想着直接去修改calico的Configmap发现修改不成功便去查询宿主机映射的calico挂载文件把标记部分的string给成int去掉双引号,然后重启calico然后通过ansible分发到每台机器上an......
  • mssql的xp_cmdshell扩展
    introductionxp_cmdshellextension:storedprocedureexecutescommandstringasanoperatingsystemcommandinshell andretirevealloutputastextlinesdetermineifcurrentmssqlhasxp_cmdshellareturnvalueof1indicatestheextensionisxp_cmdsh......
  • MSSQL STRING_SPLIT(把字符串拆分成集合)
    语法:STRING_SPLIT(string,separator)参数说明:string:任何字符类型(例如nvarchar、varchar、nchar或char)的表达式separator:任何字符类型(例如nvarchar(1)、varchar(1)、nchar(1)或char(1))的单字符表达式,用作串联子字符串的分隔符根据字符把字符串拆分为集合S......