计算机网络 第三章
数据链路层
在此层要解决的问题:封装成帧、透明传输、差错控制(检错、纠错)
- 点对点信道
- 这种信道使用一对一的点对点通信方式( PPP 协议 )
- 广播信道。
- 这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。 CSMA/CD 协议

为了分析链路层协议,采用简化的链路层模型
- 数据链路层以上的各层用一个主机代替;
- 物理层和通信线路等效成一条简单数据链路;

使用点对点信道的数据链路层
数据链路和帧
链路 (link) 是一条无源的结点到相邻结点的物理线路(有线或无线),中间没有任何其他的交换结点。
- 一条链路只是一条通路的一个组成部分。
数据链路 (data link) 除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
现在最常用的方法是使用 网络适配器(即网卡) 来实现这些协议的硬件和软件。
一般的适配器都包括了数据链路层和物理层这两层的功能。
数据链路层的基本概念
也有人采用另外的术语。这就是把链路分为物理链路和逻辑链路。
物理链路 就是上面所说的链路 。
逻辑链路 就是上面的数据链路,是物理链路加上必要的通信协议。
早期的数据通信协议曾叫做通信规程 (procedure) 。因此在数据链路层,规程和协议是同义语。
数据链路层的协议数据单元 - 帧

常常在两个对等的数据链路层之间画出一个数字管道,而在这条数字管道上传输的数据单位是帧

数据链路层不必考虑物理层如何实现比特传输的细节。 甚至还可以更简单地设想好像是沿着两个数据链路层之间的水平方向把帧直接发送到对方
三个基本问题
封装成帧
(framing)
定义
在一段数据的前后分别添加首部和尾部然后就构成了一个帧。使接收方能确定帧的界限。换句话说,首部和尾部的一个重要作用就是进行帧定界

字节计数法
思想
在帧头设置一个长度域,放置该帧的字节数,当收方收到帧后,通过帧的长度,确定帧的开始。
问题
当帧的长度域出错,帧同步完全丢失;
该方法很少单独使用。

字符填充法
当数据是由可打印的 ASCII 码组成的文本文件时,帧定界可以使用特殊的 ASCII 码 不可打印的控制字符 作为 帧定界符。
控制字符 SOH (Start Of Header) 放在一帧的最前面表示帧的首部开始 。 另一个控制字符 EOT (End Of Transmission) 表示帧的结束 。

比特填充法
思想
使用一个特殊的比特模式 01111110 作为帧的起始和结束标志。
发送方边发送边检查数据,每连续发送 5 个“ 1” 后在后面自动插入一个“ 0” 。这样数据中只会连续出现 5 个“ 1”,而不会出现定界符。
接收方在收到 5 个连续的 “1” 后将后面的 “0” 删掉而恢复出原始数据。
好处
数据传输的基本单位是比特而不是字符,可用来传输任意长度的二进制比特串,通用性强。

违法编码法
前提
物理介质上使用的信号编码有冗余码字时,使用这些冗余的码字来作为帧的定界。
举例
如曼彻斯特编码或差分曼彻斯特编码中,有效电平是 “低-高” 或 “高-低”,而 “低-低” 和 “高-高” 电平没有定义,这种违法编码可以作为帧的边界。
透明传输
若所传的数据的比特片段与某一个控制信息相同,要有可靠机制,保证收方能正确识别
如果数据中的某个字节的二进制代码恰好和 SOH 或 EOT 一样,数据链路层就会错误地“找到帧的边界”

- 解决方法
- 发送端的数据链路层在数据中出现控制字符 “SOH” 或 “EOT” 的前面 插入一个转义字符 “ESC” (其十六进制编码是 1B) 。
- 接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
- 如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC 。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
- 对应字节填充法

