IP地址和MAC地址
在 TCP/IP 的架构下,所有想上网的电脑,不论是用何种方式连上网路,都必须要有一个唯一的 IP-address。事实上IP地址是主机硬件地址的一种抽象,简单的说,MAC地址是物理地址,IP地址是逻辑地址。
- | - |
---|---|
MAC地址 | 物理地址 |
IP地址 | 逻辑地址 |
什么是虚拟IP
虚拟IP地址(VIP) 是一个不与特定计算机或一个计算机中的网络接口卡(NIC)相连的IP地址。数据包被发送到这个VIP地址,但是所有的数据还是经过真实的网络接口。VIPs大部分用于连接冗余;一个VIP地址也可能在一台计算机或NIC发生故障时可用,交由另一个可选计算机或NIC响应连接。虚拟IP地址的例子如:一个Loopback(无电路IP地址)作为不与在主机或路由器中任何一个特定接口(或电路)相关的IP地址。
虚拟IP就是一个未分配给真实主机的IP,也就是说对外提供服务器的主机除了有一个真实IP外还有一个虚IP,使用这两个IP中的任意一个都可以连接到这台主机。
- MAC地址 00:21:5A:DB:68:E8
- 真实IP 192.168.1.217
- 虚拟IP 192.168.1.219
虚拟IP可以用来做什么?可以解决什么问题?
一般可以用来做HA(High Availability),比如数据库服务器的URL可以使用一个虚拟IP,当主服务器发生故障无法对外提供服务时,动态将这个虚IP切换到备用服务器。即实现服务器热备,故障自动切换。
1、客户端访问数据库虚拟IP
2、通过ARP缓存,找到对应的MAC地址
3、访问真实服务器
1、真实服务器A宕机
2、真实服务器B没有收到真实服务器A的心跳包
3、真实服务器B将虚拟IP绑定到自己的MAC地址,并发送这个ARP包给路由器
4、路由器接收到后更新ARP缓存
5、接着有请求虚拟IP的请求过来,都会被转发到真实服务器B
什么是ARP协议
地址解析协议(英语:Address Resolution Protocol,缩写:ARP)是一个通过解析网络层地址来找寻数据链路层地址的网络传输协议,它在IPv4中极其重要。
在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
另外,当发送主机和目的主机不在同一个局域网中时,即便知道对方的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为委托ARP或ARP代理(ARP Proxy)。
在点对点链路中不使用ARP,实际上在点对点网络中也不使用MAC地址,因为在此类网络中分别已经获取了对端的IP地址。
在每台安装有TCP/IP协议的电脑或路由器里都有一个ARP缓存表,表里的IP地址与MAC地址是一对应的。
主机名称 | IP地址 | MAC地址 |
---|---|---|
A | 192.168.38.10 | 00-AA-00-62-D2-02 |
B | 192.168.38.11 | 00-BB-00-62-C2-02 |
C | 192.168.38.12 | 00-CC-00-62-C2-02 |
D | 192.168.38.13 | 00-DD-00-62-C2-02 |
E | 192.168.38.14 | 00-EE-00-62-C2-02 |
... | ... | ... |
ARP协议工作原理
以主机A(192.168.38.10)向主机B(192.168.38.11)发送数据为例。
1.当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到就知道目标MAC地址为(00-BB-00-62-C2-02),直接把目标MAC地址写入帧里面发送就可。
2.如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播(ARP request),目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.38.11的MAC地址是什么?”
3.网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应(ARP response):“192.168.38.11的MAC地址是00-BB-00-62-C2-02”,此回应以单播方式。这样,主机A就知道主机B的MAC地址,它就可以向主机B发送信息。同时它还更新自己的ARP高速缓存(ARP cache),下次再向主机B发送信息时,直接从ARP缓存表里查找就可。
ARP缓存表采用老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可减少缓存表的长度,加快查询速度。
虚拟IP原理
虚拟IP的实现主要是靠 TCP/IP 的 ARP 协议。
因为IP地址只是一个逻辑地址,在以太网中 MAC 地址才是真正用来进行数据传输的物理地址。
以太网中的主机发送数据时会先从本地ARP缓存中查询目标 IP 对应的 MAC 地址,会向这个 MAC 地址发送数据。
操作系统或路由器会自动维护这个缓存。
在Linux下可以使用arp命令操作ARP高速缓存。
比如下面这个 ARP 缓存示例:
(192.168.1.219) at 00:21:5A:DB:68:E8 [ether] on bond0
(192.168.1.217) at 00:21:5A:DB:68:E8 [ether] on bond0
(192.168.1.218) at 00:21:5A:DB:7F:C2 [ether] on bond0
其中,192.168.1.217、192.168.1.218 是两台真实的电脑,192.168.1.217 为对外提供数据库服务的主机,192.168.1.218 为热备的机器,192.168.1.219 为虚IP,注意219、217的 MAC 地址是相同的。
当主服务器217一段时间没有发送HeartBeat数据包给备份服务器218,备份服务器218规定时间内没有收到217的HeartBeat数据包。(啰嗦一下)
这时备份服务器218 认为217 宕机。备份服务器218后会向网络发送一个 ARP 数据包,让路由器修改路由表,告诉所有主机 192.168.1.219 这个IP对应的MAC地址是 00:21:5A:DB:7F:C2,这样所有发送到 219 的数据包都会发送到 MAC 地址为 00:21:5A:DB:7F:C2 的机器,也就是 218 的机器。
配置和删除虚拟IP
假如主机有一个网卡 eth1,其对应一个IP为 192.168.1.217,现对其设置一个虚拟IP 192.168.1.219:
ifconfig eth1:1 192.168.1.219 netmask 255.255.255.0
删除该虚拟IP:
ip addr del 192.168.1.219 dev eth1
不过在网络运维中,更常见的是使用 keepalived 配置虚拟ip(vip)实现双机热备以及自动切换主备
如何查看本地操作系统上的ARP缓存
MacOS
arp -nla
Linux
arp -nv
Windows
arp -a
总结
虚拟IP是未分配给真实主机的IP,是IP的一种。
结合ARP协议、心跳检测机制、广播ARP数据包,修改ARP缓存中IP和MAC地址的对应关系,实现IP漂移,服务器自动切换