ARP概述

为什么要用ARP?即ARP的作用

(1) TCP/IP 的32bit的IP地址,仅知道主机的IP地址不能让内核发送数据帧给主机

(2) 网络接口的硬件地址,它是一个48bit的值,用来标识不同的以太网或令牌环网络接口

在硬件层次上,进行数据交换必须有正确的接口地址,内核必须知道目的端的硬件地址才能发送数据

在以太网中,一台主机要把数据帧发送到同一局域网上的另一台主机时

设备驱动程序必须知道以太网地址才能发送数据

而我们只知道IP地址,这时就需要采用ARP协议将IP地址映射为以太网地址

( 以太网地址即:硬件地址 MAC )

ARP在OSI模型中的位置

OSI模型有七层,TCP在第4层传输层,IP在第3层网络层,而ARP在第2层数据链路层

高层对低层是有强依赖的,所以TCP的建立前要进行ARP的请求和应答

ARP高速缓存表在IP层使用

如果每次建立TCP连接都发送ARP请求,会降低效率,因此在主机、交换机、路由器上都会有ARP缓存表

建立TCP连接时先查询ARP缓存表,如果有效,直接读取ARP表项的内容进行第二层数据包的发送;

只有表失效时才进行ARP请求和应答进行MAC地址的获取,以建立TCP连接

ARP高速缓存

每个主机都有一个ARP高速缓存表,这样避免每次发包时都需要发送ARP请求来获取硬件地址

默认老化时间是20分钟,利用arp -a命令可以查看显示系统中高速缓存的内容

Windows下arp -d命令可以清除arp高速缓存表

ARP分组帧格式

字段1 ARP请求的目的以太网地址,全1时代表广播地址

字段2 发送ARP请求(源主机)的以太网地址

字段3 以太网帧类型;于ARP协议,该字段为0x0806;对于RARP协议,该字段为0x8035

字段4 硬件地址的类型,硬件地址不只以太网一种,是以太网类型时此值为1

字段5 表示要映射的协议地址的类型,要对IPv4地址进行映射,此值为0x0800。

字段6和7表示硬件地址长度和协议地址长度,MAC地址占6字节,IP地址占4字节。

字段8 操作类型字段,ARP请求(1),ARP应答(2),RARP请求(3),RARP应答(4)

字段9 发送端ARP请求或应答的硬件地址,这里是以太网地址,和字段2相同。

字段10 发送ARP请求或应答的IP地址

字段11和12是目的端的硬件地址和协议地址。

下边两张图,分别是,ARP请求包和响应包

代理ARP

代理ARP就是通过使用一个主机(通常为router)

来作为指定的设备使用自己的 MAC 地址来对另一设备的ARP请求作出应答

为什么要用代理ARP

先要了解,路由器的重要功能之一就是把局域网的广播包限制在该网内,阻止其扩散,否则会造成网络风暴。

ARP请求是个广播包,它询问的对象如果在同一个局域网内,就会收到应答

但是如果询问的对象不在同一个局域网该如何处理?路由器就提供的代理ARP为这个问题提供了解决方案。

工作过程

两台主机A和B处于同一网段但不同的广播段时,主机A发送ARP请求主机B的MAC地址时

因为路由器不转发广播包的原因,ARP请求只能到达路由器

如果路由器启用了代理ARP功能,并知道主机B属于它连接的网络

那么路由器就用自己接口的MAC地址代替主机B的MAC地址来对主机A进行ARP应答

主机A接收ARP应答,但并不知道代理ARP的存在

优点:

代理ARP能在不影响路由表的情况下添加一个新的Router,使子网对该主机变得透明化

一般代理ARP应该使用在主机没有配置默认网关或没有任何路由策略的网络上

缺点:

从工作工程可以看到,这其实是一种ARP欺骗。

而且,通过两个物理网络之间的路由器的代理ARP功能

其实互相隐藏了物理网络,这导致无法对网络拓扑进行网络概括。

此外,代理ARP增加了使用它的那段网络的ARP流量,主机需要更大的ARP缓存空间

也不会为不使用ARP进行地址解析的网络工作

RARP:逆地址解析协议

