ARP协议分析
ARP协议分析 ARP协议简介 ARP全称为“Address Resolution Protocol”(地址解析协议)。其功能是将IP地址解析转换为MAC地址。因为IP地址工作在网络层,MAC地址工作在数据链路层,通常IP地址用于局域网之外的数据转发,而MAC地址用于局域网内的数据通信。当一台主机需要向同一局域网内的另一台主机发送数据时,它虽然知道对方的IP地址,但是最终数据需要以帧的形式在物理网络上传输,这个传输过程依赖于MAC地址,故需要一种机制将目标IP地址翻译成的对应的MAC地址。 为什么不能只用MAC或IP MAC地址工作在数据链路层,IP地址工作在网络层,它们其实负责的是不同板块的功能。MAC地址负责同一局域网内的数据定位,而IP则负责不同局域网之间的数据定位。如果只用MAC地址,因为MAC地址本身没有分层的结构,路由表将会变得极其庞大而难以管理。 而如果只用IP地址,因为IP地址已经包含了过多功能,在对IP数据包进行处理的时候会相对复杂,且路由器本身成本也更高,相比于使用一台路由器来管理,远不如用一台有硬件级MAC转发电路的交换机来得更为高效和划算,而且这也会导致路由器的角色混乱和性能下降。 ARP工作流程 ARP的工作流程简单讲就是先广播询问,后单播应答。 假设两台设备在同一局域网内,A设备知道B设备的IP地址,但不知道它的MAC地址,此时就可以启动ARP协议: 检查缓存表:主机A先检查自己的ARP缓存表(该缓存表可以避免重复广播),查看是否已有主机B的MAC地址。如果存在,则直接使用该地址构造数据帧。如果不存在,则进入ARP请求过程。 广播ARP请求:主机A在局域网内广播一个ARP请求报文,该报文包含主机A的IP和MAC,以及主机B的IP,而该报文的目标MAC地址设置为FF:FF:FF:FF:FF:FF用于广播,本地广播域内所有设备将会接收到这个请求。 单播ARP响应:只有主机B接收到广播并通过IP地址确定了该广播询问的是自己的MAC地址后,向主机A发送一个单播的ARP应答报文,里面包含了自己的MAC地址。 更新ARP缓存:主机B在接收到ARP请求后,就将主机A的MAC地址存入自己的ARP缓存。主机A在接受到主机B的应答报文后,也将主机B的MAC地址存入自己的ARP缓存。 正常通信:现在双方都知道了对方的MAC地址,就可以开始正常通信了,而在一段时间内,一因为双方ARP缓存都有对方的MAC地址,也无需要再次广播。 ARP报文格式 ARP时一个独立的三层协议,所以ARP报文在数据链路层不需要经过IP协议的封装,而是直接生成自己的报文。ARP报文可以分为ARP请求报文和ARP应答报文两种,但是它们的格式可以统一为同一种格式: 名称 大小(字节) 功能 硬件类型 2 表示ARP报文可以在哪种网络上传输,值为1时表示以太网地址。 上层协议类型 2 表示硬件地址要映射的协议地址类型,映射IP地址时的值为0x0800。 MAC地址长度 1 标识MAC地址长度,以字节为单位,此处为6。 IP地址长度 1 标识IP得知长度,以字节为单位,此处为4。 操作类型 2 指定本次ARP报文类型。1标识ARP请求报文,2标识ARP应答报文。 源MAC地址 6 发送方的MAC地址。 源IP地址 4 发送方的IP地址。 目的MAC地址 6 接收方的MAC地址。若为请求报文,因为当前不知道该地址,则此时全为0,即00:00:00:00:00:00,表示任意地址。 目的IP地址 4 接受方的IP地址。 ARP帧格式 ARP报文并非直接在网络层发送和使用的,还需要向下传输到数据链路层,此时需要再次封装。以以太网为例,ARP报文传输到以太网数据链路层后会形成ARP帧,ARP帧是在ARP报文前面添加了一个以太网帧头,以太网帧头如下表所示: 名称 大小(字节) 功能 目标MAC地址 6 接收方的MAC地址。若为请求报文,则为广播帧,设置为广播地址FF:FF:FF:FF:FF:FF。 源MAC地址 6 发送方的MAC地址。 帧类型 2 表示帧封装的上层协议,ARP帧封装的ARP报文,所以此处填ARP的协议号0x0806。