由硬件交换的帧需要使用正确的硬件地址定位到正确的接口;否则,无法传输数据。
一个传统IPv4网络需要使用自已的地址: 32位的IPv4地址。一台主机要将一个帧发送到另一台主机,还需要要发往主机的物理地址
(这里的物理地址是数据帧即将要发往的主机,而不是数据帧最终要发往的主机)
地址解析协议
提供了IPv4地址和物理地址间的动态映射(自动执行随时间变化,不需要管理员重新配置)。就是能够通过ip地址获得物理地址。用的方法就是喊一声!
ARP仅用于IPv4, IPv6使用邻居发现协议,它被合并人ICMPv6
网络层地址为IP地址,由网络管理员,或者用户指定分配,可随时更改。
而数据链路层地址为物理地址,是在网卡出场的时候写入网卡中,不能更改。
地址解析就是建立这两个地址之间的映射关系。
两个局域网的主机之间传输的以太网帧包含IP数据报时,由48位以太网地址确定该帧的目的接口。只有数据帧达位于同一IP子网的系统时, ARP才能工作。(数据帧貌似一直都只在不同的子网中传播的吧。)
例如:
同一子网中的两台计算机要进行通信:
- 使用子网掩码判断目标主机与源主机位于同一子网中。(假设没有arp缓存)
在这一步的时候已经到了链路层 - 在一个共享的链路层网段上, 源主机ARP向所有主机发送一个称为ARP请求的以太网帧。这被称为链路层广播。
who has ..... - 某个主机使用请求中指出的IPv4地址,它需要响应一个ARP应答。
不同虚拟局域网中的主机不会收到 - 收ARP请求的源主机学习(也就是记录)IPv4到MAC地址的映射,并记录在内存中供以后使用。
- 源主机可将数据报封装在以太网帧中直接发送到目的主机。
由于这个以太网地址仅指向正确的目的主机,其他主机或路由器接收到这个数据包以检测物理地址与自己的不匹配,然后扔掉了。 - 同一子网中的路由器通信不需要经过路由器
他经过交换机!!!
同一网段内的两台主机通信是否需要路由器
ARP缓存
IPv4地址映射到硬件地址后,将这个这一个映射关系(也就是这个键值对)存起来,对应于高速缓存中的一个条目,其正常到期时间是条目创建开始后的20分钟。
使用arp -a
查看
动态是指主动学习(通过arp获得的),而静态就是手动输入。
linux下是一栏flag
,对应window的类型。
可能为C、M、P。
C类条目由ARP协议动态学习也就是接收到数据报就记录了, M类条目通过手工输人,而P类条目的含义是“发布”,也就是主动获取的。
帧格式
注意这个图,这是完整的以太网帧,黑色是有效荷载部分,所以他是链路层的,不是ip层的。
- DST:目的地址 6B
也就是接受这个数据帧的下一台主机的物理地址。
在arp中通常不知道采取询问,所以物理地址为全f
对于ARP请求,目的以太网地址ff:ff:ff:ff:ff:ff(全部为1)是广播地址,在同一广播域中的所有以太网接日可接收这些帧。 - SRC:源地址 6B
发送该数据帧主机的物理地址。 - 长度或类型 2B
arp中必须为0x0806。 - 接下来的 8B
长度/类型字段之后的前4个宇段指定了随后4个字段的类型和大小。
硬件类型字段指出硬件地址类型,对于以太网该值为1。
协议类型字段指出映射的协议地址类型。对于IPv4地址,该值为0x0800
硬件大小和协议大小分别指出硬件地址和协议地址的字节数,以太网中使用IPv4地址的ARP请求或应答.它们的值分别为6和4。物理地址长度6,ip地址长度4 - Op 2B
op字段指出该操作是ARP请求(1)、 ARP应答(2)、 RARP请求(3)或RARP应答(4)。
由于ARP请求和ARP应答的长度/类型字段相同.因此这个字段是必需的。 - 发送方物理地址,发送方协议地址 10B
- 接收方物理地址,发送方协议地址 10B
对于各arp请求,其目的硬件地址为全0
当一个系统接收到一个ARP请求.它填充自己的硬件地址.将两个发送方地址和接收方地址互换.将Op
字段设为2.然后发送生成的应答。
arp请求
嗯就这些。
arp应答
其目的主机物理地址应该被填充的。
目的主机发送ARP应答外,它还会在ARP缓存中保存请求者的硬件地址和IP地
arp缓存
一般有效期为20分钟,不完整的arp为3分钟(只发送了请求,但是没有收到回应)
软状态☞超时前没有被更新而丢弃的信息。
ARP代理
有那么一台无聊的主机,准们回答arp请求的。
这个作用没搞懂,用于隐藏目的主机。
比如,访问谷歌。但是,却被代理arp返回了错误的物理地址。我们和谷歌永别了。
主机不存在
如果尝试访问一个不存在的主机,会首先卡死在arp上,因为主机不存在,根本没有人会回应这条请求。
免费arp
与普通的arp请求一样,不期望收到回复,如果收到就是有冲突了
- 允许一台主机确定另一台主机是否配置相同的IPv4地址。
如果ip冲突,什么都不显示,就是不让你上网。 - 更改主机的物理地址(换硬件之类的)
ARP探测分组和通告分组
探测用于检测是否有使用这个ip的,通告用于高速别的主机,我已经使用了这个ip
通告之前需要先探测
ipv4地址冲突检测 ACD,使用arp分组,将发送方协议地址设置为9,避免污染已经缓存的arp缓存(如果ip地址被使用,那么可能已经缓存arp,所以要避免这种情况),这是与免费arp的主要区别。
如果收到arp回复,那么表明候选的ip(请求使用ip主机选择的ip地址)已经被使用。
如果没有收到请求,就会想广播域中发送2个arp通告,表明它已经在使用这个ip地址了。
arp通告将发送方协议地址和目的协议地址填充为候选的ipv4地址。
arp分配ip地址
使用主机配置嵌入式设备的ip
不常用,一般都是DHCP分配
但是有一些嵌入式设备不能手动获取的时候。
一个主机先生成一个ip-mac映射,其中mac为嵌入设备的物理地址,ip为任选一个不冲突的。
然后向嵌入设备发送一个数据包,此时设备接收到一个以自己物理地址为目标地址的数据帧时,这个设备可以用数据帧中的ip完成配置。
这需要嵌入设备的配合和主机的配合。