将局域网中某个主机的物理地址转换为IP地址

比如局域网中有一台主机只知道物理地址而不知道IP地址

那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答

RARP协议广泛应用于无盘工作站引导时获取IP地址。

RARP允许局域网的物理机器从网管服务器ARP表或者缓存上请求其IP地址。

存在的问题

RARP通过非常精简的交互实现了IP地址的获取,但同时也暴露了一些问题:

① RARP Server必须提前将MAC和IP的映射静态绑定在本地;

若没有提前绑定,则电脑用自己MAC询问时,Server也不会回应;

② RARP Server只能给电脑分配IP地址,不包括其他信息,包括网关、DNS等信息;

③ RARP基于二层封装,只能运行在同一网段;每个网段分配地址,都需要一个RARP Server。


在RARP的基础上,后面又有了Bootp协议,直译过来便是"启动协议",功能同RARP

也是用于电脑接入网络时,用来获取IP地址的

但是毕竟做了增强,Bootp协议能让电脑启动时不仅仅获取IP地址

而且能获取到网关地址从而让电脑实现跨网段通信


Bootp协议虽然让电脑能够获取到更多的信息,但是仍然没有解决最大的问题:

服务器仍然需要提前手工绑定MAC和IP地址,而对于现在的移动网络或者公共网络而言,这根本无法实现。

因为用户什么时候接入,接入的MAC是多少,管理员没法提前知道。

这就有了后面的DHCP,DHCP通过动态分配的方式解决了这个诟病

并且通过DHCP中继技术实现了跨网段地址分配,实现了全网IP地址的统一管理。

小结:

RARP是一种逝去的地址分配技术,是Bootp和DHCP的鼻祖

目前我们的电脑基本不会用到这个协议,只有部分无盘工作站等情况需要用到

IARP反向地址解析协议

(Inverse Address Resolution Protocol)是DLCI到IP的映射,他应用的场景不是以太网,而是在帧中继网络里面

DLCI即数据链路连接标识(Data Link Connection Identifier)

是帧中继网络里面的二层地址,好比以太网里面的MAC地址,用于标记帧中继里面的虚拟专线

帧中继协议是一种统计复用的协议,它在单一物理传输线路上能够提供多条虚电路

DLCI由SAPI和TEI组成,用来唯一的识别一个数据链路连接

DLCI只具有局部意义,即交换机上不同的端口可以使用相同的DLCI号

IARP不像ARP协议可以实时交互,它是周期性运行的

通信双方若丢失IARP映射表,则需要等待到固定的时间交互才能重新生成并通信。

另外不同厂商不同型号对IARP的兼容性也可能不同。

基于这些原因,一般建议直接关闭IARP协议,采用静态绑定的方式生成映射表

总结

ARP是把IP地址转换为MAC地址的协议;一般ARP协议只适用于局域网

RARP用于实现MAC到IP的映射,本质就是为了获取IP地址,是Bootp和DHCP协议的鼻祖;

IARP用于实现帧中继网络中DLCI到IP地址的映射,生成帧中继映射表(类似ARP表),实现数据封装与通信;

相比ARP、免费ARP、代理ARP、ARP攻防等技术,RARP和IARP随着技术的更新迭代正在退出历史舞台

成为"被遗忘的兄弟协议" (对于初学者来说,也算是个好事,因为终于不用"翻转""反向""逆向"各种分不清了)

