ARP原理之广播请求单播回应
在多主机环境下,PC1现在发出的ARP请求包,怎么交到PC2手里?
这时,ARP协议就需要采用以太网的"广播"功能:将请求包以广播的形式发送,交换机或WiFi设备(无线路由器)收到广播包时,会将此数据发给同一局域网的其他所有主机。
广播包有一个共同特征:二层封装时目的MAC是全f(ffff.ffff.ffff)或三层封装时目的IP是全1(255.255.255.255)。
注明:广播根据所在层次可分为二层广播和三层广播,根据发生范围可分为本地广播和定向广播,(路由器转发定向广播)。
我们来看下这个ARP广播请求包接下来是如何工作的?
根据上图我们看到,PC1发送的请求广播包同时被其他主机收到,然后PC3和PC4收到之后(发现不是问自己)则丢弃。而PC2收到之后,根据请求包里面的信息(有自己的IP地址),判断是给自己的,所以不会做丢弃动作,而是返回ARP回应包。
ARP请求是通过广播方式来实现的,那么,PC2返回ARP回应包,是否也需要通过广播来实现呢?答案是否定的。大部分网络协议在设计的时候,都需要保持极度克制,不需要的交互就砍掉,能合并的信息就合并,能不用广播就用单播,以此让带宽变得更多让网络变得更快。
那么,ARP回应包是如何处理的?这里需要特别关注ARP请求包的内容,在上面的图解里面,ARP请求包的完整信息是:我的IP地址是IP1,MAC地址是MAC1,请问谁是PC2,你的IP2对应的MAC地址是多少?
简单来说,ARP请求首先有"自我介绍",然后才是询问。这样的话,PC2在收到请求之后,就可以将PC1的IP和MAC映射信息存储在本地的【ARP缓存表】,既然知道PC1在哪里,就可以返回ARP单播回应包。
ARP数据包解读
为了让大家更好的理解ARP协议以及广播和单播的概念,我们来看一下用Wireshark抓取到的真实网络中的ARP过程,通过数据包的方式来呈现,地址信息如下,部分MAC信息隐去。(建议初学者用GNS3配合Wireshark来抓取协议包进行分析,相比真实网络更加干净,方便分析)
主机1 <---> 主机2
主机1: IP1 10.1.20.64 MAC1:00:08:ca:xx:xx:xx
主机2: IP2 10.1.20.109 MAC2:44:6d:57:xx:xx:xx
【ARP请求包】
【ARP回应包】
【ARP协议字段解读】
Hardware type :硬件类型,标识链路层协议
Protocol type: 协议类型,标识网络层协议
Hardware size :硬件地址大小,标识MAC地址长度,这里是6个字节(48bti)
Protocol size: 协议地址大小,标识IP地址长度,这里是4个字节(32bit)
Opcode: 操作代码,标识ARP数据包类型,1表示请求,2表示回应
Sender MAC address :发送者MAC
Sender IP address :发送者IP
Target MAC address :目标MAC,此处全0表示在请求
Target IP address: 目标IP
ARP地址解析(不同网段)
1.实验拓扑图
2.配置两台PC的IP
3.配置路由器端口IP
<Huawei>system-view
Enter system view, return user view with Ctrl+Z.
[Huawei]sy R1
[R1]int G0/0/0
[R1-GigabitEthernet0/0/0]ip ad
[R1-GigabitEthernet0/0/0]ip address 192.168.1.254 24
Jun 29 2017 14:26:01-08:00 R1 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol IP
on the interface GigabitEthernet0/0/0 has entered the UP state.
[R1-GigabitEthernet0/0/0]dis this
[V200R003C00]
#
interface GigabitEthernet0/0/0
ip address 192.168.1.254 255.255.255.0
[R1-GigabitEthernet0/0/0]int G0/0/1
[R1-GigabitEthernet0/0/1]ip add
[R1-GigabitEthernet0/0/1]ip address 192.168.2.254 24
Jun 29 2017 14:29:02-08:00 R1 %%01IFNET/4/LINK_STATE(l)[1]:The line protocol IP
on the interface GigabitEthernet0/0/1 has entered the UP state.
[R1-GigabitEthernet0/0/1]dis this
[V200R003C00]
#
interface GigabitEthernet0/0/1
ip address 192.168.2.254 255.255.255.0
#
return
[R1-GigabitEthernet0/0/1]
4.在路由器上开启ARP代理
<R1>system-view
Enter system view, return user view with Ctrl+Z.
[R1]int G0/0/0
[R1-GigabitEthernet0/0/0]arp-pro
[R1-GigabitEthernet0/0/0]arp-proxy en
[R1-GigabitEthernet0/0/0]arp-proxy enable
[R1-GigabitEthernet0/0/0]
[R1-GigabitEthernet0/0/0]int G0/0/1
[R1-GigabitEthernet0/0/1]arp-pro
[R1-GigabitEthernet0/0/1]arp-proxy enab
[R1-GigabitEthernet0/0/1]arp-proxy enable
[R1-GigabitEthernet0/0/1]
5.在PC3上抓ARP包,并开始用PC3pingPC4
6.在PC4上抓ARP包
7.建立连接发送ping 包
PC3MAC:54-89-98-70-63-0B
PC4MAC:54-89-98-6D-65-AF
G0/0/1MAC:00-e0-fc-f4-06-8a
G0/0/0MAC:00-e0-fc-f4-06-89
在192.168.1.0网段抓包
在192.168.2.0网段抓包
说明数据包在跨网络传输的时候,源IP与目的IP不会改变,源MAC和目的MAC每经过一跳会变化。