《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欺骗攻击来自内部已接入的设备,控制接入源头能从根本上降低风险。

相关推荐
%KT%1 小时前
Agent开发:自动查天气+景区推荐
linux·数据库·php
顶点多余1 小时前
Socket编程实现UDP通信
linux·网络协议·udp
切糕师学AI1 小时前
Remmina:Linux 平台的全能远程桌面客户端详解
linux·运维·远程控制·远程桌面·remmina
dualven_in_csdn2 小时前
【assist】 需要用到的方法
linux·运维·服务器
minji...2 小时前
Linux 网络基础(二)HTTP协议,域名,URL,URI,认识HTTP的请求和响应
linux·服务器·网络·网络协议·http·tcp
05候补工程师2 小时前
[408考研笔记] 传输层与网络层核心辨析:从逻辑通信到滑动窗口计算
网络·经验分享·笔记·网络协议·tcp/ip·考研·ip
萑澈2 小时前
Linux内核安全态势报告:2021-2026年高危漏洞演进与深度技术分析
linux·ubuntu
酿情师2 小时前
网络攻防技术:Windows操作系统的攻防
网络·windows
diangedan2 小时前
focuswindow
linux·运维·服务器