差错控制
纠错:通过编码技术,接收方自动将差错改正过来
检错:检测出帧有错误,要么忽略或重传
在传输过程中可能会产生比特差错: 1 可能会变成 0 而 0 也可能变成 1 。
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate)
- 例如误码率 10^-10^ ,表示 10^10^ 个比特就会出现 1 个比特的差错
误码率与信噪比有很大的关系。
为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错控制措施。
- 考虑怎样发现和纠正信号传输中的差错。
方法
- 如何发现差错?
- 检错码(奇偶校验码、 CRC):能检测出错误,但不能纠正错误
- 纠错码(海明码):能知道错误,且知道错误的位置
- 发现差错如何处理?
- 前向纠错:由接收方来检查并纠正错误
- 自动重发请求:不能纠正,接收方反馈。若有错误则重发,否则给肯定应答
- 如何发现差错?
前向纠错
(FEC Forward Error Correct)
即发送方发送能使接收方检错并纠错的冗余位,纠错任务由接收方完成;常采用海明码
主要应用于没有反向信道或反向传输时间很长的场合
缺点:为纠错附加的冗余码较多,传输效率低;
优点:实时性好。
自动重发请求
(ARQ Automatic Repeat reQuest)
即发送方发送能使接收方检错的冗余位,若无差错,则接收方回送一个肯定应答 (ACK);若有差错,则接收方回送一个否定应答 (NAK),要求发送方重发。
- 缺点:信息传递连贯性差
- 优点:接收端设备简单,只要请求重发,无需纠正错误。
检错码
- 构造
- 检错码 (码字、传输帧) = 信息位+冗余校验位
- 码字长 n = K (信息位位数) + r (校验位位数)
- 编码效率 R = 有效数据位 K / 码字长 n
- 信息字段和校验字段之间的对应关系
- 校验字段越长,编码的检错能力越强,编码解码越复杂;附加的冗余信息在整个编码中所占的比例越大,传输的有效成分越低,传输的效率下降。
- 检错码一旦形成,整个检错码将作为一个整体被发往线路,通常的发送顺序是信息字段在前,校验字段在后。
奇偶校验码
根据数据字节中 1 的个数来检验数据传输中是否发生了错误。
奇校验:使码字中 1 的总个数为奇数 。
偶校验:使码字中 1 的总个数为偶数 。
奇 / 偶校验码:最常用的一种检验码,包括:
- 水平奇 / 偶校验码
- 垂直奇 / 偶校验码
- 水平垂直奇 / 偶校验码
水平奇 / 偶校验码
其信息字段以字符为单位,校验字段仅含一个比特称为校验比特或校验位。
例如:使用七比特的 ASCII 码来构造成八比特的检错码时若采用奇 / 偶校验,校验位的取值应使整个码字包括校验位, 1 的比特个数为奇数或偶数。 信息字段 奇校验码 偶校验码 1000001 10000011 10000010
- 编码效率: Q / (Q+1) ( 信息字段占 Q 个比特 )
- 应用: 通常在异步传输方式中采用偶校验, 同步传输方式中采取奇校验。
垂直奇 / 偶校验码
被传输的信息进行分组,并排列为若干行和若干列。组中每行的相同列进行奇 / 偶校验,最终产生由校验位形成的校验字符 (校验行),并附加在信息分组之后传输
举例: 4 个字符( 4 行)组成一信息组
- 编码效率: PQ / P(Q+1) (假设信息分组占 Q 行 P 列)
水平垂直奇 / 偶校验
也叫方阵校验
在水平校验的基础上实施垂直校验。
例: 4 行 7 列信息组的水平垂直偶校验码为:

循环冗余码
(Cyclic Redundancy Check CRC) 计算机和数据通信中使用最广泛的检错码 ,漏检率低,可用简单的电路实现。
操作
给定一个 k 比特的帧或报文,发送方生成 n 比特的序列(也称为帧检验序列 FCS Frame Check Sequence ),形成 ( k+n ) 的码字,该码字能被某个事先确定的数整除。接收方用相同的数去除收到的帧,如果无余数,则认为数据帧无差错
步骤
- 在发送端,先把数据划分为组
- 假定每组 k 个比特
- 假设待传送的一组数据 M = 101001 (现在 k = 6 )。我们在 M 的后面再添加供差错检测用的 n 位 冗余码 一起发送。
计算方法
- 用二进制的 模 2 运算 进行 2^n^ 乘 M 的运算,这相当于在 M 后面添加 n 个 0
- 得到的 ( k + n ) bit 的数除以事先选定好的长度为 ( n + 1) bit 的除数 P,得出商是 Q 而余数是 R,余数 R 比除数 P 少 1 位,即 R 是 n 位 。
- 将余数 R 作为冗余码 (帧检验序列) 拼接在数据 M 后面发送出去 。

说明:帧检验序列
在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence) 。 循环冗余检验 CRC 和帧检验序列 FCS 并不等同。
- CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。
- FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的唯一方法。
接收端对收到的每一帧进行 CRC 检验
把收到的每一个帧都除以相同的除数 P 模 2 运算 然后 检查得到的余数 R
- 若得出的余数 R = 0 则判定这个帧没有差错就接受 (accept)
- 若余数 R 不等于 0 则判定这个帧有差错就丢弃
但这种检测方法并不能确定究竟是哪一个或哪几个比特出现了差错 。
漏检 CRC 不能保证检测出所有的传输错误,但是只要选择位数足够的 P 可以使得差错的概率足够小
只要经过严格的挑选,并使用位数足够多的除数 P 那么出现检测不到的差错的概率就很小很小

