有没有可能跳过 ip 层 mtu 的限制进行发包

2023-02-26 10:58:01 +08:00
 Aaron7Amelia
我记得我在哪看到过,mtu 这个限制是在 ip 层处理的,这实际上是一个 “软性”限制。按照正常的收发网络包的流程来看,肯定要经过内核协议栈,那么必定会被 ip 层处理。ip 层看到包太大,就会分包

那么我的数据包要是不走内核协议栈,比如像 DPDK 这样的技术,我是不是就可以绕过 MTU 的限制,直接将一个大包交给网卡,由网卡发出去

不知道这样理解对不对
2728 次点击
所在节点    程序员
18 条回复
choury
2023-02-26 11:16:13 +08:00
发出去肯定没问题啊,直接操作驱动,但是发出去之后呢?这条链路上的所有设备处理这个包的时候都是要过 ip 协议栈的,遇到了都会丢掉的,还是说你能掌控这个链路上的所有设备?
mxi1
2023-02-26 11:36:10 +08:00
可以发出去,但受限于整个传输链路上的中间节点(路由器、交换机)的配置,极大概率都会被丢掉。
如果你有一个可控的网络环境,可以配起来看看,内核协议栈也可以通过 offloading 的方式来绕过 MTU 的限制。
Songxwn
2023-02-26 11:40:10 +08:00
那是以太网也有限制的
hhhsuan
2023-02-26 11:49:06 +08:00
可以直接调网卡驱动的接口
leonshaw
2023-02-26 11:49:11 +08:00
直接把 MTU 改大不就行了
nightwitch
2023-02-26 12:12:55 +08:00
mtu 的限制不仅在你的机器上,而是在链路的所有机器上。
msg7086
2023-02-26 12:46:17 +08:00
可以发,并且在一毫秒后被其他设备扔掉……
iX8NEGGn
2023-02-26 13:03:22 +08:00
看来计算机网络学得不是深刻
hxysnail
2023-02-26 13:03:33 +08:00
首先,MTU 不是 IP 层的限制,而是链路层的限制,可以理解成链路层一帧能够传输的数据量: https://fasionchan.com/network/ethernet/mtu/

其次,IP 包到达目的 IP 前通常会经过多跳,链路上的网络设备传输能力千差万别,根据木桶原理,由传输能力最弱的节点决定,就算你的设备比较强大,将 MTU 调大也没用。

最后,IP 包其实也可以分片: https://fasionchan.com/network/ip/fragmentation/ ,不过有些设备可能不支持,因为这个特性很鸡肋,只要其中有一个分片丢了就得全部重传;而且分片重组也有很多开销
DefoliationM
2023-02-26 13:14:32 +08:00
网络运营商给你全丢了,而且包越大传输中越可能受到干扰,越不稳定,没必要
Kunmona
2023-02-26 13:29:03 +08:00
MTU 是针对数据链路层的概念,数据包过大会非常不利于传输,还会增大数据延迟,IP 层也有分片功能去针对大数据包的场景。实在要用也可以设置巨帧的方法,但路由器交换机需要支持,双方接口也需要额外设置,巨帧也一般用在局域网中,没哪个运营商会接收巨帧,这会大幅增加数据交换延迟。
dialtcp
2023-02-26 17:19:23 +08:00
一个分布式系统里的作恶节点太少了,没法实现,你得控制整条链路的节点
blackeeper
2023-02-26 20:32:00 +08:00
看来你对 PDU ( Protocol Data Unit )不太熟,这个是网络的对等实体传送的讯息单元,不同的网络最大 mtu 是不一样的。如果你发送了一个超过设备的 mtu ,那么设备会 DF (分片),如果设置了禁止 DF ,那么就直接丢弃了。
你可以用 ping 命令验证,尝试加或者不加“-f”,“-f”是禁止分片,ping 192.168.1.1 -l 1800 -f

物理层(一层) PDU 指数据位( Bit )。
数据链路层(二层) PDU 指数据帧( Frame )。
网络层(三层) PDU 指数据包[注 1]( Packet )或数据报( Datagram )[1]。
传输层(四层) PDU 指数据段( Segment )。
wheat0r
2023-02-26 21:30:35 +08:00
你说的是不是 FCoE ?
xuanbg
2023-02-26 22:06:13 +08:00
你发管你发,路由器转发失败自然丢掉,对方能接收到算我输。
cat9life
2023-02-27 08:36:32 +08:00
可以随便发,但是传输中的节点会怎么处理?
julyclyde
2023-02-27 08:37:31 +08:00
@blackeeper DF 是“don't 分片”的缩写吧?
blackeeper
2023-02-27 19:53:17 +08:00
@julyclyde 是的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/919230

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX