使用环回地址使用TCP/IP套接字进行IPC时,常见的网络堆栈是否会跳过较低级别PDU中的消息框架?

Dav*_*ock 13 sockets tcp localhost processing-efficiency interprocess

在某些环境(如Java)中,使用TCP/IP套接字使用"localhost"地址(IPv4中为127.0.0.1或IPv6中为:: 1)在同一主机上的进程之间传递消息是很自然的.(因为Java倾向于不在其API中公开其他IPC机制).

显然,通过管道传递消息或使用共享内存的IPC,这可能比IPC慢得多.

另一方面,如果TCP/IP网络堆栈意识到连接的两端都在环回接口上,那么它可能能够进行一些优化,这样效率可能与使用管道没有太大差别.

但是,常见的操作系统(Windows,Linux)是否在其TCP/IP堆栈中实现了这样的优化?

小智 8

是.当收到数据包/数据到环回地址(127.xxx)时,TCP/IP的IP层使用环回路由将数据包路由到自身.

Looback路线

网络目的地|| 网络掩码|| 网关|| 接口|| 公

127.0.0.0 |||||||||||||||||||||| 255.0.0.0 || 127.0.0.1 || 127.0.0.1 || 1

在将其路由到itsef后,在TCP/UDP层借助协议控制块(每个连接数据结构),将识别相应的套接字及其所有者进程以传递分组/数据.

底线,将避免数据链路层和物理层(OSI模型)的所有任务.

  • 这是个好消息.只是想知道你如何知道这个模糊的细节 - 在某处有参考吗? (4认同)

use*_*504 4

取决于操作系统和所使用的配置。如果您要求默认行为,答案是肯定的。

这就是为什么您无法使用wireshark等工具来嗅探本地环回场景的原因。

[其他用户编辑]:其实这是可以的,你必须选择Loopback接口(使用Wireshark 3.4测试)