网工学习之ARP详解
作者:互联网
- ARP作用
地址解析协议,是根据IP地址获取MAC地址的网络层协议,通常发生在首次通信,在通信后会将IP地址和MAC地址写入本地ARP缓存表中,下次请求时直接读取表中数据以节约时间。如果缓存表中没有对应的MAC地址,则会发送包含目标IP地址的ARP请求广播到局域网所有主机,并接受返回消息,以此获得对方的MAC地址。其他主机收到广播帧后进行解封装,发现是ARP广播包,然后查看自身MAC地址是否匹配,匹配则以单播的方式进行回应,不匹配则直接丢弃
- 提出假设
在同一网段的主机之间发送消息不需要经过网关,假如两台主机在同一网段,但却被路由器分割为两个物理网段,且不配置网关,这样两台主机是否能够互通?
- 实验
在模拟器中搭建如下拓扑
PC和路由器接口地址如下
端口 | IP地址 | 子网掩码 |
PC1 | 1.1.1.1 | 255.255.0.0 |
PC2 | 1.1.2.1 | 255.255.0.0 |
MSR GE0/0 | 1.1.1.2 | 255.255.255.0 |
MSR GE0/1 | 1.1.2.2 | 255.255.255.0 |
这样两台PC虽然在同一网段,但实际上被已经被路由器划分为两个不同的物理网段
先在PC1的0/1接口开启抓包,再打开PC1 ping PC2:
发现两台主机之间并不互通
打开wireshark查看刚才抓取的数据包
可以看出PC1共发出了三个ARP请求以及ARP通告,先打开通告查看它的数据包类型
ARP通告为广播发送,其中包含了发送方的IP与MAC地址,还有自己将继续使用的目标地址,相当于是告诉大家,这个IP地址我要用,我是XXX(MAC地址),作为发送方是不希望这个报文收到回应的,因为如果收到回应,意味着将要使用的IP地址已经有其他主机在使用,会产生冲突
再看看ARP请求报文的内容
从上图可以看出
硬件类型为以太网1;
协议类型为IPv4;
操作类型为0x0001,表示报文类型为ARP请求
以及包含了发送的IP及MAC地址,但接收方的MAC地址为0,并没有填写,只有接收方的IP地址,
这个数据包的大概意思就是我需要知道这个IP地址的MAC地址,如果知道就发给我,但并没有收到回应报文,因此PC1虽然虽然知道PC2的IP地址,但因为不知道对方的MAC地址,所以无法与对方建立联系
- 解决办法:
给两台PC都添加网关地址或者给路由器配置代理ARP,这里主要讨论ARP,因此暂不考虑第一种方式
进入路由器端口视图,开启代理ARP
在PC1的0/1端口开启抓包,然后在PC1上ping PC2
显示两台PC可以互通,打开抓包软件查看刚才抓取的数据包
可以发现与之前抓取的数据包相比,本次抓取的数据包多了ARP回应报文以及ICMP报文
打开ARP回应报文查看详细信息
可以看出回应报文和请求报文的报文格式基本是相同的,有部分区别:
操作类型的值变成了0x0002,表示这是ARP回应报文
发送方和接收方的IP地址与MAC地址与请求报文的发送方与接收方的IP和MAC地址互换了位置,表示这是从PC2所发出的,与请求报文的内容相关联来看,这个回应报文的大致意思就是PC2表示我有IP地址为1.1.2.1的MAC地址,我发给你
其次,我们还可以发现回应报文的数据链路层IP头部数据发生了变化
请求报文:
回应报文:
对比以上两图可以发现,请求报文中的接收方地址为: ff:ff:ff:ff:ff:ff:ff:ff:是一个广播地址,没有具体的接收方地址,只有发送方的MAC地址;而回应报文中则既有发送方的地址,也有接收方的地址。由此可以看出ARP是以广播发起请求,以单播发起回应。
- 再次提出假设
为什么在路由器端口上配置了代理ARP就两台主机就可以互通了呢?
- 验证
将抓包接口换成PC2的0/1口,查看它是如何回应PC1的ARP请求的
通过抓包发现,PC2并没有收到来自PC1的请求,而是收到了来自路由器0/1接口的ARP请求,其请求的内容为PC2的MAC地址,由此可以看出,路由器在配置代理ARP后,并没有转发PC1的ARP请求,而是将自己的地址换成PC2的,回应给PC1,再以PC1的名义去访问PC2.整个过程中PC1以为自己访问的是PC2,但实际上并没有,实际上PC1访问的是路由器,路由器再去访问的PC2
可以看出,开启ARP代理前后的区别就在于路由器会不会修改自身MAC地址;不开启的话,路由器不会发送自身MAC地址,PC1和PC2就无法建立通信;开启后,路由器会作为中间人代理PC1和PC2之间的通信
- 总结
经过以上实验不难得出结论:
- 每台主机会向全网发送ARP通告,告知全网自己所使用的IP地址与对应的MAC地址,以避免局域网中产生IP冲突
- 主机在已知对方IP,不知道对方MAC地址时,首先查看自己的MAC地址表,有对应的MAC地址就会直接发送,没有的话则会发出ARP请求
- 请求会以广播的形式发出,而接收到的主机会查看自身MAC表,如果不匹配,会直接丢弃,匹配则以单播的方式进行回应
- 如果两台主机在同一网段,被路由器隔离为两个物理网段(不在同一广播域),此时需要在路由器上对应端口开启ARP代理,才能使两台主机相互通信
- 配置代理ARP后,PC1在与PC2通信时,PC1并没有真正访问到PC2,而是路由器修改自身MAC地址,让PC1以为自己访问到了PC2,但实际上PC1是在访问路由器,路由器去访问的PC2,在整个过程中,路由器在其中处于代理人的身份,因此proxy-arp也叫做代理ARP
以上是我学习NE期间的学习总结,如有不对望各位大佬指正
标签:ARP,报文,地址,PC,MAC,详解,网工,路由器 来源: https://blog.csdn.net/qq_54049199/article/details/121537465