目录
数据链路层的概念
局域网技术
以太网协议
以太网帧格式
MAC地址
MTU最大传输单元
ARP协议
ARP 协议的作用
ARP数据报的格式
ARP的工作原理
数据链路层的概念
数据链路层是OSI(开放系统互联)模型中的第二层,位于物理层和网络层之间,主要负责在直接相连的节点(如交换机、路由器、主机)之间实现可靠且高效的数据传输。
-
传输层(TCP):确保端到端的可靠传输,标识进程(端口),是应用开发的直接接口。
-
网络层(IP):实现跨网络的逻辑寻址与路由,构建全球互联的基石。
-
数据链路层:解决相邻节点的本地通信,屏蔽物理介质差异,确保帧的准确投递。
解释:
- 网络层(IP)拥有将数据跨网络从一台主机送到另一台主机的能力,但IP并不能保证每次都能够将数据可靠的送到对端主机,因此网络层(IP)需要上层传输层(TCP)为其提供可靠性保证,比如数据丢包后传输层(TCP)可以让网络层(IP)重新发送数据,最终在传输层(TCP)提供的可靠性机制下网络层(IP)就能够保证将数据可靠的发送到对端主机。
- 传输层(TCP)除了对下层网络层(IP)提供可靠性机制之外,传输层(TCP)对上还提供进程到进程的服务,我们在进行套接字(socket)编程时,本质就是在使用TCP或UDP为我们提供的进程到进程的服务。
- 数据在网络传输时需要一跳一跳的从一台主机跳到另一台主机,最终才能将数据转发到目标主机,因此要将数据发送到目标主机的前提是,需要先将数据转发给与当前主机直接相连的下一跳主机,而两台主机直接相连也就意味着这两台主机属于同一网段,因此将数据转发到下一跳主机实际是属于局域网通信范畴的,而这实际就是链路层需要解决的问题。
- 网络层(IP)提供的是跨网络发送数据的能力,传输层(TCP)是为数据发送提供可靠性保证的,而数据链路层解决的则是两台相连主机之间的通信问题(同一局域网内)。
局域网技术
不同局域网所采用的通信技术可能是不同的,常见的局域网技术有以下三种:
-
以太网:基于CSMA/CD(早期)或全双工交换,使用MAC地址和帧结构(如Ethernet II格式)。
-
令牌环网:通过“令牌”控制介质访问,设备需获得令牌才能发送数据(已逐渐被淘汰,但曾用于IBM系统)。
-
无线局域网(Wi-Fi):基于CSMA/CA避免冲突,依赖无线接入点(AP)连接设备。
-
其他技术:如FDDI(光纤分布式数据接口)、ATM(异步传输模式)等,但现代网络以以太网和Wi-Fi为主。
无论底层是何种局域网技术,IP层使用统一的IP地址标识设备(如192.168.1.1
),IP层的核心价值:通过统一逻辑寻址(IP地址)和分层封装机制,屏蔽底层局域网技术差异,实现异构网络的互联互通。
假设数据从以太网局域网A → Wi-Fi局域网B → 令牌环网局域网C:
-
局域网A(以太网):
-
主机封装以太网帧头(源MAC_A,目的MAC_路由器A)。
-
路由器A剥离以太网头,根据目的IP选择下一跳为Wi-Fi网络。
-
-
局域网B(Wi-Fi):
-
路由器A封装Wi-Fi帧头(源MAC_路由器A,目的MAC_AP)。
-
路由器B(连接Wi-Fi和令牌环网)剥离Wi-Fi头,根据目的IP选择下一跳为令牌环网。
-
-
局域网C(令牌环网):
-
路由器B封装令牌环网帧头(源MAC_路由器B,目的MAC_C)。
-
目标主机C验证帧并解封装,最终获取原始数据。
-
也就是说,网络中的路由器会不断去掉数据旧的局域网报头,并添加上新的局域网报头,因此数据在进行跨网络传输时,就算所需跨越的网络采用的是不同的局域网技术,最终也能够正确实现跨越。
以太网协议
以太网 不是一种具体的网络,以太网是由IEEE 802.3定义的一组技术标准,涵盖数据链路层(MAC子层)和物理层(传输介质、信号编码等)。
-
数据链路层:帧格式(Ethernet II/IEEE 802.3)、MAC地址、CSMA/CD(传统半双工)。
-
物理层:电缆类型(双绞线、光纤)、接口标准(RJ45、SFP)、传输速率(10M/100M/1000M等)。
传输介质:
-
双绞线(如Cat5e/Cat6):用于短距离传输(百米内),成本低。
-
光纤(单模/多模):用于长距离(千米级)或高速(10G/40G/100G以太网)。
-
同轴电缆:早期以太网使用(10BASE5/10BASE2),已淘汰。
以太网中所有的主机共享一个通信信道,当局域网中的一台主机发出数据后,该局域网中的所有主机都能够收到该数据。
实际当主机A想要发数据给主机B的时候,该局域网内的其他主机也都收到了该数据,只不过除了主机B以外,其他主机识别到该数据并不是发给自己的,此时其他主机就把收到的数据丢弃了。
也就是说,在局域网(以太网)通信时,该局域网内所有的主机在底层其实都收到了该数据,只不过经过筛选后只提交上来了发给自己的数据。
扩展:
- 网络抓包不仅能够抓到发送给自己的报文数据,也能抓取到发给别人的报文数据,实际就是因为在进行网络抓包时,主机将从局域网中收到的所有报文数据都向上交付了而已。
- 网卡有一种模式叫做混杂模式,被设置为混杂模式的网卡能够接收所有经过它的数据流,而不论其目的地址是否是它。
以太网帧格式
以太网帧格式如下:
具体字段如下:
1. 源地址(Source Address)和目的地址(Destination Address)字段
-
长度:各占 6字节(48位)。
-
目的地址:标识数据帧的目标设备的物理地址(MAC地址)。
-
源地址:标识发送数据帧的设备的物理地址(MAC地址)。
2. 类型字段(Type/Length)
-
长度:2字节。
-
Ethernet II 帧:标识 上层协议类型,如:
-
0x8100
:802.1Q VLAN 标签。 -
0x86DD
:IPv6 数据包。 -
0x0806
:ARP 请求/应答。 -
0x0800
:IPv4 数据包。
-
- IEEE 802.3 帧:表示 数据字段长度(范围
0~1500
),需结合 LLC 头标识协议。 -
判断规则:
-
若值 ≥ 0x0600(1536),视为类型字段(Ethernet II)。
-
若值 ≤ 0x05DC(1500),视为长度字段(IEEE 802.3)。
-
3. 数据字段(Data/Payload)
-
长度:46~1500字节(标准以太网 MTU),作用:承载上层协议(如 IP、ARP)的数据。
-
最小长度:46字节。若上层数据不足,需填充至46字节(如 TCP 握手包)。
-
最大长度:1500字节(标准 MTU)。
-
填充机制:发送方自动填充无用数据,接收方根据上层协议头部中的长度字段去除填充。
4. CRC字段(Frame Check Sequence, FCS)
-
长度:4字节
-
作用:通过 CRC-32 校验算法 检测帧在传输过程中是否发生比特错误。
-
校验范围:覆盖 目的MAC、源MAC、类型字段、数据字段。
-
处理规则:
-
接收方计算校验值,若与 FCS 不匹配,直接丢弃帧,不通知发送方。
-
错误恢复依赖上层协议(如 TCP 重传)。
-
MAC帧如何决定将有效载荷交付给上层的哪一个协议?
以太网MAC帧对应的上层协议不止一种,因此在将MAC帧的报头和有效载荷分离后,还需要确定应该将分离出来的有效载荷交付给上层的哪一个协议。
在MAC帧的帧头当中有2个字节的类型字段,因此在分离出报头和有效载荷后,根据该字段将有效载荷交付给对应的上层协议即可。
-
检查MAC地址:确认帧是否为本机接收。
-
解析类型/长度字段:
-
若为EtherType(≥1536),直接匹配协议。
-
若为长度字段(≤1500),解析LLC/SNAP获取协议类型。
-
-
向上层传递:根据协议类型调用对应处理模块(如IP栈、ARP等)。
MAC地址
MAC 地址主要用于在同一个局域网(如以太网)内进行设备到设备的直接寻址。它的作用范围局限于本地网络链路,例如在一个办公室的局域网或者家庭 Wi - Fi 网络中。当数据在局域网内传输时,交换机等数据链路层设备根据 MAC 地址来确定数据帧的转发路径,将数据从源设备准确地发送到目的设备。
MAC 地址是物理地址,它通常固化在网络设备的网卡中。在设备生产过程中,由设备制造商分配。MAC 地址的前 24 位(3 字节)是组织唯一标识符(OUI),用于识别网络设备的制造商;后 24 位(3 字节)是由制造商分配的唯一编号,用于区分同一制造商生产的不同设备。
MAC 地址长度为 48 位,通常采用十六进制表示法,每两个十六进制数字表示 1 字节,中间用冒号或连字符分隔。例如,00:1A:2B:3C:4D:5E 或 00 - 1A - 2B - 3C - 4D - 5E。
我们可以通过ifconfig
命令来查看我们的MAC地址。
注:MAC地址前面的单词ether就是以太的意思
- 源 MAC 地址(Source MAC Address):它是发送数据的网络设备(如计算机网卡、网络交换机端口等)在局域网(LAN)中的物理地址。MAC 地址也被称为硬件地址,是由网络设备制造商固化在设备中的一个 48 位二进制数,通常表示为 12 位的十六进制数,例如 “00 - 1B - 44 - 11 - 3A - 0C”。这个地址在全球范围内是唯一的,用于在局域网环境中标识数据的发送端。
- 目的 MAC 地址(Destination MAC Address):它是接收数据的网络设备在局域网中的物理地址,同样是一个 48 位的二进制数,用于在局域网中标识数据的目标接收端。
- 有些数据的传输都是跨局域网的,数据在传输过程中会经过若干个路由器,最终才能到达对端主机。
源MAC地址和目的MAC地址是包含在链路层的报头当中的,而MAC地址实际只在当前局域网内有效,因此当数据跨网络到达另一个局域网时,其源MAC地址和目的MAC地址就需要发生变化,因此当数据达到路由器时,路由器会将该数据当中链路层的报头去掉,然后再重新封装一个报头,此时该数据的源MAC地址和目的MAC地址就发生了变化。
因此数据在传输的过程中是有两套地址:
- 一套是源IP地址和目的IP地址,这两个地址在数据传输过程中基本是不会发生变化的(存在一些特殊情况,比如在数据传输过程中使用NAT技术,其源IP地址会发生变化,但至少目的IP地址是不会变化的)。
- 另一套就是源MAC地址和目的MAC地址,这两个地址是一直在发生变化的,因为在数据传输的过程中路由器不断在进行解包和重新封装。
MTU最大传输单元
-
MTU 是数据链路层协议规定的单次传输数据的最大有效载荷长度(单位为字节),由底层物理介质和网络技术决定。
-
核心作用:确保数据帧在物理网络中可靠传输,避免因数据过长导致传输失败或效率降低。
常见网络类型的MTU
网络类型 | MTU(字节) | 说明 |
---|---|---|
以太网(Ethernet) | 1500 | 最常见的局域网标准,如家庭/企业网络。 |
PPPoE(宽带拨号) | 1492 | 因PPPoE头部占用8字节,MTU需减少。 |
Wi-Fi(802.11) | 1500 | 与以太网相同,但可能因加密开销调整。 |
Jumbo Frame | 9000 | 巨型帧,用于高性能网络(需设备支持)。 |
为什么以太网MTU是1500字节?
-
历史原因:早期以太网设计时,为平衡传输效率和错误率,选择1500字节作为最佳值。
-
兼容性:沿用至今,成为行业标准,确保设备间互通性。
如何查看和修改MTU?
查看MTU:
# Linux
ifconfig eth0 | grep mtu# Windows
netsh interface ipv4 show subinterfaces
修改MTU:
# Linux
ifconfig eth0 mtu 9000# Windows(需管理员权限)
netsh interface ipv4 set subinterface "以太网" mtu=9000 store=persistent
ARP协议
在局域网(LAN)中,通过已知的 IP地址 解析出对应的 MAC地址,实现数据链路层的直接通信。
-
所属层:介于 网络层(IP) 与 数据链路层(MAC) 之间的协议,通常归类为网络层协议。
-
核心功能:建立和维护 IP-MAC映射表(即ARP缓存表)。
ARP 协议的作用
ARP协议的核心作用:在局域网(LAN)中,通过已知的IP地址解析对应的MAC地址,实现网络层(IP)到数据链路层(MAC)的地址映射,确保数据能够封装成帧并正确送达目标设备。
在同一个局域网中要给对方发消息,就必须得知道对方的MAC地址,而我们只知道对方的IP地址,因此需要通过ARP协议来根据IP地址来获取目标主机的MAC地址。
-
网络层使用IP地址进行逻辑寻址(如
192.168.1.100
),但数据链路层实际通信依赖MAC地址(如00:1C:C4:AA:BB:CC
)。 -
若设备仅知道目标IP地址而不知其MAC地址,无法直接发送数据帧。
总结:ARP协议是局域网通信的“翻译官”,通过动态绑定IP与MAC地址,确保数据从网络层精准传递至数据链路层目标设备。
ARP协议的分层
在TCP/IP四层模型中,协议的分层设计并非严格的“垂直分层”,同一层内的协议可能承担不同功能模块,形成逻辑上的层级关系。
在OSI模型中,ARP协议属于链路层。但在TCP/IP模型中,ARP协议属于网络层。
-
MAC帧协议:数据链路层的基础协议,负责将网络层传递的数据封装成帧(添加源/目标MAC地址、帧校验等),并通过物理介质传输。
-
ARP:数据链路层的辅助协议,用于解决地址映射问题(将IP地址解析为MAC地址)。
-
与MAC帧的关系:
-
逻辑上层:ARP/RARP报文需封装在MAC帧中传输,其EtherType字段为
0x0806
(ARP)或0x8035
(RARP)。 -
功能依赖:MAC帧为ARP/RARP提供传输载体,ARP/RARP为网络层(IP)提供地址解析服务。
-
-
分层示意图如下:
┌─────────────────────┐│ 网络层(IP) │ ← 依赖ARP获取MAC地址└─────────────────────┘↓┌─────────────────────┐│ ARP/RARP协议 │ ← 逻辑上属于数据链路层,但为IP层提供服务└─────────────────────┘↓┌─────────────────────┐│ MAC帧协议 │ ← 承载ARP/RARP报文└─────────────────────┘
-
MAC帧是数据链路层的传输载体,ARP/RARP是其上层协议,负责地址解析。
-
IP是网络层的传输核心,ICMP/IGMP是其上层协议,扩展控制和管理功能。
-
协议分层的关键在于功能解耦,而非物理层级隔离。同一层内协议通过协作,共同实现该层的核心目标(如数据链路层的直接通信、网络层的端到端传输)。
ARP数据报的格式
ARP报文直接封装在 以太网帧 的数据部分,其结构固定为 28字节,若不足以太网要求的最小数据长度(46字节),需填充至46字节。以下是ARP报文的字段组成:
字段名称 | 长度(字节) | 说明 |
---|---|---|
硬件类型(Hardware Type) | 2 | 底层网络类型:1 :以太网(Ethernet)。
|
协议类型(Protocol Type) | 2 | 上层协议类型:0x0800 表示IPv4,0x86DD 表示IPv6。 |
硬件地址长度(HLEN) | 1 | MAC地址长度: 以太网为 6 (即6字节)。 |
协议地址长度(PLEN) | 1 | IP地址长度: IPv4为 4 ,IPv6为 16 。 |
操作码(Operation) | 2 | 报文类型:1 为ARP请求(Request),2 为ARP响应(Reply)。 |
发送方MAC地址(Sender MAC) | 6 | 发送方的MAC地址(如 00:1C:C4:AA:BB:CC )。 |
发送方IP地址(Sender IP) | 4 | 发送方的IP地址(如 192.168.1.1 )。 |
目标MAC地址(Target MAC) | 6 | 目标设备的MAC地址: ARP请求中为 00:00:00:00:00:00(全0)。 |
目标IP地址(Target IP) | 4 | 目标设备的IP地址(如 192.168.1.2 )。 |
ARP的工作原理
ARP(地址解析协议)的工作原理可概括为 “一问一答” 的广播-单播交互过程,核心是通过 动态查询 建立 IP地址与MAC地址的映射关系。以下是详细步骤解析:
1. PC1需要发送数据给PC2(IP已知,MAC未知)│↓
2. PC1检查ARP缓存 → 无记录 → 触发ARP请求│↓
3. PC1广播ARP请求:"Who has 192.168.1.2? Tell 192.168.1.1"│↓
4. PC2单播响应:"192.168.1.2 is at 00:1C:C4:DD:EE:FF"│↓
5. PC1和PC2更新ARP缓存 → 后续通信直接使用MAC地址
1. 触发条件
当设备(如PC1)需要向同一局域网内的另一设备(如PC2)发送数据时:
-
已知:目标IP地址(如
192.168.1.2
),未知:目标MAC地址。 -
触发ARP请求:若PC1的ARP缓存表中无
192.168.1.2
对应的MAC地址,则启动ARP解析流程。
2. ARP请求(广播)
(1)构造ARP请求包:
- 硬件类型(Hardware Type):
1
以太网(Ethernet) - 协议类型(Protocol Type):
0x0800
表示IPv4 - 硬件地址长度(HLEN):MAC地址长度,以太网为
6
(即6字节)。 - 协议地址长度(PLEN):IP地址长度,IPv4为
4
- 操作类型:
1
(ARP请求) - 发送方MAC:MAC地址(
00:1C:C4:AA:BB:CC
) - 发送方IP:PC1的IP地址(
192.168.1.1
) - 目标MAC:
00:00:00:00:00:00
(全0,表示未知) -
目标IP:
192.168.1.2
。
(2)封装为以太网帧:
-
目标MAC:
FF:FF:FF:FF:FF:FF
(广播地址)。 -
类型字段:
0x0806
(标识ARP协议)。 -
数据字段:28字节的ARP请求包 + 18字节填充(满足以太网最小数据长度46字节)。
(3)广播发送:交换机将帧广播到局域网内所有设备(除源端口外)。
3. ARP响应(单播)
(1)设备接收并处理请求:
-
所有设备收到广播帧,检查目标IP:
-
IP不匹配:丢弃帧。
-
IP匹配(如PC2的IP为
192.168.1.2
):继续处理。
-
(2)构造ARP响应包:
- 硬件类型(Hardware Type):
1
以太网(Ethernet) - 协议类型(Protocol Type):
0x0800
表示IPv4 - 硬件地址长度(HLEN):MAC地址长度,以太网为
6
(即6字节)。 - 协议地址长度(PLEN):IP地址长度,IPv4为
4
- 操作类型:
2
(ARP响应) - 发送方MAC:MAC地址(
00:1C:C4:DD:EE:FF
),B_MAC - 发送方IP:PC2的IP地址(
192.168.1.2
),B_IP - 目标MAC:MAC地址(
00:1C:C4:AA:BB:CC
),D_MAC - 目标IP:PC1的IP地址(
192.168.1.1
),D_IP
(3)封装为以太网帧:
-
目标MAC:PC1的MAC地址(单播),D_MAC
-
类型字段:
0x0806
。 -
数据字段:28字节的ARP响应包 + 18字节填充。
(4)单播发送响应:PC2直接向PC1的MAC地址发送帧。
4. 更新ARP缓存
(1)PC1接收响应:
-
解析响应包,提取PC2的IP-MAC映射(
192.168.1.2 → 00:1C:C4:DD:EE:FF
)。 -
将映射存入本地ARP缓存表,默认存活时间 15~20分钟。
(2)PC2更新缓存:
-
PC2在处理ARP请求时,已记录PC1的IP-MAC映射(
192.168.1.1 → 00:1C:C4:AA:BB:CC
)。
5. 后续通信
-
PC1直接使用缓存中的PC2的MAC地址封装数据帧,无需再次触发ARP请求。
总结
ARP协议通过 广播请求-单播响应 机制,动态维护IP与MAC的映射关系,是局域网通信的基石。理解其工作原理,有助于快速定位网络层与数据链路层的连通性问题(如无法上网、IP冲突)。实际应用中,结合抓包工具(如Wireshark)可直观观察ARP交互过程。
设备能连接局域网(如内网服务器可访问),但无法访问互联网(如无法打开网页)。
根本原因
-
无法获取网关MAC地址:设备需通过默认网关将数据转发到外网,若ARP无法解析网关的MAC地址,数据链路层无法封装目标MAC,导致数据无法发出。
-
常见故障点:
-
网关ARP条目缺失:本地ARP缓存中无网关的IP-MAC映射。
-
网关未响应ARP请求:网关设备故障、IP配置错误或被防火墙拦截。
-
本地ARP缓存错误:缓存中网关MAC地址错误(如被ARP欺骗篡改)。
-