十万个为什么之数据链路层

#计算机网络

什么是数据链路层

首先我们需要知道数据链路层这个玩意是干啥的。数据链路层是计算机网络中负责在两台直接相连设备之间传输数据的层,它位于物理层之上,网络层之下。它的核心任务是确保数据从一台设备可靠地传输到另一台设备。

省流一下就是主要解决三个问题:封装成帧透明传输差错检测

他的工作确保了网络通信的基础,使上层协议能够在稳定的链路上进行有效的数据交换。

什么是透明传输

透明传输 是数据链路层的一项关键特性,简单来说就两个作用:确保数据完整、对上层协议透明。

为什么叫透明

透明传输中,”透明”这个词指的是数据链路层对数据的处理是无缝的,即数据传输的过程对上层协议和应用程序是透明的,它们不需要知道链路层的内部处理细节。

链路层处理数据时,不会干扰或改变数据的内容,也不会让上层协议感知到数据在链路层传输过程中所做的任何操作。

为什么需要透明传输

在数据链路层进行数据传输时,通常会使用某些特殊的控制字符来标识数据帧的开始结束(例如 01111110 作为以太网帧的边界标识)。如果传输的数据本身包含了这些特殊字符,链路层可能误将数据中的内容当作帧的开始或结束标识,从而导致数据解析错误或丢失。

透明传输 就是为了避免这种情况发生,它确保无论数据中包含什么内容,链路层都能正确地识别数据帧的边界,并且不受到数据本身的干扰。

透明传输是如何实现的?

透明传输通常通过 位填充(Bit Stuffing)字符填充(Byte Stuffing) 技术来实现。

1. 位填充(Bit Stuffing)

位填充是在数据中插入额外的比特(通常是 0),避免数据中出现连续的特殊标志位模式(如“11111”)。这样就能确保这些标志位不会被误判为帧的开始或结束标志。

工作原理

  • 假设链路层用一个特定的比特模式(例如连续的 5 个 1 比特 11111)作为帧的开始和结束标志。
  • 如果数据中包含了连续的 11111,链路层会在该模式后插入一个 0,打破连续的 1,避免它被误认为是帧的边界。
  • 接收方收到数据时,会去掉多余的 0,还原原始数据。

举个例子

  • 如果数据流中有 11111,而 11111 作为帧的边界标志,链路层会在其后插入一个 0,变成 111110
  • 接收方在解码时,去掉多余的 0,还原为 11111

2. 字符填充(Byte Stuffing)

字符填充是在数据流中插入特定的转义字符,避免数据中包含链路层的帧边界字符。

工作原理

  • 假设链路层使用某些特定的字节(例如 0x7E)作为帧的起始和结束标志。
  • 如果数据中出现了 0x7E,链路层会将它转义为另一个字节(如 0x7D 0x5E),避免它被误认为是帧的边界。
  • 接收方收到数据后,会知道这些转义字符,去掉它们,还原数据。

举个例子

  • 如果数据部分包含 0x7E,链路层会将其替换为 0x7D 0x5E
  • 接收方收到 0x7D 0x5E 时,知道应该还原为 0x7E

什么是协议数据单元(PDU)

了解数据链路层之前我我们还需要了解一个概念——协议数据单元(PDU)。什么是协议数据单元(PDU)?

协议数据单元(PDU) 是指在网络通信中,数据在每一层协议中被封装后的单位。每一层协议都有其自己的PDU,用于在该层与其它设备交换数据。简而言之,PDU 是协议处理的数据块,不同层协议的 PDU 在结构和格式上是不同的。

最重要的是,他其实是数据在网络中从一层传递到另一层的过程的缩影。

