计算机网络-谢希仁-第三章-数据链路层 读书笔记
数据链路层属于计算机网络中的低层. 数据链路层使用的信道主要有以下两种类型 :
-
点对点信道.
-
广播信道.
本章重点 :
- 数据链路层的点对点信道和广播信道的特点, 以及这两种信道所使用的协议 (PPP 协议以及 CSMA/CD 协议) 的特点.
- 数据链路层的三个基本问题 : 封装成帧, 透明传输和差错检测.
- 以太网 MAC 层的硬件地址.
- 适配器, 转发器, 集线器, 网桥, 以太网交换机的作用以及使用场合.
3.1 使用点对点信道的数据链路层
3.1.1 数据链路和帧
"链路" 和 "数据链路" 不是一回事.
链路就是一个结点到相邻结点的一段物理线路 (有线或无线), 而中间没有任何其他的结点交换.
数据链路则是除了链路, 还要加上实现了必要协议的软件和硬件. 现在最常用的是用网络适配器 (既有硬件, 也有软件) 来实现这些协议.
数据链路层把网络层交下来的数据构成帧发送到链路上, 以及把接收到的帧帧中的数据取出并交给网络层. 在互联网中, 网络层协议数据单元 (PDU) 就是 IP 数据报. (或简称数据报, 分组或包).
点对点信道的数据链路层在进行通信时的主要步骤如下 :
- 结点 A 的数据链路层把网络层交下来的 IP 数据报添加首部和尾部封装成帧.
- 结点 A 把封装好的帧发送给结点 B 的数据链路层.
- 若结点 B 的数据链路层收到的帧无差错, 则从收到的帧中提取出 IP 数据报交给上面的网络层, 否则丢弃这个帧.
数据链路层不必考虑物理层如何实现比特传输的细节, 我们甚至可以更简单地设想好像是沿着两个数据链路层之间的水平方向把帧直接发送给对方.
3.1.2 三个基本问题
三个基本问题 :
- 封装成帧
- 透明传输
- 差错检测
1. 封装成帧
封装成帧 就是在一段数据的前后分别添加首部和尾部, 这样就构成了一个帧.
接收端在收到物理层上交的比特流后, 就能根据首部和尾部的标记, 从收到的比特流中识别帧的开始和结束.
我们知道, 交换分组的一个重要概念就是 : 所有在互联网上传送的数据都以分组 (即 IP 数据报) 为传送单位. 网络层的 IP 数据报传送到数据链路层就成为帧的数据部分. 在帧的数据部分的前面和后面分别添上首部和尾部, 就够成一个完整的帧. 这样的帧就是数据链路层的数据传输单元.
一个帧的帧长等于帧的数据部分长度加上首部和尾部的长度. 首部和尾部的一个重要作用就是帧定界 (即确定帧的界限). 此外, 首部和尾部还包括许多必要的控制信息. 发送帧从首部开始. 为了提高帧的传输效率, 应当使帧的数据部分尽可能大于首部和尾部的长度, 但是, 每一种链路层协议都规定了所能传送帧的数据部分长度上限 --- 最大传送单元 MTU. 图中给出了帧的首部和尾部位置, 以及帧的数据部分与 MTU 的关系 :
当数据是由可打印的 ASCII 码组成的文本文件时, 帧定界可以使用特殊的帧定界符.
- 控制字符
SOH
放在帧最前面, 表示帧首部开始, 十六进制为01
. - 控制字符
EOT
表示帧的结束, 十六进制为04
.
当数据在传输中出现差错时, 帧定界符作用更明显.
2. 透明传输
由于使用了帧的标记字符, 因此, 所传输的数据不允许与控制字符冲突.
"透明" : 表示一个实际存在的事物好像不存在一样, 在数据链路层表示无论传输什么比特组合的数据, 都可以没有差错的传输.
解决方法 : 字节填充 (加入转义字符)
3. 差错检测
通信链路不是理想的, 比特传输可能会有差错 : 1 可以变成 0, 0 也可以变成 1. 这就是比特差错.
目前数据链路层广泛使用的是循环冗余检验 CRC.
除了比特差错, 还有帧丢失, 帧重复, 帧失序.
3.2 点对点协议 PPP
3.2.1 PPP 协议的特点
PPP 协议就是用户计算机和 ISP 进行通信时所使用的数据链路层协议, 如图 :
1. PPP 协议要满足的要求
2. PPP 协议的组成
PPP 协议有三个组成部分 :
- 一个将 IP 数据报封装到串行链路的方法,
- 一个用来建立, 配置和测试数据链路连接的链路控制协议 LCP.
- 一套网络控制协议 NCP.
3.2.2 PPP 协议的帧格式
1. 各字段的意义
如图, PPP 帧的首部和尾部分别为四个字段和两个字段.
首部第一字段和尾部的第二个字段都是标志字段 F, 规定为0x7E(符号为"0x")
表示它后面的字符用十六进制表示的. 标志字段表示一个帧的开始或结束, 因此标志字段就是 PPP 帧的定界符.
首部中的地址字段 A 规定为0xFF
, 控制字段 C 规定为0x03
.
PPP 首部的第四个字段是 2 字节的协议字段, 当协议字段为0x0021
时, PPP 帧的信息字段就是 IP 数据报.
信息字段长度可变, 不超过 1500 字节.
尾部第一字段 (2字节) 是使用 CRC 的帧检测序列 FCS.
2. 字节填充
异步传输时使用字节填充 (逐个字符地传送).
当信息字段中出现和标志字符一样的比特(0x3f)组合时, 就必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中.
主要的方式是加入转义符.
由于发送端进行了字节填充, 因此在链路上传送的信息字节数就超过了原来的信息字节数. 但接收端在收到数据后再进行与发送端字节填充相反的变化, 就可以恢复出原本的信息.
3. 零比特填充
PPP 协议 用在 SONET/SDH 链路时, 使用同步传输 (一连串比特连续传输). 这时, PPP 协议 采用零比特填充法实现透明传输.
3.2.3 PPP 协议 工作状态
PPP 链路一开始如何被初始化的 ?
当用户拨号接入 ISP 后, 就建立了一条从用户个人电脑到 ISP 的物理连接. 这时, 用户个人电脑向 ISP 发送一系列的链路控制协议 LCP 分组 (封装成多个 PPP 帧), 以便建立 LCP 连接. 这些分组及其响应选择了将要使用的一些 PPP 参数. 接着还要进行网络层配置, 网络控制协议 NCP 给新接入的网络个人电脑分配一个临时的 IP 地址. 这样, 用户个人电脑就成为互联网上的一个有 IP 地址的主机了.
当用户通信完成后, NCP 释放网络层连接, 收回原来分配的 IP 地址. 接着 LCP 数据链路层连接. 最后释放的是物理层连接.
过程如图 :
- PPP 链路的起始和终止状态永远是"链路静止"状态, 此时, 用户个人电脑和 ISP 的路由器之间并不存在物理层的连接.
- 当用户个人电脑通过调制解调器呼叫路由器时, 路由器就能检测到调制解调器发出的载波信号. 双方建立物理层连接后, PPP 就进入"链路建立"状态, 其目的是建立链路层的 LCP 连接.
- 这时 LCP 开始协商配置选项, 即发送 LCP 的配置请求帧.
- 协商后进入"鉴别"状态, 若鉴别身份失败则进入"链路终止"状态, 成功了则进入"网络层协议"状态.
- 当网络层配置完成后, 链路就进入"链路打开"状态. 链路的两个 PPP 端点可以彼此向对方发送分组.
- 数据传输结束后, 可以由链路的一端发送终止请求 LCP 分组请求终止链路连接, 在收到对方发来的终止确认 LCP 分组后, 转到"链路终止"状态.
3. 3 使用广播信道的数据链路层
广播信道可以进行一对多的通信. 局域网使用的就是广播信道.
3.3.1 局域网的数据链路层
局域网最主要的特点 : 网络为一个单位所拥有, 且地理范围和站点数目均有限.
共享信道必须考虑的问题是如何时众多用户共享资源, 技术上有两种方法 :
- 静态划分信道, 不适合局域网.
- 动态媒体接入控制, 又称为多点接入, 其特点是信道并非在用户通信时固定分配给用户. 这里又分为两种 :
- 随机接入 : 所有用户可随机发送信息, 要处理碰撞.
- 受控接入
以太网属于随机接入.
1. 以太网的两个标准
- DIX Ethernet V2
- IEEE 802.3
IEEE 802 把局域网数据链路层拆分成两个子层 : 逻辑链路控制 LLC子层 和 媒体接入控制 MAC 子层.
现在 IEEE 802 委员会制定的逻辑控制子层 LLC 的作用已经很小, 很多厂商生产的适配器仅有 MAC 协议而没有 LLC 协议.
2. 适配器
计算机与外界局域网的连接是通过通信适配器进行的. 适配器本来是在主机箱内插入一块网络接口板. 这种接口板又称为网络接口卡 (或网卡).
适配器和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的, 而适配器和计算机之间的通信则是通过计算机主板上的 I/O总线以并行传输方式进行的. 因此适配器的一个重要功能是进行数据串行传输和并行传输的转换. 由于网络上的数据率和计算机总线上的数据率不同, 因此适配器必须装又对数据进行缓存的存储芯片. 在主板插上适配器后, 还要安装管理该适配器的驱动. 适配器还要能实现以太网协议.
适配器在接收和发送各种帧时, 不使用计算机的 CPU. 这时 CPU 可以处理其他任务. 当适配器收到有差错的帧时, 就把这个帧丢弃而不必通知计算机. 当适配器收到正确的帧后, 就通过中断来通知计算机, 并交付协议栈中的网络层. 当计算机要发送 IP 数据报时, 就由协议栈把 IP 数据报向下交给适配器, 组装成帧后发送给局域网. 计算机的硬件地址 (MAC) 就存储在适配的 ROM 中, 而计算机的软件地址 (IP), 则存储在计算机的存储器中.
3.3.2 CSMA/CD 协议
最早的以太网是将许多计算机都连接到一根总线上.
总线的特点是 : 当一台计算机发送数据时, 总线上所有的计算机都能检测到这个数据. 这种就是广播通信方式.
但我们不总是想在局域网上进行广播通信, 为了在局域网中实现一对一通信, 可以使每一台计算机的适配器拥有一个独一无二的地址, 在发送数据帧时, 在帧的首部写明接受站的地址. 仅当数据帧中的目的地址与适配器 ROM 中存放的硬件地址一致时, 该适配器才能接受这个数据帧, 适配器对不是给自已的数据帧直接丢弃, 这样就在总线上实现了一对一通信.
为了通信简便, 以太网采用了以下两种措施 :
- 采用无连接的工作方式, 即不必先建立连接就可以直接发送数据,.适配器对发送的数据帧不进行编号, 也不要求对方发回确认. 因此, 以太网提供的服务是不可靠的交付. 对有差错帧是否需要重传则由高层来决定.
- 以太网发送的数据都使用曼切斯特编码的信号.
我们知道, 总线只要有一台计算机在发送数据, 总线的传输数据就被占用. 因此, 同一时间只能允许一台计算机发送数据. 那么, 解决冲突就十分重要, 于是引入了 CSMA/CD 协议, 意思是载波监听多点接入/碰撞检测.
下面是 CSMA/CD 协议的要点 :
- 多点接入 : 说明是总线型网络.
- 载波监听 : 就是用技术检测总线上有没有其他计算机也在发送.
- 碰撞检测 : 边发送边监听, 即适配器边发送数据边检测信道上的信号电压的变化情况, 以便判断自已在发送数据时其他站是否也在发送数据.
显然, 在使用 CSMA/CD 协议时, 一个站不可能同时进行发送和接受 (但必须边发送边监听信道). 因此使用 CSMA/CD 协议的以太网不可能进行全双工通信而只能进行双向交替通信 (半双工通信).
3.3.3 使用集线器的星型拓补
传统以太网最初使用的是粗同轴电缆, 后来到细同轴电缆, 最后到双绞线. 这种以太网采用星型拓补, 在星型的中心增加了一种可靠性非常高的设备, 叫做集线器.
集线器的特点如下 :
- 从表面上看, 使用集线器的局域网在物理上是一个星形网. 但由于集线器使用电子器件来模拟实际电缆线的工作, 因此整个系统仍像一个传统的以太网那样工作, 也就是说, 使用集线器的以太网在逻辑上仍然是一个总线网, 各站共享逻辑上的总线, 使用的还是 CSMA/CD 协议. 网络中的各占必须对传输媒体的控制, 并且在同一时刻至多允许一个站发送数据.
- 一个集线器有许多接口, 集线器是一个多接口转发器.
- 集线器工作在物理层, 它的每个接口仅仅简单地转发比特. 不进行碰撞见此.
- 集线器采用专门的芯片, 进行自适应串音回波抵消.
- 集线器本身必须可靠, 现在的堆叠式集线器由 4 ~ 8 个集线器堆叠起来使用, 集线器一般有少量容错能力和网络管理功能. 例如, 假定在以太网有一个适配器出故障, 不停发送太网帧, 集线器就可以断开与这个适配器的连接.
3.3.4 以太网的信道利用率
略
3.3.5 以太网的 MAC 层
1. MAC 层的硬件地址
硬件地址 又称为物理地址 或 MAC 地址.
MAC 地址有 48 位, 被固化在适配器的 ROM 中.
MAC 地址的第一字节的最低位为 I/G 位, 当 I/G 为 0 时, 表明一个单个站地址, 当 I/G 为 1 时表示组地址, 用来进行多播 (组播).
MAC 地址的第一字节的最低第二位为 G/L 位, 当 G/L 位为 0 时是全球管理, 为 1 时是本地管理.
当路由器通过适配器连接到局域网时, 适配器上的硬件地址用来标志路由器的某个接口. 路由器如果同时连接到两个网络时, 它就需要两个适配器和两个硬件地址.
适配器有过滤功能. 适配器从网络上每收到一个 MAC 帧就先用硬件检查 MAC 帧中的目的地址, 如果是发往本站的帧就收下, 否者丢弃. 发往本站的帧有以下三种 :
- 单播帧 (一对一), 即收到的帧的 MAC 地址与本站的硬件地址相同.
- 广播帧 (一对全体), 即发送给局域网上所有的站点的帧 (全 1 地址).
- 多播帧 (一对多), 即发送给本局域网上一部分站点的帧.
所有的适配器至少识别前两种, 即单播和广播地址, 有的适配器可用编程方法识别多播地址.
2. MAC 帧的格式
图中假定网络层使用的是 IP 地址.
由五个字段组成. 前两个字段分别以 6 字节长的目的地址和源地址字段. 第三个字段是 2 字节的类型字段, 用来标志上一层使用的是什么协议, 以便把收到的 MAC 帧的数据交给上一层的这个协议. 如果值为 0x0800
时, 就表明上层使用的是 IP 数据报. 第四个字段是数据字段.
以太网中的传输是以帧为单位的 (同步传输), 以太网在传输过程中, 各帧之间必须有一定间隙. 因此, 接收端只要找到帧开始的定界符, 其后面的连续到达的比特流就都同属于一个 MAC 帧. 可见以太网不需要使用帧结束定界符, 也不需要使用帧结束符, 也不需要使用字节插入来保证透明传输.
3.4 扩展的以太网
扩展的以太网在网络层看来仍是一个网络.
3.4.1 在物理层扩展以太网
使用多个集线器, 可以连接成覆盖更大范围的多级星型结构的以太网.
好处 :
- 使这个学院不同系的以太网的计算机能够进行跨系的通信.
- 扩大了以太网覆盖的地理范围.
缺点 :
- 在三个系的以太网互连起来之前, 每一个系的以太网是一个独立的碰撞域, 在连起来后就变成了一个碰撞域, 当某个系的两个站在通信时所传送的数据会通过集线器转发, 使得其他系内部在这时都不能通信.
- 如果不同系使用不同不同的以太网技术, 那就不能用集线器将它们互连起来.
3.4.2 在数据链路层扩展以太网
扩展以太网更常用的方法是在数据链路层进行. 最初人们使用网桥. 网桥对收到的帧根据其 MAC 帧的目的地址进行转发和过滤, 当网桥收到一个帧后, 会根据此帧的目的 MAC 地址, 查找网桥中的地址表, 然后确认将该帧发送到哪一个接口, 或者把它丢弃.
1999 年问世的交换式集线器淘汰了网桥, 后来常被称为交换机.
1. 交换机的特点
以太网交换机的实质是多接口的网桥, 它的每个接口都直接与一个单台主机或另一个以太网交换机相连, 并且一般都工作在全双工方式. 以太网交换机还具有并行性, 即同时连通多对接口, 使多对主机能同时通信 (网桥只能一次分析和转发一个帧). 相互通信的主机都是独占传输媒体, 无碰撞地创数数据.
以太网交换机的接口还有存储器, 能在输出端口繁忙时将到来的帧缓存, 因此, 如果连接在以太网交换机的两台主机, 同时向另一台主机发送帧, 那么当这台主机的接口繁忙时, 发送帧的这两台主机的接口会把收到的帧暂存一下, 以后再发.
以太网交换机是一种即插即用设备, 其内部的帧交换表是通过自学习算法自动建立的.
对于传统的 10 Mbit/s 的共享式以太网, 若有 10 个用户, 则每个用户占有的平均带宽只有 1 Mbit/s . 若使用交换机, 虽然每个接口到主机的带宽还是 10 Mbit/s, 但由于一个用户在通信是独占而不是和其他用户共享传输媒体的带宽, 因此对于 10 个接口的交换机总容量为 100 Mbit/s, 这正是交换机最大的优势.
2. 交换机的自学习功能
略
3. 从总线以太网到星型以太网
总线以太网使用 CSMA/CD 协议, 以半双工方式工作, 但以太网交换机不使用共享总线, 没有碰撞问题, 因此不使用 CSMA/CD 协议, 而是以全双工方式工作. 既然连以太网的重要协议 CSMA/CD 都不是使用了, 为什么还叫以太网呢 ? 因为帧结构没有变, 仍然采用以太网的帧结构.
3.4.3 虚拟以太网
利用以太网交换机可以很方便地实现虚拟局域网 VLAN, 在 IEEE 802.1Q 标准中, 对虚拟局域网 VLAN 这样定义 :
虚拟局域网 VLAN 是由一些局域网网段构成的与物理位置无关的逻辑组, 而这些网端具有某些共同的需求. 每一个 VLAN 的帧都有一个明确的标识符, 指明发送这个帧的计算机属于哪一个 VLAN.
虚拟局域网其实只是局域网给用户提供的一种服务, 而并不是一种新型局域网.
如图, 10 台计算机分配在三个楼层, 并构成了三个局域网.
可以看出, 每一个 VLAN 的计算机可以处在不同局域网中, 也可以不在同一层楼中.
在虚拟局域网上的每个站都可以收到同一个虚拟局域网上其他成员发出的广播, 例如, 计算机 B1 ~ B3 同属于一个虚拟局域网, 当 B1 向工作组内成员发送数据时, 计算机 B2 和 B3 将会收到广播信息, 虽然它们没有和 B1 连在同一个交换机上. 相反 A1, A2, C1 并不会收到广播, 即使它们连在同一个交换机上.
虚拟局域网限制了接受广播信息的计算机数, 使得网络不会因传播过多广播信息 (即广播风暴) 而引起性能恶化.
IEEE 802.1Q 标准定义了以太网的帧格式的扩展, 以便于支持虚拟局域网.
VLAN 标记字段的长度是 4 字节, 它前两个字节总设置为0x8100
, 称为 IEEE 802.1Q 标记类型.
当数据链路层检测到 MAC 帧的源地址字段后面的两个字节的值为0x8100
时, 就知道插入了 4 字节的 VLAN 标记.