本地回环地址

本地回环地址(Loopback Address)通常是指127.0.0.1,不属于任何一个有类别地址类。一般都会用来检查本地网络协议、基本数据接口等是否正常的。

在开发或者调试时,我们经常需要和本地的服务器进行通信,例如启动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 kernel scope link src 10.141.155.131 
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1 
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1 
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1

其中local开头的便是本地IP,dev后面是网卡名称。

查完了本地路由表之后会再查主路由表,也就是我们经常操作的路由表。

ip route show table main

输出内容如下

default via 10.141.128.1 dev eth0 proto static metric 100 
10.141.128.0/18 dev eth0 proto kernel scope link src 10.141.155.131 metric 100

环回网络接口

现在我们再来看下环回网络接口

ifconfig lo

输出

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 1554227  bytes 123327716 (117.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1554227  bytes 123327716 (117.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

可以看到本地环回接口的IPv4地址是127.0.0.1,子网掩码是255.0.0.0,对应A类网络号127,有趣的是当我们访问 127.0.0.1-127.255.255.254之间的任意一个地址都会访问到本机。

IPv6地址::1,前缀是128位,表示只有一个地址。

环回网络接口的当前MTU64KB,不过最高可以设置到2GB,真是恐怖如斯。

下面几条RX,TX开头的分别代表收发到的数据报文个数和大小以及错包、丢包、溢出次数和无效帧。

排查网卡

排查网卡硬件问题的简便办法,在软件方面都检查不到问题而且物理层外部设备也工作正常的情况下可以采用,或许就是你的救命稻草!windows+R键打开“运行”窗口,输入cmd回车打开“命令提示符窗口”,然后输入ping 127.0.0.1 回车,如果返回值正常说明网卡硬件没有问题,反之就可以考虑网卡硬件的修复了!原理很简单,利用ping命令以及本地回环地址(127.0.0.1),通俗的说就是127.0.0.1这个地址会给自己的物理地址发送信息,即使在断网的条件下正常的网卡也应该ping的通,所以如果不通,就只能说明是网卡硬件问题了!

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注