zoukankan      html  css  js  c++  java
  • 经典ARP协议讲解,一定要看


    以太网协议是目前最流行的通信协议之一。从底层到高层协议家族非常庞大。今天为您介绍一下经常用到却比一定知道的协议。

    在链路层上,主机和路由器用他们的物理地址来标志,即48位的物理地址,也是是我们通常所说的网卡地址(MAC地址)。

    在网络层上,主机和路由器用逻辑地址来标志,逻辑地址在本地是唯一的,但在全局上不一定。在TCP/IP协议族中称为IP地址,现在常用的版本是IPv4,长度是32位。

    因此需要能够将逻辑地址和相应的物理地址之间进行映射,完成这样的映射可以使用静态映射和动态映射。

    静态映射:创建一个表,存储逻辑地址和物理地址之间的关联关系。然后将网络上的每个主机都存储这张表。缺点是映射表必须周期的更新,增加了 网络的开销。

    动态地址映射,地址解析协议ARP和逆地址解析协议RARP。

    地址解析协议ARP(Address Resolution Protocol),负责完成逻辑地址向物理地址的动态映射,将32位逻辑地址(IP地址)转换为48位的物理地址(MAC地址)。

    ARP/RARP在TCP/IP协议族中的位置


     

    ARP是通过一个查找表(ARP缓存)来执行这种转换的。当在ARP缓存中没有找到地址时,则向网络发送一个广播请求,网络上所有的主机和路由器都接收和处理这个ARP请求,但是只有相同IP地址的接收到广播请求的主机或路由器,发回一个ARP应答分组,应答中包含它的IP地址和物理地址,并保存在请求主机的ARP缓存中。其他主机或路由器都丢弃此分组。

    ARP/RARP报文封装在以太网帧中的格式

    上面图片中两个表格,上面的表格是ARP协议的报文格式,下面的表格是以太网帧格式。ARP/RARP协议是介于链路层和IP层的。

    以太网帧格式如上图下面的表格,6个字节的目的地址(目的主机的MAC地址),6个字节的源地址(本机的MAC地址),做个不恰当的比喻,MAC地址可以认为是我们的身份证号,全球唯一。

    Ethernet II和IEEE802.3的帧格式比较类似,主要的不同点在于前者定义的2字节的类型,而后者定义的是2字节的长度;后者定义的有效长度值与前者定义的有效类型值无一相同,这样就容易区分两种帧格式了。

    帧类型字段为2个字节,802.3中表示数据长度,ETHERNET II中表示帧类型。比如0x0800表示后面的报文是IP协议报文,0x0806表示后面的报文是ARP协议报文。通常小于0x0800表示数据长度。

    为了能够同步以太网数据,在目的地址之前有7个字节的前导码和1个字节的帧起始标志。

    其串行发送时二进制表示为:10101010_10101010_10101010_10101010_10101010_10101010_10101010(前导码),10101011(帧起始标志)。但是一定要注意,由于以太网发送数据时先发高字节,同时每个字节的低位先发,所以最终收的的数据应该是0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xd5。

    在以太网(ARP协议只适用于局域网)中,如果本地主机想要向某一个IP地址的主机(路由表中的下一跳路由器或者直连的主机,注意此处IP地址不一定是IP数据报中的目的IP)发包,但是并不知道其硬件地址,此时利用ARP协议提供的机制来获取硬件地址。


     

    具体过程如下:

    1) 本地主机在局域网中广播ARP请求,ARP请求数据帧中包含目的主机的IP地址。意思是“如果你是这个IP地址的拥有者,请回答你的硬件地址”。

    2) 目的主机的ARP层解析这份广播报文,识别出是询问其硬件地址。于是发送ARP应答包,里面包含IP地址及其对应的硬件地址。

    3) 本地主机收到ARP应答后,知道了目的地址的硬件地址,之后的数据报就可以传送了。

    点对点链路不使用ARP协议。

    由上面的介绍我们知道,当以太网帧结构中帧类型为0x0806时,表示ARP协议。报文格式如下:

     

    硬件类型:2个字节,定义网络类型,以太网是类型1,取值0x0001。也就是说ARP协议不仅仅应用于以太网协议,还可以支持别的链路层协议。

    协议类型:2个字节,定义协议类型,对应IPv4协议,值为0x0800。即0x0800表示IP协议。

    硬件地址长度:1个字节,定义以字节为单位的物理(硬件)地址长度,如果是以太网,则为6个字节(MAC地址长度)。

    协议地址长度:1个字节,定义以字节为单位的逻辑(协议)地址长度,如果是IP协议,则是4个字节(IP地址长度)。

    操作类型:2个字节,定义分组的类型,有4中操作类型。

            ARP请求  :0x0001

            ARP应答  :0x0002

            RARP请求:0x0003

            RARP应答:0x0004

    发送端以太网地址(硬件地址):如果是以太网,则是源主机以太网地址(MAC地址),此处和以太网头中的源地址对应。

    发送端IP地址:如果是IP协议,则表示源主机的IP地址。

    目的以太网地址:如果是以太网,则是目的以太网地址(MAC地址),和以太网头中的目的地址对应。

    目的IP地址:如果是IP协议,则表示源主机要请求硬件地址的IP地址。

    对应ARP请求包来说,目的端的硬件地址字段无须填充,其他字段都需要填充。对于ARP回复包来说,所有字段都需要填充。

    APR请求包是广播的,但是ARP应答帧是单播的。

    对于一个ARP请求来说,除目的地址外的所有其他字段都有填充值,当系统收到一份目的为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个发送端地址分别替换两个目的地址,并把操作字段改为2,最后把它发送回去。

    根据以太网协议规定,以太网数据报最小长度是64字节(14字节的以太网头,包含4字节的FCS),而ARP报文数据长度为28字节,这样总长度为46字节,需要在以太网帧结构中的PAD字段填充18个字节,达到以太网数据报最小长度64字节,可填充0。


     

    版权所有权归卿萃科技,转载请注明出处  

     

    作者:卿萃科技ALIFPGA  

     

    原文地址:卿萃科技FPGA极客空间 微信公众号

     


     

     

     

    扫描二维码关注卿萃科技FPGA极客空间

     


     

     

     

  • 相关阅读:
    Eclipse / android studio 添加第三方jar包 步骤
    Android checkbox 自定义点击效果
    Android 程序打包和安装过程
    Android 基础
    (转)Genymotion安装virtual device的“unable to create virtual device, Server returned Http status code 0”的解决方法
    (转)eclipse 导入Android 项目 步骤
    微信开放平台注册 步骤
    Android Studio 初级安装
    数组
    作用域问题代码
  • 原文地址:https://www.cnblogs.com/alifpga/p/7660629.html
Copyright © 2011-2022 走看看