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

在链路层上,主机和路由器用他们的物理地址来标志,即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极客空间


经典ARP协议讲解,一定要看的更多相关文章

  1. 图解ARP协议(三)ARP防御篇-如何揪出“内鬼”并“优雅的还手”

    一.ARP防御概述 通过之前的文章,我们已经了解了ARP攻击的危害,黑客采用ARP软件进行扫描并发送欺骗应答,同处一个局域网的普通用户就可能遭受断网攻击.流量被限.账号被窃的危险.由于攻击门槛非常低, ...

  2. 图解ARP协议(四)代理ARP原理与实践(“善意的欺骗”)

    一.代理ARP概述 我:当电脑要访问互联网上的服务器,目标MAC是什么? 很多小伙伴在刚学习网络协议的时候,经常这样直接回应:不就是服务器的MAC嘛! 这时我会反问:那电脑怎么拿到这个服务器的MAC地 ...

  3. TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议

    把这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数 ...

  4. Winpcap网络编程九之Winpcap实战,ARP协议获得MAC表及主机通信

    大家好,本次我们须要完毕的任务是: 完毕两台主机之间的数据通信(数据链路层) 仿真ARP协议获得网段内主机的MAC表 使用帧完毕两台主机的通信(Hello! I'm -) 声明:本文章的目的是为大家的 ...

  5. ARP协议的基础知识

          关于ARP协议的基础知识 1.ARP的工作原理 本来我不想在此重复那些遍地都是的关于ARP的基本常识,但是为了保持文章的完整性以及照顾初学者,我就再啰嗦一些文字吧,资深读者可以直接跳过此节 ...

  6. 3.IP协议,ARP协议,RARP协议

    1.IP协议 IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输.要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制 ...

  7. [图解]ARP协议(一)

    一.ARP概述 如果要在TCP/IP协议栈中选择一个"最不安全的协议",那么我会毫不犹豫把票投给ARP协议.我们经常听到的这些术语,包括"网络扫描"." ...

  8. ARP协议分析(Wireshark)

    一.说明 1.1 背景说明 以前学网络用的谢希仁的<计算机网络原理>,一是网开始学不太懂网络二是ARP协议是没有数据包格式的(如果没记错应该是没有).学完只记得老师说:ARP很简单的,就是 ...

  9. ARP协议具体解释之Gratuitous ARP(免费ARP)

    ARP协议具体解释之Gratuitous ARP(免费ARP) Gratuitous ARP(免费ARP) Gratuitous ARP也称为免费ARP.无故ARP.Gratuitous ARP不同于 ...

随机推荐

  1. 从reduce函数说起...

    reduce函数:  方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值, 最终返回的要看函数内部return的内容. 1. 累加器: var ar ...

  2. Java中的条件运算符

    条件运算符( ? : )也称为 “三元运算符”. 语法形式:布尔表达式 ? 表达式1 :表达式2 运算过程:如果布尔表达式的值为 true ,则返回 表达式1 的值,否则返回 表达式2 的值 例如: ...

  3. Linux 设备驱动之 UIO 机制

    一个设备驱动的主要任务有两个: 1. 存取设备的内存 2. 处理设备产生的中断 对于第一个任务.UIO 核心实现了mmap()能够处理物理内存(physical memory),逻辑内存(logica ...

  4. BZOJ 3931 [CQOI2015]网络吞吐量:最大流【拆点】

    传送门 题意 给你一个 $ n $ 个点,$ m $ 条边的无向网络,每条边有长度.每个点的流量限制为 $ c[i] $ . 要求流量只能经过从 $ 1 $ 的 $ n $ 的最短路.问你最大流是多少 ...

  5. 在js中,ajax放在for中,ajax获取得到的变量有误

    先看代码 for(var i=0;i<tds.length;i++){ mui.ajax(url+'api/client/gifts/isSigned', {data :{ sqId:" ...

  6. poj2478欧拉函数

    打表欧拉函数,求2到n的欧拉函数和 #include<map> #include<set> #include<cmath> #include<queue> ...

  7. hdu 5979 Convex(水,求面积)

    Convex Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  8. 《The Cg Tutorial》阅读笔记——环境贴图 Environment Mapping

    本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/4969956.html 环境贴图 Environment Mapping 一.简介 环 ...

  9. 【spark】【问题】textFile找不到文件

    2018/5/9 关于textFile读取文件的问题 问题描述: 今天第一次使用spark-shell来读取文件,我在本地建立了一个text.txt文件,然后用textFile读取生成rdd. 但是执 ...

  10. php判断字符串长度 strlen()与mb_strlen()函数

    PHP strlen() 函数 定义和用法 strlen() 函数返回字符串的长度. 语法 strlen(string) 参数:string <?php $str=‘中文a字1符‘; echo ...