【Linux网络】Linux网络协议栈问题汇集
Linux本机与本机socket通信会走网卡吗?
1.127.0.0.1本机网络IO需要经过网卡吗?
不需要经过网卡,即使把网卡拔了本机网络还是可以正常使用的。
本机网络IO的内核执行流程:
跨机网络IO的流程:
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