CRC 也称多项式编码
任意一个由二进制位串组成的代码都可以和一个 系数仅为 ‘0’ 和 ‘1’ 取值的多项式 一一对应。
多项式表示:即将 k 比特的数据用 k 项多项式表示,它的各项为 X^k-1^, …, X^0^,它的系数为数据中对应位的 0 或 1 。

生成多项式 P
除数 P 可表示成生成多项式 P(X)
例如: P = 110101 ,即 P(X) = X^5^ + X^4^ + X^2^ + 1 (P 为 5 阶多项式);
生成多项式的最高位和最低位都必须为 1
发送方用它生成冗余位,接收方用它判断是否有错;
若 P 为 r 阶( r +1 bit ),将产生 r 位冗余位;
发送端帧检验序列 FCS 的生成和接收端 CRC 检验都是用硬件完成的,处理速度很快,不会延误数据的传输

P 的国际标准

注意
仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受,不能检验出帧有没有丢失、重复、失序
无差错接受是指:凡是接受的帧(即不包括丢弃的帧)我们都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错,也就是说,凡是接收端数据链路层接受的帧都无差错,有差错的帧就丢弃而不接受 。
区分无比特差错与无传输差错(在运输层实现)
要做到可靠传输(即发送什么就收到什么),就必须再加上确认和重传机制 。

在数据链路层使用 CRC 检验能够实现无比特差错的传输但这还不是可靠传输 。
本章介绍的数据链路层协议都不是可靠传输的协议
对于通信质量较差的无线传输链路,数据链路层协议使用确认和重传机制可以提高通信效率
海明码(纠错码)
(重要)
单比特纠错海明码
- 基本思想
- 在 k 比特信息上附加 r 比特冗余信息(校验比特),构成 n = k + r 比特的码字,其中每个校验比特和某几个特定的信息比特构成偶校验关系。
- 接收端对这 r 个偶校验关系进行校验,即将每个校验比特和与它关联的信息比特进行相加(异或),相加的结果为 校正因子 。
- 如果没有错,则 r 个校正因子都为 0
- 若校正因子不全为 0 ,根据校正因子的取值,确定错误发 生的位置。
码距
(海明距离 Hamming Distance)
一个编码系统中任意两个合法编码(码字)之间不同的二进位( bit )数叫这两个码字的码距 。
例:10101,00110 ,码距为 3
而整个编码系统中任意两个码字的的最小距离就是该编码系统的码距 。
两个结论
如果要检测出 d 个比特的错误,则编码集的海明距离至少为 d + 1
如果要纠正 d 个比特的错误,则编码集的海明距离至少应为 2d + 1

运算





点对点协议 PPP(了解)
面向比特的链路层协议 HDLC
高级数据链路控制 (High Level Data Link Control)是由国际标准化组织 ISO 制定的 面向比特 的链路层协议。
采用主从结构,链路上一个主站控制多个从站,主站向从站发送命令,从站向主站返回响应。
- 点 - 点
- 点 - 多点
目前很少使用
帧格式

字段


PPP 协议
点对点协议 (Point to Point Protocol) 是数据链路层的功能
主要用在拨号上网
满足的要求
简单
- 这是首要的要求。
封装成帧
- 必须规定特殊的字符作为帧定界符 。
透明性
- 保证数据传输的透明性 。
支持多种网络层协议
- 能够在同一条物理链路上同时支持多种网络层协议。
支持多种类型链路
- 能够在多种类型的链路上运行。
差错检测
- 能够对接收端收到的帧进行检测,并立即丢弃有差错的帧 。
检测连接状态
- 能够及时自动检测出链路是否处于正常工作状态。
最大传送单元
- 必须对每一种类型的点对点链路设置最大传送单元 MTU 的 标准默认值,促进各种实现之间的互操作性。
网络层地址协商
- 必须提供一种机制使通信的两个网络层实体能够通过协商知 道或能够配置彼此的网络层地址。
数据压缩协商
- 必须提供一种方法来协商使用数据压缩算法。
不需要的功能
- 纠错
- 流量控制
- 序号
- 多点线路
- 半双工或单工链路
透明传输问题(要看)


