cat*_*eof 12 linux networking mtu ifconfig
ifconfig 1.2.3.4 mtu 1492
这会将传入,传出数据包或两者的MTU设置为1492?我认为这只是为了传入
Edw*_*son 16
TLDR:两者都有.它只会传输有效负载长度小于或等于该大小的数据包.同样,它只接受有效负载长度在您的MTU内的数据包.如果设备发送更大的数据包,它应该响应ICMP不可达(超大)消息.
细节: 为您的设备调整MTU非常有用,因为您和目的地之间的其他跃点可能会以另一种形式(例如,VPN或PPPoE)封装您的数据包.您的数据包周围的这一层会导致更大的数据包被发送电线.如果这个新的,更大的数据包超过了该层的最大大小,那么该数据包将被分成多个数据包(在一个完美的世界中)或将被完全丢弃(在现实世界中).
作为一个实际示例,考虑将计算机通过以太网连接到ADSL调制解调器,该调制解调器向ISP发送PPPoE.以太网允许1500字节的有效载荷,其中8个字节将由PPPoE使用.现在,我们可以将单个数据包中的1492字节传送到您的ISP.如果您要发送1500字节的全尺寸以太网有效负载,它将被路由器"分段"并分成两个数据包(一个具有1492字节的有效负载,另一个具有8字节的有效负载.)
当你想通过这个连接发送更多数据时会出现问题 - 假设你想要发送3000个字节:你的计算机会根据你的MTU将其拆分 - 在这种情况下,每个包含两个1500字节的数据包,然后发送给你ADSL调制解调器然后将它们分开以便它可以实现其MTU.现在你的3000字节数据被分成四个数据包:两个有效载荷为1492字节,两个有效载荷为8字节.这显然是低效的,我们实际上只需要三个数据包来发送这些数据.如果您的计算机配置了正确的网络MTU,它将首先将其作为三个数据包发送(两个1492字节数据包和一个16字节数据包.)
为了避免这种低效率,许多IP堆栈在称为"Do not Fragment"的IP头中稍微翻转一下.在这种情况下,我们会将第一个1500字节的数据包发送到ADSL调制解调器,并且它会拒绝该数据包,并通过Internet控制(ICMP)消息回复,通知我们数据包太大.然后,我们将使用较小的数据包重试传输.这称为路径MTU发现.类似地,在TCP层下面的一个层,另一个避免碎片的因素是MSS(最大段大小)选项,其中两个主机都回复它们可以传输的最大大小的数据包而不会分段.这通常是从MTU计算的.
当错误配置的防火墙丢弃所有ICMP流量时,会出现此问题.当您连接到(比方说)Web服务器时,您构建一个TCP会话并发送您愿意接受基于您的1500字节MTU的TCP数据包(因为您通过以太网连接到您的路由器.)如果是外国网络服务器想要向你发送大量数据,他们会把它分成块(当与TCP和IP头结合时)出现1500字节的有效载荷并发送给你.您的ISP会收到其中一个,然后尝试将其包装到PPPoE数据包中以发送到您的ADSL调制解调器,但它太大而无法发送.因此,它将回复ICMP无法访问,这将(在一个完美的世界中)导致远程计算机缩小其MSS以进行连接并重新传输.但是,如果路由器中存在损坏的防火墙,则外部Web服务器将永远不会访问此ICMP消息,并且此数据包永远不会发送给您.
最好在您的以太网设备上设置您的MTU,以便将正确大小的帧发送到您的ADSL调制解调器(以避免它要求您使用较小的帧重新传输),但是在构建TCP时影响发送到远程主机的MSS大小至关重要连接.
Mik*_*ton 10
ifconfig ... mtu <value>
设置从接口发出的第2层有效负载的MTU,并拒绝在此接口上接收的更大的第2层有效负载.您必须确保您的MTU在以太网链路的两侧匹配; 你不应该在同一个以太网广播域中的任何地方都有不匹配的mtu值.请注意,以太网标头不包含在您设置的MTU中.
此外,ifconfig
还没有在linux中维护多年,并且已经过时并且已弃用 ; 遗憾的是,Linux发行版仍然包含它,因为它们害怕破坏旧脚本.这会鼓励人们继续使用它,这具有非常负面的影响.您应该使用iproute2
命令族:
[mpenning@hotcoffee ~]$ sudo ip link set mtu 1492 eth0
[mpenning@hotcoffee ~]$ ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1492 qdisc mq state UP qlen 1000
link/ether 00:1e:c9:cd:46:c8 brd ff:ff:ff:ff:ff:ff
[mpenning@hotcoffee ~]$
Run Code Online (Sandbox Code Playgroud)