MAC地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如:08:00:20:0A:8C:6D就是一个MAC地址,其中前6位16进制数08:00:20代表网络硬件制造商的编号,它由IEEE(Istitute of Electrical and Electronics Engineers,电气与电子工程师协会)分配,而后3位16进制数0A:8C:6D代表该制造商所制造的某个网络产品(如网卡)的系列号。每个网络制造商必须确保它所制造的每个以太网设备都具有相同的前三字节以及不同的后三个字节。这样就可保证世界上每个以太网设备都具有唯一的MAC地址。
5.1认识ARP
地址解析协议(Address Resolution Protocol,缩写ARP)是一个通过解析网络层地址来找寻数据链路层地址的网络传输协议,它在IPv4中极其重要。
ARP最初在1982年的RFC 826中提出,随着时间的推移,IETF(互联网工程任务组)对其做了许多改进,扩充协议的定义,增加了逆向地址解析、反向地址解析等协议。
网络中的设备都有一个APR缓存表,存储了其它网络设备IP地址与MAC地址的对应关系。当发送设备向目标设备发送信息时,首先会检索APR缓存表来查找目标设备的MAC地址。若缓存表中没有存储,发送设备会在本地网络上广播发送一个ARP请求,目标设备接受后以单播方式进行ARP应答。这样发送设备便获得了目标设备的MAC地址,可以发送信息,同时也会更新自己的ARP缓存表。
ARP应用于IPv4中网络设备的通信,但在IPv6中使用NDP(邻居发现协议,Neighbor Discovery Protocol)替代了ARP,除了包含了ARP的功能,还通过ICMPv6实现更多能力,如路由器发现、地址自动配置等,支持多种数据链路层协议,使用组播和单播提高效率。
此外,ARP易受欺骗攻击,缺乏验证机制,例如可以伪造应答进行攻击。此外,大量的恶意请求也可致ARP缓存溢出。
5.1.1ARP的工作原理
在每台安装有TCP/IP协议的电脑或路由器里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的。
以主机A(192.168.38.10)向主机B(192.168.38.11)发送数据为例。
1.当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到就知道目标MAC地址为(00-BB-00-62-C2-02),直接把目标MAC地址写入帧里面发送就可。
2.如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在本地网络上广播发送一个ARP请求(ARP request),目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.38.11的MAC地址是什么?”。
3.网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的应答(ARP response):“192.168.38.11的MAC地址是00-BB-00-62-C2-02”,此应答以单播方式进行。这样,主机A就知道主机B的MAC地址,它就可以向主机B发送信息。同时它还更新自己的ARP缓存(ARP cache),下次再向主机B发送信息时,直接从ARP缓存表里查找就可。
5.1.2ARP的数据包
ARP是通过报文工作的,ARP报文分为ARP请求和ARP应答报文两种,报文长度28个字节,其中ARP报头是18个字节,包含硬件类型、上层协议类型、硬件地址长度、协议地址长度、操作类型5个字段。除去报头外,剩余20个字节分别表示源、目的MAC地址和协议地址。
1.以太网帧首部
- 目标以太网地址:目标MAC地址。FF:FF:FF:FF:FF:FF (二进制全1)为广播地址。
- 源以太网地址:发送方MAC地址。
- 帧类型:以太类型,ARP为0x0806。
2.ARP报文
- 硬件类型(HTYPE):如以太网(0x0001)、分组无线网。
- 上层协议类型(PTYPE):如网际协议(IP)(0x0800)、IPv6(0x86DD)。
- 硬件地址长度(HLEN):每种硬件地址的字节长度,一般为6(以太网)。
- 协议地址长度(PLEN):每种协议地址的字节长度,一般为4(IPv4)。
- 操作码:1为ARP请求,2为ARP应答,3为RARP请求,4为RARP应答。
- 源硬件地址(Sender Hardware Address,简称SHA):n个字节,n由硬件地址长度得到,一般为发送方MAC地址。
- 源协议地址(Sender Protocol Address,简称SPA):m个字节,m由协议地址长度得到,一般为发送方IP地址。
- 目标硬件地址(Target Hardware Address,简称THA):n个字节,n由硬件地址长度得到,一般为目标MAC地址。
- 目标协议地址(Target Protocol Address,简称TPA):m个字节,m由协议地址长度得到,一般为目标IP地址。
- ARP协议的参数由互联网号码分配局(Internet Assigned Numbers Authority, 简称IANA)负责标准化和维护。
- ARP协议的以太类型为0x0806。该类型出现于以太网帧格式中的以太类型字段。请注意区别此类型和ARP协议类型(PTYPE)。
5.1.3ARP工具程序
1.局域网通信:在同一局域网内的设备通信时,ARP用于解析IP地址到MAC地址,这是其最基本的应用场景。通过ARP请求和应答,设备能够学习到同一网络内其他设备的MAC地址,从而实现数据的准确传输。
2.跨网络通信:当通信发生在不同网络时,ARP可以结合路由信息,通过代理ARP或路由器的ARP表来解析目标MAC地址。例如,如果目的IP和本机IP不属于同一网段,ARP请求会查询网关的MAC地址,然后由网关继续转发数据包至目标网络。
3.网络诊断:ARP命令(如arp -a)可以用来诊断网络问题,例如IP地址冲突、网络连接问题等。
通过查看ARP缓存表,网络管理员可以识别和解决网络中的一些问题:
- arp -a或arp –g
用于查看缓存中的所有项目。-a和-g参数的结果是一样的,多年来-g一直是UNIX平台上用来显示ARP缓存中所有项目的选项,而Windows用的是arp -a(-a可被视为all,即全部的意思),但它也可以接受比较传统的-g选项。
- arp -a IP
如果有多个网卡,那么使用arp -a加上接口的IP地址,就可以只显示与该接口相关的ARP缓存项目。
- arp -s IP 物理地址
可以向ARP缓存中人工输入一个静态项目。该项目在计算机引导过程中将保持有效状态,或者在出现错误时,人工配置的物理地址将自动更新该项目。
- arp -d IP
使用该命令能够人工删除一个静态项目。