arp概念:
ARP(地址解析协议,Address Resolution Protocol)是一种网络协议,用于将网络层地址(如IPv4地址)转换为数据链路层地址(如MAC地址)。在局域网中,当一个设备需要与另一个设备通信时,它会使用ARP请求来查找目标设备的MAC地址,以便能够通过以太网等协议进行数据传输。ARP在以太网和IP网络中广泛应用。
免费arp:
当接口up/down或配置接口ip时都会进行dad
(DAD:duplicate address detection 重复地址检测,只要接口配置ipv4地址都要进行DAD,来确保ipv4的唯一性)
AR1:当AR1配置了g0/0/0口的ip地址时
arp-request|smac AR1 dmac FFFFFFFFFFFF(广播) type 0x0806 以太帧
------------------------------------------------------------------------------------------------->
三层网络层 二层数据链路层 化bit流从接口发出
arp-request封装:
sender mac AR1 ---源mac
sender ip :172.16.12.1 ---源ip
target mac 000000000000 -----目标mac
target ip 172.16.12.1 -----目标ip
AR2:当AR2收到了这个免费arp后
收到bit流
arp request | smac AR1 dmac FFFFFFFFFFFF type 0x0806 以太帧
格式化以太帧
1.读取二层头部====二层头部可以起到过滤数据的作用
如果是广播,dmac FFFFFFFFFFFF, 由于IG=1 所以是广播或者组播,读完确认是广播,收
如果是组播,dmac 01005e00001, 由于IG=1 所以是广播或者组播,读完确认是组播,看设备是否侦听此端口,如果不侦听,就不收
如果是单播,dmac 00005e00001 ,由于IG=0 所以是单播,读完之后对比是否是自己的入接口地址,如果是就是收,不是就不收。
2.如果收,检查type 由于type 0x0806 代表后面是arp的数据,二层头部拆除,提交数据给arp进程
3.arp进程,读取target ip ,检查target IP 是否是我自己如果是我自己的接口ip,地址冲突,回复arp-repry。如果不是我自己的接口ip ,则忽略
如果是AR2的接口ip,发送arp reply :
AR1收到后:
arp reply | smac AR2 dmac FFFFFFFFFFFF type 0x0806 以太帧
<--------------------------------------------------------------------------------------
arp reply 封装:
sender mac :AC2
sender ip :172.16.12.1
target mac :000000000000
tatget ip :172.16.12.1
格式化以太帧:
1.读取二层头部====二层头部可以起到过滤数据的作用
如果是广播,dmac FFFFFFFFFFFF, 由于IG=1 所以是广播或者组播,读完确认是广播,收
如果是组播,dmac 01005e00001, 由于IG=1 所以是广播或者组播,读完确认是组播,看设备是否侦听此端口,如果不侦听,就不收
如果是单播,dmac 00005e00001 ,由于IG=0 所以是单播,读完之后对比是否是自己的入接口地址,如果是就是收,不是就不收。
2.如果收,检查type 由于type 0x0806 代表后面是arp的数据,二层头部拆除,提交数据给arp进程
3.arp进程,发现是arp-reply ,target ip 是我的接口ip ,证明地址发生冲突,发生logg日志,接口不能用,报错通知管理员
本文为自己的理解