说明:
数据链路层属于计算机网络的低层,数据链路层使用的信道主要有以下两种类型:
当我们专心研究数据链路层找那个的问题的时候,在许多情况下我们可以只关心在协议栈中水平方向的各数据链路层,于是当主机 H1 向主机 H2 发送数据的时候,我们可以想象数据就是在数据链路层中从左向右沿着水平方法传送的
链路:一个节点到相邻节点的一段物理路线,而中间任何其他的交换节点
数据链路 (data link):除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路
也有人采用另外的术语。这就是把链路分为物理链路和逻辑链路
补充:早起数据通信协议曾经叫做通信规程,所以在数据链路层中,规程和协议是同义语
数据链路层传送的是帧
常常在两个对等的数据链路层之间画出一个数字管道,而在这条数字管道上传输的数据单位是帧
数据链路层不必考虑物理层如何实现比特传输的细节。甚至还可以更简单地设想好像是沿着两个数据链路层之间的水平方向把帧直接发送到对方
数据链路层协议有很多种,但是又三个基本问题是共同的,封装成帧、透明传输、差错控制
封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧
首部和尾部的一个重要作用就是进行帧定界
当数据是由可打印的 ASCII 码组成的文本文件时,帧定界可以使用特殊的帧定界符
控制字符 SOH (Start Of Header) 放在一帧的最前面,表示帧的首部开始。另一个控制字符 EOT (End Of Transmission) 表示帧的结束
ASCII 码是7位编码,一共可以组成128个不同的 ASCII 码,其中可打印的有95个,不可打印的有33个,请注意,SOH 和 EOT 都是控制字符的名称,他们的十六进制编码分别为 01(二进制是 00000001)和 04(00000100)SOH(或 EOT) 并不是 S,O,H (或 E,O,T)三个字符
如果数据中的某个字节的二进制代码恰好和 SOH 或 EOT 一样,数据链路层就会错误地“找到帧的边界”
解决方法:字节填充 (byte stuffing) 或字符填充 (character stuffing)
在传输过程中可能会产生比特差错:1 可能会变成 0, 而 0 也可能变成 1
在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术
在发送端,先把数据划分为组。假定每组 k 个比特
在每组 M(待传送数据) 后面再添加供差错检测用的 n 位冗余码,然后一起发送出去
冗余码如何计算:
举例:
现在 k = 6, M = 101001
设 n = 3, 除数 P = 1101
被除数是 2^nM = 101001000
模 2 运算的结果是:商 Q = 110101,余数 R = 001
把余数 R 作为冗余码添加在数据 M 的后面发送出去。发送的数据是:2nM + R,即:101001001,共 (k + n) 位
接收方如何判定
但这种检测方法并不能确定究竟是哪一个或哪几个比特出现了差错
只要经过严格的挑选,并使用位数足够多的除数 P,那么出现检测不到的差错的概率就很小很小
在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence)
循环冗余检验 CRC 和帧检验序列 FCS 并不等同
注意:
仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受 (accept)
应当明确,“无比特差错”与“无传输差错”是不同的概念
在数据链路层使用 CRC 检验,能够实现无比特差错的传输,但这还不是可靠传输
要做到“无差错传输”(即发送什么就收到什么)就必须再加上确认和重传机制
这一篇中介绍的数据链路层协议都不是可靠传输的协议
对于点对点的链路,目前使用得最广泛的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)
PPP 协议有三个组成部分:
PPP 有一个 2 个字节的协议字段,其值:
将信息字段中出现的每一个 0x7E 字节转变成为 2 字节序列 (0x7D, 0x5E)
若信息字段中出现一个 0x7D 的字节, 则将其转变成为 2 字节序列 (0x7D, 0x5D)
若信息字段中出现 ASCII 码的控制字符(即数值小于 0x20 的字符),则在该字符前面要加入一个 0x7D 字节,同时将该字符的编码加以改变
PPP 协议用在 SONET/SDH 链路时,使用同步传输(一连串的比特连续传送)。这时 PPP 协议采用零比特填充方法来实现透明传输
在发送端,只要发现有 5 个连续 1,则立即填入一个 0
接收端对帧中的比特流进行扫描。每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除
PPP 协议之所以不使用序号和确认机制是出于以下的考虑:
在数据链路层出现差错的概率不大时,使用比较简单的 PPP 协议较为合理
在因特网环境下,PPP 的信息字段放入的数据是 IP 数据报。数据链路层的可靠传输并不能够保证网络层的传输也是可靠的
帧检验序列 FCS 字段可保证无差错接受
当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接
PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧)
这些分组及其响应选择一些 PPP 参数,并进行网络层配置,NCP 给新接入的 PC 机分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机
通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接
可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容
局域网最主要的特点是:
局域网具有如下主要优点:
互联网的拓扑结构:
DIX Ethernet V2 是世界上第一个局域网产品(以太网)的规约
IEEE 802.3 是第一个 IEEE 的以太网标准
为了使数据链路层能更好地适应多种局域网标准,IEEE 802 委员会就将局域网的数据链路层拆成两个子层:
与接入到传输媒体有关的内容都放在 MAC子层,而 LLC 子层则与传输媒体无关
不管采用何种协议的局域网,对 LLC 子层来说都是透明的
网络接口板又称为通信适配器 (adapter) 或网络接口卡 NIC (Network Interface Card),或“网卡”
适配器的重要功能:
最初的以太网是将许多计算机都连接到一根总线上。易于实现广播通信。当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件。
为了实现一对一通信,将接收站的硬件地址写入帧首部中的目的地址字段中。仅当数据帧中的目的地址与适配器的硬件地址一致时,才能接收这个数据帧
总线也有缺点。若多台计算机或多个站点同时发送时,会产生发送碰撞或冲突,导致发送失败。
① 采用较为灵活的无连接的工作方式
② 以太网发送的数据都使用曼彻斯特 (Manchester) 编码
CSMA/CD 含义:载波监听多点接入 / 碰撞检测 (Carrier Sense Multiple Access with Collision Detection) “多点接入”表示许多计算机以多点接入的方式连接在一根总线上
“载波监听”是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞
总线上并没有什么“载波”。因此, “载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号
由于电磁波在总线上的传播速率是有限的,当某个站监听到总线是空闲时,也可能总线并非真正是空闲的
所以需要在发送期间进行碰撞检测,以检测冲突
“碰撞检测”就是计算机边发送数据边检测信道上的信号电压大小。
当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。 当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。
所谓“碰撞”就是发生了冲突。因此“碰撞检测”也称为“冲突检测”
每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送
使用 CSMA/CD 协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信),因为了碰撞了帧就无效了。
当发送数据的站一旦发现发生了碰撞时:
第 (2) 点 CSMA/CD 协议的要点图示补充:
传统以太网最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜和更灵活的双绞线
采用双绞线的以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫做集线器 (hub)
传统以太网使用同轴电缆,采用总线形拓扑结构
使用集线器的双绞线以太网
集线器是使用电子器件来模拟实际电缆线的工作,因此整个系统仍然像一个传统的以太网那样运行
使用集线器的以太网在逻辑上仍是一个总线网,各工作站使用的还是 CSMA/CD 协议,并共享逻辑上的总线
集线器很像一个多接口的转发器,工作在物理层
集线器采用了专门的芯片,进行自适应串音回波抵消,减少了近端串音
多个站在以太网上同时工作就可能会发生碰撞
当发生碰撞时,信道资源实际上是被浪费了。因此,当扣除碰撞所造成的信道损失后,以太网总的信道利用率并不能达到 100%
假设 x 是以太网单程端到端传播时延。则争用期长度为 2x ,即端到端传播时延的两倍。检测到碰撞后不发送干扰信号
设帧长为 L (bit),数据发送速率为 C (bit/s),则帧的发送时间为 T0 = L/C (s)
一个站在发送帧时出现了碰撞。经过一个争用期 2x 后,可能又出现了碰撞。这样经过若干个争用期后,一个站发送成功了。假定发送帧需要的时间是 T0
注意到,成功发送一个帧需要占用信道的时间是 T0 + x ,比这个帧的发送时间要多一个单程端到端时延 x
这是因为当一个站发送完最后一个比特时,这个比特还要在以太网上传播
在最极端的情况下,发送站在传输媒体的一端,而比特在媒体上传输到另一端所需的时间是 x
要提以太网的信道利用率,就必须减小 x 与 T0 之比
在以太网中定义了参数 a ,它是以太网单程端到端时延 x 与帧的发送时间 T0 之比:
说明:本质分子的符号是如图所示,由于编辑器数字公式符号等相对麻烦,所以上面全部使用 x 来代替了
为提高利用率,以太网的参数 a 的值应当尽可能小些
对以太网参数 a 的要求是:
在理想化的情况下,以太网上的各站发送数据都不会产生碰撞(这显然已经不是 CSMA/CD,而是需要使用一种特殊的调度方法),即总线一旦空闲就有某一个站立即发送数据
发送一帧占用线路的时间是 T0 + x ,而帧本身的发送时间是 T0。于是,我们可计算出理想情况下的极限信道利用率 Smax 为:
在局域网中,硬件地址又称为物理地址,或 MAC 地址。 802 标准所说的“地址”严格地讲应当是每一个站的“名字”或标识符。
所有的适配器都至少能够识别前两种帧,即能够识别单播地址和广播地址
以混杂方式 (promiscuous mode) 工作的以太网适配器只要“听到”有帧在以太网上传输就都接收下来
常用的以太网 MAC 帧格式有两种标准:
无效的 MAC 帧
使用光纤扩展
使用集线器扩展:将多个以太网段连成更大的、多级星形结构的以太网
优点
缺点
补充
扩展以太网更常用的方法是在数据链路层进行
早期使用网桥,现在使用以太网交换机
存储转发方式
直通 (cut-through) 方式
总结:
以太网交换机运行自学习算法自动维护交换表
以太网交换机的这种自学习方法使得以太网交换机能够即插即用,不必人工进行配置,因此非常方便。
利用以太网交换机可以很方便地实现虚拟局域网 VLAN (Virtual LAN)
IEEE 802.1Q 对虚拟局域网 VLAN 的定义:
虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网
由于虚拟局域网是用户和网络资源的逻辑组合,因此可按照需要将有关设备和资源非常方便地重新组合,使用户从不同的服务器或数据库中存取所需的资源
虚拟局域网(VLAN)技术具有以下主要优点:
邮箱:ideal_bwh@163.com
如果能帮到你的话,那就来关注我吧!
如果您更喜欢微信文章的阅读方式,可以关注我的公众号
如果您更加喜欢PC端的阅读方式,可以访问我的个人博客
域名:www.ideal-20.cn
在这里的我们素不相识,却都在为了自己的梦而努力 ❤ 一个坚持推送原创开发技术文章的公众号:理想二旬不止