各层协议的 PDU

  • 物理层:物理层传输的是比特(Bit),因此物理层的 PDU 是 比特
  • 数据链路层:数据链路层将网络层传递下来的数据封装成 帧(Frame),所以数据链路层的 PDU 是帧。
  • 网络层:网络层负责将数据封装成 数据包(Packet),所以网络层的 PDU 是数据包。
  • 传输层:传输层将数据分为 段(Segment)(TCP协议)或 数据报(Datagram)(UDP协议),所以传输层的 PDU 是段或数据报。
  • 会话层、表示层、应用层:这些层通常传输 数据(Data),所以它们的 PDU 一般被称为数据。

举个例子

  1. 网络层从上层接收到数据(比如应用层的数据),会将这些数据封装为 数据包,并附加必要的网络层信息,如目标IP地址。
  2. 数据链路层则会将网络层的 数据包 封装为 ,并附加链路层的信息(如MAC地址)。
  3. 物理层再将这些 转换成 比特,通过物理媒介发送。

数据链路层的帧是什么样的

虽然不同的网络协议可能有不同的帧结构,但一般来说,帧都包含以下几个部分:

  • 帧头(Header)
    • 目的地址(Destination MAC Address):接收设备的 MAC 地址。就像信封上的收件人地址,确保数据能到达正确的设备。
    • 源地址(Source MAC Address):发送设备的 MAC 地址。类似信封上的发件人地址,让接收方知道是谁发送的。
    • 类型(Type/Protocol):表明帧中携带的数据类型。例如,以太网帧会标明数据是上层的 IP 数据包还是 ARP 请求。
    • 控制信息(Control Information):一些帧格式中可能包括如流量控制、优先级、顺序等信息,帮助处理数据传输中的细节。
  • 数据部分(Payload/Data)
    • 这是帧的主要内容,包含了网络层传来的数据包(如 IP 数据包)。这部分数据将被封装在帧内部,并在数据链路层传输。
    • 数据部分的大小根据协议不同有所不同,但通常有一个最小值(例如,以太网帧的最小有效负载为 46 字节),否则帧可能会被填充。
  • 帧尾(Trailer)
    • 错误检测码(FCS/CRC):帧尾通常包含一个 循环冗余校验(CRC)帧校验序列(FCS),用来进行 错误检测。接收方会根据这个校验码检查数据是否在传输过程中出现了错误。如果错误检测码与接收到的内容不符,接收方会丢弃帧并请求重传。

数据链路层,在干啥?

数据链路层的任务是保证设备之间的通信能顺利进行。它就像是负责包裹的工作人员,确保数据被正确打包、检查、发送,并且没有错误。它控制了数据的流动速度,确保多个设备不会“抢”数据,保证数据能准确到达目的地。就像是为信息传输提供安全和高效的“道路”,确保一切顺畅进行。

帧的封装与解封装

为什么需要封装成帧?

网络层传输的是数据包(Packet),而数据链路层需要将这个数据包封装成帧。帧不仅包含数据包的内容,还加上了数据链路层所需的控制信息(如地址、错误检测码等)。这样做的好处是:

  • 寻址:确保数据能够传输到正确的设备。
  • 错误检测:检查数据是否在传输过程中损坏。
  • 数据控制:包括流量控制和介质访问控制等。

如何解封装

1
2
3
4
5
6
7
8
9
10
11
12
13
接收物理层数据(比特流)
|
数据链路层接收帧
|
检查目的地址 → 如果不匹配,丢弃帧
|
计算 FCS 校验 → 如果校验失败,丢弃帧
|
去除帧头和帧尾 - (去除以太网帧头和 FCS)
|
提取有效负载(上层数据包)
|
将数据传递给网络层

错误检测

错误检测主要发生在帧的解封装流程中,这里为了凸显出数据链路层的特性因此把他单独拿出来说。

首先我们要搞清楚 FCS 和 CRC 的概念。FCS 是帧检查序列,通常作为帧尾的一部分,在数据链路层用于检测在数据传输过程中是否发生了位错误。FCS 是一种冗余信息,它通过某种算法生成并附加到数据帧中,用于接收方验证数据的完整性。

