网络基础 — 浅析ARP协议

浅析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协议报头


猜你喜欢

转载自blog.csdn.net/dawn_sf/article/details/79203906