ARP协议简介

MAC 地址的基本概念

MAC Address(Media Access Control Address),亦称为 EHA(Ethernet Hardware Address)、硬件地址、物理地址(Physical Address)。MAC 地址就是在媒体接入层上使用的地址,也叫物理地址、硬件地址或链路地址,其被固化在网卡的 ROM 中。可见 MAC 地址实际上就是网卡地址或网卡标识符。某台计算机网卡上的标识符就成为该计算机的 MAC 地址。MAC 地址长度为 6 字节(48 比特),其前 3 个字节表示组织唯一标志符(Organizationally Unique Identififier,

即 OUI),由 IEEE 的注册管理机构给不同厂家分配的代码,以区分不同的厂家,后 3 个字节由厂家自行分配,称为扩展标识符。同一个厂家生产的网卡中 MAC 地址后 24 位是不同的。

初识 ARP

ARP协议(Address Resolution Protocol,地址解析协议)与底层网络接口密切相关,通过解析 IP 地址得到数据链路层物理地址,在网络协议包中极其重要的网络传输协议。在 TCP/IP 分层结构中,把 ARP 划分为网络层,在网络层看来,源主机与目标主机是通过 IP 地址进行识别的,但任何网络的通信都是基于底层硬件链路的(即链路层),IP数据包只有在具体的物理网络上才能进行发送。那么就需要将这些 IP 地址转换为链路层可以识别的东西,在所有的链路中都有着自己的一套寻址机制,如在以太网中使用使用一个48位的MAC 地址进行寻址,来标识不同的主机。当主机上的应用程序要向目标主机发送数据时,它只知道目标主机的IP地址,而在协议栈底层接口发送数据包时,需要将该IP地址转换为目标主机对应的MAC地址,这样才能在数据链路上选择正确的通道将数据包传送出去,在整个转换过程中发挥关键作用的就是ARP协议了。

ARP 协议是网络层与链路层连接的重要枢纽。在网络中实际传输的是“帧”,“帧”里面包含有目标主机的 MAC 地址的。如何知道目标主机的 MAC 地址,那就需要 ARP 进行地址解析,所谓“地址解析”就是主机在发送帧前将目标 IP 地址转换成目标 MAC 地址的过程。ARP 协议的基本功能就是通过目标设备的 IP 地址,查询目标设备的 MAC 地址,以保证通信的顺利进行。

TCP/IP协议有自己的IP地址,IP地址(IPv4)是一个32位的IP地址,网络层发送数据包只需要知道目标主机IP地址即可,而以网卡发送数据则必须知道对方的硬件MAC地址,同时IP地址的分配与硬件MAC地址是没有关系的,为了让网络层只需要知道IP地址就可以完成通信工作,那就需要有一个协议将IP地址映射成为对应的MAC地址,此外还需要考虑IP地址可能是动态的,非常灵活,使用静态的映射方法是行不通的,所以ARP协议就提供优质的地址动态解析服务,让32位的IP地址能映射成为48位的MAC地址,让上层应用与底层完全分离开,这样子在上层应用就能灵活使用IP地址作为标识,进行通信。计算机中会维护一个ARP缓存表,这个表记录着IP地址与MAC地址的映射关系,我们可以通过在电脑的控制台通过arp -a指令查看一下我们自己计算机的ARP缓存表:

数据帧

链路层的主体部分是网卡中实现的,在发送的数据帧的时候,协议栈取得由高层传递过来的数据报(注意,数据帧与数据报不是一个东西,数据报是形容网络层及其以上的报文,而数据帧一般形容链路层的数据,是一帧一帧的,也是链路层的服务——数据成帧),在链路层中封装该数据报,也就是填写数据帧的各个字段,然后遵循链路接入协议将该帧数据进行传输;在接收端,控制器接收了整个数据帧,抽取出网络层的数据报,往上层传递。

下面来看看以太网帧:

以太网是目前最流行的一种局域网组网技术(其他常见局域网组网技术还有令牌环局域网、无线局域网、ATM局域网),以太网技术的正式标准是ffiEE 802.3标准,它规定了在以太网中传输的数据帧结构,如图所示。

