第三章
工作原理
- 载波监听:在发送数据之前,每个设备都需要监听传输介质上是否有其他设备正在发送信号,以此来判断传输介质是否空闲。如果检测到介质空闲,设备就可以开始发送数据;如果检测到介质忙,则需要等待,直到介质空闲为止。
- 多路访问:多个设备可以同时监听传输介质,并且在介质空闲时都有权利尝试发送数据,这就是 “多路访问” 的含义。
- 冲突检测:在发送数据的过程中,发送设备会持续监听传输介质,检查是否有其他设备也在同时发送数据。如果检测到冲突,即自己发送的信号与其他设备发送的信号在传输介质上发生了叠加和干扰,发送设备会立即停止发送数据,并发送一个阻塞信号,以通知其他设备发生了冲突。
- 随机退避:在发生冲突后,涉及冲突的设备会等待一段随机的时间,然后再次尝试发送数据。这个随机退避时间是为了避免多个设备在冲突后同时再次尝试发送数据,从而再次引发冲突。
应用场景
- 以太网:CSMA/CD 是以太网的核心技术之一,在传统的共享式以太网中,如使用同轴电缆连接的 10Base2 和 10Base5 网络,以及使用双绞线连接的 10BaseT 网络等,都广泛采用了 CSMA/CD 机制来实现多个设备对网络的共享访问。
优点
缺点
- 冲突开销:在网络负载较重时,冲突的概率会增加,每次冲突都会导致数据的重传和额外的等待时间,这会降低网络的传输效率。
- 网络规模受限:由于冲突的存在,CSMA/CD 在网络规模较大时性能会下降,因此其适用的网络范围相对有限。
- 实时性受限:对于一些对实时性要求较高的应用,如语音和视频传输,CSMA/CD 可能无法保证数据的及时传输,因为冲突和随机退避可能导致数据延迟。
载波监听
- 载波监听是指在通信网络中,特别是在采用共享介质访问方式的局域网中,每个网络节点在发送数据之前,都会对传输介质上是否存在其他节点正在传输的信号进行检测和监听的过程。它是一种避免数据冲突的机制,就像人们在说话之前先听一听周围是否有人在说话一样,如果听到有人在说话,就会等待别人说完再开口,以确保自己说的话能够被清楚地听到,避免和别人的话相互干扰。
- 例如,在以太网中,网络设备在发送数据帧之前,会通过专门的电路或软件算法对物理线路进行检测,判断线路上是否有其他设备正在发送数据。如果检测到线路上有信号存在,即表示有其他设备正在使用传输介质进行数据传输,此时该设备就会暂停发送数据,继续监听,直到线路空闲为止。
载波
- 载波是一种高频振荡信号,它是通信系统中用于承载和传输信息的基本信号。在通信过程中,需要将原始的待传输信息(如声音、图像、数据等)加载到载波上,通过对载波的某些特性(如幅度、频率、相位等)进行调制,使载波携带上信息,然后将其发送出去。
- 例如,在广播电台中,会产生一个固定频率的高频正弦波作为载波,然后将要广播的声音信号通过调制技术加载到这个载波上,当调制后的载波信号通过天线发射出去后,收音机通过接收这个载波信号,并对其进行解调,就可以还原出原始的声音信号。在有线通信中,如以太网中,虽然看不到像广播电台那样明显的高频正弦波形式的载波,但从原理上讲,电信号在传输介质中传输时也可以看作是一种载波信号,只不过其频率和调制方式等与广播电台有所不同。
目的不同
- 载波监听:主要目的是在发送数据之前,判断传输介质是否空闲,以便确定是否可以开始发送数据,避免在介质忙时发送数据而产生冲突,是一种预防性的措施,用于减少冲突发生的可能性。
- 冲突检测:是在数据发送过程中,检测是否有其他设备同时在发送数据,即检测是否已经发生了冲突,是一种对已发生情况的检测和确认,以便及时采取措施解决冲突。
检测时机不同
- 载波监听:发生在数据发送之前,是一个持续的监听过程,只要设备有数据要发送,就会不断地监听传输介质的状态,直到介质空闲才可能开始发送数据。
- 冲突检测:发生在数据发送的同时,设备在发送数据的过程中,会边发送边监听传输介质,实时检测是否有冲突发生。
检测对象不同
- 载波监听:监听的对象是传输介质上是否有其他设备正在发送的信号,即判断介质是否被占用,而不关心具体是哪些设备在发送以及发送的是什么内容。
- 冲突检测:检测的对象是自己发送的数据信号与其他设备发送的数据信号是否在传输介质上发生了冲突,需要对发送的信号和接收到的信号进行比较和分析,以确定是否存在冲突。
后续处理不同
- 载波监听:如果监听到介质忙,设备会等待,继续监听,直到介质空闲后才会进入发送数据的流程。
- 冲突检测:如果检测到冲突,发送设备会立即停止发送数据,并发送一个阻塞信号,以通知其他设备发生了冲突,然后等待一段随机的时间后再重新尝试发送数据。、
信号传播延迟
- 原理:在网络中,信号在传输介质上的传播需要时间。当两个设备同时监听到介质空闲并开始发送数据时,由于信号传播延迟,它们可能在一段时间内都无法检测到对方已经开始发送,从而导致冲突。
- 例子:假设有 A、B 两个设备,它们之间的距离较远,信号从 A 传输到 B 需要一定的时间。在某一时刻,A 和 B 同时监听到传输介质空闲,于是它们几乎同时开始发送数据。然而,在 A 发送的数据信号还未到达 B 之前,B 无法知道 A 已经在发送数据,同样,A 也不知道 B 已经在发送数据,所以当 A 和 B 发送的数据信号在传输介质上相遇时,就会发生冲突。
隐藏终端问题
- 原理:在无线局域网中,由于无线信号的传播范围有限,可能存在一些设备在彼此的信号覆盖范围之外,但它们都能与同一个接入点进行通信。这些设备在发送数据前进行载波监听时,可能无法检测到其他隐藏终端的发送情况,从而导致冲突。
- 例子:在一个办公室中,有三个无线设备 A、B 和 C,A 和 B 在一个房间,C 在另一个房间,且 A 和 C、B 和 C 之间的无线信号被墙壁阻挡。A 和 B 都能与接入点进行通信,但 A 和 B 无法直接接收到 C 的信号,C 也无法直接接收到 A 和 B 的信号。当 A 向接入点发送数据时,B 进行载波监听,由于 A 的信号无法到达 B,B 会认为传输介质空闲,于是也开始发送数据,此时就会与 A 发送的数据在接入点处发生冲突。
聋节点问题
- 原理:在无线通信中,当一个设备正在发送数据时,它可能无法接收到其他设备发送的信号,从而无法知道此时传输介质是否空闲,导致冲突。
- 例子:假设有两个无线设备 A 和 B,A 正在向 B 发送数据,此时如果 C 也想向 B 发送数据,C 会进行载波监听,但由于 A 正在发送数据,B 此时处于接收状态,无法向 C 发送任何信号告知其介质已被占用,C 会认为传输介质空闲,从而开始发送数据,这样就会与 A 发送的数据在 B 处发生冲突。
为什么要进行碰撞检测? 因为信号传播时延对载波监听产生了影响
可见:每一个站在自己发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。
A 需要单程传播时延的 2 倍的时间,才能检测到与 B 的发送产生了冲突。
重传所需的时延 = r ⅹ 基本退避时间。
若连续多次发生冲突,表明可能有较多的站参与争用信道。
上述退避算法可使重传需要推迟的平均时间随重传次数而增大(称为动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。
以太网规定了最短有效帧长为 64 字节。凡长度小于 64 字节的帧都是由于冲突而异常中止的无效帧,应当立即将其丢弃
冲突检测时间限制
- 在以太网中,数据的传输存在往返传播时延,即信号从发送端传播到接收端,再从接收端传播回发送端所需的时间。以太网规定的最短有效帧长为 64 字节,如果前 64 字节没有发生冲突,说明在这段时间内,网络中其他设备没有在同一时刻发送数据,也就意味着在整个数据帧的传输过程中,不会有其他设备在发送数据,因为如果有其他设备在发送数据,那么在前 64 字节的传输过程中就很可能会检测到冲突。
- 例如,假设 A 设备发送一个数据帧,在发送前 64 字节的过程中,B 设备如果也在同一时刻开始发送数据,那么由于信号传播延迟等原因,A 设备在发送前 64 字节的时间段内就有很大概率会检测到冲突。反之,如果前 64 字节没有冲突,那么 B 设备在这段时间内就没有发送数据,后续也就不太可能再发送数据与 A 设备冲突,因为 B 设备需要等待 A 设备发送完整个数据帧后才会有机会再次发送数据。
以太网的退避机制
- 一旦检测到冲突,以太网采用二进制指数退避算法,让发送冲突的设备随机等待一段时间后再重新发送数据。这个机制使得冲突的设备在重新发送数据时会有一定的延迟,从而避免了在后续数据传输过程中再次发生冲突的可能性。
- 例如,A 和 B 设备发生冲突后,它们会根据二进制指数退避算法计算出一个随机的等待时间,在等待时间结束之前不会再次发送数据,这就为其他设备发送数据提供了相对稳定的时间窗口,减少了后续冲突的发生
时间长度
- 在以太网中,争用期通常被设定为 51.2 微秒,这个时间对应着网络中信号在最远两个节点之间往返传播一次所需的时间。
- 例如,在一个 10Base-T 的以太网中,信号在电缆中的传播速度约为 200 米 / 微秒,假设最远两个节点之间的距离为 2500 米,那么信号往返一次的时间大约为 25 微秒左右,但考虑到一些其他因素,如信号在设备中的处理延迟等,将争用期设定为 51.2 微秒以确保能够检测到可能发生的冲突。
与冲突检测的关系
- 争用期是冲突检测的关键时间窗口,如果在争用期内没有检测到冲突,那么就可以认为该节点成功抢占了信道,后续发送的数据大概率不会再发生冲突。
- 例如,节点 A 开始发送数据,在 51.2 微秒内,如果没有检测到其他节点发送的数据信号与自己发送的数据信号发生冲突,那么 A 就可以继续发送后续的数据,而不用担心在这一次发送过程中会出现冲突。
与帧长的关系
- 争用期决定了以太网的最小帧长。为了确保在争用期内能够检测到冲突,以太网规定最小帧长为 64 字节。
- 例如,如果帧长小于 64 字节,那么在争用期内可能还未发送完整个帧就结束了检测,无法准确判断是否发生冲突,而当帧长达到 64 字节时,在争用期内可以完整地发送和检测,保证了冲突检测的有效性。
退避机制的启动
- 如果在争用期内检测到冲突,那么发送数据的节点会立即停止发送,并启动退避机制,等待一段随机的时间后再重新尝试发送数据。
- 例如,节点 A 和节点 B 在争用期内发生了冲突,它们会各自根据二进制指数退避算法计算出一个随机的等待时间,然后在等待时间结束后再次进行载波监听和发送数据的尝试。
- 在以太网中,采用了载波监听多路访问 / 冲突检测(CSMA/CD)机制。为了能在数据传输过程中及时检测到冲突,需要保证在争用期内至少能够发送和检测到完整的一帧数据。
- 争用期通常被设定为 51.2 微秒,在这个时间内,如果帧长过短,可能在争用期还未结束时帧就已经发送完毕,无法准确判断是否发生冲突。而当帧长为 64 字节时,在争用期内可以完整地发送和检测,从而保证了冲突检测的有效性。
在物理层扩展以太网
- 方式:使用中继器或集线器来扩展以太网的范围。中继器的作用是对信号进行放大和整形,以延长信号的传输距离;集线器则是一种多端口的中继器,它可以将多个设备连接在一起,形成一个共享式的以太网。
- 原理:物理层扩展只是简单地将信号进行放大和转发,不涉及数据链路层的帧结构和地址等信息。它只是在物理上延长了网络的传输距离,使得更多的设备能够连接到网络上。
- 特点:
- 优点是简单、成本低,能够快速扩展网络的覆盖范围。
- 缺点是所有设备共享同一带宽,随着设备数量的增加,网络性能会下降;并且由于中继器和集线器是对信号的简单转发,无法对数据进行过滤和隔离,容易产生冲突和广播风暴。
在数据链路层扩展以太网
- 方式:使用网桥或交换机来扩展以太网。网桥可以连接两个或多个网段,根据 MAC 地址对数据帧进行转发和过滤;交换机则是一种多端口的网桥,它可以同时连接多个设备,并且能够根据 MAC 地址快速地转发数据帧。
- 原理:数据链路层扩展是基于数据帧的 MAC 地址进行转发和过滤的。网桥和交换机通过学习连接在各个端口上设备的 MAC 地址,将数据帧准确地转发到目的设备所在的端口,而不是像集线器那样将数据帧广播到所有端口。
- 特点:
- 优点是可以根据 MAC 地址进行过滤和转发,提高了网络的性能和安全性;每个端口都有独立的带宽,不会因为设备数量的增加而导致网络性能急剧下降。
- 缺点是网桥和交换机的价格相对较高,并且需要一定的配置和管理知识;另外,当网络规模较大时,可能会出现 MAC 地址表溢出等问题。
比较项目 | 物理层扩展 | 数据链路层扩展 |
---|---|---|
扩展设备 | 中继器、集线器 | 网桥、交换机 |
工作原理 | 对物理信号进行放大和转发 | 根据 MAC 地址对数据帧进行转发和过滤 |
网络性能 | 所有设备共享带宽,设备增多性能下降明显 | 每个端口有独立带宽,性能相对稳定 |
冲突和广播 | 容易产生冲突和广播风暴 | 通过学习 MAC 地址减少冲突和广播 |
安全性 | 无法进行数据过滤和隔离,安全性低 | 可以根据 MAC 地址进行过滤,安全性相对较高 |
成本 | 成本低 | 成本相对较高 |
管理复杂度 | 简单,几乎无需配置 | 需要一定的配置和管理知识 |
碰撞域的定义
碰撞域是指在计算机网络中,连接在同一物理介质上的所有设备的集合,在这个集合中的设备在发送数据时,有可能会发生数据碰撞。当两个或多个设备同时在网络上发送数据时,它们发送的电信号会在传输介质中相互干扰,导致数据传输错误,这种情况被称为碰撞。
集线器扩大碰撞域的原因
- 工作原理:集线器是一种物理层设备,它的工作原理是将接收到的信号进行简单的放大和转发,不进行任何过滤或处理。当集线器收到一个设备发送的数据时,会将该数据向所有连接在该集线器上的其他设备进行广播。
- 广播特性导致碰撞域扩大:由于集线器的广播特性,所有连接到集线器的设备都处于同一个碰撞域中。每增加一个连接到集线器的设备,就相当于增加了一个可能产生数据碰撞的源,从而使碰撞域的范围不断扩大。例如,最初只有两台设备连接在集线器上,碰撞域就是这两台设备;当再连接一台设备时,这三台设备就都在同一个碰撞域中,任何两台设备发送数据都可能发生碰撞。
工作原理导致冲突增加
- 集线器工作在物理层,采用广播的方式转发数据。当一个设备发送数据时,集线器会把该数据向所有连接的端口广播出去,同一时刻只能有一个设备发送数据,否则就会产生冲突。
- 随着碰撞域的增大,连接到集线器上的设备增多,发生冲突的概率呈指数级上升。例如,原本有 4 台设备连接在一个集线器上,碰撞概率相对较小;当扩展到 10 台设备时,碰撞的可能性就大大增加了。
退避机制影响传输效率
- 当发生冲突时,涉及冲突的设备会执行退避算法,随机等待一段时间后再重新发送数据。在碰撞域增大的情况下,冲突频繁发生,设备需要不断地执行退避算法,导致大量时间浪费在等待上,实际用于传输有效数据的时间减少。
- 而且,由于设备无法准确预测何时可以再次发送数据,可能会出现多个设备在等待后同时发送数据,再次引发冲突,进一步降低了传输效率。
共享带宽限制
- 集线器所有端口共享同一带宽,通常为 10Mbps 或 100Mbps 等。当连接的设备增多时,每个设备可分得的平均带宽就会减少。
- 例如,一个 100Mbps 的集线器连接了 10 台设备,假设每台设备都有数据要发送,那么平均每台设备只能获得 10Mbps 的带宽,而且由于冲突的存在,实际能够传输的数据量更少,无法充分利用总的带宽资源,导致总的吞吐量无法提高。
因此,在实际的以太网扩展中,通常会使用交换机等设备来替代集线器,以减少冲突域、提高网络的吞吐量和性能。

防止网络环路
- 如果交换机不丢弃这样的帧,而是将其从进入的接口再转发出去,就可能会在网络中形成环路。当网络中存在环路时,数据帧会在环路中不断循环转发,导致网络资源被大量占用,最终可能使整个网络瘫痪。
- 例如,在一个简单的由两台交换机和多台计算机组成的网络中,若交换机 A 从接口 1 收到一个发往计算机 C 的帧,而计算机 C 连接在交换机 A 的接口 1 上,如果交换机 A 不丢弃该帧,而是又从接口 1 转发出去,那么这个帧可能会通过其他链路又回到交换机 A,从而形成环路。
避免无用的重复传输
- 当目的地址对应的接口与帧进入的接口相同时,说明该帧的源设备和目的设备在同一个接口所连接的网络段内,并且该帧已经在这个网络段内传输过一次了。如果交换机再次转发该帧,就会导致该帧在同一个网络段内被重复传输,这不仅浪费网络带宽,还可能会干扰其他正常数据的传输。
- 比如,在一个办公室的局域网中,计算机 A 和计算机 B 连接在交换机的同一个接口所连接的集线器上,当计算机 A 向计算机 B 发送一个数据帧时,该帧会先到达交换机,如果交换机不丢弃该帧,而是又将其转发回集线器,那么计算机 B 就会收到两次相同的帧,这是没有必要的。
遵循以太网的转发规则
- 以太网的转发规则规定,交换机应该将数据帧从除进入接口之外的其他合适接口转发出去,以确保数据帧能够准确地到达目的设备,而不会在网络中无序地传播。当目的地址对应的接口与帧进入的接口相同时,不符合转发规则中向其他接口转发的要求,所以应该丢弃。
通过丢弃这样的帧,交换机可以有效地避免网络环路、减少无用的重复传输,提高网络的效率和稳定性,确保网络的正常运行。
广播域(broadcast domain):指这样一部分网络,其中任何一台设备发出的广播通信都能被该部分网络中的所有其他设备所接收。
虚拟局域网限制了接收广播信息的工作站数,使得网络不会因传播过多的广播信息 (即“广播风暴”) 而引起性能恶化。
互联网采用的设计思路:
超网是与子网相对应的概念,是将多个连续的、较小的网络合并成一个较大的网络,通过使用较少的网络地址和子网掩码来表示和管理这些原本分散的网络,以减少路由表的条目数量,提高网络的可管理性和路由效率。以下是关于超网的详细介绍:
原理
- 超网的基本原理是将多个具有相同高位比特位的网络地址进行合并。通常采用的方法是缩短子网掩码的长度,使得原本不同的网络地址在新的子网掩码下被视为同一个网络地址范围。
- 例如,有四个 C 类网络地址:202.100.1.0/24、202.100.2.0/24、202.100.3.0/24 和 202.100.4.0/24,它们的前 22 位是相同的,都是 202.100.0.0。可以将子网掩码缩短为 / 22,这样就可以把这四个 C 类网络合并成一个超网,其网络地址为 202.100.0.0/22。
作用
- 减少路由表条目:在互联网中,路由器需要维护大量的路由表条目来转发数据包。通过使用超网,可以将多个连续的网络地址合并成一个条目,从而大大减少路由表的大小,提高路由器的处理效率和网络的整体性能。
- 优化 IP 地址分配:超网可以更灵活地分配 IP 地址,避免了 IP 地址的浪费。当一个组织或企业需要大量的连续 IP 地址时,可以通过申请一个超网来满足需求,而不是分别申请多个较小的网络地址。
- 便于网络管理:将多个相关的网络合并成一个超网后,网络管理员可以更方便地对整个网络进行管理和配置,例如网络地址的分配、路由策略的制定等。
应用场景
- 大型企业网络:大型企业通常拥有多个分布在不同地理位置的分支机构,每个分支机构可能有自己的独立网络。通过使用超网,可以将这些分支机构的网络合并成一个企业内部的超网,方便企业内部的资源共享和通信,同时也便于网络的统一管理和维护。
- 互联网服务提供商(ISP):ISP 需要为大量的用户提供网络接入服务,这些用户可能分布在不同的区域,拥有不同的网络地址。ISP 可以使用超网将这些用户的网络地址进行合并,减少路由表的条目数量,提高网络的路由效率和服务质量。
- 数据中心网络:数据中心通常有大量的服务器和存储设备,这些设备需要进行网络连接和通信。通过使用超网,可以将数据中心的多个网络段合并成一个超网,方便数据中心内部的网络管理和流量调度,提高数据中心的运行效率和可靠性。
相同点
- 目的一致:构造超网和路由聚合的主要目的都是为了减少路由表中的条目数量,提高网络的可管理性和路由效率。通过将多个较小的网络地址合并成一个较大的网络地址或聚合路由,使得路由器在进行路由选择时能够更快速地找到目标网络,减少了路由查找的时间和复杂度。
- 原理相似:二者都需要找到多个网络地址的共同前缀部分,然后基于这个共同前缀来进行合并或聚合操作。在构造超网时,将具有相同高位比特位的多个网络地址合并成一个超网,缩短子网掩码的长度;而路由聚合也是通过找出多个路由条目的共同前缀,将这些路由条目合并成一个聚合路由条目,减少路由表的大小。
不同点
- 侧重点不同:构造超网更侧重于从网络地址分配和管理的角度出发,将多个连续的网络地址进行合并,形成一个更大的网络地址空间,以便更有效地利用 IP 地址资源和进行网络管理。而路由聚合则主要是从路由协议和路由器的路由选择过程的角度考虑,是路由器在运行过程中对学习到的路由信息进行动态聚合的一种机制,目的是优化路由表,提高路由效率。
- 操作主体不同:构造超网通常是由网络管理员在网络规划和设计阶段进行的手动操作,需要根据网络的实际需求和拓扑结构,合理地选择要合并的网络地址,并进行相应的配置。而路由聚合则是由路由器自动完成的,路由器根据所运行的路由协议和接收到的路由信息,自动地识别和聚合具有共同前缀的路由条目,无需人工干预。
- 灵活性不同:构造超网一旦确定并配置完成后,相对比较固定,除非进行网络重构或重新规划,否则不会轻易改变。而路由聚合则具有一定的动态灵活性,路由器可以根据网络拓扑的变化和路由信息的更新,实时地调整聚合策略和聚合结果,以适应网络的动态变化。
构造超网可以看作是路由聚合的一种特殊情况或前置基础,而路由聚合则是在构造超网的基础上,结合路由协议和路由器的动态特性,进一步优化网络路由的一种机制。
以太网帧中的 FCS 即帧校验序列(Frame Check Sequence),是以太网帧结构中的一个重要组成部分,位于以太网帧的尾部,通常为 4 个字节,其具体作用和工作原理如下:
作用
- 差错检测:FCS 的主要作用是对整个以太网帧进行差错检测,以确保数据在传输过程中的完整性和准确性。在数据传输过程中,可能会受到各种干扰和噪声的影响,导致数据出现错误。通过在帧的尾部添加 FCS,接收方可以对收到的帧进行校验,判断数据是否在传输过程中发生了错误。
- 保证数据质量:它可以检测出帧中的比特错误、位错、帧丢失、帧重复等多种错误情况。当接收方检测到错误时,会丢弃该帧,并根据具体的协议要求采取相应的措施,如请求重发等,从而保证了网络中数据传输的质量。
工作原理
- 生成校验码:在发送端,当数据链路层封装以太网帧时,会对除 FCS 字段以外的整个帧的内容进行特定的算法运算,生成一个校验和,这个校验和就是 FCS 的值。常见的算法是循环冗余校验(CRC)算法,它通过对数据进行多项式除法运算,得到一个余数作为校验码。
- 校验过程:接收方在收到以太网帧后,会使用与发送端相同的算法对收到的帧(同样不包括 FCS 字段本身)进行运算,并将得到的结果与接收到的 FCS 字段的值进行比较。如果两者相等,说明帧在传输过程中没有出现错误,接收方可以继续对帧进行后续的处理;如果不相等,则说明帧在传输过程中出现了错误,接收方会丢弃该帧,并根据具体情况采取相应的措施,如向发送方发送错误报告或请求重发等。
以太网帧数据包
- 结构:由前导码、目的 MAC 地址、源 MAC 地址、类型 / 长度字段、数据字段和帧校验序列(FCS)组成。前导码用于同步接收方的时钟,通常为 7 个字节的 10101010 和 1 个字节的 10101011;目的 MAC 地址和源 MAC 地址各占 6 个字节,用于标识接收方和发送方的网络接口卡;类型 / 长度字段占 2 个字节,用于标识上层协议或数据字段的长度;数据字段长度可变,范围一般在 46 到 1500 字节之间,包含上层协议数据;FCS 占 4 个字节,用于校验帧的完整性。
应用程序必须选择合适大小的报文。
若报文太短,会使 IP 数据报的首部的相对长度太大,降低 IP 层的效率
工作原理
- 发送方:连续发送多个数据帧,而不需要等待接收方的确认帧。发送方会为每个发送的数据帧设置一个定时器,以确保在规定时间内收到确认帧。
- 接收方:对收到的数据帧进行逐一检查,若发现错误则直接丢弃该帧,不发送确认帧;若接收无误,则向发送方发送一个确认帧,确认帧中通常包含已正确接收的数据帧的序号。
- 重传机制:发送方如果在定时器超时之前没有收到某个数据帧的确认帧,就会认为该数据帧在传输过程中丢失或出现错误,于是重传该数据帧以及其后的所有已发送但未确认的数据帧。这种重传方式也被称为 “回退 N 帧”(Go-Back-N),其中 N 表示从丢失或出错的帧开始往后连续的帧数。
- 初始化:发送方首先将待发送的数据分成若干个数据帧,并为每个数据帧设置一个序号。通常,序号是按照顺序依次递增的,以便接收方能够正确地识别和排序数据帧。
- 连续发送:发送方在不需要等待接收方确认的情况下,连续发送多个数据帧。发送方会为每个发送的数据帧启动一个定时器,定时器的时长根据网络的往返延迟等因素进行设置,以确保在规定时间内能够收到接收方的确认帧。
- 等待确认与处理:发送方在发送数据帧后,等待接收方的确认帧。如果在定时器超时之前收到了确认帧,说明相应的数据帧已经被接收方正确接收,发送方会停止该数据帧的定时器,并继续发送后续的数据帧。如果定时器超时,发送方未收到确认帧,则认为该数据帧或其确认帧在传输过程中丢失或出现错误,进入重传流程。
接收方
- 接收与检查:接收方不断监听链路,接收发送方发送的数据帧。对于接收到的每个数据帧,接收方首先检查数据帧的完整性和正确性,通常是通过校验和等方式进行验证。
- 确认与反馈:如果接收方检查发现数据帧正确无误,会提取数据帧中的序号,并根据该序号判断是否是期望接收的数据帧。如果是期望接收的数据帧,接收方会将数据帧中的数据提交给上层协议进行处理,并向发送方发送一个确认帧,确认帧中包含已正确接收的数据帧的序号。如果接收方发现数据帧有错误或不是期望接收的数据帧,则直接丢弃该数据帧,不发送确认帧。
- 处理乱序帧:由于网络传输延迟等原因,接收方可能会接收到乱序的数据帧。接收方会根据数据帧的序号将其放入接收缓冲区中合适的位置,等待所有序号连续的数据帧都接收完整后,再将其按顺序提交给上层协议进行处理。
重传流程
- 判断重传范围:当发送方的定时器超时后,发送方会根据超时的数据帧的序号,确定需要重传的数据帧范围。通常情况下,发送方会重传该超时的数据帧以及其后的所有已发送但未确认的数据帧,这就是所谓的 “回退 N 帧”。
- 重传操作:发送方重新发送确定需要重传的数据帧,并再次为每个重传的数据帧启动定时器。之后,发送方继续等待接收方的确认帧,重复上述的发送、等待确认和重传流程,直到所有数据帧都被接收方正确接收为止。
正常传输情况
- 发送方:假设发送方要发送 4 个数据帧,分别为 Frame0、Frame1、Frame2、Frame3,序号依次为 0、1、2、3。发送方连续发送这 4 个数据帧后,等待接收方的确认帧,同时为每个数据帧启动定时器。
- 接收方:接收方按顺序接收到 Frame0、Frame1、Frame2、Frame3,检查无误后,分别向发送方发送确认帧 ACK0、ACK1、ACK2、ACK3。
- 发送方:发送方依次收到确认帧,停止相应数据帧的定时器,数据传输完成,未发生重传。
个别数据帧丢失情况
- 发送方:发送方发送 Frame0、Frame1、Frame2、Frame3、Frame4,定时器设置为 50ms。发送完后等待确认帧。
- 接收方:接收方成功接收 Frame0、Frame1、Frame3、Frame4,但 Frame2 丢失。接收方接收 Frame3 和 Frame4 后,因序号不连续,将其放入缓冲区等待 Frame2。由于一直未收到 Frame2,所以不会发送 ACK3 和 ACK4。
- 发送方:发送方在 50ms 定时器超时后,未收到 Frame2、Frame3、Frame4 的确认帧,于是重传 Frame2、Frame3、Frame4。
- 接收方:接收方收到重传的 Frame2、Frame3、Frame4,检查无误后,按顺序将数据提交给上层协议,并发送 ACK2、ACK3、ACK4。
- 发送方:发送方收到确认帧后,停止相应定时器,完成数据传输。
确认帧丢失情况
- 发送方:发送方发送 Frame0、Frame1、Frame2、Frame3,定时器为 30ms。
- 接收方:接收方正确接收 Frame0、Frame1、Frame2、Frame3,分别发送 ACK0、ACK1、ACK2、ACK3,但 ACK1 在传输过程中丢失。
- 发送方:发送方收到 ACK0 后,继续等待其他确认帧。30ms 定时器超时后,因未收到 Frame1 的确认帧 ACK1,发送方重传 Frame1、Frame2、Frame3。
- 接收方:接收方再次收到 Frame1、Frame2、Frame3,因 Frame1 已接收过,接收方直接丢弃重传的 Frame1,接收 Frame2 和 Frame3 后,将其放入缓冲区与之前接收的 Frame0、Frame1 按顺序排列。然后向发送方发送 ACK1、ACK2、ACK3。
- 发送方:发送方收到确认帧后,停止相应定时器,数据传输完成。
此情况的具体分析
- 当发送方先收到 ACK2 时,由于 ACK0 和 ACK1 未收到,这意味着发送方还不确定 Frame0 和 Frame1 是否被正确接收。
- 根据累积确认原则,发送方不会因为单独收到 ACK2 而移动窗口,而是会继续等待 ACK0 和 ACK1 或者等待定时器超时。
- 如果定时器超时,发送方会重传 Frame0、Frame1 以及可能的后续帧,以确保数据的可靠传输。
- 只有当发送方收到 ACK0 和 ACK1 或者按照协议规定的其他确认机制确定 Frame0 和 Frame1 也已被正确接收后,发送方才会将窗口向前移动,使得窗口内可以发送新的数据帧。