【Linux网络】Linux网络协议栈问题汇集

Linux本机与本机socket通信会走网卡吗?

1.127.0.0.1本机网络IO需要经过网卡吗?

不需要经过网卡,即使把网卡拔了本机网络还是可以正常使用的。

本机网络IO的内核执行流程:

img

跨机网络IO的流程:

img

2.数据包在内核中是什么走向,和外网发送相比流程上有什么区别?

本机网络 IO 和跨机 IO 比较起来,确实是节约了驱动上的一些开销。发送数据不需要进 RingBuffer 的驱动队列,直接把 skb 传给接收协议栈(经过软中断)。但是在内核其它组件上,可是一点都没少,系统调用、协议栈(传输层、网络层等)、设备子系统整个走了一个遍。连“驱动”程序都走了(虽然对于回环设备来说只是一个纯软件的虚拟出来的东东)。

3.用本机ip(例如192.168.x.x)和用127.0.0.1性能上有差别吗?

正确结论是和 127.0.0.1 没有差别,都是走虚拟的环回设备 lo。
这是因为内核在设置 ip 的时候,把所有的本机 ip 都初始化 local 路由表里了,而且类型写死 RTN_LOCAL。在后面的路由项选择的时候发现类型是 RTN_LOCAL 就会选择 lo 了。

具体分析请参考原文:https://www.zhihu.com/question/43590414/answer/1928842338

posted @ 2024-07-17 17:37  Emma1111  阅读(22)  评论(0编辑  收藏  举报