欢迎分享,转载请注明来源:夏雨云
ARP报文被封装在以太网帧头部中传输,如图2所示,是ARP请求协议报文头部格式。 ARP请求协议报文头部格式
图2中黄色的部分是以太网(这里是Ethernet II类型)的帧头部。其中,第一个字段是广播类型的MAC地址:0XFF-FF-FF-FF-FF-FF,其目标是网络上的所有主机。第二个字段是源 MAC地址,即请求地址解析的主机MAC地址。第三个字段是协议类型,这里用0X0806代表封装的上层协议是ARP协议。
接下来是ARP协议报文部分。其中各个字段的含义如下:
硬件类型:表明ARP实现在何种类型的网络上。
协议类型:代表解析协议(上层协议)。这里,一般是0800,即IP。
硬件地址长度:MAC地址长度,此处为6个字节。
协议地址长度:IP地址长度,此处为4个字节。
操作类型:代表ARP数据包类型。0表示ARP请求数据包,1表示ARP应答数据包。
源MAC地址:发送端MAC地址。
源IP地址:代表发送端协议地址(IP地址)。 54com.cn
目标MAC地址:目的端MAC地址(待填充)。
目标IP地址:代表目的端协议地址(IP地址)。
ARP应答协议报文和ARP请求协议报文类似。不同的是,此时,以太网帧头部的目标MAC地址为发送ARP地址解析请求的主机的MAC地址,而源MAC地址为被解析的主机的MAC地址。同时,操作类型字段为1,表示ARP应答数据包,目标MAC地址字段被填充以目标MAC地址。网络设备有数据要发送给另一台网络设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。通过目的IP地址二获取的MAC地址的过程是由ARP(Address Resolution Protocol)协议来实现的。 数据链路层在进行数据封装的时候,需要目的MAC地址。 一台网络设备要发送数据给另外一台网络设时,必须要知道对方的IP地址。但是,仅有IP地址是不够的,因为IP数据报文必须封装成帧才能通过数据链路层进行发送,而数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。每一个网络设备在数据封装前都需要获取下一跳的MAC地址。IP地址由网络层来提供,MAC地址通过ARP协议来获取。ARP协议是TCP/IP协议簇中的重要组成部分,ARP能够通过目的IP地址发现目标设备的MAC地址,从而实现数据链路层的可达性。 ARP数据包格式: 关于ARP协议属于2层还是3层的讨论:https://networkengineering.stackexchange.com/questions/5064/on-which-layer-of-the-osi-model-does-the-arp-protocol-belong这里有句话很好:OSI只是一个模型,没有任何一个协议是完全属于哪一层的。 我们看帧结构,ARP数据直接包含在Ethernet_II中,我个人认为它可以归纳于二层。 网络设备通过ARP报文来发现目的MAC地址。ARP报文中包含以下字段: 1)Hardware Type:硬件地址类型,一般为以太网; 2)Protocol Type:表示三层协议地址类型,一般为IP; 3)Hardware Length和Protocol Length为MAC地址和IP地址的长度,单位是字节; (这个理论上可以不要,因为前面已经确定了硬件类型和协议类型) 4)Operation Code指定了ARP报文的类型,包括ARP request和ARP reply; 5)Source Hardware Address 指的是发送ARP报文的设备MAC地址; 6)Source Protocol Address指的是发送ARP报文的设备IP地址; 7)Destination Hardware Address指的是接收者MAC地址,在ARP request报文中,该字段值为0; 8)Destination Protocol Address指的是接受者的IP地址。 通过ARP协议,网络设备可以建立目标IP地址和MAC地址之间的映射。网络设备通过网络层获取到目的IP地址之后,还要判断目的MAC地址是否已知。 网络设备一般都有一个ARP缓存(ARP Cache),ARP缓存用来存放IP地址和MAC地址的关联信息。在发送数据前,设备会先查找ARP缓存表。如果缓存表中存在对方设备的MAC地址,则直接采用该MAC地址来封装帧,然后将帧发送出去。如果缓存表中不存在相应的信息,则通过发送ARP request报文来获得它。学习到的IP地址和MAC地址的映射关系会被放入ARP缓存表中存放一段时间。在有效期内,设备可以直接从这个表中查找目的MAC地址来进行数据封装,而无需进行ARP查询。过了这段有效期,ARP表现会被自动删除。 如果目标设备位于其他网络则源设备会在ARP缓存表中查找网关的MAC地址,然后将数据发送给网关,网关再把数据转发给目的设备。 在本例中,主机A的ARP缓存表中不存在主机C的MAC地址,所以主机A会发送ARP Request来获取目的MAC。ARP request报文封装在以太帧中。帧头中的源MAC地址为发送端主机A的MAC地址。此时,由于主机A不知道主机C的MAC地址,所以目的MAC地址为广播地址 FF-FF-FF-FF-FF-FF 。ARP request 报文中包含源IP地址,目的IP地址,源MAC地址,目的MAC地址,其中目的MAC地址的值为0。ARP request报文会在整个网络上传播,该网络中所有主机包括网关都会接受到此ARP request 报文。网关会阻止该报文发送到其他网络上。 所有主机接收到该ARP request报文后,会检查它的目的协议地址(一般是 00-00-00-00-00-00-00 与所有的匹配)字段与自身的IP地址是否匹配。如果不匹配,则该主机将不会响应该ARP request报文。如果匹配,则该主机会将ARP报文中的源MAC地址和源IP地址信息记录到自己的ARP缓存表中,然后通过ARP Reply报文进行响应。 主机C会向主机A回应ARP Reply报文。 ARP Reply 报文中的源协议地址是主机C自己的IP地址,目标协议地址是主机A的IP地址,同事Operation Code被设置为reply。ARP Reply报文通过单播传送。 主机A收到ARP Reply以后,会检查ARP报文中目的MAC地址是否与自己的MAC匹配。如果匹配,ARP报文中的源MAC地址和源IP地址会被记录到主机A的ARP缓存表中。ARP表项的老化超时时间缺省为1200秒(20min)。 位于不同网络的网络设备在不配置网关的情况下,能够通过ARP代理实现相互通信。 在上述例子的组网中,主机A需要与主机B通信时,目的IP地址与本机的IP地址位于不同网络,但是由于主机A未配置网关,所以它会将以广播形式发送ARP request报文,请求主机B的MAC地址。但是,广播报文无法被路由器转发,所以主机B无法收到主机A的ARP请求报文,当然也就无法应答。 在路由器上启用代理ARP功能,就可以解决这个问题。启用代理ARP后,路由器收到这样的请求,会查找路由表,如果存在主机B的路由表项,路由器将会使用自己的G0/0/0接口的MAC地址来回应该ARP request。主机A收到ARP reply后,将以路由器的G0/0/0接口MAC地址作为目的MAC地址进行数据转发。 免费ARP可以用来探测IP地址是否冲突。 主机被分配了IP地址或者IP地址发生变化后,必须立刻检测其所分配的IP地址在网络上是否是唯一的,以避免地址冲突。主机通过发送ARP request报文来进行地址冲突检测。 主机A将 ARP request 广播报文中的目的IP地址字段设置为自己的IP地址,该网络中所有主机包括网关都会接收到此报文。当目的IP地址已经被某一个主机或网关使用时,该主机或网关就会回应 ARP reply 报文。通过这种方式,主机A就能探测到IP地址冲突了。 总结: 1.网络设备在什么情况下回发送ARP request? 源设备在发送数据给目的设备前,会首先查看自身的ARP缓存,查找ARP缓存是否在目的设备的IP地址和MAC地址的映射。如果存在则直接使用,如果不存在则会发送ARP request。 2.网络设备什么时候会产生免费ARP? 当网络上的一个设备被分配了IP地址或者IP地址发生变化后,可以通过免费ARP来检查IP地址是否冲突。
赞
(0)
打赏
微信扫一扫
支付宝扫一扫
有10到15元左右的vps主机吗最好是能建网
上一篇
2023-08-12
高防服务器的防御值怎么选
下一篇2023-08-12
评论列表(0条)