CRC 是一种常用的差错检测技术,它通过对数据帧进行数学运算(通常是除法运算),生成一个冗余值(校验码),然后将这个冗余值附加到数据后面作为帧的一部分。接收方在收到数据时,使用相同的 CRC 算法重新计算数据的校验码,并与接收到的 CRC 校验码进行比较。如果两者一致,则认为数据未发生错误;如果不一致,则说明数据在传输过程中发生了错误。

CRC 是一种差错检测算法,而 FCS 是使用 CRC 算法计算出的校验码,并附加在数据帧中。FCS 是实际在帧中传输的校验信息。

至于错误检测出来怎么办,这个就不归数据链路层管了。

CRC 怎么计算

我看下面视频学会的(

流量控制

为什么需要流量控制?

在通信中,发送方和接收方的处理能力往往是不一样的。如果发送方比接收方处理得更快,接收方的缓冲区可能会满,导致数据丢失。发送方一直以过快的速度发送数据,接收方无法及时处理,可能会造成网络拥塞,影响其他通信。

点对点信道的数据链路层流量控制

点对点信道指的是在两个设备之间直接进行通信的场景,如以太网的两个主机直接连接、串行通信、VPN连接等。在点对点信道中,流量控制通常关注的是 发送方和接收方 之间的数据流动,确保数据能够被有效且高效地传输。

流量控制机制:

  • 滑动窗口协议(Sliding Window Protocol):常用于点对点的流量控制,特别是在 全双工 信道中(即双方可以同时发送和接收)。滑动窗口协议通过动态调整窗口的大小来控制发送方可以发送多少数据。
    在滑动窗口协议中,接收方会告诉发送方它的缓冲区可用空间(即窗口大小)。发送方根据窗口大小控制发送的数据量,确保不会超出接收方的接收能力。
  • 停等协议(Stop-and-Wait):另一种常见的流量控制机制。在这种协议中,发送方每发送完一个数据帧后会停止,等待接收方的确认(ACK)消息。如果接收方的缓冲区满了,它会通过确认消息告诉发送方暂停发送数据,直到接收方有足够的空间。

广播信道的数据链路层流量控制

广播信道指的是多个设备共享同一个传输信道,数据从一个发送方广播到多个接收方的情景。例如,以太网中的广播通信、Wi-Fi 无线网络等,都是典型的广播信道。广播信道的特点是发送方会向网络中所有设备发送数据,可能导致多个接收方同时接收到数据。

CSMA/CD(Carrier Sense Multiple Access with Collision Detection)

用于以太网中的广播信道,主要解决的是发送方如何避免与其他设备的冲突。虽然它不是严格意义上的流量控制机制,但它通过监听信道并检测冲突来减少流量的无效发送,避免了数据的过度发送。

CSMA/CD 工作流程如下:

  1. 发送方在发送数据前首先监听信道,确保信道空闲。
  2. 如果信道空闲,则开始发送数据。如果信道繁忙,发送方将等待。
  3. 冲突检测:当发送方开始发送数据时,数据链路层的MAC子层会监控信道,并通过物理层的信号传输来检测信道是否发生冲突。如果冲突发生,MAC层会检测到信号不一致,即自己发送的信号与接收到的信号不匹配。一旦冲突被检测到,MAC层会通过物理层发送冲突信号(在物理层以电气信号的形式传播),然后中止发送并开始重试机制。
  4. 如果发生数据碰撞,发送方会暂停一段时间后重新发送。
    image.png
  • 在 t = 0 时,A 发送数据。B 检测到信道为空闲。
  • 在 t = τ − δ 时(这里 τ > δ > 0 ),A 发送的数据还没有到达 B 时,由于 B 检测到信道是空闲的,因此 B 发送数据。
  • 经过时间 δ / 2 后,即在 t = τ − δ / 2 时,A 发送的数据和 B 发送的数据发生了碰撞。但这时 A 和 B 都不知道发生了碰撞。
  • 在 t = τ 时,B 检测到发生了碰撞,于是停止发送数据。
  • 在 t = 2 τ − δ 时,A 也检测到发生了碰撞,因而也停止发送数据。
  • A 和 B 发送数据均失败,它们都要推迟一段时间再重新发送。

那么问题来了,碰撞之后,什么时候重发呢?

二进制指数类型退避算法

其基本思想就是设备在检测到冲突后等待一个随机的时间间隔再尝试重新发送数据,时间间隔是以“倍数递增”的方式选择的,即随着重试次数的增加,等待的随机时间间隔范围逐渐变大。这种递增范围是以 指数增长 的方式实现的。

数据链路层使用的信道

在数据链路层中,信道(Channel)通常指的是数据在网络中传输的媒介或路径。它是物理设备和通信协议之间的一种逻辑或物理连接通道,用于在网络中的设备之间传递数据。信道可以是物理的(如电缆、光纤、无线电波等),也可以是逻辑上的(如虚拟连接、交换机、路由器等设备之间的路径)。

根据信道的类型,我们主要将信道分为两种。

点对点信道

是指两个设备直接连接的信道。数据传输仅限于这两个设备之间,不涉及其他设备的干扰或竞争,因此点对点信道通常具有较高的稳定性和较低的延迟。在点对点信道中,常见的协议包括PPP协议

PPP协议

PPP(Point-to-Point Protocol)协议是一种广泛应用于点对点连接的协议,常用于通过电话线、串口线、专用线路或虚拟专用网络(VPN)等方式进行两台设备间的数据通信。PPP协议提供了链路建立、认证、数据传输和链路终止等功能。其工作原理可以分为以下几个阶段:

链路建立

在这个阶段,PPP协议通过一系列的控制帧来建立物理链路。链路建立过程使用 LCP(Link Control Protocol) 来进行。

  • LCP协商:双方通过LCP交换配置请求、配置确认、配置拒绝等信息来协商链路的基本参数,如最大接收单元(MRU)、认证方式等。
  • 链路质量监控:LCP还会检测链路质量,比如链路的可靠性、有效性等。

身份验证

PPP可以选择是否进行身份验证,通常在需要对通信的两方进行身份验证时,使用 PAP(Password Authentication Protocol)CHAP(Challenge Handshake Authentication Protocol) 来完成。

  • PAP:简单的密码验证协议,发送用户名和密码以进行身份验证,存在一定的安全风险。
  • CHAP:一种更为安全的认证方式,通过发送挑战(challenge)信息和响应(response)信息进行身份验证,且会定期重新认证。

网络层协议协商

在这个阶段,PPP会协商并启用网络层协议(如IP、IPX等)。这一步使用 NCP(Network Control Protocol) 协议来进行。NCP允许PPP协议与不同的网络层协议进行交互,确保网络协议的数据能够通过点对点链路传输。

  • NCP协商:通过NCP,PPP协商启用某些网络层协议,如IP协议、IPX协议等。
  • 每个网络层协议都有自己独立的NCP。例如,IP协议使用 IPCP(IP Control Protocol)

数据传输

一旦链路建立并完成了身份验证与协议协商,PPP就进入数据传输阶段。在这个阶段,数据通过PPP的封装格式进行传输。

  • PPP的数据帧包括:起始标志、地址字段、控制字段、协议字段、数据字段、循环冗余检查(CRC)字段等。
  • PPP使用一种简单的帧结构来传输数据,具有较低的协议开销。

链路终止

在通信结束时,PPP协议会终止链路。链路终止使用LCP来完成,LCP交换终止请求和确认消息以断开链路。

PPP帧结构

image.png

特点

  • 协议独立性:PPP支持多种网络层协议,能够在同一链路上并行使用多种协议。
  • 错误检测:PPP提供了强大的错误检测功能,通过CRC校验保证数据传输的可靠性。
  • 可扩展性:PPP支持链路控制、身份验证和网络层协议的扩展。

广播信道

广播信道(Broadcast Channel)是指允许一个设备同时向多个设备发送数据的信道。广播信道支持多设备间的通信,通常在共享信道中多个设备共用同一物理介质。常见的广播信道协议包括VLAN协议CSMA/CD协议

首先我们需要了解一个概念:网络广播风暴

在一个局域网中,当一个设备发送广播包时,所有在同一广播域内的设备都会接收该包并进行处理。如果网络拓扑没有正确管理(比如存在环路),广播包可能会不断地在网络中循环传播,从而造成广播风暴。

因此我们需要有一个东西来隔离广播域,限制广播流量的传播范围,从而减少网络中的广播风暴,提升网络性能和可管理性。我们使用到的这个技术就是VLAN(虚拟局域网)协议

VLAN协议

VLAN工作在数据链路层(OSI模型的第2层),其核心是通过交换机进行流量转发。每个VLAN通过给网络设备上的数据帧添加一个VLAN标签来进行识别。VLAN标签通常位于以太网帧的头部,遵循IEEE 802.1Q标准。

VLAN技术把用户划分成多组逻辑的网络,组内可以通信,组间不允许通信。二层转发的单播、组播、广播报文只能在组内转发。为了实现转发控制,在待转发的以太网帧中添加 VLAN标签 ,然后设定交换机端口对该标签和帧的处理方式。方式包括丢弃帧、转发帧、添加标签、移除标签。

帧格式

image.png

  • 标签协议标识TPID:固定取值为0x8100,表明这是一个携带802.1Q标签的帧
  • 优先级PRI:指明帧的优先级。0-7,表示8种优先级,提供有差别的转发服务。
  • 标准格式指示CFI:在以太网环境中,这个字段始终为0。
  • VLAN标识:它唯一地标志了以太网帧属于哪一个VLAN

    • VID的取值范围是0~ 4095 (0 ~ 212-1),0和4095都不用来表示VLAN,因此用于表示VLAN的VID的有效取值范围是1 ~ 4094。

      802.1Q帧是由交换机来处理的,而不是用户主机来处理的

  • 当交换机收到普通的以太网帧时,会将其插入4字节的VLAN标记转变为802.1Q帧,简称“打标签”。

  • 当交换机转发802.1Q帧时,可能会删除其4字节VLAN标记转变为普通以太网帧,简称“去标签”。
    端口上接收时总希望能够打上标签,发送出去时候总希望能去除标签

VLAN间通信

VLAN隔离了二层广播域,也就严格地隔离了各个VLAN之间的任何流量,分属于不同VLAN的用户不能互相通信。

不同VLAN 之间的流量不能直接跨越VLAN 的边界,需要使用路由,通过路由将报文从一个VLAN 转发到另外一个VLAN。

在主机设置默认网关,对于非本地的通信,主机会自动寻找默认网关,并把报文交给默认网关转发而不是直接发给目的主机。

让VLAN之间互通有几种方法。一是为每个VLAN 分配一个单独的路由接口,每一个VLAN使用一条独占的物理连接连接到路由器的一个接口上,但是这种方法会耗费大量的路由接口,因此并不常用。第二种是多个VLAN公用一条物理连接,这种方式也称为独臂路由或者单臂路由,它只需要一个以太网接口,通过创建子接口可以承担所有VLAN 的网关,从而在不同的VLAN 间转发数据。还有一种就是三层交换机。

以太网

以太网(Ethernet是一种广泛使用的局域网(LAN)技术,用于计算机、设备和其他网络节点之间的数据传输。基于数据链路层(OSI模型的第2层物理层(第1层),提供可靠的、快速的和低成本的通信方式。

以太网的信道利用率

理想情况下的信道利用率(无碰撞)

在理想情况下,假设没有碰撞和重传,信道利用率可以通过以下公式来计算:
其中:

  • 有效数据传输时间:指数据帧的传输时间。
  • 总时间:包括有效数据传输时间、间隔时间和帧间空闲时间。

考虑碰撞的信道利用率(实际情况)

实际情况中,由于使用了CSMA/CD协议,会发生碰撞和重传,从而影响信道利用率。计算实际信道利用率时需要考虑碰撞概率和重传的影响。

有效传输时间

CSMA/CD中,发送设备会首先检查信道是否空闲,如果信道空闲,才开始传输数据。如果发生碰撞,数据丢失,需要重新传输。有效的传输时间是指成功传输数据的时间,不包括重传时间。

碰撞和重传

碰撞发生后,设备需要等待随机的退避时间后再次发送数据。碰撞和重传占用了额外的时间,增加了信道的空闲时间,从而降低了信道的利用率。碰撞率越高,信道利用率越低。

计算公式

实际情况下,以太网的信道利用率 U 可以通过以下公式来估算: 其中:

  • $T_{\text{frame}}$ :是数据帧的传输时间,等于数据长度除以传输速率。
  • $T_{\text{collision}}$:是发生碰撞后的恢复时间。
  • $T_{\text{backoff}}$:是退避时间,即发生碰撞后设备等待的随机时间。

以太网的吞吐量与信道利用率

信道利用率与吞吐量(Throughput)密切相关。吞吐量是单位时间内成功传输的数据量。当信道利用率较高时,吞吐量也较高。吞吐量的计算公式为: 在没有碰撞的情况下,吞吐量接近信道的最大带宽(例如 10Mbps、100Mbps 等)。但如果发生碰撞,吞吐量会减少,因为数据包丢失后需要重传。

扩展以太网

在物理层扩展以太网

光纤

image.png

集线器

image.png

在数据链路层扩展以太网

网桥

网桥工作在数据链路层,它根据 MAC 帧的目的地址对收到的帧进行转发,具有过滤帧的功能。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的 MAC 地址,然后再确定将该帧转发到哪一个接口
image.png

和集线器不同的是,集线器在转发帧时,不对传输媒体进行检测,而且网桥在转发帧之前必须执行 CSMA/CD 算法,若在发送过程中出现碰撞,就必须停止发送和进行退避

交换机

交换机的交换方式主要有几种,一是存储转发方式,把整个数据帧先缓存后再进行处理,第二种是直通 方式,接收数据帧的同时就立即按数据帧的目的 MAC 地址决定该帧的转发接口,因而提高了帧的转发速度,缺点是它不检查差错就直接将帧转发出去,因此有可能也将一些无效帧转发给其他的站。

交换机的转发依然是依赖于转发表,以太网交换机运行自学习算法自动维护转发表。
image.png
image.png
image.png
image.png

数据链路层的子层

数据链路层其实可以被进一步划分为两个子层:逻辑链路控制(LLC)子层媒体访问控制(MAC)子层

逻辑链路控制(LLC)子层

LLC子层位于数据链路层的上层,主要负责为不同的网络协议提供统一的接口,并处理与网络层之间的交互。主要功能就是前面提及的帧的封装与解封装、错误控制与流量控制等。这里不再赘述,我们主要讲解的是数据链路层当中的MAC层。

媒体访问控制(MAC)子层

MAC子层负责数据链路层下层的功能,主要控制对物理介质的访问,确保在共享信道上多台设备能够有效地传输数据。其主要功能有下面几种

地址寻址与识别

MAC子层使用MAC地址(物理地址)来标识网络中的设备,确保数据能够正确地发送到目标设备。每个设备在其网卡中都有一个唯一的MAC地址,数据帧中包括源MAC地址和目标MAC地址。

介质访问控制

MAC子层负责控制设备如何访问共享的通信介质。它使用不同的协议来避免不同设备在同一时刻发送数据导致碰撞。例如,在传统的以太网中,MAC使用CSMA/CD(载波侦听多路访问/碰撞检测)协议来解决设备争用信道的问题。

帧的封装与传输

MAC子层负责将网络层传来的数据封装成帧,并将这些帧通过物理介质发送出去。它也负责从物理介质接收帧,并将其传递给LLC子层进行解封装。

错误检测

MAC子层使用循环冗余校验(CRC)来检测数据传输过程中是否发生了错误。然后怎么处理错误就不是我们应该管的了

MAC帧格式

image.png

一些问题

MAC 子层怎样知道从接收到的以太网帧中取出多少字节的数据交付上一层协议?

在 以太网V2 的 MAC 帧格式中,其首部并没有一个帧长度(或数据长度)字段。那么,MAC 子层又怎样知道从接收到的以太网帧中取出多少字节的数据交付上一层协议呢?我们在前面讲述的曼彻斯特编码时已经讲过,这种曼彻斯特编码的一个重要特点就是:在曼彻斯特编码的每一个码元(不管码元是 1 或 0 )的正中间一定有一次电压的转换(从高到低或从低到高)。当发送方把一个以太网帧发送完毕后,就不再发送其他码元了(既不发送 1 ,也不发送 0 )。因此,发送方网络适配器的接口上的电压也就不再变化了。这样,接收方就可以很容易地找到以太网帧的结束位置。在这个位置往前数 4 字节( FCS 字段长度是 4 字节),就能确定数据字段的结束位置。

上层协议如何知道填充字段的长度?

当数据字段的长度小于 46 字节时,MAC 子层就会在数据字段的后面加入一个整数字节的填充字段,以保证以太网的 MAC 帧长不小于 64 字节。我们应当注意到,MAC 帧的首部并没有指出数据字段的长度是多少。在有填充字段的情况下,接收端的 MAC 子层在剥去首部和尾部后就把数据字段和填充字段一起交给上层协议。现在的问题是:上层协议如何知道填充字段的长度呢?( IP 层应当丢弃没有用处的填充字段。)可见,上层协议必须具有识别有效的数据字段长度的功能。我们知道,当上层使用 IP 协议时,其首部就有一个“总长度”字段。因此,“总长度”加上填充字段的长度,应当等于 MAC 帧数据字段的长度。例如,当 IP数据报 的总长度为 42 字节时,填充字段共有 4 字节。当 MAC 帧把 46 字节的数据上交给 IP 层后,IP 层就把其中最后 4 字节的填充字段丢弃。

物理层比 MAC 层多出来的 8 个字节是什么

在传输媒体上实际传送的要比 MAC 帧还多8个字节。这是因为当一个站在刚开始接收 MAC 帧时,由于适配器的时钟尚未与到达的比特流达成同步,因此 MAC 帧的最前面的若干位就无法接收,结果使整个的 MAC 成为无用的帧。为了接收端迅速实现位同步,从 MAC 子层向下传到物理层时还要在帧的前面插入 8 字节(由硬件生成),它由两个字段构成。第一个字段是 7 个字节的前同步码( 1 和 0 交替码),它的作用是使接收端的适配器在接收 MAC 帧时能够迅速调整其时钟频率,使它和发送端的时钟同步,也就是“实现位同步”(位同步就是比特同步的意思)。第二个字段是帧开始定界符,定义为 10101011 。它的前六位的作用和前同步码一样,最后的两个连续的1就是告诉接收端适配器:“ MAC 帧的信息马上就要来了,请适配器注意接收”。 MAC 帧的 FCS 字段的检验范围不包括前同步码和帧开始定界符。


十万个为什么之数据链路层
http://zerohzzzz.github.io/2024/12/05/十万个为什么之数据链路层/
Author
ZeroHzzzz
Posted on
December 5, 2024
Licensed under