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. 课程5:Spring框架2016版视频--视频列表目录

    \day01视频\01-今天内容介绍.avi; \day01视频\02-spring的相关概念.avi; \day01视频\03-spring的ioc底层原理(一).avi; \day01视频\04- ...

  2. python - 上下文管理协议(with + __enter__ + __exit__)

    上下文管理协议: with + __enter__ + __exit__ #上下问管理协议: #with + __enter__ + __exit__ class Test(): def __init ...

  3. 公共模块定义/草案(Common Module Definition / draft - CMD草案)

    This specification addresses how modules should be written in order to be interoperable in browser-b ...

  4. layer弹出层的iframe页面回调

    $("#ChoiceBank").click(function () { var width = $("#content").css("Width&q ...

  5. POI读取Excel(xls、xlsx均可以)——(四)

    maven构建的项目-->pom.xml文件 eclipse提供Dependencies直接添加依赖jar包的工具:直接搜索poi以及poi-ooxml即可,maven会自动依赖需要的jar包: ...

  6. springMVC文件上传与下载(六)

    1..文件上传 在springmvc.xml中配置文件上传解析器 <!-- 上传图片配置实现类,id必须为这个 --> <bean id="multipartResolve ...

  7. 关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决

    转自:http://hi.baidu.com/qinfengxiaoyue/item/ff262ccfb53b4c2ba0b50a89 引自:http://blog.csdn.net/sptoor/a ...

  8. 【vim】保存文件没有权限 :w !sudo tee %

    每当你打开一个你没有写入权限的文件(比如系统配置文件)并做了一些修改,Vim 无法通过普通的 ":w" 命令来保存. 你不需要重新以 root 方式打开文件再进行修改,只需要运行: ...

  9. BZOJ 3498: PA2009 Cakes 一类经典的三元环计数问题

    首先引入一个最常见的经典三元环问题. #include <bits/stdc++.h> using namespace std; const int maxn = 100005; vect ...

  10. [学习笔记]Java代码中各种类型变量的内存分配机制

    程序运行时,我们最好对数据保存到什么地方做到心中有数.特别要注意的是内存的分配.有六个地方都可以保存数据: (1) 寄存器 这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部.然而 ...