使用广播信道的数据链路层
局域网的数据链路层
- 特点
- 网络为一个单位所拥有;地理范围和站点数目均有限
- 具有较高的数据率、较低的时延和较小的误码率
- 优点
- 广播功能
- 功能,从一个站点可很方便地访问全网。局域网上的主 机可共享连接在局域网上的各种硬件和软件资源。
- 便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变
- 提高了系统的可靠性、可用性和生存性
- 广播功能
- 拓扑结构

局域网信道分配策略
广播网中所有站点共享同一个信道,任一站点发送的信息能被所有其他站点接收到。
问题
若有两个或两个以上的站点同时发送数据,则信号在信道中发生碰撞,数据发送失败,为冲突。
广播网中,如何将单一的信道分配各各个不同的用户,是个重要的问题。
用户使用的信道称为媒体(介质),决定由谁来使用信道的协议为媒体(介质)访问控制协议
媒体(介质)共享技术
静态划分信道
频分复用
时分复用
波分复用
码分复用
静态分配的特点
站点数目少且固定,且每个站点有大量数据发送,控制协议简单且传输的效率高。
对于大部分计算机网络,站点数目多且不固定,数据传输有突发性,信道的利用率低。
代价较高,不适合于局域网使用
动态分配
动态媒体接入控制(多点接入)
信道不是在用户通信时固定分配给用户。
例如:异步时分多路复用 STDM ,各站点仅当有数据发送时,才占用信道发送数据。
动态接入控制类型
随机接入
又称争用,用户发送前不需要取得发送权,有数据就发送,发生**冲突(碰撞)**后采取措施解决冲突
控制接入(少用 )
用户首先获得发送权,再发送数据,不会产生冲突
令牌环局域网的多点线路探询(polling)
争用协议
争用协议的特性
随机访问: 意味着对任何站都无法预计其发送的时刻;
竞争发送: 是指所有发送的站自由竞争信道的使用权。
ALOHA 系统和它的后继者 CSMA/CD 都是争用协议的代表。
ALOHA
- 思想(想发就发,冲突重发)
- 任何用户有数据发送就可以发送(会带来冲突)
- 如果发生冲突,接收方会检测出差错,然后不予确认,发送方一定时间内收不到确认就判断发生冲突;
- 发现数据传输失败后,各自等待一段随机时间 ,再重新发送。
- 竞争系统中,一方面不断有新的数据帧发送,另一方面冲突帧需要重发,系统的吞吐量是一个重要的指标。
- 吞吐量 :单位时间内系统能够成功发送的新的数据帧的平均数量。
- 结论:
- ALOHA 系统最大的信道利用率为 18.4%
- ALOHA 系统的信道利用率是非常低的。原因主要是各个站自由发送数据,碰撞概率增大。
时隙 ALOHA 协议
( Slotted ALOHA )控制想发就发的随意性
把时间分为若干个相同的时间片,所有用户在时间片开始时刻同步接入网络信道若发生冲突,则必须等到下一个时间片开始时刻再发送。
时隙 ALOHA 系统的最大信道利用率为 36.8%
CSMA/CD 协议(重要)

以太网采取了两种重要的措施
为了通信的简便,以太网采取了两种重要的措施:
采用较为灵活的无连接的工作方式
- 不必先建立连接就可以直接发送数据。
- 对发送的数据帧不进行编号,也不要求对方发回确认。
- 这样做的理由是局域网信道的质量很好,因信道质量产生差错的概率是很小的。
- 以太网提供的服务是不可靠的交付,即尽最大努力的交付。
- 当目的站收到有差错的数据帧时就丢弃此帧,其他什么也不做。 差错的纠正由高层来决定。
- 如果高层发现丢失了一些数据而进行重传,但以太网并不知道这是一个重传的帧,而是当作一个新的数据帧来发送。
以太网发送的数据都使用曼彻斯特编码
- 曼彻斯特编码缺点是:它所占的频带宽度比原始的基带信号增加了一倍
协议内容
CSMA/CD 含义: 载波监听,多点接入 / 碰撞检测 (Carrier Sense Multiple Access with Collision Detection)
- 多点接入指总线型网络,表示许多计算机以多点接入的方式连接在一根总线上。(计算机之间相互竞争)
- 载波监听是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。(先听后说,有礼貌)
- 总线上并没有什么“载波”。因此, “载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号。
- 碰撞检测就是计算机边发送数据边检测信道上的信号电压大小。
- 当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。
- 当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。
- 所谓“碰撞”就是发生了冲突。因此“碰撞检测”也称为“冲突检测”

