首页 > 其他分享 >计算机网络原理(TCP/IP协议四):地址解析协议

计算机网络原理(TCP/IP协议四):地址解析协议

时间:2022-11-18 23:44:15浏览次数:90  
标签:ARP 协议 请求 IP TCP 发送 地址 IPv4 主机

  • ARP
  • ARP缓存
  • ARP帧格式
  • ARP缓存超时
  • 代理ARP
  • 免费ARP和地址冲突检测
  • 与ARP相关的攻击

关于地址解析协议在之前计算机网络原理(六):链路层与局域网的4.1中就有原理的介绍,可以先参考之前的内容,这篇博客将更多的关注协议的细节做一些补充。

 一、ARP

IP协议的设计目的是为了跨越不同类型的物理网络的分组交换提供服务,这需要网络层软件使用的地址和低层硬件使用的地址之间进行转换。网络接口硬件通常有一个主要的硬件地址(例如以太网或802.11无线接口的48位地址)。硬件交换的帧需要使用正确的硬件地址定位到正确的接口,否则无法传输数据。但是一个传统的IPv4网络需要使用自己的地址:32位的IPv4地址。如果一台主机要将一个帧发送到另一台主机,仅知道这台主机的IP地址是不够的,还需要知道主机在网络中的有效硬件地址。操作系统软件必须知道目的主机的硬件地址,以便直接向它发送数据。对于TCP/IP网络,地址解析协议ARP提供了一种在IPv4地址和各种网络技术使用的硬件地址之间的映射。ARP仅用于IPv4,IPv6使用邻居发现协议,它被合并入ICMPv6(在后面的网络控制平面和Internet控制协议相关博客中会有详细的介绍)。

地址解析是发现地址之间的映射关系的过程,对于使用IPv4的TCP/IP协议族,这时运行的ARP来实现。ARP是一个通用的协议,从这个角度上来说,它被设计为支持多种地址之间的映射。实际上,ARP几乎总是用于32位IPv4地址和以太网的48位MAC地址之间的映射。

ARP提供从网络层地址到相关硬件地址的动态映射,这是因为它会自动执行和随时间变化,而不需要系统管理员重新配置。也就是说,如果一台主机改变它的网络接口卡,从而改变它的硬件地址,ARP可以在一定延时后继续正常运作。ARP操作通常与用户或系统管理员无关。

1.1基于一个本地Web服务的ARP示例

假设在浏览器打开一个网页,它首先是判断该服务位于本地还是远程,如果是远程的需要一台可达目的地的路由器。仅在到达同一IP子网的系统时,ARP才能工作。假设使用Web浏览器打开以下网址:http://10.0.0.1。这里的URL使用一个IPv4地址,而不是更常见的域名或主机名,这是为了明确这个服务是在内联网络中,即一个本地服务,以此来讨论直接交付的运行原理。随着嵌入式设备(打印机、VoIP适配器)使用內置Web服务器进行配置,这种本地服务器越来越常见。下面就是这个例子的直接交付和ARP的详细过程:

1.应用程序是Web浏览器,调用一个特殊的函数来解析URL,看URL是否包含主机名。这里是一个32位的IPv4地址10.0.0.1,就不会执行DNS的域名解析过程了,直接进入运输层相关操作;

2.应用程序要求TCP协议建立一条到10.0.0.1的连接;

3.通过向10.0.0.1发送一个IPv4数据报,TCP尝试向远程主机发送一个连接请求;

4.这里假设地址10.0.0.1使用与发送主机相同的网络前缀,数据报可被直接发送到这个地址而不经过路由器;

5.假设以太网兼容地址被用于IPv4子网,发送主机必须将32位的IPv4目的地址转换为48位的以太网地址。就是需要从逻辑Internet地址相对应的物理硬件地址进行转换。这就是ARP的功能,ARP工作在正常模式下,仅适用于广播网络,链路层能将一个消息交付到它连接的所有网络设备。如果是在非广播网络中,需要更复杂的映射协议。

6.在一个共享的链路层网段上,ARP向所有主机发送一个称为ARP请求的以太网帧,这被称为链路层广播。ARP请求包含目的主机的IPv4的地址(10.0.0.1),并寻找以下问题的答案:“如果你将IPv4地址10.0.0.1配置为自己的地址,请向我回应你的MAC地址”;

7.通过ARP,同一广播域中的所有系统可接收ARP请求,这个包括可能根本不运行IPv4或IPv6协议的系统,但不包括位于不同VLAN中的系统。如果某个系统使用请求中的IPv4地址,它仅需要响应一个ARP应答。这个应答包含IPv4地址(与请求相匹配)和对应的MAC地址。这个应答通常不是广播,而仅直接发送给请求的发送方。同时,接收ARP请求的主机学习IPv4(ARP请求帧会写到请求方的协议地址和MAC地址)到MAC地址的映射,并记录在内存中供以后使用。

