TCP/IP之ARP协议

1. 地址解析协议(ARP)提供了一种在IPv4地址和以太网地址之间的动态映射。
   备注:
        [1]. ARP仅用于IPv4,IPv6使用ICMPv6来完成类似的功能。
        [2]. ARP仅工作在同一IP子网,这意味着ARP缓存中只会存在位于同一IP子网中的ARP表项。

2. ARP帧格式(不考虑802.1q或其他标记)
    字段名               占用长度    解释

    dst-mac             6Bytes      目的以太网地址,对于ARP请求,该字段为链路层广播地址ff:ff:ff:ff:ff:ff;

                                            对于ARP应答,该字段为对应ARP请求报文中的src-mac

    src-mac            6Bytes      源以太网地址
    type                 2Bytes      ARP协议号0x0806

    硬件地址类型    2Bytes      对于以太网,该值为1(事实上ARP几乎只会描述以太网类型的硬件地址)
    协议地址类型    2Bytes      对于IPv4,该值位0x0800(同样的,ARP几乎只会描述IPv4类型的协议地址)
    硬件地址长度    1Bytes      以太网地址固定为6字节
    协议地址长度    1Bytes      IPv4地址固定为4字节
    操作码             2Bytes       标识该ARP的具体操作,目前基本只存在ARP请求(1)和ARP应答(2)这两种
        
    源硬件地址      6Bytes       跟src-mac字段内容重复
    源协议地址      4Bytes       通常就是发送方的IPv4地址

    目的硬件地址   6Bytes       对于ARP请求,该字段全0;

                                           对于ARP应答,该字段为对应ARP请求报文中的src-mac

    目的协议地址    4Bytes      通常就是目的IPv4地址

3. ARP协议基本工作流程如下:
        请求方发出一个携带ARP请求的链路层广播帧;
        同一广播域中的所有主机都会接收到该ARP请求,IP地址不匹配的主机直接丢弃;
        只有IP地址匹配的主机会响应一个ARP应答,这个应答中包含了所请求的IPv4地址以及对应的MAC地址,并且这个ARP应答通常直接是以单播的形式发给请求方;
        同时应答方会学习ARP请求中请求方的IPv4地址和对应的MAC地址,并将这种映射关系记录在其ARP缓存表中;
        最后,ARP应答被请求方接收,将请求到的映射关系记录在其ARP缓存表中。至此两边主机的ARP缓存表中都有了对方的ARP表项

4. ARP缓存为系统中所有接口维护协议地址到硬件地址的最新映射关系,每条动态ARP表项的老化时间是20分钟。
   linux中使用arp命令操作ARP缓存,常用options如下:
        -a              显示ARP缓存中的所有ARP表项
        -s <IP/host> <MAC>   手动添加一条ARP表项(这种静态ARP表项不会老化)
        -d <IP/host>         删除指定ARP表项(删除后这条ARP表项还会残留,但标记为incomplete)
   备注:
        [1]. 如果系统收到的ARP请求来自一个已经记录在ARP缓存中的IPv4地址,则这条ARP表项记录的MAC地址会被该ARP请求刷新,并且还通常伴随着老化时间复位。
        [2]. linux中如果对一个同一IP子网中的不存在主机发起ARP请求,则会在ARP缓存中记录一条标记为incomplete的对应的ARP表项。

5. IPv4地址冲突检测(ACD),顾名思义,就是用来检测同一广播域中的IPv4地址是否存在冲突。
   标准的ACD定义了以下两类分组:
        [1]. ARP探测分组,用于探测一个候选IPv4地址是否已经被广播域中的任何其他系统所使用。
             当一个接口被启用或从睡眠中唤醒或一个新链路建立时触发ARP探测分组。
             该分组格式上是3个特殊的ARP请求报文,其中"源协议地址"字段被设置为0,"目的协议地址"字段为本机准备使用的候选IPv4地址。
             备注:
                "源协议地址"字段被设置为0可以避免候选IPv4地址被另一台主机使用时的ARP缓存污染
        [2]. ARP通告分组,用于通告发送方使用候选IPv4地址的意图,确保广播域中相关系统的该ARP表项(如果存在)正确反映了当前使用的地址。
             当本机在发送ARP探测分组期间没有收到针对相同候选IPv4地址的ARP请求或应答,意味着在广播域中没有发现冲突,则开始向广播域中发送ARP通告分组。
             该分组格式上是2个特殊的ARP请求报文,其中"源协议地址"字段和"目的协议地址"字段都被设置为本机准备使用的候选IPv4地址(这跟免费ARP格式上一样)。
   备注:

        在多台设备上的测试发现,实际系统似乎并不一定严格遵守了标准的ACD机制,比如有的省略了ARP通告分组:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值