Skip to content

Latest commit

 

History

History
53 lines (41 loc) · 9.67 KB

网络层.md

File metadata and controls

53 lines (41 loc) · 9.67 KB

ARP协议详解

ARP协议,可以说是在协议栈中属于一个偏底层的、非常重要的、又非常简单的通信协议。

  1. **ARP协议在协议栈中的位置?**ARP协议在协议栈中的位置非常重要,在理解了他的工作远离之后,也很难说它到底是网络层协议,还是链路层协议,因为它恰恰串联起了网络层和链路层。国外的大部分教程通常将ARP协议放在网络层。
  2. ARP协议解决了什么问题,地位如何?ARP协议,全称地址解析协议(Address Resolution Protocol),他解决的是网络层和链路层地址之间的转换问题。因为一个IP数据报在屋里上传输的过程中,总是需要直到吓一跳(物理上的下一个目的地)改去往何处,但IP地址属于逻辑地址,而MAC地址才是物理地址,ARP协议解决了IP地址转MAC地址的一些问题。
  3. **ARP工作原理?**只希望记住几个关键词:ARP表、广播问询、单播响应

MAC地址

MAC地址全称是媒体访问控制地址(Media Access Control Address)。如果说,互联网中每一个资源都有IP地址唯一标识(IP协议内容),那么一切网络设备都由MAC地址唯一标识。
可以理解为,MAC地址是一个网络设备真正的身份证号,IP地址只是一种不重复的定位方式,也可以理解为MAC地址是身份证号,IP地址是邮政地址。MAC地址也有一些别称,如LAN地址、物理地址、以太网地址等。
还有一点要知道的是,不仅仅是网络资源才有IP地址,网络设备也有IP地址,比如路由器。但从结构上说,路由器等网络设备的作用是组成一个网络,而且通常是内网,所以他们使用的IP地址通常是内网IP,内网的设备在与内网以外的设备进行通信时,需要用到NAT协议。
MAC地址的长度为6字节(48比特),地址空间大小有280万亿之多(2^48),MAC地址由IEEE统一管理与分配,理论上,一个网络设备中的网卡上的MAC地址是永久的。不同的网卡生产商从IEEE那里购买自己的MAC地址空间(MAC的前24比特),也就是前24比特由IEEE统一管理,保证不会重复。而后24比特,由各家生产商自己管理,同样保证生产的两块网卡的MAC地址不会重复。
MAC地址具有可携带行、永久性,身份证号永久的表示一个人的身份,不论他到哪里都不会改变。而IP地址不具有这些性质,当一台设备更换了网络,它的IP地址也就可能发生改变,也就是它在互联网中的定位发生了变化。
最后,记住,MAC地址有一个特殊地址:FF-FF-FF-FF-FF-FF(全1地址),该地址表示广播地址

ARP协议工作原理

ARP协议工作有一个大前提,那就是ARP表。
在一个局域网内,每个网络设备都自己维护了一个ARP表,ARP表记录了某些其他网络设备的IP地址-MAC地址映射关系,该映射关系以<IP, MAC, TTL>三元表的形式存储。其中,TTL为该映射关系的生存周期,典型值为20分钟,超过该时间,该条目标被丢弃。
ARP的工作原理将分两种场景讨论:

  1. 同一局域网内的MAC寻址
  2. 从一个局域网到另一个局域网中的网络设备的寻址。

同一局域网内的MAC寻址

假设当前有如下场景:IP地址为137.196.7.63的主机A,想要给同一局域网内的IP地址为137.196.7.14的主机B,发送IP数据报文。
再次强调,当主机发送IP数据报文时(网络层),进知道目的地的IP地址,并不清楚目的地的MAC地址,而ARP协议就是解决这一问题的。
为了达成这一目标,主机A将不得不通过ARP协议来获取主机B的MAC地址,并将IP报文封装成链路层帧,发送到下一跳上。在该局域网内,关于此将按照时间顺序,依次发生如下事件:

  1. 主机A检索自己的ARP表,发现ARP表中并无主机B的IP地址对应的映射条目,也就无从知道主机B的MAC地址。
  2. 主机A将构造一个ARP查询分组,并将其广播到所在的局域网中。