检测到碰撞后
在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。
每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送
每个站点都是在监听到信道空闲时才发送数据的,为什么还会发生碰撞?根本原因是因为电磁波在媒体上的传播速度总是有限的。
为什么要进行碰撞检测?
由于电磁波在总线上的传播速率是有限的, 当某个站监听到总线是空闲时,也可能总线并非真正是空闲的
A 向 B 发出的信息,要经过一定的时间后才能传送到 B
B 若在 A 发送的信息到达 B 之前发送自己的帧(因为这时 B 的载波监听检测不到 A 所发送的信息),则必然要在某个时间和 A 发送的帧发生碰撞。
碰撞的结果是两个帧都变得无用。
所以需要在发送期间进行碰撞检测,以检测冲突。

CSMA/CD 的重要特性
使用 CSMA/CD 协议的以太网不能进行全双工通信,只能进行双向交替通信(半双工通信)。
每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。
这种 发送的不确定性 使整个以太网的平均通信量远小于以太网的最高数据率。
两个重要问题
最迟多久才能知道自己发送的数据没和别人发生碰撞(争用期)
检测到碰撞后,等待多长时间再重试(退避算法)
争用期
最先发送数据帧的站,在发送数据帧后至多经过时间 2$\tau$(两倍端到端单程传播时延)就可知道发送的数据帧是否遭受了碰撞。
以太网的端到端往返时延 2$\tau$ 称为争用期,或碰撞窗口。
经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
二进制指数类型退避算法
(truncated binary exponential)
发生碰撞的站在停止发送数据后,要推迟(退避)一个随机时间才能再发送数据。
基本退避时间取为争用期 2$\tau$
从整数集合 [0, 1, 2, 3, 4, … , (2^k^ - 1)] 中随机地取出一个数,记为 r。重传所需的时延就是 r 倍的基本退避时间。
参数 k 按公式计算:$k = Min[重传次数, 10]$
当 $k\leq 10$ 时,参数 k 等于重传次数。
当重传达 16 次仍不能成功时即丢弃该帧,并向高层报告。
最短帧长
A 站发了一个很短的帧,不幸发生了碰撞,但是帧在发送完毕后才检测到发生碰撞,没法停止发送,因为发完了。。。
帧的发送时延至少持续一个争用期的时间(即 2 倍的传播时延)

以太网的最短帧长
$10 Mbit/s$ 的以太网取 $51.2\mu s$ 为争用期的长度,它在争用期内可以发送 512bit,即 64 字节(最短有效帧长)
这意味着
- 以太网在发送数据时,若前 64 字节没有发生冲突,则后续的数据就不会发生冲突 。
- 如果发生冲突,就一定是在发送的前 64 字节之内。
- 由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于 64 字节。
以太网规定了最短有效帧长为 64 字节,凡长度小于 64 字节的帧都是由于冲突而异常中止的无效帧
强化碰撞
当发送数据的站一旦发现发生了碰撞时
- 立即停止发送数据;
- 再继续发送若干比特的人为干扰信号 (jamming signal),以便让所有用户都知道现在已经发生了碰撞。


要点
- 准备发送,但没有完全发。在发送之前,必须先检测信道。
- 检测信道 。 若检测到信道忙,则应不停地检测,一直等待信道转为空闲。 若检测到信道空闲,并在 96 比特时间内信道保持空闲(保证了帧间最小间隔 9.6 μs),就发送这个帧。
- 检查碰撞。 在发送过程中仍不停地检测信道,即网络适配器要边发送边监听。这里有两种可能性
- 发送成功: 在争用期内一直未检测到碰撞。这个帧肯定能够发送成功。发送完毕后,其他什么也不做。然后回到 1
- 发送失败: 在争用期内检测到碰撞。这时立即停止发送数据,并按规定发送人为干扰信号。适配器接着就执行指数退避算法,等待 r 倍 512 比特时间 后,返回到步骤 2,继续检测信道。但若重传达 16 次仍不能成功,则停止重传而向上报错。
先听后发,边听边发,冲突停止,延迟重发
以太网
(Ethernet)
- 两个标准
- DIX Ethernet V2 是 DEC、Intel、Xerox 公司联合提出的世界上第一个局域网产品(以太网)的规约——10M/s 的以太网规约。
- IEEE 802.3 是 第一个 IEEE 802 委员会制定的局域网标准
- 两者差别很小,因此可以将 802.3 局域网简称为“以太网”
- 数据链路层的两个子层
- 逻辑链路控制 LLC (Logical Link Control) 子层
- 媒体接入控制 MAC (Medium Access Control) 子层
传统以太网
传统以太网 10Mbits/s 速率 最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆 ,最后发展为使用更便宜和更灵活的双绞线 。
采用双绞线的以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫做集线器 (hub)
集线器本身不解决冲突问题
星形以太网 10BASE-T
1990 年 IEEE 制定出星形以太网 10BASE-T 的标准 802.3i 。

