《深入理解Linux网络》读书笔记4
本次学习了第五章深入理解本机网络IO和部分第六章深度理解TCP连接建立过程
总结如下:
本机网络IO的内核执行流程?
-
由图可以得出几个结论:
-
127.0.0.1本机网络IO需要经过网卡吗?
不需要,即使拔掉网卡,本机网络还是可以正常使用的
-
数据包在内核中的走向是啥?和外网发送相比流程上有啥差别?
-
总的来说,本机网络IO和跨级网络IO比起来,节约了驱动上的一些开销。发送数据不需要进RingBuffer的驱动队列,直接把skb传给接受协议栈(通过软中断)。但是在内核其他组件上,并没有节约。系统调用、协议栈(传输层、网络层等)、设备子系统整个走了一遍。连“驱动”程序都走了(虽然对于回环设备来说,只是一个纯软件虚拟出来的东西)。所以即使是本机网络IO,也不应滥用。
-
如果想在本机网络IO上绕开协议栈的开销,需要动用eBPF。使用eBPF的sockmap和sk redirect可以达到真正不走协议栈的目的。
-
-
访问本机服务时,使用127.0.0.1能比使用本机IP(例如192.168.x.x)更快吗?
两者并无区别,都是走虚拟的环回设备IO
-