我想把数据包发给一个ip地址是xx.xx.xx.xx的主机,可是我不知道他的mac,怎么办?哦,我知道了,我去群里边吼一声吧:谁的ip是xx.xx.xx.xx,请把你的mac给我!!!

 ARP有什么用?

ARP协议Address Resolution Protocol地址解析协议
      在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧之前将目标主机的IP地址转换成目标主机的MAC地址的过程。ARP协议的基本功能就是通过目标主机的IP地址,查询目标主机的MAC地址,以保证通信的顺利进行。协议又称做服务,ARP协议也即ARP服务,提供把IP地址转换成MAC地址的服务!

在现行寻址机制中,主机的以太网网卡只能识别MAC地址,而不能识别IP地址,若数据帧中不指明主机B的MAC 地址,主机B的网卡不能识别该帧是发给自己的,因此主机A仅知道主机B的IP地址还不够,还必须知道主机B的MAC地址,才能完成对主机B的访问;网络之间是用IP地址寻址,网络之内(同一物理网段或称IP子网)是用MAC地址寻址。

为了通俗易懂的解释ARP协议的作用,这里就举一个简单的PING命令例子:
      假设在一个局域网中,(注意这里的前提是两台主机在同一局域网中)我们的计算机IP地址是192.168.1.1,现在DOS窗口中执行这个命令:ping192.168.1.2。该命令会通过ICMP协议发送ICMP数据包。该过程需要经过下面的步骤:
      1、应用程序构造数据包,该步骤是产生ICMP包,然后把它提交给内核(网卡驱动程序);
      2、内核检查是否能够转化该IP地址为MAC地址,也就是在本地的ARP缓存中查看IP-MAC对应表;
      3、如果存在该IP-MAC对应关系,那么跳到步骤7;如果不存在该IP-MAC对应关系,那么接续下面的步骤;
      4、内核进行ARP广播,即发送 ARP Request,向整个网络中大喊,这个IP是谁的,这个IP是谁的(这个ARP Request中包含有我们计算机的MAC地址;
      5、当192.168.1.2主机接收到该ARP请求后,就发送一个ARP 回应,即ARP REPLY命令,说道:这个IP是我的,你看这是我的MAC地址(ARP Request中包含自己的MAC地址);
      6、我们的计算机获得192.168.1.2主机的IP-MAC地址对应关系,就保存到自己的ARP缓存中;
      7、内核将把目标主机IP转化为MAC地址,然后封装在以太网头结构中,再把数据发送出去;
      8、这样主机B看到发送过来的数据包包头里有自己的MAC地址,才会识别它,噢,这个数据是发送给我的(当数据包包头里只有B的IP地址时,主机B会不认识它,不去接收这个数据包)

IP地址就像人的姓名,MAC地址就像人的身份证,当一个包裹发送过来,上面写着,是给张三的,但是叫张三的多了,张三不会去接收,但是包裹上面写了张三的身份证号码,张三一看,啊,是我的,身份证是唯一的,他才接收。那IP的作用是什么呢?IP地址具有全网范围内的寻址能力,主机A和B可能分别处在不同网络,主机A要访问主机B首先要知道主机B的IP地址,不然找不到主机B所在的网络。也就是说有了主机B的IP地址,主机A会知道主机B在哪里,知道它所在的网络,但不会把数据给它,只有得到它的MAC地址,之后,才会给它,就像验证身份证一样。
  使用arp -a命令就可以查看本地的ARP缓存内容,所以,执行一个本地的PING命令后,ARP缓存就会存在一个目的IP的记录了。当然,如果你的数据包是发送到不同网段的目的地,那么就一定存在一条网关的IP-MAC地址对应的记录。

  知道了ARP协议的作用,就能够很清楚地知道,数据包的向外传输是非常依赖MAC地址,可以看出ARP协议在网络传输中的不可缺少的作用。
假如说两台主机不在同一局域网,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的MAC地址,而是一台可以通往局域网外的路由器的某个端口的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为ARP代理(ARP Proxy)。也就是说,本地主机当寻求一个IP地址的MAC时,找不到,不是同一局域网,那它会收到路由器的MAC地址,说,这个数据就交给你了,剩下的事就你来处理了,你去找目的主机吧!
     每次都要用ARP request来寻求MAC是很低效的,ARP cache则很好的解决了这个问题

严格来说,TCP/IP 协议家族并没有定义 "TCP/IP 专属的" 网路硬件规格。硬件的范围实在太过广泛了,标准非常多,当今大部份的低层网路硬件标准都是由 IEEE 制定的,但也有许多标准是厂商专属的。要让 TCP/IP 协议能够顺利与不同类型的硬件进行沟通,那么就需要建立起一些标准协议来让大家共同参考。以我们最常用的以太网(Ethernet)为例,我们无需理会厂商如何设计网路界面的驱动(驱动程序即添加到操作系统中的一小块代码,其中包含有关硬件设备的信息)程序,一旦它能够被系统接纳,网路储存层(Datalink)就能使用网路界面在实体网路上传送和接收资料了。

  IP 地址和物理地址对应之困扰
  在「网路基础」课程中,我们知道以太网上面使用的传送方式叫 CSMA/CD (Carrier-Sensing Multiple Access with Collision Detection):虽然信息会在整个网段(segment)中用广播的方式传递,而且所有节点都会收到信息,然而,只有目的地址符合自己物理地址的信息才会被接收下来。因此,不管上层协议是哪一种(可以是 TCP/IP 也可以是其它),在底层的传送若是使用 Ethernet 的话,就得使用 MAC (Media Access Control) 物理地址。若要查询到当前系统目前所有界面的物理地址,我们可在 Linux 系统里面输入 ifconfig 命令:
  eth0  
     Link encap:Ethernet 
     HWaddr 00:A0:0C:11:EA:11    
     inet addr:203.30.35.134 
     Bcast:203.30.35.159 Mask:255.255.255.224    
     UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1    
     RX packets:0 errors:0 dropped:0 overruns:0 frame:0    
     TX packets:0 errors:0 dropped:0 overruns:0 carrier:0    
     collisions:0 txqueuelen:100    
     Interrupt:3 Base address:0x300eth1  
     Link encap:Ethernet 
     HWaddr 00:80:C7:47:8C:9A    
     inet addr:192.168.0.17 
     Bcast:192.168.0.255 Mask:255.255.255.0    
     UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1    
     RX packets:12303 errors:0 dropped:0 overruns:0 frame:0    
     TX packets:12694 errors:0 dropped:0 overruns:0 carrier:0    
     collisions:0 txqueuelen:100    
     Interrupt:10 Base address:0x2e0
      从上面的命令结果中可发现:关于每一个界面的第一行信息,最后的部份就是该界面的物理地址。信息在实体网路上面传送的过程中,IP 地址(或逻辑地址)一点都派不上用场。但问题是:当我们使用 TCP/IP 的时侯,上层的协议都是以 IP 地址为传送依据的。那么,这时候我们就必须有一套方法来对应 IP 地址和物理地址了。
  在此一过程中,关键点是如果将 IP 地址对与物理地址做对应。有些使用简单物理地址的网路(如 proNET-10 ),其物理地址只占一个 byte 的长度,而且允许使用者在配置网路卡的是选择自己的物理地址。在这样的网路上进行 IP 地址和物理地址的对应,是比较简单的,我们可以把物理地址设为和 IP 地址设为一样。例如,假设某一个节点的 IP 地址为 192.168.1.17,那么我们可以将该物理地址设为 17。 这样,在 proNET 就可以轻易的根据 IP 地址来得到物理地址。这样的对应非常简单,而且要维护起来也很容易,在新机器假如网路的时候,并不需要修改或重编已存的资料。
  然而,我们知道在以太网上,每一个实体界面都有一个 48bit(6byte) 的 MAC 地址,而 IP (v4)使用的地址则为 32bit(4byte);每各地址格式都只提供相应的层级协议使用,彼此是不能互换使用的。这时候我们就无法用简单的数学关系来做 IP 地址和物理地址的对应了。
  IP 地址和物理地址的对应方法
  建立表格
  首先,我们想到的最简单方法是在每一台机器上建立一个 IP 地址和物理地址的对应表格( table )。不过这个方法还是没办法解决如下的情形:
  · 网路上的节点数量多如恒河沙数,要想将全部节点的对应关系列入表格之中几近不可能任务。
  · 如果某一个节点产生异动情形(例如更换网卡),那么如果让所有表格正确做出相应修改,也是个头痛的问题。
  · 对某无磁碟工作站来说,因为没有本机的储存设备,将无非建立表格。
  写入高阶程序
  除了建立表格,我们还可以将实际的网路地址写死在高阶网路程序里面。不过,和前一个方法一样,如果遇到硬件地址变更等异动动情形,那么,程序也需要重新编译过才行。
  显然,上述两个方法都不怎么高明。

  ARP 协议
  这里我们要介绍的是 Address Resolution Protocol (ARP)。 ARP 是 TCP/IP 设计者利用以太网的广播性质,设计出来的地址解释协议。它的主要特性和优点是它的地址对应关系是动态的,它以查询的方式来获得 IP 地址和物理地址的对应。它的工作原理非常简单:
  1. 首先,每一台主机都会在 ARP 快取缓冲区 (ARP Cache)中建立一个 ARP 表格,用来记录 IP 地址和物理地址的对应关系。这个 Table 的每一笔资料会根据自身的存活时间递减而最终消失,以确保资料的真实性。
  2. 当发送主机有一个封包要传送给目的主机的时候,并且获得目的主机的 IP 地址;那发送主机会先检查自己的 ARP 表格中有没有该 IP 地址的物理地址对应。如果有,就直接使用此地址来传送框包;如果没有,则向网路发出一个 ARP Request 广播封包,查询目的主机的物理地址。这个封包会包含发送端的 IP 地址和物理地址资料。
  3. 这时,网路上所有的主机都会收到这个广播封包,会检查封包的 IP 栏位是否和自己的 IP 地址一致。如果不是则忽略;如果是则会先将发送端的物理地址和 IP 资料更新到自己的 ARP 表格去,如果已经有该 IP 的对应,则用新资料覆盖原来的;然后再回应一个 ARP Reply 封包给对方,告知发送主机关于自己的物理地址;
  4. 当发送端接到 ARP Reply 之后,也会更新自己的 ARP 表格;然后就可以用此纪录进行传送了。
  5. 如果发送端没有得到 ARP Reply ,则宣告查询失败。
  ARP 的查询过程可参考下图:
  
  ARP 的查询过程

  前面说的 ARP 表格,只有在 TCP/IP 协议被载入核心之后才会建立,如果 TCP/IP 协议被卸载或关闭机器,那么表格就会被清空;到下次协议载入或开机的时候再重新建立,而同时会向网路发出一个 ARP 广播,告诉其它机器它的目前地址是什么,以便所有机器都能保持最正确的资料。
  然而,ARP cache 的大小是有所限制的,如果超过了界限,那么越长时间没被使用过渡资料就必须清理掉,以腾出空间来储存更新的资料。所以,当机器收到 ARP equest 封包时,如果查询对象不是自己,则不会根据发送端地址资料来更新自己的 ARP 表格,而是完全忽略该封包。同时,每笔存在 cache 中的资料,都不是永久保存的:每笔资料再更新的时候,都会被赋予一个存活倒数计时值,如果在倒数时间到达的时候,该资料就会被清掉。然而,如果该资料在倒数时间到达之前被使用过,则计时值会被重新赋予。
  当然了,ARP 尚有一套机制来处理当 ARP 表格资料不符合实际地址资料的状况(例如,在当前连线尚未结束前,收到目的端的地址资料更新讯息);或是目的主机太忙碌而未能回答 ARP 请求等状况。

  RARP 协议
  刚才介绍的 ARP 协议是透过向网路查询而找出物理地址,那我们接下来探讨的 RARP 协议则相反:它是籍由查询网路上其它主机而得到自己的 IP 地址。
  通常,我们使用的以太网卡,在出厂的时候就有生产厂家把网卡的物理地址烧在 ROM 里面,这个地址是不能改变的(某些型号的网路卡,或是透过其它技术手段,是允许您修改物理地址的)。不管系统是否起来,这个地址都会存在,而且要让系统获得它也很容易。然而,在一些无磁碟(diskless)工作站上面,系统档案都存放在远端的伺服器,当它在启动的时候,因为本身没有 IP 地址,也就无法和伺服器沟通,更不能将系统档案载入。那么,我们就必须要有一个办法,让这样的无磁碟工作站在和伺服器沟通之前获得自己的 IP 地址。RAPR 协议就是为解决此问题而设计出来的。
  和 ARP 协议一样,RARP 也是用广播的形式来进行查询,只不过这时候问的 IP 地址不是别人,而是自己的 IP 地址而已。我们可以从下图看出 RARP 的运作,其实和 ARP 是极其相似的:


  RARP 的查询过程

  首先是查询主机向网路送出一个 RARP Request 广播封包,向别的主机查询自己的 IP。在时候,网路上的 RARP 伺服器就会将发送端的 IP 地址用 RARP Reply 封包回应给查询者。这样查询主机就获得自己的 IP 地址了。
  然而不像 ARP,查询主机将 RARP Request 封包丢出去之后,可能得到的 RARP Reply 会不止一个 (在 ARP 查询中,我们可以确定只会获得一个回应而已)。因为网路上可能存在不止一台 RARP 伺服器(基于备份和分担考量,极有可能如此设计),那么,所有收到 RARP 请求的伺服器都会尝试向查询主机作出 RARP Reply 回应。如果这样的话,网路上将充斥这种 RARP 回应,做成额外的负荷。这时候,我们有两种方法来解决RARP 的回应问题。
  第一种方法,为每一个做 RARP 请求的主机分配一主伺服器,正常来说,只有主伺服器才回做出 RARP 回应,其它主机只是记录下接收到 RARP 请求的时间而已。假如主伺服器不能顺利作出回应,那么查询主机在等待逾时再次用广播方式发送 RARP 请求,其它非主伺服器假如在接到第一个请求后很短时间内再收到相同请求的话,才会作出回应动作。
  第二种方法也很类似:正常来说,主伺服器当收到 RARP 请求之后,会直接作出回应;为避免所有非主伺服器同时传回 RARP 回应,每台非主伺服器都会随机等待一段时间再作出回应。如果主伺服器未能作出回应的话,查询主机会延迟一段时间才会进行第二次请求,以确保这段时间内获得非主伺服器的回应。当然,设计者可以精心的设计延迟时间至一个合理的间隔。

免费ARP

免费ARP包是标准ARP请求包的特例,目的MAC地址仍是二层广播地址FFFF-FFFF-FFFF,源MAC地址是发送ARP请求主机的MAC地址,然而,源IP和目的IP都是发送主机的IP。这就是免费ARP包和标准ARP请求包的区别。

免费ARP包一般产生于系统引导时,网络模块用于确定当前使用的IP地址,同段内是否还有其他人在使用。当主机发送一个免费ARP包后,未收到应答,说明IP无冲突,反之则报错。

免费ARP还有另外一个作用,如果发送免费ARP请求的主机更换了网卡,这个包正好用于修改其他主机MAC缓冲池中的映射关系。

TCP/IP - ARP的作用、RARP协议相关推荐

  1. 读书笔记五:TCP/IP详解之RARP逆地址解析协议

    RARP的介绍 具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址,而对于无盘机,则需要用RARP来获取IP地址. 已知mac地址,获取该物理地址的ip地址.无盘系统获取ip地址就是采用 ...

  2. OSI七层协议模型、TCP/IP四层模型和五层协议体系结构之间的关系

    OSI七层协议模型.TCP/IP四层模型和五层协议体系结构之间的关系 一.OSI七层模型 OSI七层协议模型主要是:应用层(Application).表示层(Presentation).会话层(Ses ...

  3. 【4】TCP/IP协议族详解-ARP协议和RARP协议

    声明:本博客参考<TCP/IP协议详解卷一:协议> 1.概述 在以太网中一台主机将数据帧从一台主机发送到另一台主机时,是根据48bit的以太网地址确定目的接口的.设备驱动程序从不检查IP数 ...

  4. TCP/IP卷一 阅读笔记 RARP逆地址解析协议

    作用 通过MAC地址获取IP地址,通常用于无盘系统地启动. 通常IP地址被存储在文件中,所以无盘系统无法正常获取IP地址,而是靠RARP协议通过网络获取IP地址. 格式 在以太网中,RARP请求格式如 ...

  5. 【TCP/IP】TCP/IP 四层分别有哪些协议|OSI四层/五层/七层协议

    五层协议模型 应用层:http dns TFTP .Telnet .FTP.SMTP.NFS.Rlogin. SNMP(UDP)-- 传输层:TCP.UDP 网络层: ICMP(ping tracer ...

  6. mysql是4层协议_OSI七层协议模型、TCP/IP四层模型和五层协议体系结构之间的关系...

    一.OSI七层协议模型 OSI的七层协议主要包括:物理层(physical layer).数据链路层(data link layer).网络层(network layer).运输层(transport ...

  7. 计算机网络 arp协议和rarp协议

    文章目录 1.arp协议 1.1 简介 1.2 功能 1.3 工作原理 2.rarp协议 2.1 简介 2.2 工作原理 1.arp协议 1.1 简介 地址解析协议,即ARP(Address Reso ...

  8. 信息系统项目管理师教程(第3版)- OSI七层模型TCP/IP四层模型对应网络协议

    一.OSI七层模型: 1.应用层 网络服务与最终用户的一个接口. 协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP 2.表示层 数据的表示. ...

  9. 《TCP/IP详解卷一:协议》 概述

    分层 TCP/IP协议族是一组不同层次上的多个协议的组合.TCP/IP通常被认为是一个四层次协议系统. 链路层(数据链路层或网络接口层):通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡.用 ...

  10. TCP/IP实现(十) 协议控制块

    一.协议控制块概述 网际协议控制块(Internet协议控制块)是传输层的数据结构,它被TCP,UDP以及原始IP使用,但其它协议并不适用(如:IP,ICMP,IGMP),其作用是存储一个UDP,TC ...

最新文章

  1. 设计模式-创建型-生成器
  2. 前端学习(509):水平和垂直居中第二种方式
  3. 15年大厂经历!大佬总结:0基础如何学习Python?
  4. java字符串拼接_字符串拼接,什么时候会走StringBuilder?
  5. mysql 取第一条_MySQL索引底层(一)索引底层原理
  6. 蓝桥杯 基础练习 矩阵乘法
  7. 开课吧:从事数据分析必备能力有哪些?
  8. 1081 检查密码 (15 分)—PAT (Basic Level) Practice (中文)
  9. 力扣(Leetcode)633 平方数之和
  10. 任务调度:开源大数据调度框架Taier(太阿)
  11. 看aps高级排产如何实现生产计划智能排产
  12. 用递归+缓存求阶乘和排列组合数
  13. 数字电视业务PSI/SI学习
  14. 人为什么要睡觉(胡说八道)
  15. 五千字聊一聊接口测试
  16. 霍夫圆检测(HoughCircles)
  17. 服务器拷贝文件提示ms-dos功能无效,复制文件提示“MS-DOS功能无效”无法移动解决措施...
  18. 基于PyQT5实现垃圾分类小程序
  19. USB 驱动架构浅析
  20. 18将中文按照拼音的顺序进行排序

热门文章

  1. java http请求_零基础学Java,掌握Java基础难不难?
  2. java中ojb_该方法包含(obj o)在Java中做什么?
  3. 阿里的easyexcel
  4. 移动应用市场统计分析
  5. github仓库主页介绍
  6. mapred linuxtaskcontroller目录权限问题探究
  7. 从中煤陕西公司看政企移动信息化应用
  8. USACO1.3.4 Combination Lock
  9. C#中窗体的数据传递
  10. java_泛型方法使用实例