互联网或者任何IP网络中,运行IP协议的任何一台主机或者网络设备上都有一个ARP表,它记录着本网络中IP地址和MAC地址的映射,这个表由ARP协议自动管理和维护,也可手动添加删除和更新表项,如果ARP表出现错误,那数据传输将寸步难行。下面我们深入讨论它的重要性。
1.为什么需要ARP
这得从TCP/IP网络体系的数据流动说起。下图是TCP/IP体系结构的简单描述,也是TCP/IP相关协议关系的描述。
最下层为网络接口层,实质上TCP/IP对网络接口层没有任何的规定,网络接口层(对应标准参考模型OSI的物理层和数据链路层)实际是各种局域网、广域网技术,比如以太网、令牌环网、无限局域网、4G网络、5G网络等等。这些物理网络技术仅实现物理层和数据链路层的功能,在各自的网络内实现数据传输,采用各自的网络技术在网络内解决主机到主机的数据(帧)传输问题,这些物理网络技术一般采用硬件地址标识主机或网络节点,或者叫媒体访问控制地址(MAC地址)。
而TCP/IP中的IP协议利用IP地址进行寻址,一方面把各种网络技术统一起来,屏蔽了这些物理网络技术之间的差异性,另一方面通过路由协议实现了多种网络、多个网络的互连。IP协议的英文全称是Internet protocol,直接翻译即为网络互联协议。数据从IP层到数据链路层的转发就必然需要IP地址到物理地址(MAC地址)的转换,这就需要ARP地址解析协议来完成。
从上图,我们能清晰的知道,互联网上任何两台电脑上的应用程序A和B(准确地说是进程:运行着的程序)之间要进行通信,必然要经过如下的过程:A若要传输数据到B,A将数据按照应用层协议封装数据报文,交给TCP或者UDP封装成传输层数据报文,再由IP协议封装成IP数据包,交给数据链路层封装数据帧,在封装数据帧时,会判断B的IP地址和A是否在同一个IP网络内(判断方法用B的IP地址和A的子网掩码按位相与得出一个网络号,再与A的网络号相比较,相等则在同一子网),如果在同一子网内,A则需要知道B的MAC地址,才能进行数据帧的封装,如果不知道,就需要运行ARP协议,来广播查询B的MAC地址;查询到B的MAC地址后即可进行帧的封装,然后交给物理层进行bit流的传输。如果不在同一个网络内,A则按本机的IP路由表的指示将数据转发给目标IP地址C,同样需要使用C的MAC地址封装为数据帧,如果不知道C的MAC地址,也需要利用ARP协议进行广播查询。当数据帧到达目标主机B后,各层进行数据解封装,向上层传递相应数据,最终达到应用程序。
如果没有ARP表,在进行数据帧封装时就找不到目标IP地址对应的物理地址(MAC地址),因此维护正确的ARP表是极为重要的。不管利用WiFi还是以太网,或者4G、5G、FTTH等方式上网,都需要ARP协议的支撑,否则数据将无法传输。
2、如何管理维护ARP表
在Windows系统中,可以使用ARP命令来查看、管理本机的ARP表项。这里介绍三种用法。
(1)查看ARP表:arp -a
在命令窗口中,输入该命令,显示结果为:
其显示的有动态和静态2种类型,动态类型是系统ARP协议动态添加的,比如192.168.1.1,是本机的网关地址,其物理地址为ec-f8-eb-e7-6b-00。静态类型中的192.168.1.255是本网广播地址,对应的MAC地址为所有位全1,代表物理网络广播,当运行ARP协议解析某个IP地址时,用ff-ff-ff-ff-ff-ff作为数据链路层的广播地址。224、239开头的静态地址为组播地址,一般视频直播等应用使用该地址。255.255.255.255是默认广播地址。
(2)添加静态的ARP表项:arp -s 192.168.1.6 00-aa-00-62-c6-09
该命令在windows 10环境中需要管理员权限,可以运行powershell,开始菜单按右键,选择windows powershell,然后输入该命令。
运行成功系统没有任何提示,可以运行arp –a查看添加的表项,如下图。
(3)删除静态的ARP表项:arp -d 192.168.1.6
该命令在windows 10环境中也需要管理员权限。运行正确后系统无任何提示,表示删除成功。-d参数后只需要写将要删除的IP地址。
扩展:默认网关地址表项对于我们访问互联网极其重要,它是默认路由地址。网络中有时存在arp攻击(比如ARP病毒),其原理是:发送错误的默认网关ARP表项给目标主机,目标主机会更新该表项,导致目标主机默认网关的ARP表项错误,访问外网的所有数据帧被转发给错误的MAC地址,造成网络不可访问。如果出现这种问题,可以使用此命令手动方式添加静态的网关地址表项,保证正确数据转发。
MAC地址:MAC地址也叫物理地址、硬件地址,由网络设备制造商生产时烧录在网卡上的固定地址,我们笔记本电脑的无线网卡、手机中均有MAC地址。MAC地址的长度为48位(6个字节),通常表示为12个16进制数,其中前6个16进制数代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后6位16进制数AE-3C-40代表该制造商所制造的某个网络产品(如网卡)的系列号。只要不更改自己的MAC地址,MAC地址在世界上是唯一的。就如前面所讲的,MAC地址是数据链路层的地址,在网络中标识一个网络节点,数据帧结构中一般含有目的MAC,源MAC。