网络请求-本机

参考 https://cloud.tencent.com/developer/article/1839865

本机网络通信的内核执行流程

 

跨机网络 IO 的流程是:

 

开篇三个问题的答案

1)问题1:127.0.0.1 本机网络 IO 需要经过网卡吗?

通过本文的叙述,我们确定地得出结论,不需要经过网卡。即使了把网卡拔了本机网络是否还可以正常使用的。

2)问题2:数据包在内核中是个什么走向,和外网发送相比流程上有啥差别?

总的来说,本机网络 IO 和跨机 IO 比较起来,确实是节约了一些开销。发送数据不需要进 RingBuffer 的驱动队列,直接把 skb 传给接收协议栈(经过软中断)。

但是在内核其它组件上可是一点都没少:系统调用、协议栈(传输层、网络层等)、网络设备子系统、邻居子系统整个走了一个遍。连“驱动”程序都走了(虽然对于回环设备来说只是一个纯软件的虚拟出来的东东)。所以即使是本机网络 IO,也别误以为没啥开销

3)问题3:使用 127.0.0.1 能比 192.168.x 更快吗?

先说结论:我认为这两种使用方法在性能上没有啥差别。

我觉得有相当大一部分人都会认为访问本机 Server 的话,用 127.0.0.1 更快。原因是直觉上认为访问 IP 就会经过网卡。

其实内核知道本机上所有的 IP,只要发现目的地址是本机 IP 就可以全走 loopback 回环设备了。本机其它 IP 和 127.0.0.1 一样,也是不用过物理网卡的,所以访问它们性能开销基本一样!

 

posted @ 2023-09-28 11:02  zhonghuahero  阅读(67)  评论(0编辑  收藏  举报