【Linux网络编程】9. 数据链路层

文章目录

  • 一、数据链路层
    • [1、对比理解 "数据链路层" 和 "网络层"](#1、对比理解 "数据链路层" 和 "网络层")
    • 2、认识以太网
    • 3、以太网帧格式
    • [4、MAC 地址](#4、MAC 地址)
    • [5、MAC 地址 & IP 地址](#5、MAC 地址 & IP 地址)
  • 二、MTU
    • 1、MTU(最大传输单元)
    • [2、MTU 对 IP 协议的影响](#2、MTU 对 IP 协议的影响)
    • [3、MTU 对 UDP 协议的影响](#3、MTU 对 UDP 协议的影响)
    • [4、MTU 对 TCP 协议的影响](#4、MTU 对 TCP 协议的影响)
    • [5、查看硬件地址和 MTU](#5、查看硬件地址和 MTU)
  • 三、ARP协议
    • [1、ARP 协议作用](#1、ARP 协议作用)
    • [2、ARP 协议工作流程](#2、ARP 协议工作流程)
    • [3、ARP 数据报格式](#3、ARP 数据报格式)

一、数据链路层

核心作用:在同一网段内,实现两个相邻设备之间的帧传输,负责把 IP 数据报封装成帧,通过物理地址(MAC 地址)完成点到点的交付。

1、对比理解 "数据链路层" 和 "网络层"

层级 核心目标 寻址方式 传输范围 关键比喻
数据链路层 同一网段内,相邻设备间的帧交付 MAC 地址 一跳(直连节点) 同城快递,负责从小区到隔壁小区
网络层 跨网段,主机到主机的端到端交付 IP 地址 全网(跨网段) 全国物流,负责从寄件地址到收件地址

2、认识以太网

  • 以太网是一种局域网技术标准,覆盖数据链路层 + 物理层,定义了拓扑、介质、速率、访问控制等规范。
  • 它规定了网线用双绞线、传输速率(10M/100M/1000M 等)、CSMA/CD 访问控制方式等细节。
  • 是目前应用最广泛的局域网技术,同类还有令牌环网、无线 LAN 等。

总结: 以太网是定义了局域网传输规则的标准,是最主流的有线局域网技术

3、以太网帧格式

以太网帧的结构非常固定,核心字段如下:

字段 长度 核心作用
目的 MAC 地址 6 字节 接收方的硬件地址
源 MAC 地址 6 字节 发送方的硬件地址
类型 2 字节 标识上层协议:0x0800=IP、0x0806=ARP、0x8035=RARP
数据 46~1500 字节 承载上层数据(IP 数据报 / ARP 报文),不足 46 字节会自动填充
CRC 校验 4 字节 校验帧在传输中是否损坏

总结: 以太网帧用 MAC 地址标识收发方,用类型字段区分上层协议,用 CRC 保证数据完整性

4、MAC 地址

  • 核心作用: 数据链路层的硬件地址,用来标识局域网内的网卡设备。
  • 格式: 48 位(6 字节),通常用十六进制 + 冒号表示,如08:00:27:03:fb:19
  • 特点: 网卡出厂时固化,理论上全球唯一(部分网卡支持修改 MAC,虚拟机 MAC 可能冲突)。

5、MAC 地址 & IP 地址

  • IP 地址: 标识全网端到端 的起点、终点,负责跨网段路由
  • MAC 地址: 标识每一跳局域网 相邻设备,只负责链路内点对点转发
  • IP 定全程起点终点,MAC 定每一段路口交接

总结: 传输全程 IP 不变,每一跳 MAC 都在变

二、MTU

1、MTU(最大传输单元)

  • 核心概念: 数据链路层规定的单次传输的最大数据长度,相当于快递的包裹尺寸上限。
  • 以太网标准: MTU=1500 字节(对应以太网帧的数据字段上限),帧数据字段最小 46 字节,不足会自动填充。
  • 分片场景: 当 IP 数据包长度超过链路的 MTU 时,路由器会把它拆分成多个小分片传输,到终点再重组。
  • 关键特点: 不同网络类型(如拨号链路)的 MTU 不同,跨网络传输时会按链路的 MTU 动态处理分片。

总结:MTU 是数据链路层的 "包裹尺寸上限",超了 IP 层就分片,保证数据能顺利传输。

2、MTU 对 IP 协议的影响

  • 核心影响: 当 IP 数据包长度超过链路 MTU 时,必须被分片传输。
  • 分片标识: 所有分片的 IP 头中,16 位标识(id)相同,用来标记它们属于同一个原始数据包。
  • 结束标记: IP 头的 3 位标志中,第 3 位表示 "更多分片",非最后一个分片置为1,最后一个分片置为0
  • 重组规则: 接收端根据标识(id)分片偏移,按顺序把分片拼装还原。
  • 关键问题: 只要有一个分片丢失,整个数据包的重组就会失败,且 IP 层不负责重传,需要上层(如 TCP)处理重传逻辑。

总结: IP 分片是为了适配 MTU,用相同标识 + 偏移拆分大包,丢一个分片就全失败,IP 层不负责重传

3、MTU 对 UDP 协议的影响

  • 以太网 MTU=1500 字节,扣除 IP 头 20 字节、UDP 头 8 字节,UDP 单次最大有效数据是 1472 字节
  • 超过 1472 字节的 UDP 数据,会被 IP 层拆分成多个分片传输。
  • 只要任意一个分片丢失,整个 UDP 数据报就无法重组,导致传输失败,丢包概率大幅上升。

总结: UDP 大包会被 IP 分片,分片丢一个,整个包就废了,所以 UDP 要控制单次发送数据不超过 1472 字节

4、MTU 对 TCP 协议的影响

  • MSS(最大分段大小): TCP 单个报文段中,纯数据部分的最大长度,不包含 TCP 头和 IP 头。
  • 以太网中,MSS = MTU(1500) - IP头(20) - TCP头(20) = 1460字节

MSS 协商机制

  1. TCP 三次握手时,双方会在 SYN 报文中携带自己支持的 MSS 值。
  2. 通信双方会取对方 MSS 的较小值作为最终协商的 MSS,避免数据被 IP 分片。
  3. 目的是让 TCP 报文段封装成 IP 数据报后,长度不超过链路 MTU,从而避免分片带来的丢包风险。

总结: TCP 通过协商 MSS,让每个报文段刚好适配 MTU,从源头避免 IP 分片,保证传输更可靠

5、查看硬件地址和 MTU

使用 ifconfig 命令, 即可查看 ip 地址,mac 地址,和 MTU。

三、ARP协议

ARP不属于纯数据链路层 ,是介于网络层和数据链路层之间的协议。

1、ARP 协议作用

  • 核心:建立 IP 地址与 MAC 地址的映射关系。
  • 通信时只知道对方IP ,不知道MAC,没法封装以太网帧。
  • 网卡只认 MAC 地址,MAC 不匹配直接丢包,所以必须先用 ARP由 IP 查 MAC,才能正常发数据。

2、ARP 协议工作流程

  1. ARP 请求: 源主机广播 ARP 请求包(目的 MAC 为全FF:FF:FF:FF:FF:FF),询问目标 IP 对应的 MAC 地址。
  2. ARP 应答: 目标主机收到请求后,发现 IP 匹配,单播回复 ARP 应答包,告知自己的 MAC 地址。
  3. ARP 缓存: 源主机收到应答后,将 IP 与 MAC 的映射存入 ARP 缓存表(可用arp -a查看),缓存表项有 20 分钟左右的过期时间。
  • 为什么要有缓存表?

    避免每次通信都广播 ARP 请求,减少网络流量,提升通信效率。

  • 为什么表项要有过期时间?

    防止主机更换网卡、IP 地址变动或设备下线后,缓存表项失效导致通信错误,确保映射关系始终是最新的。

3、ARP 数据报格式

ARP 数据报是以太网帧内的载荷,整体结构分为「以太网首部」和「ARP 报文」两部分。

以太网首部(14 字节)

字段 长度 作用
目的 MAC 地址 6 字节 广播时为 FF:FF:FF:FF:FF:FF
源 MAC 地址 6 字节 发送方网卡的 MAC 地址
帧类型 2 字节 0x0806 表示这是 ARP 报文

ARP 报文(28 字节,核心部分)

字段 长度 关键说明
硬件类型 2 字节 1 表示以太网
协议类型 2 字节 0x0800 表示 IP 地址
硬件地址长度 1 字节 以太网 MAC 地址为 6 字节
协议地址长度 1 字节 IPv4 地址为 4 字节
op(操作码) 2 字节 1 = ARP 请求,2 = ARP 应答
发送端 MAC 地址 6 字节 发送方的 MAC 地址
发送端 IP 地址 4 字节 发送方的 IP 地址
目的端 MAC 地址 6 字节 请求时为全 0,应答时填入目标 MAC
目的端 IP 地址 4 字节 要查询的目标 IP 地址
相关推荐
CableTech_SQH1 小时前
华中科技大学同济医学院附属协和医院重庆医院智能化建设 F5G 全光方案百盛分析报告
大数据·网络·5g·运维开发·信息与通信
QotomPC1 小时前
Qotom Q30900GP多网口Mini PC:16网口设计在pfSense与工业网络中的应用
服务器·网络·边缘计算
冰冰的米咖1 小时前
20260430am9_10
网络·网络协议
用户2367829801681 小时前
Linux watch 命令深度解析:从实时监控到变化检测的完整实现
linux
Liangwei Lin2 小时前
LeetCode 22. 括号生成
linux·运维·服务器
win水2 小时前
八、命令行参数和环境变量
linux·环境变量·命令行参数
( •̀∀•́ )9202 小时前
Linux 下部署 `social-auto-upload` 遇到的问题及完整解决方案
linux·运维·服务器
高锰酸钾_2 小时前
计算机网络-链路层-差错控制
服务器·网络·计算机网络
代码中介商2 小时前
Libevent实战:高性能网络编程指南
linux·运维·网络