以太网及ARP协议简介

以太网及ARP协议简介

在以太网中,主机间相互通信,必须要知道目的主机的MAC地址(物理地址),可以通过ARP协议以目的主机IP地址获取目的主机的MAC地址。

ARP协议简介

ARP(Address Resolution Protocol),即地址解析协议,是根据IP地址(逻辑地址)获取MAC地址的一种TCP/IP协议。在以太网通信中,数据是以“帧”的格式进行传输的,帧格式里面包含目的主机的MAC地址。

源主机知道目的主机的IP地址,却不知道目的主机的MAC地址。而目的主机的MAC地址直接被网卡接收和解析,当解析到目的MAC地址非本地MAC地址时,则直接丢弃该包数据,因此在通信前需要先获得目的MAC地址,而ARP协议正是实现了此功能。

ARP协议的基本功能是通过目的主机IP地址,获取目的主机的MAC地址。每个网卡都需要并有且仅有一个MAC地址,在获取到目的MAC地址之后,将目的MAC地址更新至ARP缓存表中,称为ARP映射。下次通信时,可以直接从ARP缓存表中获取,而不用重新通过ARP获取MAC地址。但一般ARP缓存表会有过期时间,过期后需要重新通过ARP协议进行获取。

ARP映射是指将IP地址和MAC地址映射起来,分为静态映射和动态映射。

静态映射指手动创建一张ARP表,把IP地址和MAC地址关联起来。手动绑定之后,源主机在通信之前,可以从ARP表中找到IP地址对应的MAC地址。但存在局限性,因为MAC地址可能会变化,比如:主机可能更换NIC(网络适配器),改变物理地址;要避免类似问题出现,必须定期维护更新ARP表,会比较麻烦且影响网络性能。

动态映射指使用ARP协议来获取相对应的物理地址,此过程是自动完成的,故被称为动态映射。已经设计出用于实现动态映射协议的有ARP和RARP(逆地址解析协议)两种,ARP把IP地址映射为物理地址,RARP把物理地址映射为IP地址。RARP应用较少。

ARP协议分为ARP请求和ARP应答,源主机查询目的MAC地址的报文称为ARP请求,目的主机响应源主机并发送包含本地MAC地址的报文称为ARP应答。

当主机需要找出这个网络中的另一个主机的物理地址时,它就可以发送一个ARP请求报文,ARP请求报文包含了发送方的MAC地址和IP地址以及接收方的IP地址。因为不知道接收方的物理地址,用

以太网帧格式

ARP协议通过以太网传输,就必须按照以太网规定的格式进行传输,本节讲解以太网的帧格式。

下图就是以太网传输一帧数据的格式,即以太网帧格式,主要分为前导码、帧起始符、以太网帧头、以太网数据、CRC校验五个部分。

前导码(Preamble):7个字节的8’h55,也就是0、1交替出现,标志开始传输数据。

帧起始符(SFD,Start Frame Delimiter):1个字节8‘hd5表示一帧数据的开始。

14个字节的以太网帧头包括6个字节的目的MAC地址,6个字节的源MAC地址,2个字节的长度或者协议类型。

目的MAC地址: 占用6个字节。MAC地址分为单播地址、组播地址和广播地址。
  单播地址:第一个字节的最低位为0,表示唯一的设备;
  组播地址:第一个字节的最低位为1,表示同属一组的多个设备;
  广播地址为FFFF-FFFF-FFFF,表示同一网段中的所有设备。
  在ARP请求时,一般使用广播地址,因为源主机不知道目的主机的MAC地址。而ARP应答时,一般使用单播,因为源主机可以通过目的主机发送的ARP请求解析出目的主机的MAC地址。

主机对以太网的帧数据解析时,首先就会解析以太网帧头的目的MAC地址,如果该MAC地址为广播地址或者与自身的MAC地址一致,则继续解析该数据包,否则舍弃该数据包,不在往下解析。

源MAC地址:表示发送端的物理地址,占用6字节。

长度/类型:当这两个数据小于1536时,表示以太网数据段的长度,也就是以太网数据段有多少个字节的数据。如果这两个字节的值大于1536,表示该以太网中的数据属于哪个上层协议, 例如0x0800代表IP协议、0x0806 代表ARP协议等。

数据段:以太网中的数据段长度最小46个字节,最大1500个字节。考虑多个计算机的数据帧排队等待时间、网络I/O控制器缓存区资源以及网络最大的承载能力等各种因素决定数据段传输的字节不能太大。

上层协议全部包含在以太网的数据段之中,包括后文的ARP协议、ICMP协议、UDP协议等等。

帧检验序列(FCS,Frame Check Sequence):为确保正确传输数据,在数据的尾部加入4 字节的循环冗余校验码(CRC校验)来检测数据是否传输错误。CRC数据校验从以太网帧头开始,不包含前导码和帧起始界定符。 在网络通信系统中应用最广泛的是CRC-32标准。

网络设备和组件在接收一帧之后,需要短暂的时间来恢复并为接收下一帧做准备的时间,这段时间被称为帧间隙(IFG,Interpacket Gap)。IFG的最小值是96 bit time,也就是传输96字节所需要的时间,具体时间长度根据PHY的时钟周期有关。

ARP协议

