第23章 RL-TCPnet之地址解析协议ARP
本章节为大家讲解ARP(Address Resolution Protocol,地址解析协议),通过前面章节对TCP和UDP的学习,需要大家对ARP也有个基础的认识。
(本章的知识点主要整理自网络)
23.1 初学者重要提示
23.2 ARP基础知识参考资料
23.3 ARP基础知识点
23.4 ARP函数
23.5 总结
23.1 初学者重要提示
通过前面几个章节对TCP和UDP的学习,需要初学者对ARP的基础知识点也有个认识。
23.2 ARP基础知识参考资料
为了对TCP和UDP有更全面的认识,需要对ARP协议的一些基础知识有个了解。大家可以从以下地址获得ARP协议基础知识:
- RFC826地址 : ftp://ftp.rfc-editor.org/in-notes/rfc826.txt 。
- wiki百科中文版:地址链接(这个是超链接)
- wiki百科英文版:地址链接(这个是超链接)
- 百度百科:地址链接(这个是超链接)
对于初学者来说,学习上面四个参考资料就够了。如果大家有网络方面的书籍,比如《TCP/IP详解》,也可以直接看书籍。
23.3 ARP基础知识点
(这里的知识点整理自上面的参考资料地址)
教程这里也对ARP的基础知识做个介绍,方便大家先有个大概的认识。
23.3.1 ARP简要说明
ARP(Address Resolution Protocol,地址解析协议)基本功能为透过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被NDP(Neighbor Discovery Protocol,邻居发现协议)所替代。
在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为委托ARP或ARP代理(ARP Proxy)。
在点对点链路中不使用ARP,实际上在点对点网络中也不使用MAC地址,因为在此类网络中分别已经获取了对端的IP地址。
23.3.2 ARP工作过程
工作条件:
- 主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01。
- 主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02。
工作过程:
当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:
- 第1步:根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。
- 第2步:如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
- 第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
- 第4步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
- 第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。
23.3.3 ARP缓存表
ARP缓存是个用来储存IP地址和MAC地址的缓冲区,其本质就是一个IP地址到MAC地址的对应表,表中每一个条目分别记录了网络上其他主机的IP地址和对应的MAC地址。每一个以太网或令牌环网络适配器都有自己单独的表。当地址解析协议被询问一个已知IP地址节点的MAC地址时,先在ARP缓存中查看,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域网查询。
为使广播量最小,ARP维护IP地址到MAC地址映射的缓存以便将来使用。ARP缓存可以包含动态和静态项目。动态项目随时间推移自动添加和删除。每个动态ARP缓存项的潜在生命周期是10分钟。新加到缓存中的项目带有时间戳,如果某个项目添加后2分钟内没有再使用,则此项目过期并从ARP缓存中删除;如果某个项目已在使用,则又收到2分钟的生命周期;如果某个项目始终在使用,则会另外收到2分钟的生命周期,一直到10分钟的最长生命周期。静态项目一直保留在缓存中,直到重新启动计算机为止。
电脑端的ARP缓存表获取方法如下:
- WIN+R组合键打开“运行”窗口,输入cmd。
- 弹出的命令窗口中,输入arp -a。
- 输入arp -a后,回车。
这就是电脑端的ARP缓存表。
23.3.4 ARP报文格式
为了把IP地址映射到48位以太网地址用于传输,需要一个体现地址转换协议的包格式。下面是含以太网首部数据的ARP报文格式:
- 以太网传输层
- 目标以太网地址:目标MAC地址。FF:FF:FF:FF:FF:FF (二进制全1)为广播地址。
- 源以太网地址:发送方MAC地址。
- 帧类型:以太类型,ARP为0x0806
- 以太网报文数据
- 硬件类型:如以太网(0x0001)、分组无线网。
- 协议类型:如IP网际协议(0x8000)、IPv6(0x86DD)。
- 硬件地址长度:每种硬件地址的字节长度,一般为6(以太网)。
- 协议地址长度:每种协议地址的字节长度,一般为4(IPv4)。
- 操作码:1为ARP请求,2为ARP回显,3为RARP请求,4为RARP应答。
- 源硬件地址:n个字节,n由硬件地址长度得到,一般为发送方MAC地址。
- 源协议地址:m个字节,m由协议地址长度得到,一般为发送方IP地址。
- 目标硬件地址:n个字节,n由硬件地址长度得到,一般为目标MAC地址。
- 目标协议地址:m个字节,m由协议地址长度得到,一般为目标IP地址。
23.3.5 ARP欺诈/ARP攻击
ARP欺骗(ARP spoofing),又称ARP毒化(ARP poisoning,网络上多译为ARP病毒)或ARP攻击,是针对以太网地址解析协议的一种攻击技术。此种攻击可让攻击者获取局域网上的数据包甚至可篡改数据包,且可让网络上特定电脑或所有电脑无法正常连接。
ARP欺骗是黑客常用的攻击手段之一,ARP欺骗分为二种:
- 一种是对路由器ARP表的欺骗。
第一种ARP欺骗的原理是——截获网关数据。它通知路由器一系列错误的内网MAC地址,并按照一定的频率不断进行,使真实的地址信息无法通过更新保存在路由器中,结果路由器的所有数据只能发送给错误的MAC地址,造成正常PC无法收到信息。
- 另一种是对内网PC的网关欺骗。
第二种ARP欺骗的原理是——伪造网关。它的原理是建立假网关,让被它欺骗的PC向假网关发数据,而不是通过正常的路由器途径上网。在PC看来,就是上不了网了,网络掉线了。
一般来说,ARP欺骗攻击的后果非常严重,大多数情况下会造成大面积掉线。有些网管员对此不甚了解,出现故障时,认为PC没有问题,交换机没掉线的“本事”,电信也不承认宽带故障。而且如果第一种ARP欺骗发生时,只要重启路由器,网络就能全面恢复,那问题一定是在路由器了。为此,宽带路由器背了不少“黑锅”。
----------------------------------
对于这个知识点,涉及到的知识点比较广泛,我们这里就为大家介绍这么多,更多相关知识可在如下地址学习:
23.4 ARP函数
关于ARP,RL-TCPnet提供了如下三个函数:
- arp_cache_ip
函数功能:根据已知的IP地址查找ARP缓存表中是否存在相应的MAC地址,如果没有的话,会强制RL-TCPnet网络协议栈进行解析。协议栈会向网络发一个arp请求,得到响应的话,会把IP地址和返回的MAC地址存到ARP缓冲区。
- arp_cache_mac
函数功能:根据已知的MAC地址查找ARP缓存表中是否存在相应的IP地址,如果没有的话,会强制RL-TCPnet网络协议栈进行解析。协议栈会向网络发一个arp请求,得到响应的话,会把MAC地址和返回的IP地址存到ARP缓冲区。
- arp_get_info
函数功能:根据IP地址返回ARP缓存表中记录的对应MAC地址或者根据MAC地址返回ARP缓存表中记录的对应IP地址,均支持。
关于这3个函数的详细讲解及其使用举例可以看教程第 3 章 3.4 小节里面说的参考资料 rlarm.chm 文件,我们这里就不再专门做例子进行说明了(注意,下面这几个函数都不支持重入,也就是不支持多任务):
23.5 总结
本章节就为大家讲解这么多,更多ARP的相关知识需要大家查阅相关书籍进行学习,或者网上搜索相关资料进行学习。
原文地址:https://www.cnblogs.com/armfly/p/9517789.html