ARP分组是一种特殊报文,ARP分组有两类,一种查询分组,另一种是响应分组,他们具有相同的格式,均包含了发送和接收的IP地址、发送和接收的MAC地址。当然了,查询分组中,发送的IP地址,即为主机A的ip地址,接收的IP地址即为主机B的IP地址,发送的MAC地址也是主机A的MAC地址,但接收的MAC地址绝不会是主机B的MAC地址(因为这正式我们要问询的),而是一个特殊值-FF-FF-FF-FF-FF-FF,之前说过,该MAC地址是广播地址,也就是说,查询分组将广播给该局域网内的所有设备。

  1. 主机A构造的查询分组将在该局域网内广播,理论上,每一个设备都会受到该分组,并检查查询分组的接收IP地址是否为自己的IP地址,如果是,说明查询分组已经到达了主机B,否则,该查询分组对当前设备无效,丢弃之。
  2. 主机B收到了查询分组之后,验证是对自己的问询,接着构造一个ARP响应分组,该分组的目的地只有一个-主机A,发送给主机A。同时,主机B提取查询分组中的IP地址和MAC地址信息,在自己的ARP表中构造一条主机A的IP-MAC映射记录。

ARP响应分组具有和ARP查询分组相同的构造,不同的是,发送和接收的IP地址恰恰相反,发送的MAC地址为发送者本身,目标mAC地址为查询分组的发送者,也就是说,ARP响应分组只有一个目的地,而非广播。

  1. 主机A终将接收到主机B的响应分组,提取出该分组中的IP地址和MAC地址后,构造映射信息,加入到自己的ARP表中。

image.png
在整个过程中,有几点需要补充说明的是:

  1. 主机A想要给主机B发送IP数据报,如果主机B的IP-MAC映射信息已经存在于主机A的ARP表中,那么主机A无序广播,只需提取MAC地址并构造链路层帧发送即可。
  2. ARP表中的映射信息是有生存周期的,典型值为20分钟。
  3. 目标主机接收到了问询主机构造的问询报文后,将先把闻讯主机的IP-MAC映射存进自己的ARP表中,这样才能获取到相应的目标MAC地址,顺利的发送响应分组。

总结来说,ARP协议是一个广播闻讯,单播响应协议。

不同局域网内的MAC寻址

更复杂的情况是,发送主机A和接收主机B不在同一个子网内,假设一个一般场景,两台主机所在的子网由一台路由器联通。这里需要注意的是,一般情况下,我们说网络设备都有一个IP地址和一个MAC地址,这里说的网络设备,更严谨的说法应该是一个接口。路由器作为互联设备,具有多个接口,每个接口同样也应该具备不重复的IP地址和MAC地址。因此,在讨论ARP表时,路由器的多个接口都各自维护一个ARP表,而非一个路由器只维护一个ARP表。
接下来,回顾同一子网内的MAC寻址,如果主机A发送一个广播问询分组,那么A所在子网内的所有设备(接口)都将不会捕获该分组,因为该分组的目的IP地址在另一个子网中,本子网内不会有设备成功接收。那么,主机A应该发送怎样的查询分组呢?整个过程按照时间顺序发生的事件如下:

  1. 主机A查询ARP表,期望寻找到目标路由器的本子网接口的MAC地址。
    1. 目标路由器指的是,根据目的主机B的IP地址,分析出B所在的子网,能够把报文转发到B所在子网的那个路由器。
  2. 主机 A 未能找到目标路由器的本子网接口的 MAC 地址,将采用 ARP 协议,问询到该 MAC 地址,由于目标接口与主机 A 在同一个子网内,该过程与同一局域网内的 MAC 寻址相同。
  3. 主机 A 获取到目标接口的 MAC 地址,先构造 IP 数据报,其中源 IP 是 A 的 IP 地址,目的 IP 地址是 B 的 IP 地址,再构造链路层帧,其中源 MAC 地址是 A 的 MAC 地址,目的 MAC 地址是本子网内与路由器连接的接口的 MAC 地址。主机 A 将把这个链路层帧,以单播的方式,发送给目标接口。
  4. 目标接口接收到了主机 A 发过来的链路层帧,解析,根据目的 IP 地址,查询转发表,将该 IP 数据报转发到与主机 B 所在子网相连的接口上。到此,该帧已经从主机 A 所在的子网,转移到了主机 B 所在的子网了。
  5. 路由器接口查询 ARP 表,期望寻找到主机 B 的 MAC 地址。
  6. 路由器接口如未能找到主机 B 的 MAC 地址,将采用 ARP 协议,广播问询,单播响应,获取到主机 B 的 MAC 地址。
  7. 路由器接口将对 IP 数据报重新封装成链路层帧,目标 MAC 地址为主机 B 的 MAC 地址,单播发送,直到目的地。

image.png