《Linux网络编程》9.数据链路层原理

💡Yupureki:个人主页

✨个人专栏:《C++》 《算法》《Linux系统编程》《高并发内存池》《MySQL数据库》

《个人在线OJ平台》《Linux网络编程》《CMake自动化构建工具》《Redis数据库》


🌸Yupureki🌸的简介:


目录

[1. 数据链路层的发展起源](#1. 数据链路层的发展起源)

[2. 认识以太网](#2. 认识以太网)

[2.1 MAC子层两大核心机制](#2.1 MAC子层两大核心机制)

[2.1.1 CSMA/CD](#2.1.1 CSMA/CD)

[2.1.2 MAC地址](#2.1.2 MAC地址)

[2.2 以太网帧格式](#2.2 以太网帧格式)

[2.3 IP和MAC的区别](#2.3 IP和MAC的区别)

[3. 认识MTU](#3. 认识MTU)

[3.1 什么是MTU?](#3.1 什么是MTU?)

[3.2 对IP协议的影响:分片与重组](#3.2 对IP协议的影响:分片与重组)

[3.3 对UDP协议的影响:"快递"被切分了](#3.3 对UDP协议的影响:"快递"被切分了)

[3.4 对TCP协议的影响:MSS协商](#3.4 对TCP协议的影响:MSS协商)

[4. 认识ARP协议](#4. 认识ARP协议)

[4.1 为什么要有ARP协议?](#4.1 为什么要有ARP协议?)

[4.2 ARP报文格式](#4.2 ARP报文格式)

[4.3 ARP的作用](#4.3 ARP的作用)

[4.4 ARP的工作流程](#4.4 ARP的工作流程)

[4.5 ARP欺骗](#4.5 ARP欺骗)

[4.5.1 攻击原理](#4.5.1 攻击原理)

[4.5.2 攻击类型与过程](#4.5.2 攻击类型与过程)

[1. 中间人攻击:窃听与篡改](#1. 中间人攻击:窃听与篡改)

[2. 拒绝服务攻击:制造黑洞](#2. 拒绝服务攻击:制造黑洞)

[3. ARP泛洪攻击](#3. ARP泛洪攻击)

[4.5.3 防范手段](#4.5.3 防范手段)

[1. 静态ARP绑定](#1. 静态ARP绑定)

[2. DAI (动态ARP检测)](#2. DAI (动态ARP检测))

[3. 端口安全与VLAN隔离](#3. 端口安全与VLAN隔离)

[4. 主机端防护](#4. 主机端防护)

[5. 物理与接入层控制](#5. 物理与接入层控制)


1. 数据链路层的发展起源

数据链路层是承上启下的关键一层。它的核心使命是确保在同一物理网络段内,数据能可靠 地从一个节点(比如你的电脑)传输到另一个相邻节点(比如家里的路由器),而不关心这些数据最终要跨越多少个网络到达世界的另一端

数据链路层的发展,本质上是局域网技术优胜劣汰的过程,其主流角色如今由以太网(Ethernet) 扮演。

  • 起源:1973年,以太网诞生 。由罗伯特·梅特卡夫(Robert Metcalfe)在施乐PARC研究中心发明,最初速率仅2.94Mbps。它利用CSMA/CD机制解决共享线路上的信号冲突问题。

  • 标准化:1980年代,成为工业标准 。1983年,IEEE 802.3标准获批,将以太网确立为官方标准。IEEE还将数据链路层清晰地划分为MAC (介质访问控制)和LLC(逻辑链路控制)两个子层,为不同物理网络提供统一逻辑接口。

  • 胜出:1990年代,以太网一统江湖 。以太网凭借简单、成本低、可扩展性强的特点,在市场上击败了令牌环、FDDI等竞争对手。1990年,10BASE-T标准让以太网能在双绞线上运行,极大降低了组网成本。

  • 演进:从百兆到万兆,开启全双工时代 。以太网速率不断飙升(100Mbps -> 1Gbps -> 10Gbps甚至更高)。全双工模式的引入彻底消除了冲突,让通信双方可以同时收发数据,效率倍增。

  • 未来:2024年,AI时代的新要求 。中国科学院计算技术研究所与阿里云等机构联合发布了ETH+协议1.0,旨在通过帧格式优化等技术,为高性能AI算力网络提供更好的支持,标志着数据链路层技术仍在持续创新。

2. 认识以太网

以太网主要定义并实现了底层的MAC子层 ,以及物理层的诸多规范。而LLC子层则由IEEE 802.2标准统一定义,为所有类型的网络提供相同的上层接口。

所以,当我们谈论以太网时,我们几乎总是在谈论它的MAC子层。正是MAC子层的精妙设计,决定了以太网的性能和规则。

2.1 MAC子层两大核心机制

2.1.1 CSMA/CD

现实中,在课堂上,只允许一个人讲话,这个人通常是老师。如果下面有同学在吵闹,那么课堂就无法正常进行。不然为什么老师经常说:"你想讲,那你上来讲"。

在早期的共享式以太网中,就是一个大的"课堂"。所有设备都连在同一根同轴电缆上,就像所有车辆都挤在一条没有红绿灯的单行线上。这肯定会发生碰撞,CSMA/CD协议就是为了解决这个问题而生的。

它遵循**"先听后说,边听边说,冲突即停,随机重试"**的原则,流程如下:

  1. 先听后说:任何设备在发送数据前,必须持续监听线路。如果线路空闲,才能开始传输。

  2. 边听边说:开始发送后,也必须持续监听,看信号是否发生叠加变形,即"冲突"。

  3. 冲突即停:一旦检测到冲突,立即停止发送当前的受损数据。

  4. 强化冲突:停止发送后,再发送一个短暂的"人为干扰信号",确保所有设备都清楚地知道冲突发生。

  5. 随机重试 :使用截断二进制指数退避算法来计算随机的等待时间。等待时间结束后,返回第一步重新监听。这个聪明的算法,会随着冲突次数增加动态增大重传等待范围,从而快速化解网络拥堵。

注意 :今天的以太网早已全面采用交换机和全双工模式,不再共享带宽,因此CSMA/CD协议在现代网络中已基本不被使用。但了解它对于理解以太网的进化至关重要。

2.1.2 MAC地址

MAC地址是每个网络接口独一无二、在生产时就被烧录好的物理地址

  • 长度:48位(6个字节)。

  • 表示法 :通常用十六进制表示,如 00:1A:2B:3C:4D:5E

  • 结构

    • 前3个字节组织唯一标识符 (OUI),标识网卡制造商(如Intel、Apple)。

    • 后3个字节扩展标识符,由制造商分配给具体的网卡,确保全球唯一。

  • 特殊寻址

    • 单播:发给一个特定设备(第1个字节最低位为0)。

    • 广播FF:FF:FF:FF:FF:FF,发给局域网内所有设备。

    • 组播:发给一组特定的设备,用于网络管理、流媒体等。

2.2 以太网帧格式

数据在以太网中传输的基本单位叫 ,就像贴上地址、写好校验的快递包裹。目前最主流的是Ethernet II帧格式,结构清晰:

字段 长度 描述
前导码 7字节 10101010...的交替0/1比特流,作用是用已知节奏唤醒接收方时钟,准备接收数据。
帧首定界符 1字节 10101011,紧跟前导码,宣告"帧的真正内容马上开始"。
目的MAC地址 6字节 接收者的物理地址。
源MAC地址 6字节 发送者的物理地址。
类型/长度 2字节 关键区分标志。≥1536 (0x0600) 表示类型(如0x0800=IPv4,0x86DD=IPv6);≤1500表示数据部分长度。
数据 46-1500字节 来自上层的IP数据包。为保证总长至少64字节,不足46字节时会填充。
帧检验序列(FCS) 4字节 发送方根据前面的内容得出一串**CRC(循环冗余校验码)**填入。接收方重新计算比对,没对上就丢弃并请求重传。

2.3 IP和MAC的区别

一句话:IP地址负责"到哪儿去",MAC地址负责"下一步交给谁"

核心区别一览

对比维度 IP地址 (网络层) MAC地址 (数据链路层)
身份角色 你在网络世界中的逻辑门牌号 你设备的唯一物理身份证
工作层次 网络层 数据链路层
地址结构 32位(IPv4) 或 128位(IPv6),点分十进制/冒号十六进制 例:192.168.1.1 48位,十六进制 例: 00:1A:2B:3C:4D:5E
分配来源 由网络管理员或DHCP服务器动态/静态分配,换了网络就会变 出厂时由制造商烧录,全球唯一,一般终身不变
类比 你的家庭住址(表示你住在哪个网络) 你的身份证号(你是谁,走到哪都不变)
作用范围 可跨越不同网络,具有全局意义 仅在同一个局域网(广播域)内有效,无法被路由到互联网

在整个网络通信中,IP和MAC都充当什么样的角色?

举个例子:你自驾从北京到上海

IP:起点和终点

整个行程中,你的起点:北京,终点:上海。不需要关注中途是怎么走的,只关注起点和终点

MAC:行程中的规划

整个行程中,需要规划具体的路线。例如我可以北京->天津->河北->山东->江苏->上海,而这之间的行程,就是MAC的意义:例如从北京到天津靠的是MAC

3. 认识MTU

MTU,全称最大传输单元,是数据链路层给网络层立下的一个"包裹尺寸上限"。它直接决定了IP数据包是否会被分拆,并深刻影响着TCP和UDP这两种运输方式的效率与可靠性。

3.1 什么是MTU?

MTU 指二层网络(如以太网)所能承载的三层数据(如IP数据包)的最大尺寸,单位是字节。

  • 以太网的标准MTU是1500字节。这不是物理极限,而是一个被广泛接受的行业约定。你的数据包如果超过它,就需要做"拆分"处理。

  • 不包括二层的帧头帧尾(源/目的MAC、类型、FCS校验等),只指帧里面能装的有效载荷。

你可以把MTU想象成高速公路隧道的限高杆 。卡车(IP数据包)想通过隧道,总高度必须≤限高。如果装得太高(超过MTU),就需要把货物卸下来分批运输,这就是IP分片

3.2 对IP协议的影响:分片与重组

IP层的核心任务是"尽力而为"地传输,遇到MTU限制时,它的默认做法就是分片

流程上是这样的:

一台路由器收到一个大小超过出口MTU的数据包,会将它切成多个更小的IP分片 ,每个分片都要复制一份原包的IP头。这些分片会独立在网络中传输,直到到达最终目的地,才由目标主机的IP层负责花时间和资源重新组装还原。

不过,强力拆分会带来三个致命问题:

  1. 效能极低:每个分片都要复制一份IP头(至少20字节),传输的数据有大量是头开销。

  2. 可靠性极差 :只要任何一个分片丢失 ,整个原始数据包就无法重组,必须全部重传

  3. 安全隐患:恶意攻击者可伪造大量无法重组的分片,耗尽设备资源,导致拒绝服务。

因此,现代网络实践中有一条"行规":尽一切可能避免IP分片。实现方法通常是让上层协议去适应MTU。

3.3 对UDP协议的影响:"快递"被切分了

UDP是"无连接"的,本身没有分块和流控机制。所以,UDP应用对MTU非常敏感。

  • 如果UDP发大数据 :假设一个应用通过UDP发送2000字节的数据,加上IP头后,很可能超过1500字节的MTU,导致IP层强制分片。此时,UDP自身毫不知情,它既不知道被切了,也无力做任何保障。一旦有分片丢失,整个UDP包就会被悄悄丢弃,UDP本身既不会知道,也不会重传,可靠性完全交给应用层。

  • 最佳实践:主动变小。有经验的开发者会用保守策略来适应路径MTU:

    • 许多标准规定,DNS报文(基于UDP)必须限定在512字节以内,防止分片。

    • 在一些不便进行PMTUD的实时应用(如VoIP)中,常约定一个安全值,如1400字节,确保在任何标准链路上都不会被分片。

3.4 对TCP协议的影响:MSS协商

TCP是"面向连接、可靠"的流协议,它通过**MSS(最大报文段长度)**机制,巧妙地解决了MTU问题,从源头避免IP分片。

MSS = MTU - IP头长度 - TCP头长度 。对于标准IPv4和标准长度的头,MSS = 1500 - 20 - 20 = 1460字节

在TCP三次握手建立连接时,双方会在SYN报文中协商MSS 。双方会取彼此通告值中的较小者 作为这次连接的MSS。之后,TCP严格按照这个尺寸从发送缓冲区截取数据段,确保最终打包发出的IP包,一定不大于路径MTU

中间链路MTU变小:路径MTU黑洞问题

这里存在一个棘手的问题:如果两台主机协商时用了1500的MTU,但数据包穿越互联网时,经过一条MTU较小的"窄胡同"(比如PPPoE拨号的1492字节),会怎样?

  • 聪明的做法 - 路径MTU发现 (PMTUD) :主机在IP头设置DF标志(禁止分片) ,当数据包到达窄胡同口时,路由器想切但切不了,就会丢掉这个包,并回送一个**ICMP"需要分片"**的消息,告知正确的MTU。主机收到后,就能动态调低MSS。

  • 最糟糕的"黑洞" :有时,回程的ICMP包会被防火墙或网络设备错误地拦截或忽略。于是,发送方只看到发出去的包石沉大海,连接卡死,而完全不知是因为MTU问题导致的。这就是路径MTU黑洞

为了解决这个常见问题,运维中常用MSS钳制 (MSS Clamping):在出口路由器上强制修改TCP三次握手中的MSS值,把它限制在一个略低于路径最小MTU的计算值上(如1452),从而一劳永逸地避免黑洞。

4. 认识ARP协议

4.1 为什么要有ARP协议?

在网络设计之初,就确立了分层原则:IP地址提供全局可达的逻辑寻址,MAC地址提供局域网内"一跳"的物理寻址。于是产生了一个核心问题:当我知道隔壁邻居的门牌号(IP地址),却不知道他的身份证号(MAC地址)时,怎么把信交给他?

为解决这个问题,ARP协议在1982年应运而生,以一种动态、无需手动配置的方式,在需要时自动完成IP→MAC的映射解析

4.2 ARP报文格式

ARP报文直接封装在以太网帧 中进行传输,其帧类型字段为0x0806。报文结构如下:

字段 长度 描述
硬件类型 2字节 链路层类型,以太网为1
协议类型 2字节 网络层协议,IPv4为0x0800
硬件地址长度 1字节 MAC地址长度,固定为6
协议地址长度 1字节 IP地址长度,固定为4
操作码 2字节 1=ARP请求,2=ARP应答
发送方MAC地址 6字节 请求发起方的物理地址
发送方IP地址 4字节 请求发起方的逻辑地址
目标MAC地址 6字节 请求中为全0,应答中为请求方MAC
目标IP地址 4字节 你想解析的对象的IP地址

4.3 ARP的作用

  1. 建立"高速缓存"以减少广播风暴 :每台主机都会维护一个ARP缓存表,用于存储局域网内IP与MAC的对应关系。这些条目分为:

    • 动态条目 :通过ARP协议学到的映射,有生存周期(TTL),过期即删,以保证信息新鲜。

    • 静态条目 :手动绑定的永久映射,常见于防止ARP欺骗的安全配置。

  2. 仅限本网段生效 :ARP请求是广播 帧,广播域被路由器严格隔离。这意味着,ARP只能为同一局域网内的IP找到MAC,它绝不跨越路由器。

4.4 ARP的工作流程

这是理解ARP如何运作的关键,分为两种情况。

情况一:同网段通信

场景 :主机A (192.168.1.1) 要给主机B (192.168.1.2) 发数据。A检查B的IP,发现属于同一网段

  1. 查表 :A首先在自己的ARP缓存表中找192.168.1.2对应的MAC地址。没找到。

  2. 广播ARP请求 :A发一个ARP请求,目的MAC为广播地址FF:FF:FF:FF:FF:FF,在网内大喊:"谁是192.168.1.2?请告诉192.168.1.1你的MAC!"

  3. 单播ARP应答 :B收到后,一看目标IP是自己,就悄悄(单播)回复:"192.168.1.1,我是192.168.1.2,我的MAC是BB:BB:BB:BB:BB:BB。" B同时也会把A的MAC记到自己的缓存里。

  4. 写入缓存,开始通信:A收到应答,把IP-MAC映射写入ARP缓存表。现在,A可以用B的MAC地址封装数据帧,开始通信了。

情况二:跨网段通信

这是最容易混淆的地方。

场景 :主机A (192.168.1.1) 要给外网服务器 (8.8.8.8) 发数据。A发现8.8.8.8与自己不在同一网段

  1. 查路由表 :A知道要把数据发给它的默认网关192.168.1.254(路由器),因为那是通往外部世界的唯一出口。它需要网关的MAC,而不是远端8.8.8.8的MAC。

  2. 对网关发起ARP :A检查ARP缓存,发现没有192.168.1.254的MAC。于是它ARP解析的是网关的IP,而不是最终目标IP。

  3. 网关应答 :路由器就会应答,把自己的MAC 00:00:00:00:00:01 告诉A。

  4. 封装与交付 :A封装的数据帧,目的IP永远是最终目标(8.8.8.8),但目的MAC是网关的MAC。路由器收到帧后,再根据路由表,在下一段链路上重新发起ARP,一步步把数据送到终点。

4.5 ARP欺骗

ARP欺骗是局域网内一种经典的中间人攻击手段,它利用ARP协议"无连接、无认证"的天生缺陷,伪造网关或目标主机的MAC地址,从而劫持网络流量。

4.5.1 攻击原理

ARP欺骗根源于ARP协议的一个设计前提:局域网是可信的。协议假设所有ARP应答都是诚实且正确的。

  • 当主机收到一个ARP应答(哪怕是主动推送的),它会无条件地更新自己的ARP缓存表。

  • 攻击者正是利用这一点,发送伪造的ARP应答,声称某个IP地址(如网关)的MAC地址就是自己,实现毒化缓存。

如同你大喊:"xxx是谁?",这个时候有个陌生人,明明不是xxx,却非要告诉你"我是xxx",如果你不仔细甄别就会被他骗

4.5.2 攻击类型与过程

1. 中间人攻击:窃听与篡改

这是最典型的ARP欺骗形式,攻击者充当主机A和网关之间的"透明代理"。

  • 第一步,双向欺骗 :攻击者C持续向主机A发送伪造的ARP应答:"我是网关192.168.1.254,MAC是CC:CC";同时向网关发送伪造的应答:"我是主机A192.168.1.1,MAC是CC:CC"。

  • 第二步,流量劫持 :主机A和网关都更新了缓存,它们的通信数据帧在二层都被发往攻击者C。C打开数据包,可以记录、查看甚至修改内容(比如篡改网页、注入恶意代码)。

  • 第三步,数据转发(维持会话):为避免断网引起怀疑,C必须开启IP转发功能,将A的数据转发给真正的网关,将网关的数据转发给A。这样A和外界通信依然正常,但对二者全然不知信息已被窃听。

2. 拒绝服务攻击:制造黑洞

攻击者可以仅发出单向的欺骗包。

  • 对主机的欺骗 :攻击者不断告诉主机A:"网关的MAC是不存在的地址",主机A的缓存被污染后,所有发往外网的数据帧全部丢弃,因为目的MAC根本没人接收,导致主机A完全断网

  • 对网关的欺骗 :攻击者向网关谎称"某台服务器的MAC是广播地址不存在的地址",网关发给该服务器的流量全部丢失,造成服务器对外服务中断。

3. ARP泛洪攻击

攻击者向交换机发送大量伪造的ARP请求或应答,交换机的转发表被冲垮,可能导致交换机进入**"失效开放"模式**,把收到的帧向所有端口广播,此时攻击者直接嗅探到整个广播域的流量。

4.5.3 防范手段

防范ARP欺骗需要分层和组合策略,没有单一万能药。

1. 静态ARP绑定

在路由器和关键服务器上,手动将网关IP和其他重要设备的IP与MAC进行静态绑定。静态条目优先级高于动态学到的,且不会过期。但缺点是在大型网络里维护成本极高,设备更换后必须手动更新。

2. DAI (动态ARP检测)

这是部署在交换机上的最强防御手段。

  • 原理:交换机在转发ARP报文前,会从DHCP监听绑定表或手动配置的绑定表中查询IP与MAC的合法性。

  • 动作:只有匹配的ARP报文才被放行,不匹配的直接丢弃,并可以记录日志或关闭端口。

  • 前提 :需要开启DHCP Snooping(监听DHCP过程,生成合法绑定表),通常搭配IP源地址防护一起使用,是目前企业网最有效的防ARP欺骗方案。

3. 端口安全与VLAN隔离
  • 端口安全:限制交换机某一端口所学到的MAC地址数量,并可将MAC静态绑定到端口。一旦检测到陌生MAC接入,立即关闭端口或限制流量,可防范伪造源MAC的ARP欺骗。

  • VLAN隔离:将用户终端、服务器、设备管理网分别划入不同VLAN,缩小广播域范围,使攻击的直接影响面局限于一个VLAN内。

4. 主机端防护
  • ARP防火墙软件:在客户端上安装安全软件,会监控接收到的ARP应答,当发现有IP对应的MAC变更时进行提示、拦截,或主动通告正确的网关MAC。

  • 定期监控:管理员使用抓包工具定期检查局域网中的ARP报文,观察是否存在大量无请求的ARP应答,可及早发现异常。

5. 物理与接入层控制

强壮的802.1X认证以及MAC地址认证,确保接入网络的人可信。因为绝大多数ARP欺骗攻击来自内部已接入的设备,控制接入源头能从根本上降低风险。

相关推荐
A小辣椒7 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒11 小时前
TShark:基础知识
linux
AlfredZhao13 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334661 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪1 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式