ARP和RARP协议详解的更多相关文章

  1. ARP缓存表的构成ARP协议全面实战协议详解、攻击与防御

    ARP缓存表的构成ARP协议全面实战协议详解.攻击与防御 1.4.3  ARP缓存表的构成 在局域网的任何一台主机中,都有一个ARP缓存表.该缓存表中保存中多个ARP条目.每个ARP条目都是由一个IP ...

  2. ARP协议详解之Gratuitous ARP(免费ARP)

    ARP协议详解之Gratuitous ARP(免费ARP) Gratuitous ARP(免费ARP) Gratuitous ARP也称为免费ARP,无故ARP.Gratuitous ARP不同于一般 ...

  3. ARP协议详解之ARP动态与静态条目的生命周期

    ARP协议详解之ARP动态与静态条目的生命周期 ARP动态条目的生命周期 动态条目随时间推移自动添加和删除. q  每个动态ARP缓存条目默认的生命周期是两分钟.当超过两分钟,该条目会被删掉.所以,生 ...

  4. 【转载】TCP /IP协议详解

    首先,TCP/IP不是一个协议,而是一个协议族的统称. 里面包括了IP协议,IMCP协议,TCP协议,以及http.ftp.pop3协议等等. TCP/IP协议分层 提到协议分层,我们很容易联想到IS ...

  5. TCP /IP协议详解【转】

    转自:https://www.jianshu.com/p/0cf648510bce?utm_campaign=maleskine&utm_content=note&utm_medium ...

  6. 入木三分学网络第一篇--VRRP协议详解第一篇(转)

    因为keepalived使用了VRRP协议,所有有必要熟悉一下. 虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是解决局域网中配置静态网关时,静 ...

  7. 第3章 TCP协议详解

    第3章 TCP协议详解 3.1 TCP服务的特点 传输协议主要有两个:TCP协议和UDP协议,TCP协议相对于UDP协议的特点是 面向连接使用TCP协议通信的双方必须先建立连接,完成数据交换后,通信双 ...

  8. linux高性能服务器编程 (三) --TCP协议详解

    第三章 IP协议详解 TCP协议是TCP/IP协议族中的另外一个重要的协议,与IP协议相比,TCP协议更高进应用层.一些重要的socket选项都和TCP协议相关.这一章主要从如下方面学习: 1)TCP ...

  9. [转]VRRP协议详解

    原文地址:VRRP协议详解 文中涉及缩略语 缩略语 英文全名 中文解释 VRRP Virtual Router Redundancy Protocol 虚拟路由器冗余协议 NQA Network Qu ...

随机推荐

  1. js获取对象的最后一个

    Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 (两者的主要区别是 一个 for-i ...

  2. Ubuntu/Debian 微信安装

    1. 更新系统 $ sudo apt-get update $ sudo apt-get install git-core curl build-essential openssl libssl-de ...

  3. Latex 公式居中

    这么简单的功能要是还要加工具包,LaTeX也不用混了~ 公式用\[...\]来写可以达到公式居中效果. 或者在equation环境外加center环境: \begin{center} \begin{e ...

  4. Majority Element(169) && Majority Element II(229)

    寻找多数元素这一问题主要运用了:Majority Vote Alogrithm(最大投票算法)1.Majority Element 1)description Given an array of si ...

  5. Linux命令:pigz多线程压缩工具【转】

    学习Linux系统时都会学习这么几个压缩工具:gzip.bzip2.zip.xz,以及相关的解压工具.关于这几个工具的使用和相互之间的压缩比以及压缩时间对比可以看:Linux中归档压缩工具学习 那么P ...

  6. springboot系列十四、自定义实现starter

    一.starter的作用 当我们实现了一个组建,希望尽可能降低它的介入成本,一般的组建写好了,只要添加spring扫描路径加载spring就能发挥作用.有个更简单的方式扫描路径都不用加,直接引入jar ...

  7. Android:注册登录

    注册登录的实现 先在layout里新建一个xml文件: //login.xml <?xml version="1.0" encoding="utf-8"? ...

  8. PYTHON-函数对象,嵌套,名称空间与作用域,闭包函数

    一 函数是第一类对象,即函数可以当作数据传递 1 可以被引用 2 可以当作参数传递 3 返回值可以是函数 3 可以当作容器类型的元素 def foo(): return len f = foo pri ...

  9. STM32应用实例十:简析STM32 I2C通讯死锁问题

    I2C接口是一种使用非常普遍的MCU与外部设备的接口方式,在STM32中也集成了I2C接口,我们也常常使用它来与外围的传感器等设备通讯. 最近在我们使用STM32F1VET6读取压力和温湿度传感器数据 ...

  10. vue2之 missing param for named route "xxxx"

    场景: 解决方法:可以做的是将其包含router-link在适当的位置v-if,以便在您的异步数据实际到达之前不会尝试渲染. html代码: <div id="app" cl ...