8.ARP应答被原始请求的发送方接收,现在可发送引起这次ARP请求/应答交换过程的数据报。

9.发送方可将数据报封装在以太网帧中直接发送到目的主机,并使用由ARP交换学到的以太网地址作为目的地址。由于这个以太网地址仅指向正确的目的主机,所以其他主机或路由不会接收到这个数据报。因此,当仅使用直接交付时,并不需要经过路由器;

 1.2ARP缓存

ARP高效运行的关键是维护每个主机和路由器上的ARP缓存(表),该缓存使用地址解析为每个接口维护从网络层地址到硬件地址的罪行映射。当IPv4地址映射到硬件地址时,它对应于高速缓存中的一个条目,其正常到期时间是条目创建开始后的20分钟。在Linux或Windows中可以使用arp命令查看ARP缓存:

 arp -a

1.3ARP帧格式

 

上图显示了以太网中转换一个IPv4地址时常用的ARP请求和应答分组格式,前面14字节构成标准的以太网头部,假设没有802.1p/q或其他标记,其余部分由ARP协议来定义。ARP帧的前8个子直接是通用的,这个例子中剩余部分专用于将IPv4地址映射到48位的以太网地址。

对于ARP请求,目的以太网地址ff:ff:ff:ff:ff:ff(全部为1)是广播地址,在同一广播域中的所有以太网接口可接收这些帧,对于ARP,2字节的长度或类型字段必须为0x0806。

关于ARP帧结构中的字段大部分都可以从字面上了解它们就不做过多的介绍,其中Op字段指出该操作是ARP请求(值为1)、ARP应答(值为2)、RARP请求(3)、RARP应答(值为4)。

1.4ARP缓存超时

超时通常余ARP缓存中的每个条目相关,在大多数实现中,完整条目的超时为20分钟,而不完整条目的超时为3分钟。arp命令中允许管理员设置缓存条目永远不超时,当强制执行以此不存在主机的ARP请求时会生成一个不完整的条目,这是关于软状态的一个重要例子。软状态是指超时到达前没有更新而被丢弃的信息,如果网络条件发生改变,软状态有助于启动自动重新配置,因此很多Internet协议使用软状态。软状态成本是协议必须刷新状态以避免过期。

1.5代理ARP

代理ARP使一个系统可以回答不同主机的ARP请求,它使ARP请求发送者认为做出响应的系统就是目的主机,但实际上目的主机可能在其他地方(或不存在)。ARP代理并不常见,通常应避免它。

代理ARP也被称为混杂ARP或ARP黑客。两个物理网络相互隐蔽自己,在这种情况下,两个物理网络可使用相同的IP前缀,只要将中间的路由器配置为一个代理ARP,在一个网络中由代理响应对其他网络中主机的ARP请求。这种技术可以用于向一组主机隐藏另一组主机。这样做有两个常见原因:有些系统无法进行子网划分,有些系统使用比较旧的广播地址(全0的主机ID,而不是当前全1的主机)。

1.6免费ARP和地址冲突检测

免费ARP发生在一台主机发送ARP请求以寻找自己的地址时,这通常发生在主机启动时,当接口被配置为“上行”时常这样做。在免费ARP中发送方协议地址与目的协议地址相同,这也从协议的角度说明了免费ARP请求是寻找自己的硬件地址。

免费ARP为了达到两个目的:

1.允许一台主机确定另一台主机是否配置相同的IPv4地址,发送免费ARP的主机并不期望它的请求获得应答。但是,如果它接收到一个应答,通常显示的是错误消息“以太网地址...发送的重复IP地址”。这是对系统管理员和用户的警告,在同一个广播域中有一个系统配置出错(即有其他主机配置与当前主机相同的IPv4地址)。

2.如果发送免费ARP的主机以改变硬件地址(关闭主机或替换接口卡,然后重新启动主机),该帧导致任何接收广播并且其缓存中又该条目的其他主机,将该条目中的就硬件地址更新为与该帧一致。

IPv4地址冲突检测(ACD)

免费ARP提供的一些迹象显示,当多个站尝试使用IPv4地址,但它实际上没有对这种情况提供解决机制。在[RFC5227]描述了IPv4地址冲突检测(ACD):ACD定义了ARP探测分组和ARP通告分组。

ARP探测分组:它也是一个ARP请求分组,其发送方协议(IPv4)地址字段被设置为0。探测分组用于查看一个候选IPv4地址是否被广播域中的任何其他系统所使用,通过将发送方协议地址字段设置为0,避免候选IPv4地址被另一台主机使用时的缓存污染。

