浅析ARP协议
MAC地址是用于物理上直接连接的机器相互通信,IP地址是用于不同网络中间的机器相互通信 ,这是由传统的以太网的拓扑结构决定的.
要想了解ARP的作用,首先需要分清两个"地址"(1)TCP/IP的32bit ip地址. 仅知道主机的IP地址不能让内核发送数据帧给主机.
(2)网络接口的硬件
地
址,它是一个48bit的值,用来标识不同的以太网或者令牌环网络接口. 在硬件层次上,进行数据交换必须有正
确的接口地址,内核必须知道目的
端的
硬件地址才能发送数据. 简而言之,就是在以太网当中,一台主机要把数据帧发送到同一个局
域网上的另一台主机时,设备驱动程序必须知道
以太网
地址才能发送数据,而我们只知道IP地址,这时就需要采用ARP协议将IP地址映
射为以太网地址. ARP协议只适用于局域网.
发送packet只能在数据链路层,由MAC地址来识别,当同一网络中的机器通信之时,需要预先知道对方的MAC地址,否则向本网络发送ARP
广播; 当不
同
网络的机器相互通信之时,需要知道网关的MAC地址,否则向本网络发送ARP广播; 正是因为不知道MAC地址才会发送广播.
知道的话,直接发送
packet. 对方需要知道收到的Packet的格式,才能够正确的通信. ARP就是其中的一种.
如果目的IP和自己在同一个网段的时候:
当IP层的ARP高速缓存表中存在目的IP对应的MAC地址时
,则调用网络接口send函数将数据提交给网络接口,网络接口完成
Ethernet Header + IP
+
CRC的封装,并发送出去:
当IP层的ARP高速缓存表中不存在目的IP对应的MAC地址时,则IP层将TCP的SYN缓存下来,发送ARP广播请求目的IP的MAC,受到ARP应答
之后,将应
答
之中的>IP地址,对应的MAC>缓存在本地ARP高速缓存表中,然后完成TCP SYN的IP封装,调用网络接口send函数,将数据
提交给网络接口,网络接
口
完成
Ethernet Header + IP + CRC的封装.
如果目的IP和自己不在同一个网段的时候,就需要将包发送给默认网关(路由器IP地址):
当默认网关IP层的ARP高速缓存表中存在默认网关对应的MAC地址时,则调用网络接口send函数将数据提交给网络接口,网络接口完成
Ethernet
Header + IP
+ CRC
当默认IP层的ARP告诉缓存表中不存在默认网关对应的MAC地址时,则IP层将TCP的SYN缓存下来,发送ARP广播请求默认网关的MAC,受
到ARP应答之
后
将应答之中的<默认网关地址,对应的MAC>缓存在本地的ARP高速缓存表当中,然后完成TCP SYN的IP封装,调用网络接
口send函数将数据提交给网
络
接口send函数将数据提交给网络接口,网络接口完成Ethernet Header + IP + CEC封装,并发送出去.
ARP的位置
OSI模型有七层,TCP在第四层传输层,IP在第3网络层,而ARP在第2层数据链路层.高层对低层有强依赖的,所以TCP的建立前要进行ARP
的请求和应
答. ARP高速缓存表在IP层使用,如果每次建立TCP连接都发送ARP请求,会降低效率,因此在主机交换机,路由器上都
会有ARP缓存表. 建立TCP连接
时先查询ARP缓存表,如果有效,直接读取ARP表项的内容进行第二层数据报的发送; 只有表失效时才进行
ARP请求和应答进行MAC地址的获取,以建
立TCP连接.
ARP高速缓存
ARP缓存是一个缓冲区,用来储存IP地址和MAC地址,本质就是<IP地址,MAC地址>的对应表,表中一个条目记录了网络上一个主机的
IP地址和其对应
的MAC地址. 每一个以太网或者令牌环网络适配器都有自己单独的表. 当地址解析协议被询问一个一直IP地址节点的
MAC地址时,现在ARP缓存中查看
,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域网查询.
ARP缓存中还包括动态和静态项目:动态项目随时间推移自动添加和删除,每一个动态ARP缓存项都有都设置了TTL,TTL为0时此项目
就从表中删除.
静态ARP缓存条目是永久的,可以使用TCP/IP工具手动添加和删除. 静态ARP缓存条目用来禁止节点发送对常用的本地
IPV4地址的ARP请求.
高速缓存的优点:从ARP高速缓存的使用中可以看到,ARP高速缓存可以减小广播量,进而减小网络通信量,提高
计算机之间的通信效率.
高速缓存的缺点: 造成安全隐患.
ARP协议报头