zoukankan      html  css  js  c++  java
  • 什么是VIP?什么是IP漂移?

    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中极其重要。

    ARP是通过网络地址来定位MAC地址

    以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的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
    

    image.png


    Linux

    arp -nv
    


    Windows

    arp -a
    

    总结

    虚拟IP是未分配给真实主机的IP,是IP的一种。
    结合ARP协议、心跳检测机制、广播ARP数据包,修改ARP缓存中IP和MAC地址的对应关系,实现IP漂移,服务器自动切换

    参考

  • 相关阅读:
    C++笔试题库之编程、问答题 150~200道
    C++语言中的static关键字的作用是什么?
    C++开发工程师面试题库 1~50道
    C++笔试题库之编程、问答题 100~150道
    C++经典面试题库 附带参考答案
    常用的16个c/c++面试题
    C++经典面试题全集 50~100道 都附带有参考答案
    c++常见面试题30道
    别傻了,人家离职你也离
    西苑附近的一亩园社区
  • 原文地址:https://www.cnblogs.com/xinrong2019/p/13833975.html
Copyright © 2011-2022 走看看