【RL-TCPnet网络教程】第23章 RL-TCPnet之地址解析协议ARP

第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协议基础知识:

对于初学者来说,学习上面四个参考资料就够了。如果大家有网络方面的书籍,比如《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欺骗发生时,只要重启路由器,网络就能全面恢复,那问题一定是在路由器了。为此,宽带路由器背了不少“黑锅”。

----------------------------------

对于这个知识点,涉及到的知识点比较广泛,我们这里就为大家介绍这么多,更多相关知识可在如下地址学习:

  • wiki百科中文版:地址链接(这个是超链接)。
  • wiki百科英文版:地址链接(这个是超链接)。
  • 百度百科:地址链接(这个是超链接)。

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

时间: 2024-08-29 00:45:47

【RL-TCPnet网络教程】第23章 RL-TCPnet之地址解析协议ARP的相关文章

《TCP/IP详解卷1:协议》第5章 RARP:逆地址解析协议-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(1)-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(2)-读书笔记 <TCP/IP详解卷1:协议>第4章 ARP:地址解析协议-读书笔记 <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议-读书笔记 1.引言 具有本地磁盘的系统引导

2016.7.8 计算机网络复习要点第四章之地址解析协议ARP

1.地址解析协议ARP:知道一个机器的IP地址,需要找到其相应的硬件地址:ARP协议的用途是为了从网络层使用的IP地址解析出在链路层使用的硬件地址: 2.由于是IP协议使用了ARP协议,因此通常就把ARP协议划归为网络层: 3.网络层使用的IP地址,但在实际网络的链路上传送数据帧时,最终还是必须使用该网络的硬件地址: 4.地址解析协议ARP解决IP地址和硬件地址的映射问题方法: **在主机ARP高速缓存区中应存放一个从IP地址到硬件地址的映射表: **当A主机要向本局域网上的某个主机B发送IP数

笔记-《数据通信与网络教程》-第一章

1. 网络拓扑结构(Network Topology) 1. 公共总线拓扑结构( Common Bus Top ology):它们通过一根单总线(一束并行线)进行通信.每个设备通过相应的接口侦听总线,检查数据传输.如果接口判断出数据时送往它所服务的设备的,它就从总线上读取数据并传给设备.当一个设备有数据需要传送时,其接口电路检测总线是否空闲,如果是就立刻发送数据.当两个设备同时检测到总线空闲并传输数据时会产生一个冲突信号,设备传输时继续监听总线,因此能检测到冲突信号,并停止传输,等待一段随机事件

《TCP/IP详解卷1:协议》第11章 UDP:用户数据报协议-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(1)-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(2)-读书笔记 <TCP/IP详解卷1:协议>第4章 ARP:地址解析协议-读书笔记 <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议-读书笔记 <TCP/IP详解卷1:协

【RL-TCPnet网络教程】第32章 RL-TCPnet之Telnet服务器

第32章      RL-TCPnet之Telnet服务器 本章节为大家讲解RL-TCPnet的Telnet应用,学习本章节前,务必要优先学习第31章的Telnet基础知识.有了这些基础知识之后,再搞本章节会有事半功倍的效果. 本章教程含STM32F407开发板和STM32F429开发板. 32.1  初学者重要提示 32.2  Telnet函数 32.3  Telnet配置说明(Net_Config.c) 32.4  Telnet调试说明(Net_Debug.c) 32.5  Telnet访问

Unity网络多玩家游戏开发教程第1章Unity自带网络功能

Unity网络多玩家游戏开发教程第1章Unity自带网络功能 Unity拥有大量的第三方插件,专门提供了对网络功能的支持.但是,大部分开发者第一次接触到的还是Unity自带的网络功能,也就是大家经常说到的Unity Networking API.这些API是借助于组件NetworkView发挥作用的,而它可以简化开发者大量的网络功能编码任务.本文选自<Unity网络多玩家游戏开发教程(大学霸内部资料)> NetworkView组件 在Unity中,NetworkView组件用于处理游戏在网络上

【RL-TCPnet网络教程】第26章 RL-TCPnet之DHCP应用

第26章     RL-TCPnet之DHCP应用 本章节为大家讲解RL-TCPnet的DHCP应用,学习本章节前,务必要优先学习第25章的DHCP基础知识.有了这些基础知识之后,再搞本章节会有事半功倍的效果. 本章教程含STM32F407开发板和STM32F429开发板. 26.1  初学者重要提示 26.2  DHCP函数 26.3  DHCP配置说明(Net_Config.c) 26.4  DHCP调试说明(Net_Debug.c) 26.5  DHCP检测过程 26.6  网络调试助手和

【RL-TCPnet网络教程】第30章 RL-TCPnet之SNTP网络时间获取

第30章      RL-TCPnet之SNTP网络时间获取 本章节为大家讲解RL-TCPnet的SNTP应用,学习本章节前,务必要优先学习第29章的NTP基础知识.有了这些基础知识之后,再搞本章节会有事半功倍的效果. 本章教程含STM32F407开发板和STM32F429开发板. 30.1  初学者重要提示 30.2  可用的NTP服务器 30.3  SNTP函数 30.4  SNTP配置说明(Net_Config.c) 30.5  SNTP调试说明(Net_Debug.c) 30.6  网络

【RL-TCPnet网络教程】第2章 嵌入式网络协议栈基础知识

第2章        嵌入式网络协议栈基础知识 本章教程为大家介绍嵌入式网络协议栈基础知识,本章先让大家有一个全面的认识,后面章节中会为大家逐一讲解用到的协议. 基础知识整理自百度百科,wiki百科等. 2.1   初学者重要提示 2.2   TCP/IP协议栈简介 2.3   TCP/IP参考模型 2.4   OSI参考模型 2.5   RL-TCPnet和参考模型的对应关系 2.6   网络协议收录文件RFC 2.7   以太网和IEEE 802.3 2.8   网线相关知识 2.9   总