初看这个以太网帧结构,就觉得它有 7 个字段,但是事实上,前同步码与帧开始符字段不能算是真正的以太网帧数据结构,他们是在网卡发送的时候添加进去的,为了数据的准确传输。以太网帧以一个 7 字节的前同步码(Preamble)字段开始。该前同步码的值都是 10101010(0x55,大端模式);而后紧接着一个字节的帧开始符,其值是 10101011(0xD5,大端模式)。前同步码字段的作用是实现物理层帧输入输出的同步,而帧开始符表示着以太网帧的开始,剩下的 5 个字段才是真正的以太网数据帧结构。包含了目的MAC地址和源MAC地址,它们都是6字节长度(通常每个网卡都有1个6字节MAC地址,以在网络中唯一地标识自己)。网卡接收数据时,通

过将目的地址字段和自身的MAC地址做比较,判断是否接收该数据包。通常,将这里的6字节目的地址按照下面的格式来书写,如:

00-01-02-03-04-05

上面这6个字节在以太网中是按照从左到右的顺序发送的,同时对每个字节来说,最先发送的是最低位bi0,最后最高位bit7。

目标 MAC 地址(6 字节):这个字段包含目标网卡的 MAC 地址,当一个网卡收到一个以太网数据帧,如果该数据帧的目标地址是网卡自身的 MAC 地址或者是 MAC 广播地址,它都将该帧的数据字段的内容传递给网络层;如果它收到了具有任何其他 MAC 地址的帧,则将该数据帧丢弃。

源 MAC 地址(6 字节):这个字段包含了传输该帧到局域网上的适配器的 MAC 地址。

类型字段(2 字节):类型字段允许以太网复用多种网络层协议。为了理解这点,我们需要记住主机能够使用除了 IP 以外的其他网络层协议。事实上,一台给定的主机可以支持多种网络层协议,以对不同的应用采用不同的协议。因此,当以太网帧到达网卡中,网卡需要知道它应该将数据字段的内容传递给哪个网络层协议。如 IP 协议、ARP 协议等。注意了:当这个字段的值小于 1518 时,它表示后面数据字段的数据长度,当大于 1518 的时候才表示递交给哪个协议。

数据字段(46~1500 字节):这个字段承载了 IP 数据报。以太网的最大传输单元(MTU)是 1500字节。这意味着如果 IP 数据报超过了 1500 字节,则主机必须将该数据报分片。数据字段的最小长度是 46 字节,这意味着如果 IP 数据报小于 46 字节,数据报必须被填充到 46 字节。当采用填充时,传递到网络层的数据包括 IP 数据报和填充部分,网络层使用 IP数据报首部中的长度字段来去除填充部分。

CRC(4 字节):CRC 字段包含了以太网的差错校验信息。

在以太网帧中,目标 MAC 地址可以分成三类,单播地址、多播地址和广播地址。单播地址通常是与某个网卡的 MAC 地址对应,它要求以太网第一个字节的 bit0(最先发出去的位)必须是 0;而多播地址则要求第一个字节的 bit0 为 1,这样子多播地址就不会与任何网卡的 MAC 地址相同,可以被多个网卡同时接收;广播地址的 48 位 MAC 地址全为 1,也就是 FF-FF-FF-FF-FF-FF,同一局域网内的所有网卡都会收到广播的数据包。

所有的以太网计算都向网络层提供不可靠的无连接服务,也就是说在网卡发送数据的时候,不会向目标网卡进行事先的通知(握手),网卡只在以太网帧中封装好来自上层的数据报,然后把数据报发送到局域网上。同样的当一个网卡接收一个以太网数据帧的时候,它也不会进行回复确认,如果当网卡执行 CRC 校验不通过的时候,它也不会发送否定确认,这样子当一些以太网帧不通过 CRC 校验时,网卡只是将其丢弃,而发送的一方就不会知道它传输的数据是否达到并且通过校验。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值