ARP地址解析协议

Zss 发表于:

ARP意为:地址解析协议,英文为:Address Resolution Protocol,用于IP地址到MAC地址的映射,查询某个IP的Host的硬件MAC地址

基于功能来考虑,ARP是链路层协议;基于分层/包封装来考虑,ARP是网络层协议,

以ARP协议为例,它的功能最终是获取到MAC信息,服务于链路层,从这点考虑,ARP是链路层协议;

但是从层次来看,ARP基于Ethernet协议,IP协议基于Ethernet协议,它们在Ethernet协议里面有独立的Type类型,前者是0x0806,后者是0x0800,既然ARP和IP协议”平起平坐”,那么IP是网络层,ARP难道就不是网络层?

那么为什么要查询MAC地址呢?

网络传输中规定两端的PC通信时一定需要对方发IP以及MAC地址,也验证了底层协议为上层协议提供服务,我知道了对方的IP,那么我还得知道它的物理网卡地址,这时候就需要使用到ARP协议来查询了

ARP应该是使用最为频繁的协议了

拿PING来做例子:首先PC1和PC2都同属一个广播域,那么正常情况下这两台PC是可以互通的,当PC1 开始ping PC2时,此时PC1和PC2相互之间是不知道对方的mac地址的

PING数据包是属于ICMP协议,它是属于网络层的协议,而ARP属于更加底层的链路层,那么链路层将为上层提供服务,怎么提供服务呢?

在PING报文发送出去前,会先发送ARP请求,这是属于一个广播,所以在此广播域中的Host均会收到此报文,然后PC2收到了以单播的形式回复给PC1告诉它PC2的MAC地址,此时PC1知道了PC2的mac就再发送ping包

当然这个IP-MAC的映射关系会写在PC的ARP表中,一段时间才会清除,在此段时间内PC会优先查询ARP表,如果没有对应的IP—MAC,那么才会发送请求来询问对方的MAC地址

ICMP的数据包自顶向下来封装数据,但是不知道对方的MAC地址,那么就得询问了

 

ARP请求和响应

ARP的请求是以广播的形式传输,在此广播域的所有PC都会收到,而ARP的响应式单播,只有发起询问的PC才会收到

ARP的数据格式,在科来数据包生成器中可以清晰的看到一下结构:

使用wireshark抓取得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

当两台pc不再同一个网段时

1.A与B不在一个网段,A查询自己的路由表,知道如果想和B通信则必须通过gateway 来中转,所以会在与gateway 直连的接口(假定 Ethernet接口)上请求gateway 的MAC地址。

A主机先通过广播一个ARP请求,找到本网络中的一个路由器的MAC地址,然后将数据包直接给路由器。

2.当路由收到数据包后,如果B主机在同网络中的话,这时通过ARP找到B主机,然后把数据包给B主机。

3.如果B主机不和A主机发送数据的路由器在同一网络内的话,则路由器会通过ARP协议找到下一跳的路由器,然后把数据包发送到该路由上,以此类推。