在开发或者调试时,咱们常常须要和本地的服务器进行通信,例如启动nginx之后,在浏览器输出lcoalhost或者127.0.0.1就能够拜访到本机下面的http服务。
Linux是如何拜访本机IP的?
大多数操作系统都在网络层实现了环回能力,通常是应用一个虚构的环回网络接口来实现。这个虚构的环回网络接口看着像是一个实在的网卡,实际上是操作系统用软件模仿的,它能够通过TCP/IP与同一台主机上的其余服务进行通信,以127结尾的IPv4地址就是为它保留的,支流Linux操作系统为环回网卡调配的地址都是127.0.0.1,主机名是localhost。
环回网络接口之所以被称之为环回网络接口,是因为从本机发送到本机任意一个IP的数据报文都会在网络层交给环回网络接口,不再下发到数据链路层进行解决,环回网络接口间接发送回网络层,最终交由应用层软件程序进行解决。这种形式对于性能测试十分有用,因为省去了硬件的开销,能够间接测试协定栈软件所须要的工夫。
那环回网络接口是如何判断目标IP是否为本机地址的呢?
答案就是网络层在进行路由转发的时候会先查本地的路由表,发现是本机IP后交给环回网络接口。查看本地路由表的命令如下:
ip route show table local
输入内容如下:
broadcast 10.141.128.0 dev eth0 proto kernel scope link src 10.141.155.131
local 10.141.155.131 dev eth0 proto kernel scope host src 10.141.155.131
broadcast 10.141.191.255 dev eth0 proto kern