ARP通告分组:通告分组与探测分组相同,但要注意的是通告分组的发送发协议地址和目的协议地址被填充为IPv4地址,它用于告诉其他主机当前主机正在使用候选的IPv4地址。

ACD的执行方式:

当一个接口被启用或从睡眠中唤醒,或一个新链路建立时,这台主机在等待一个随机时间后发送三次ARP探测分组。

当探测被应答或受到其他相同目的地址的探测请求,就说明其他系统也在同时尝试获得候选地址IPv4。在这两种情况下,该系统将会显示一个地址冲突消息,并采用其他可选地址。

如果发送请求的主机没有发现冲突,它会间隔2秒向广播域发送两个ARP通告,以表明它现在使用这个IPv4地址。发送这些通告的目的是确保更新缓存地址映射,以正确反映发送方当前使用的地址。

当一台主机通告它正在使用的地址后,它会继续检查输入的ARP流量,如果查看到自己的地址出现在发送方协议地址字段中,说明其他系统与自己在使用相同的地址,这种情况有三种解决方案:①保留这个地址,但发送一个“防御性”ARP通告,如果冲突继续,则停止使用它;②不理会冲突,继续使用;③建议那些正真需要一个固定、稳定地址的系统使用。

 1.7与ARP相关的攻击

 与ARP相关的攻击一般包含三种情况:

使用代理ARP功能假扮主机,对ARP请求做出应答,这种代理攻击存在两种情况,一种是受害主机不存在,另一种是受害主机存在;第三种情况是ARP涉及静态条目处理,也就是修改地址映射表。

 关于这些攻击具体的解决方案到后面网络安全相关博客内容中介绍。

 

标签:ARP,协议,请求,IP,TCP,发送,地址,IPv4,主机
From: https://www.cnblogs.com/ZheOneAndOnly/p/16767549.html

相关文章

  • Javascript(笔记44) - ES7特性 - 指数操作符
    Array.prototype.includesincludes 方法用来检测数组中是否包含某个元素,返回布尔值;constmingzhu=['西游记','三国演义','红楼梦','水浒传'];console.log(mingzhu.includ......
  • 同步与异步 multiprocessing 进程对象多种方法
    目录同步与异步阻塞与非阻塞综合使用创建进程的多种方式前言windows系统创建进程的问题(重要)multiprocessing模块之Process展现异步创建进程的方式(一):使用Process()创建进程......
  • NOIP模拟赛Day1
    T1:算是一个小数学题,但是要一些大胆的想法,就是答案不会很大,直接暴力即可。PS:T1一般不会很难,如果感觉没思路可以尝试打表。T2:要求无权图最小环的数量,可以考虑环的求法,例......
  • RTSP协议的处理--RECORD
        一、ABLMediaServer的过程1.没做过多的处理,只是对协议进行回复。2.Session是在ANNOUNCE命令中得到。二、ZLMediaKit的过程1.Session也是在ANNOUNCE命令中得......
  • javascript-代码随想录训练营day3
    203.移除链表元素题目链接:https://leetcode.cn/problems/remove-linked-list-elements/题目描述:给你一个链表的头节点head和一个整数val,请你删除链表中所有满足No......
  • 同步与异步、阻塞与非阻塞、综合使用、创建进程的多种方式、进程间数据隔离、进程的jo
    同步与异步用来表达任务的提交方式同步 提交完任务之后原地等待任务的返回结果期间不做任何事异步 提交完任务之后不愿地等待任务的返回结果直接去做其他事有结果......
  • 单机10万TCP连接测试记录
    目录前言准备工作安装DotNet6环境服务端代码客户端代码编译测试记录失败尝试1(Linux可用端口范围限制)解决Linux端口范围限制查看端口范围修改端口范围失败尝试2(可用端口......
  • Windows安装fdfs_client_py_master.zip
    1.解压进入fdfs_client-py-master\fdfs_client目录下的storage_client.py注释fromfdfs_client.sendfileimport*importos,statimportstructimportsocketi......
  • 同步、异步与阻塞、非阻塞的概念、创建进程的多种方式及multiprocessing模块、进程间
    目录一、同步与异步同步异步二、阻塞与非阻塞阻塞非阻塞三、综合使用1.同步阻塞:2.同步非阻塞:3.异步阻塞:4.异步非阻塞:四、创建进程的多种方式进程的创建multiprocessing模块......
  • TypeScript 函数重载
    TypeScript函数重载发布于2020-03-1717:53:05阅读 3.4K0 一、可爱又可恨的联合类型由于JavaScript是一个动态语言,我们通常会使用不同类型的参数来调用同......