- 特点
- 使用无屏蔽双绞线,采用星形拓扑。
- 每个站需要用两对双绞线,分别用于发送和接收。
- 双绞线的两端使用 RJ 45 插头 。
- 集线器使用了大规模集成电路芯片,因此 集线器的可靠性提高 。
- 10BASE T 的通信距离稍短,每个站到集线器的距离不超过 100 m
10BASE T 双绞线以太网 的出现,是局域网发展史上的一个非常重要的里程碑,它为以太网在局域网中的统治地位奠定了牢固的基础。
信道利用率
多个站在以太网上同时工作就可能会发生碰撞。
设帧长为 L (bits),数据发送速率为 C (bit/ s),则帧的发送时间为 T~0~ = L / C (s) 。
以太网信道被占用的情况


参数 α 与利用率
要提高以太网的信道利用率,就必须减小 $\tau$ 与 T0 之比。
在以太网中定义了参数 α,它是以太网单程端到端时延 $\tau$ 与帧的发送时间 T0 之比:
$$
a=\frac{\tau}{T_0}
$$
- 对以太网参数 α 的要求是
- α 要尽可能小
- 当数据率一定时, 以太网的连线的长度要受到限制,否则 $\tau$ 的数值会太大
- 以太网的帧长不能太短,否则 T~0~ 的值会太小,使 α 值太大
信道利用率的最大值S~max~
在理想化的情况下,以太网上的各站发送数据都不会产生碰撞(这显然已经不是 CSMA/CD,而是需要使用一种特殊的调度方法),即总线一旦空闲就有某一个站立即发送数据。
发送一帧占用线路的时间是 $T_0+\tau$,而帧本身的发送时间是 T~0~。于是我们可计算出理想情况下的极限信道利用率 S~max~ 为:
$$
S_{max}=\frac{T_0}{T_0+\tau}=\frac{1}{1+a}
$$
以太网的层次结构
数据链路层的两个子层
- 逻辑链路控制 LLC (Logical Link Control) 子层
- 屏蔽对各种不同物理网络的访问方法的差异,向上提供数据传输服务的统一的逻辑接口
- 媒体接入控制 MAC (Media Access Control) 子层
- 控制对传输介质的访问,并在物理层的基础上实现无差错通信。该子层随不同的物理网络差异较大
TCP/IP 一般不考虑 LLC 子层
以太网的 MAC 层
计算机要连接到局域网需要依靠网络接口板。
网络接口板又称为适配器 (adapter) 或网络接口卡 NIC (Network Interface Card) Card),或网卡
适配器的重要功能:
- 进行串行 / 并行转换
- 对数据进行缓存
- 在计算机的操作系统安装设备驱动程序
- 实现以太网协议

MAC 层的硬件地址
硬件地址又称为物理地址,或 MAC 地址
标准所说的 “地址” 严格地讲应当是每一个站的 “名字” 或标识符,采用 6 字节 ( 48 位 ) ,是固化在网卡 ROM 中的


MAC 帧格式
常用的以太网 MAC 帧格式有两种标准
- DIX Ethernet V2 标准
- IEEE 的 802.3 标准
最常用的 MAC 帧是 以太网 V2 的格式
以太网 V2 的 MAC 帧
由五个字段组成。
前两个字段分别为 6 字节长的目的地址和源地址字段。
第三个字段是 2 字节的类型字段,用来标志上一层使用的是什么协议
第四个字段是数据字段,其长度在 46 到 1500 字节之间
最后一个字段是 4 字节的帧检验序列 FCS (使用 CRC 检验)
总帧长 64 - 1518

对于检查出的无效 MAC 帧就简单地丢弃,以太网不负责重传丢弃的帧。

