MTU对环回接口的意义

Posted

技术标签:

【中文标题】MTU对环回接口的意义【英文标题】:Significance of MTU for loopback interface 【发布时间】:2014-12-11 20:39:29 【问题描述】:

我正在探索/基准测试各种 IPC 机制,以在同一系统中的两个进程之间进行低延迟通信。我正在使用 RHEL 6 系统进行基准测试。

我目前正在研究通过环回进行基于套接字的通信。由于它是环回设备,因此数据包甚至不会命中 NIC。相反,环回 linux 驱动程序将数据包环回到目的地。

但是查看netstat -i 的结果,我看到了为环回定义的 MTU。这有什么作用以及对带宽的潜在影响?

Name  Mtu   Network       Address            Ipkts Ierrs    Opkts Oerrs  Coll
lo0   16384 localhost   ::1                   1738     -     1738     -     -

【问题讨论】:

【参考方案1】:

loopback 不是物理接口,但 tcp/ip 堆栈仍然在其上运行大量操作。

为了提高本地传输的性能,内核开发人员将其 mtu 从 16 Kb 提高到 64 Kb。

参见 Linux 内核中的this commit 及其原理:

16436 字节的环回当前 mtu 允许不超过 3 个 MSS TCP 每帧段,或 48 KB。将 mtu 更改为 64K 允许 TCP 堆栈以构建大型框架并显着减少堆栈开销。

批量 TCP 传输的性能提升最高可达 30%,部分原因是我们现在有一个 ACK​​ 消息用于两个 64KB 段,而一个更低的 达到 /proc/sys/net/ipv4/tcp_reordering 默认限制的概率。

--- a/drivers/net/loopback.c
+++ b/drivers/net/loopback.c
static void loopback_setup(struct net_device *dev)

-       dev->mtu                = (16 * 1024) + 20 + 20 + 12;
+       dev->mtu                = 64 * 1024;

【讨论】:

以上是关于MTU对环回接口的意义的主要内容,如果未能解决你的问题,请参考以下文章

环回接口---loopback

TCP/IP协议第一卷第二章

Linux中的0.0.0.0和 ::

java接口的意义

C# 接口应用及意义

ISerializable 接口的意义何在?