前文对以太网帧格式进行了讲解,本小节对ARP协议的格式进行讲解,下图是以太网ARP数据包的格式,由图可知ARP存在于以太网数据包的数据段。ARP数据长度固定为28字节,由于以太网每次最少传输46字节数据,所以需要填充18字节的0,这18字节的0也要进行CRC校验。

如果数据端是ARP数据,那么以太网帧头的最后两字节必须是0x0806,表示后续的是ARP协议数据包。

在这里插入图片描述

硬件类型(Hardware type):为1表示以太网地址。

协议类型(Protocol type): ARP协议的上层协议为IP协议,值为0x0800。

硬件地址长度(Hardware size):MAC地址的长度,以字节为单位,该值为6。

协议地址长度(Protocol size):IP地址的长度,以字节为单位,该值为4。

OP(Opcode):操作码,表示该数据包为ARP请求或ARP应答。1表示ARP请求,2表示ARP应答。

源MAC地址:发送端的硬件地址。

源IP地址:发送端的协议(IP)地址,如 192.168.1.102。

目的MAC地址:接收端的硬件地址,在ARP请求时由于不知道接收端MAC地址,理论上该字段为广播地址,即48’hff_ff_ff_ff_ff_ff。但实际上通过ILA抓取ARP请求数据可知,该地址为0,可能是目的主机不会解析该数据吧,具体值是多少也就无所谓了。

目的IP地址:接收端的协议(IP)地址,如 192.168.1.10。

对以太网帧格式和ARP数据格式的讲解就到这里了,下图是整合两者得到的ARP数据包格式。

在这里插入图片描述

### 以太网ARP协议的工作原理及关系 #### 一、以太网概述 以太网是一种广泛使用的局域网技术,其核心功能是在网络设备之间传输数据帧。每台连接到以太网的设备都有一个唯一的硬件地址——MAC地址(Media Access Control Address),用于标识该设备在网络中的身份[^1]。 #### 二、ARP协议的作用 ARP(Address Resolution Protocol)即地址解析协议,主要负责将逻辑上的IP地址映射为物理层的MAC地址。这是因为以太网的数据传输依赖于MAC地址而非IP地址。当一台主机需要向另一台主机发送数据时,它会先查找本地ARP缓存表来获取目标IP地址对应的MAC地址。如果未找到,则通过广播ARP请求消息寻找目标设备的MAC地址[^2]。 #### 三、ARP协议的工作机制 ARP协议的操作可以分为两种情况:同网段通信跨网段通信。 - **同网段通信** 当源主机与目标主机位于同一子网内时,源主机会直接利用ARP协议查询目标主机的MAC地址并建立通信链路。具体过程如下: - 如果源主机已知目标主机的IP地址但不知道其MAC地址,则会在本地网络中广播一条ARP请求消息。 - 接收到此广播消息的目标主机会回应自己的MAC地址给源主机。 - 源主机随后更新自身的ARP缓存表,并基于获得的MAC地址构建以太网帧完成数据传输[^4]。 - **跨网段通信** 对于不同子网间的通信,通常需借助路由器作为中间节点实现转发操作。此时,源主机只需知道默认网关(通常是路由器接口)的MAC地址即可发起通信;而后续路由选择则由上层协议处理。 #### 四、ARP报文结构 ARP报文主要包括以下几个字段: | 字段名称 | 描述 | |----------------|--------------------------------------------------------------| | Hardware Type | 表示底层网络类型,对于以太网而言固定值为1 | | Protocol Type | 定义高层协议类型,在IPv4环境下取值0x0800 | | Hlen | 硬件地址长度 | | Plen | 协议地址长度 | | Operation | 操作码,区分是ARP请求还是响应 | | Sender MAC | 发送方的MAC地址 | | Sender IP | 发送方的IP地址 | | Target MAC | 目标方的MAC地址(可能为空,视具体情况而定) | | Target IP | 目标方的IP地址 | 以下是ARP请求的一个简单Python模拟代码片段: ```python import socket import struct def create_arp_request(src_mac, src_ip, dst_ip): # Ethernet header (destination MAC is broadcast FF:FF:FF:FF:FF:FF) eth_header = b'\xFF\xFF\xFF\xFF\xFF\xFF' + bytes.fromhex(src_mac.replace(':', '')) + b'\x08\x06' # ARP packet structure arp_packet = ( b'\x00\x01' # Hardware type (Ethernet) b'\x08\x00' # Protocol type (IPv4) b'\x06' # Hardware address length (MAC) b'\x04' # Protocol address length (IPv4) b'\x00\x01' # Opcode (request) + bytes.fromhex(src_mac.replace(':', '')) # Sender hardware address + socket.inet_aton(src_ip) # Sender protocol address + b'\x00\x00\x00\x00\x00\x00' # Target hardware address (unknown yet) + socket.inet_aton(dst_ip) # Target protocol address ) return eth_header + arp_packet # Example usage src_mac = '00:1A:C5:FF:FE:A9' src_ip = '192.168.1.10' dst_ip = '192.168.1.1' packet = create_arp_request(src_mac, src_ip, dst_ip) print(packet.hex()) ``` #### 五、以太网ARP的关系 以太网提供了基础的物理介质访问控制服务,而ARP则是为了弥补IP寻址无法直接指导数据帧传递这一缺陷所设计的一种辅助工具。两者相辅相成,共同保障了局域网内部乃至更大范围内的高效可靠通讯能力[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值