arp 已知mac找ip_ARP协议修订版

“补充了一些前期学习认知的不足,通过模拟发送不同字段的ARP请求或者响应,总结归纳后,修改前面发布的文章ARP协议,后续会删除前面发布的文章。”

01

ARP协议

ARP,Address Resolution Protocol,地址解析协议,解析IP地址得到MAC地址,基于数据链路层之上的协议,可以看成和网络层同一层级,通常称为2.5层协议,ARP是网络层与数据链路层的重要枢纽,它解决了网络层(软件)到数据链路层(硬件)的映射。

ARP请求报文

5c151d75e4fea45f3a9aa9ef06de6145.png

数据通信的基础是在以网卡为硬件的数据链路层发送和接收的,如果想实现两台主机通信,必须知道目标主机的硬件地址,即MAC地址。 主机A想要发送数据给主机B,我们知道发送网络报文是一个封装的过程,数据需要在应用层、传输层、网络层、数据链路层封装,网络层的目的IP是主机B的IP地址192.168.0.200,这个是已知的,数据链路层的目的MAC是主机B的MAC地址,这个主机A不知道,它首先会去自己的ARP缓存表内查找(切记是根据IP找MAC)。如果之前A和B通信过,A存入过B的IP-MAC的映射关系,如果这条目录还未老化删除,此时应该可以查找到,那么把B的MAC地址填充到链路层头部完成封装,发出去即可。 可是如果之前A和B并未通信过,A没有存入过B的IP-MAC,或者虽然存入过,但此时已经过了这条条目的老化时间,已经从ARP缓存表内删除了,那么A就无法从ARP缓存表内根据主机B的IP地址查到B的MAC地址,也就无法完成封装报文。 怎么办? 此时A会启动ARP协议层程序,让其自动发一条ARP请求报文,以广播的形式发给网段内的其他所有主机。其他主机收到此条ARP请求报文后,会判断是否发给自己,如果不是,则不回复,如果是,则回复一条ARP响应报文给主机A,A收到即知道B的MAC地址。 具体过程: 主机A首先在自己的ARP缓存表内查找是否有IP=192.168.0.200这个表项,如果有,把这个表项里MAC地址填入报文以太网帧头部的目标MAC地址内,然后通过网卡发出去。如果没有,则系统的ARP协议层程序会先发一个ARP广播请求报文出去,请求目标MAC地址(为什么这个ARP请求报文是广播报文?因为不知道对方的MAC地址,又想让对方主机收到这个ARP请求报文,那么就发一个广播报文,让交换机把ARP请求报文发给这个局域网内除了发送方以外所有的主机,那么肯定可以到达目标主机) 那么ARP广播请求报文如何构造,各个字段的定义是什么?

08b448d48475c6c1a7083633ecdff358.png

destination MAC=FF:FF:FF:FF:FF:FF

目标MAC地址字段,FF:FF:FF:FF:FF:FF表明这是一个广播MAC地址,可以让交换机以广播的形式发出去

source MAC=02:00:00:00:00:1A

源MAC地址字段,它是源主机的MAC地址

OP=1

表明它是一条ARP请求报文

target IP=192.168.0.200

目标主机的IP地址,它是为了到达主机后,目标主机ARP协议层程序判断是否发给自己的依据,它是必须要有的,因为目标MAC地址是广播地址,意味着所有主机在数据链路层都能接收,只有通过和它比较,让不是目标主机的其他主机不回复,让目标主机回复

sender IP=192.168.0.100

sender MAC=02:00:00:00:00:1A

源主机的IP地址和MAC地址,这是让目标主机存入自己IP-MAC映射所使用的字段,也可以利用它们伪造ARP报文

target MAC=00:00:00:00:00:00

目标主机的MAC地址,ARP请求报文就是为了请求目标主机MAC地址,所以它是全0的

  1. 通过上面的ARP广播请求报文各字段的定义,得知ARP请求报文在送达交换机时,交换机根据目标MAC地址是广播地址,在除了发送方端口外的其他所有端口,都复制一份ARP请求报文,发出去给所有主机

  2. 接收到ARP请求报文的主机首先在数据链路层比较destination MAC,由于是广播MAC地址,可以接收,然后比较target IP

  3. 目标主机比较target IP发现一致后,首先会把ARP请求报文的sender IP和sender MAC存入自己的ARP缓存表(windows系统是这样,其他系统有可能先存入)

  4. 然后目标主机的ARP协议程序会给源主机自动回一个ARP响应报文

ARP响应报文

3747d2ab695082d9ca1534256d84907e.png

发送条件:被动响应或者主动发送

被动响应:

  1. 目标主机ARP协议层子程序收到ARP请求后,首先把ARP请求报文的sendeMAC和senderIP存入自己的ARP缓存表内,然后以单播的形式给源主机回ARP响应报文(为什么是单播?因为已经知道源主机的MAC地址了)。

  2. ARP响应报文的各字段

    ec40e18fdf93c34b412d601c4471f3b6.png

    destination MAC=02:00:00:00:00:1A

    目标MAC地址字段,02:00:00:00:00:1A是主机A的MAC地址,说明这是以单播的形式发送出去的

    source MAC=02:00:00:00:00:1B

    源MAC地址字段,它是源主机的MAC地址

    OP=2

    表明它是一条ARP响应报文

    target IP=192.168.0.100

    目标主机的IP地址,主机A收到ARP响应后并不会比较它

    sender IP=192.168.0.200

    sender MAC=02:00:00:00:00:1B

    源主机的IP地址和MAC地址,目标主机收到后,把它们存入自己的ARP缓存表

    target MAC=02:00:00:00:00:1A

    目标主机的MAC地址

  3. 当源主机收到ARP响应报文后,会把senderIP和senderMAC存入自己的ARP缓存表中作为动态条目,不管targetIP是否是自己

总结

  1. ARP协议是针对IPv4的寻址协议,IPv6有自己的寻址协议

  2. ARP请求报文和ARP响应报文都是不能跨网段的

  3. ARP请求报文以广播形式发送,ARP响应报文以单播形式发送

  4. ARP请求报文和响应报文的接收方都会把senderIP和senderMAC存入自己的缓存表内,也就是说,请求报文和响应报文都可以让自己主机的ip和mac被对方记录,不同的是,请求报文还会让对方自动给我回一个ARP响应报文,而响应报文只会让对方存入自己的ip和mac,而不会有回复(不是完全准确,免费ARP响应是会有回复的,后续会讲到)

  5. 只有ARP请求报文和ARP响应报文具有缓存ip和mac的功能,其他协议的message虽然也带有源mac和ip,但是并不能让目标主机把源ip和mac存入ARP缓存表内(当然ARP请求和响应报文存入ip和mac还需要判断其他条件,后续会讲到)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值