IEEE 802.3 MAC 帧格式(了解)
与以太网 V2 MAC 帧格式 相似, 区别 在于:
- IEEE 802.3 规定的 MAC 帧的第三个字段是“ 长度 / 类型 ”。
- 当这个字段值大于 0x0600 时(相当于十进制的 1536 ),就表示“类型”。这样的帧和以太网 V2 MAC 帧完全一样。
- 当这个字段值小于 0x0600 时才表示“长度” 。
- 当 “长度 / 类型” 字段值小于 0x0600 时,数据字段必须装入上面的逻辑链路控制 LLC 子层的 LLC 帧。
帧最小间隔
帧间最小间隔为 9.6 μs ,相当于 96 bit 的发送时间。
一个站在检测到总线开始空闲后,还要等待 9.6 μs 才能再次发送数据。
这样做是为了使刚刚收到数据帧的站的接收缓存来得及清理,做好接收下一帧的准备。
扩展以太网
在物理层扩展以太网
使用光纤扩展

使用集线器扩展
连接成更大的多级星形结构的以太网
相当于一个转发器,增大碰撞域,实现跨碰撞域的通信

在数据链路层扩展以太网
扩展以太网更常用的方法是在数据链路层进行。
早期使用网桥,现在使用以太网交换机。

网桥
根据 MAC 帧的目的地址对收到的帧进行转发和过滤
一般两个端口
工作原理
- 网桥从端口接收网段上传送的各种帧;
- 每当收到一个帧时,先暂存在缓存中。
- 若此帧未出错,且欲发送的目的站的 MAC 地址属于另外一个网段,则通过查找 “转发表”,将收到的帧送往对应的端口转发。
- 若此帧出错,则丢弃该帧。
- 同一个网段内的帧,不会被网桥转发,不会增加网络负担
网桥使各网段成为隔离开的碰撞域

- 内部结构

- 优点
- 过滤通信量、扩大了物理范围、提高了可靠性。
- 可互连不同物理层、不同 MAC 子层和不同速率的局域网。
- 缺点
- 存储转发增加了时延。
- 在 MAC 子层并没有流量控制功能。
- 具有不同 MAC 子层的网段桥接在一起时时延更大。
- 只适合用户数不太多(不超过几百个)和通信量不太大的局域网,否则有时还会因传播过多的广播信息而产生网络拥塞(所谓广播风暴)
- 网桥与集线器的不同
- 集线器在转发帧时,不对传输媒体进行检测。
- 网桥在转发帧之前必须执行 CSMA/CD 算法
- 由于网桥没有网卡,因此网桥并不改变它转发的帧的源地址。
- 类型(如何生成路由)
- 固定路由网桥
- 人为建转发表
- 透明网桥
- 网桥确定路由
- 能生成和修改自己路由表的网桥
- 用的最多
- 源路由网桥
- 站点确定路由
- 发送站点确定到达目的地的路由,并将它存储在所发送的帧中;网桥接收帧后按其指示的路由将它转发到下一个局域网上。
- 固定路由网桥
交换机
即多端口网桥(有更多接口的网桥)
- 特点
- 每个接口都直接与一个单台主机或另一个以太网交换机相连,并且一般都工作在全双工方式。
- 并行性
- 能同时连通多对接口, 使每一对相互通信的主机都能像独占通信媒体那样,进行无碰撞地传输数据。
- 相互通信的主机都是独占传输媒体,无碰撞地传输数据。
- 以太网交换机的接口有存储器, 能在输出端口繁忙时把到来的帧进行缓存 。
- 即插即用,其内部的帧交换表是通过自学习算法自动地逐渐建立起来
- 以太网交换机使用了专用的交换结构芯片,用硬件转发,其转发速率要比使用软件转发的网桥快很多。
- 优点
- 用户独享带宽,增加了总容量。
- 用以太网交换机扩展局域网

