1 引子
最近搭建web集群环境,采用了LVS+Keepalived+Nginx+Tomcat的框架。在Realserver端需要用到回环接口(loopbak)。这里就简单介绍一下Linux和windows下的回环接口。
2介绍
Loopback接口是虚拟接口,是一种纯软件性质的虚拟接口。任何送到该接口的网络数据报文都会被认为是送往设备自身的。大多数平台都支持使用这种接口来模拟真正的接口。这样做的好处是虚拟接口不会像物理接口那样因为各种因素的影响而导致接口被关闭。事实上,将Loopback接口和其他物理接口相比较,可以发现Loopback接口有以下几条优点:
1. Loopback接口状态永远是up的,即使没有配置地址。这是它的一个非常重要的特性。
2. Loopback接口可以配置地址,而且可以配置全1的掩码,可以节省宝贵的地址空间。
3. Loopback接口不能封装任何链路层协议。
IP协议中的loopback地址。RFC2606中明确指出了loopback地址的标准域名为localhost。在IPv4中,其对应的IP地址一直是127.0.0.1;理论上,整个127IP段(127.0.0.0~127.255.255.255)的IP地址都为loopback地址,与localhost对应。在IPv6中,localhost对应的IP地址为0:0:0:0:0:0:0:1,一般写作::1。
在网络设备中,loopback被用来代表某些用于管理目的的虚拟接口,其含义并没有"回环"的意思。loopback虚拟接口会分配到一个IP地址,但是这个IP地址不会对应到实际的物理接口。网络设备中的loopback地址主要用于管理目的,例如设备发出的报警。网络设备中的应用程序(管理程序)使用loopback地址发送可接收数据流,而不是使用实际物理接口的地址。对外部来说,直接使用loopback地址来查看设备对应的信息(如报警信息),与网卡的物理地址无关。。我们也可以把这种地址理解为网络设备提供的服务的地址。
在通信领域,loopback可以用作将接收到的信号或数据直接返回给发送者的测试方法。作为一种测试方法,很多通信设备都可以配置端口的数据发送模式(例如all ones模式),来检测同一个端口上的信号接收。这种测试也叫"回环测试"。
3 Linux下的loopback
在linux下,有个固定的网络接口,lo。先通过ifconfiglo查看lo配置:
[root@172-7-9-200 ~]# ifconfig lo
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:20 errors:0 dropped:0 overruns:0 frame:0
TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1128 (1.1 KiB) TX bytes:1128 (1.1 KiB)
从配置可以看出,lo的mask仅为8bit,也就是说,只要127开头,任何网络主机号都可以,也就是说环回接口可以理解为一个网络号。测试验证,127.0.0.1、127.0.1.1、127.1.1.1均能ping通,而125.0.0.1不行。也就是说127这网络号下面的主机编址都是loopback。
[root@172-7-9-200 ~]# ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=2.79 ms
1 packets transmitted, 1 received, 0% packet loss, time 820ms
[root@172-7-9-200 ~]# ping 127.0.1.1
PING 127.0.1.1 (127.0.1.1) 56(84) bytes of data.
64 bytes from 127.0.1.1: icmp_seq=1 ttl=64 time=0.150 ms
64 bytes from 127.0.1.1: icmp_seq=2 ttl=64 time=0.069 ms
2 packets transmitted, 2 received, 0% packet loss, time 1031ms
[root@172-7-9-200 ~]# ping 127.1.1.1
PING 127.1.1.1 (127.1.1.1) 56(84) bytes of data.
64 bytes from 127.1.1.1: icmp_seq=1 ttl=64 time=0.055 ms
1 packets transmitted, 1 received, 0% packet loss, time 828ms
[root@172-7-9-200 ~]# ping 126.0.0.1
PING 126.0.0.1 (126.0.0.1) 56(84) bytes of data.
32 packets transmitted, 0 received, 100% packet loss, time 31710ms
修改一下lo的地址,如下:
[root@172-7-9-200 ~]# ifconfig lo 130.0.0.1
[root@172-7-9-200 ~]# ifconfig lo
lo Link encap:Local Loopback
inet addr:130.0.0.1 Mask:255.255.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:28 errors:0 dropped:0 overruns:0 frame:0
TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1800 (1.7 KiB) TX bytes:1800 (1.7 KiB)
这时候,就ping不通127.*.*.*的ip了,而能ping通130.0.*.*下的ip。
再把子网掩码配置为255.255.255.255,如下:
[root@172-7-9-200 ~]# ifconfig lo 130.0.0.1 netmask 255.255.255.255
[root@172-7-9-200 ~]# ifconfig lo
lo Link encap:Local Loopback
inet addr:130.0.0.1 Mask:255.255.255.255
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:36 errors:0 dropped:0 overruns:0 frame:0
TX packets:36 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2472 (2.4 KiB) TX bytes:2472 (2.4 KiB)
[root@172-7-9-200 ~]# ping 130.1.1.1
PING 130.1.1.1 (130.1.1.1) 56(84) bytes of data.
2 packets transmitted, 0 received, 100% packet loss, time 1151ms
[root@172-7-9-200 ~]# ping 130.0.1.1
PING 130.0.1.1 (130.0.1.1) 56(84) bytes of data.
1 packets transmitted, 0 received, 100% packet loss, time 825ms
[root@172-7-9-200 ~]# ping 130.0.0.1
PING 130.0.0.1 (130.0.0.1) 56(84) bytes of data.
64 bytes from 130.0.0.1: icmp_seq=1 ttl=64 time=1.23 ms
1 packets transmitted, 1 received, 0% packet loss, time 927ms
rtt min/avg/max/mdev = 1.232/1.232/1.232/0.000 ms
可知,只有130.0.0.1能ping通。
所以可以总结为:环回接口可以配置,而且是一个网络号,并非主机号,除非把掩码配置为32bits。
4 Windows下的loopback
Windows下安装loopback较Linux下麻烦,这个可以追溯两者的历史渊源的。Linux是为网络而生的,而Windows者强调的是个人视窗,所以没有类似linux默认有lo接口。这就需要安装Microsoft Loopback Adapter。
Windows版本不同,安装步骤也不一样:
在vista之前的版本,需要打开“控制面板”-“添加新的硬件设备”-“安装我手动从...”-“网络适配器”-“Microsoft loopback adapter ”,添加完成则进入Microsoft loopback adapter的配置。
Vista及以后的版本(Vista、windows 7,windows2008、windows8)则需要如下步骤:
设备管理器-“操作”-“添加过时硬件”-“安装我手动从...” - “网络适配器”-“Microsoft loopback adapter”,添加完成则进入Microsoft loopback adapter的配置。
不过有一种方法是通用的,也是最直接的:
直接“开始”-“运行”-“hdwwiz”,打开“添加硬件”界面。前面得两者方法,归根都是调用hdwwiz.exe的。
Windows环境下,默认的回环地址和Linux下一样,都是127.*.*.*。但是测试发现在Microsoft loopback adapter中设置IP地址为172.7.9.99,子网掩码为255.255.255.0的回环地址时,只能ping通172.7.9.99地址,ping不通172.7.9.*地址。
以太网适配器 lo:
连接特定的 DNS 后缀 . . . . . . . :
IPv4 地址 . . . . . . . . . . . . : 172.7.9.99
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . :
ping 172.7.9.99
正在 Ping 172.7.9.99 具有 32 字节的数据:
来自 172.7.9.99 的回复: 字节=32 时间<1ms TTL=64
来自 172.7.9.99 的回复: 字节=32 时间<1ms TTL=64
ping 172.7.9.98
正在 Ping 172.7.9.98 具有 32 字节的数据:
来自 172.7.9.201 的回复: 无法访问目标主机。
来自 172.7.9.99 的回复: 无法访问目标主机。
这明显和Linux下的loopback接口不同。所以可以总结为:环回接口可以配置,而且是一个主机号,和掩码无关。