- 交换方式
- 存储转发方式
- 把整个数据帧先缓存后再进行处理 。
- 直通 (cut through) 方式
- 接收数据帧的同时就立即按数据帧的目的 MAC 地址决定该帧的转发接口,因而提高了帧的转发速度
- 缺点 是它不检查差错就直接将帧转发出去,因此有可能也将一些无效帧转发给其他的站
- 存储转发方式
在某些情况下,仍需要采用基于软件的存储转发方式进行交换,例如,当需要进行线路速率匹配、协议转换或差错检测时
自学习算法(重要)
- 以太网交换机运行自学习算法自动维护交换表。
- 步骤
- 开始时,以太网交换机里面的交换表是空的
- A 先向 B 发送一帧,从接口 1 进入到交换机。
- 交换机收到帧后, 先查找交换表, 没有查到应从哪个接口转发这个帧。
- 交换机把这个帧的 源地址 A 和 接口 1 写入交换表 中,并向(除接口 1 以外的)所有接口广播这个帧。
- C 和 D 将丢弃这个帧,因为目的地址不对。只 B 才收下这个目的地址正确的帧,称为过滤
- 从新写入交换表的项目 (A, 1) 可以看出,以后不管从哪一个接口收到帧,只要其目的地址是 A ,就应当把收到的帧从接口 1 转发出去。
- B 通过接口 3 向 A 发送一帧。(一般作为答复)
- 交换机查找交换表, 发现交换表中的 MAC 地址有 A 。表明要发送给 A 的帧(即目的地址为 A 的帧)应从接口 1 转发。 于是就把这个帧传送到接口 1 转发给 A 。 显然,现在已经没有必要再广播收到的帧。
- 交换表这时新增加的项目 (B, 3),表明今后如有发送给 B 的帧,就应当从接口 3 转发出去。
- 经过一段时间后, 只要主机 C 和 D 也向其他主机发送帧, 以太网交换机中的交换表就会把转发到 C 或 D 应当经过的接口号( 2 或 4 )写入到交换表中
- 以太网交换机的这种自学习方法使得以太网交换机能够即插即用,不必人工进行配置,因此非常方便。
交换机自学习和转发帧的步骤归纳
- 交换机收到一帧后先查找交换表中与收到帧的源地址有无相匹配的项目。
- 如没有,就在交换表中增加一个项目(源地址、进入的接口和有效时间)。
- 如有,则把原有的项目进行更新(进入的接口或有效时间)。
- 转发帧。 查找交换表中与收到帧的 目的地址有无相匹配 的项目。
- 如没有,则向所有其他接口(进入的接口除外)转发。(泛洪帧)
- 如有,则按交换表中给出的接口进行转发。
- 若交换表中给出的接口就是该帧进入交换机的接口,则应丢弃这个帧(因为这时不需要经过交换机进行转发)
- 交换机收到一帧后先查找交换表中与收到帧的源地址有无相匹配的项目。
生成树协议
为了增加网络的可靠性,会增加冗余链路。自学习的过程就可能导致以太网帧在网络的某个环路中无限制地兜圈子
如图,假定开始时,交换机 #1 和 #2 的交换表都是空的,主机 A 通过接口交换机 #1 向主机 B 发送一帧。
按交换机自学习和转发方法,该帧的某个走向如下
离开交换机#1 的接口 3 → 交换机#2 的接口 1 → 接口 2 → 交换机#1 的接口 4 → 接口 3 → 交换机#2 的接口 1 → ……
这样就无限制地循环兜圈子下去,白白消耗了网络资源
IEEE 802.1D 标准制定了一个生成树协议 STP (Spanning Tree)为了消除广播风暴
其要点是不改变网络的实际拓扑,但在逻辑上则切断某些链路,使得从一台主机到所有其他主机的路径是无环路的树状结构,从而消除了兜圈子现象。
例


虚拟局域网
冲突域:连接在同一个网桥或交换机端口的计算机只能有一台计算机发送数据
广播域:网络中所有能接收到同样广播消息的设备的集合
定义
利用以太网交换机可以很方便地实现虚拟局域网 VLAN (Virtual LAN) 。
虚拟局域网 VLAN 是由一些局域网网段构成的与物理位置无关的逻辑组,这些网段具有某些共同的需求 。
每一个 VLAN 的帧都有一个明确的标识符 ,指明发送这个帧的计算机是属于哪一个 VLAN 。
虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网

图注:当 B1 向 VLAN2 工作组内成员发送数据时,工作站 B2 和 B3 将会收到广播的信息,而工作站 A1,A2 和 C1 都不会收到 B1 发出的广播信息。虚拟局域网限制了接收广播信息的工作站数,使得网络不会因传播过多的广播信息(即“广播风暴”)而引起性能恶化
优点:安全性好、网络按照逻辑分段、灵活性好
有效控制广播域范围
增强网络安全性
灵活构建虚拟工作组
提高网络的可管理性
高速以太网
高速以太网:100BASE-T 以太网,全双工模式下工作不使用 CSMA/CD 协议,争用期、帧间时间间隔更短
吉比特以太网:允许在 1Gbit /s 下以 全双工 和 半双工 两种方式工作。
功能
载波延伸:最短帧长 64 字节,但争用时间增大为 512 字节,填充特殊字符
分组突发:多短帧发送时,第一个载波延伸,其余指留有必要间隔连续发送