目录
简介
本章主要学习"数据链路层 ",数据链路层使用的信道主要有两种类型:
- 点对点信道
- 广播信道
本章最重要的内容是:
- 数据链路层的点对点信道 和广播信道 的特点,以及两种信道所使用的协议(PPP协议 以及CSMA/CD协议)的特点
- 数据链路层的三个基本问题:封装成帧 、透明传输 和差错检测
- 以太网MAC层的硬件地址
- 适配器 、转发器 、集线器 、网桥 、以太网交换机的作用以及适用场合
数据链路层的几个共同问题
数据链路和帧
"链路 "和"数据链路"概念:
- 链路 :从一个节点到相邻节点的一段"物理线路 "(有线 或无线 ),而中间没有任何其它的交换节点。因此链路是一条路径的组成部分
- 数据链路 :在链路的基础上添加实现通信协议的硬件和软件就构成了数据链路
帧的概念:
是"点对点信道 "的数据链路层协议数据单元
数据链路 把网络层交下来的数据构成"帧 "发送到连路上,以及把接收到的"帧 "中的数据取出并上交给网络层 (网络层协议数据单元 是IP数据报/分组/包)
为了方便研究数据链路层协议,我们将网络五层机构抽象成三层结构,如下图所示,只有网络层 、数据链路层 、物理层
但若是只考虑"数据链路层"这一层协议在网络中的传输,则可以抽象成更简单的过程:
三个基本问题
在这里,我们将围绕:"封装成帧 "、"透明传输 "、"差错检测"三个问题,展开讨论
封装成帧
封装成帧就是在一段数据的前后分别添加"首部 "和"尾部 ",这样就构成了一个帧,如下图所示:
首部 和尾部 的一个重要作用就是进行"帧定界 "(即确定帧的界限)
想要提高帧 的传输效率,一个办法是使帧的数据部分长度尽可能大于首部和尾部的长度
但是,每一种链路层协议 都规定了所能传送到的帧 的"数据部分长度上限-----最大传送单元MTU"
帧定界符的概念:
如果数据是由可打印的ASCII码 构成的文本文件,帧定界 可以使用特殊的"帧定界符",下面是一个特殊帧定界符的例子:
注意:"SOH "和"EOT "仅仅是控制字符的名称,并不是帧定界符 "SOH "和"EOT "两个字符串,他们的十六进制编码 分别是:"01 "和"04"
当数据在传输中出现了差错 时,首部(帧开始符 )和尾部(帧结束符)另一个作用就凸显了:
- 假定接收到了一个只包含"帧开始符 "而不包含"帧结束符 "的帧 ,链路层就知道这是一个错误的帧,于是选择丢弃
- 假定接收到了一个包含"帧开始符 "和"帧结束符 "的帧 ,链路层就知道这是一个完整的帧,于是选择保留
透明传输
在数据链路层传输的任何8比特的组合一定不允许和用作帧定界的比特编码一样,否则就会出现帧定界错误(链路层无法分清究竟怎么样才是一个完整的帧)
透明传输 :不管从键盘上输入什么字符都可以放在帧中传输 ,这叫做透明传输(帧的数据部分必须是ASCII码文本)
但当数据部分是非ASCII码文本时 ,如果数据部分中的某个字节的二进制代码恰好和SOH 或EOT 控制字符一样时,就会出现"帧定界错误"
下图中,数据部分出现了"EOT ",从而被链路层认为这是一个完整的帧 从而切割,导致前面部分数据不完整 ,后面部分搜寻不到SOH被丢弃
"透明 "是一个很重要的术语,它表示:"某一个实际存在的事物看来却好像不存在一样"
在"数据链路层透明传送数据"表示无论什么样的比特组合的数据,都能够按照原样毫无差错地通过这个数据链路层
因此,对于传送的数据,这些数据就"看不见 "数据链路层有什么东西妨碍数据传输(即数据链路层对于数据是不可见的)
想要解决透明传输的问题,可以将"数据中可能出现的控制字符 (例如SOH 、EOT 等)"在接收端不被解释为控制字符,为此我们引用"字节填充 (字符填充)"的方法
字节填充 (字符填充 ):发送端的数据链路层在数据中出现控制字符"SOH"、"EOT"的前面插入一个转义字符"ESC",而在接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符
(如果转义字符出现在数据当中,那么会在转义字符前面插入一个转义字符,而接收端则会删掉一个转义字符)
一个例子:
差错检测
现实的通信传输中,数据难免会出现差错,常见的传输差错 是"比特差错"
- 比特差错 :1可能变成0,0可能变成1
- 误码率BER (Bit Error Rate):在一段时间内 ,传输错误的比特占所传输比特总数的比率
因此,在传输中,数据链路层 广泛使用了"循环冗余检验CRC"的检错技术
循环冗余检验CRC的原理:
- 在发送端,把数据划分为组 ,每组"k个比特",假定待传送的数据M = 101001 (k = 6)。CRC运算 在数据M 的后面添加供差错检测用的"n位冗余码",随后构成一个完整的帧发送出去,一共发送"(k + n)"位
- n位冗余码的计算 :用二进制的模二除运算 计算,在数据M 后面添加n个0,得到(k+n )位的数除以长度为(n+1 )为的除数P ,得出商 是Q 而余数是R ,则余数R就是需要添加的冗余码
上述为了进行检错而添加的冗余码 被称为"帧检验序列FCS"
值得注意:
- 循环冗余检验CRC 和帧检验序列FCS并不是同一个概念
- CRC 是一种检验方法,而FCS 是添加在数据后面的冗余码
一个冗余码计算的例子:
在这里,作者补充几点关于模二除法运算的规则:
- 除法式子上下两个数,如果全为1,结果为0
- 除法式子上下两个数,如果全为0,结果为0
- 除法式子上下两个数,如果一个是1另一个是0,结果为1
- 只要被除数最高位是1,那么商一定为1
- 数不够依次借位
作者的计算方法:
还是上面图片中的计算例子,因为过于笼统且不易理解 ,在这里给出一种比较好理解的计算方法:
- 接收端接收到帧之后,将接收到的帧的(k+n )位比特用同样的方法,依次与除数P 进行模二运算 ,如果得到的余数R全是0,则表示没有出错
一种比较方便的方法 可以用"多项式 "来表示"循环冗余检验"过程
在上面的例子,我们就可以用多项式:
表示上面的除数P=1101 (最高位是X的三次方,最低位是X的零次方,这与数乘类似)
多项式P(X) 称为"生成多项式"
现在广泛使用的生成多项式,有下面三种:
除了比特差错 外,还有三种差错:"帧丢失 "、"帧重复 "、"帧失序"
假设发送端发送了三个帧:#1-#2-#3
- 帧丢失 :收到#1-#3(丢失#2)
- 帧重复 :收到#1-#2-#2-#3(#2重复)
- 帧失序 :收到#1-#3-#2(#2-#3顺序错误)
上述三种错误属于:"出现传输差错",数据链路层使用CRC检验,可以避免出现比特差错,但是无法避免出现传输差错
点对点协议PPP
PPP协议的特点
互联网用户通常都要连接到某个ISP才能接入到互联网
PPP协议 就是用户计算机 和ISP 进行通信时使用的数据链路层协议,如下图所示:
PPP协议应满足的需求:
- 简单 :数据链路层的帧,不需要纠错、不需要序号、也不需要流量控制(接收方每接收到一个帧就进行CRC纠错,如果有错,则丢弃这个帧)
- 封装成帧 :PPP协议必须规定特殊的字符作为帧定界符(SOH、EOT)
- 透明性 :PPP协议必须保证数据传输的透明性(PPP需要采取措施避免帧中数据部分存在和帧定界符一样的比特组合)
- 多种网络层协议 :PPP协议必须能够在同一条物理链路上同时支持多种网络层协议
- 多种类型链路:PPP必须能够在多种类型的链路上运行
- 差错检测:PPP协议必须能够对接收到的帧进行检错
- 检测链接状态:PPP协议必须具有一种机制能够及时自动检测出链路是否处于正常状态
- 最大传送单元 :PPP协议必须对每一种类型的点对点链路设置"最大传送单元MTU的标准默认值"
- 网络层地址协议商 :PPP协议必须提供一种机制使通信的两个网络层的实体能够通过协商知道或能够配置彼此的网络层地址
- 数据压缩协商 :PPP协议必须提供一种方法来协商使用数据压缩算法
PPP协议不支持多点线路 (即一个主站轮流和连路上的多个从站进行通信 ),仅支持点对点的链路通信
PPP协议的组成
- 一个将IP数据报封装到串行链路的方法(IP数据报在PPP帧中就是其信息部分),信息部分受最大传送单元MTU的限制
- 一个只用来建立、配置和测试数据链路连接的链路控制协议LCP
- 一套网络控制协议NCP
PPP协议的帧格式
各字段的意义:
PPP帧 的"首部 "和"尾部 "分别为"四个字段 "和"两个字段",如下图所示:
- 首部 的第一个字段和首部 的第二个(从右往左 )字段都是"标志字段F(Flag)",规定为:"0x7E "(十六进制 ),标志字段表示一个帧的开始或结束 ,因此标志字段是PPP帧的定界符 (连续两帧之间只需要用一个标志字段,如果出现连续两个标志字段,就表示这是一个"空帧",应当丢弃)
- 首部 中的地址字段A 规定为:"0xFF"(该字段没有携带PPP帧的信息)
- 首部 中的控制字段C 规定为:"0x33"(该字段没有携带PPP帧的信息)
- 首部 中的第四个字段是2字节的协议字段 :当协议字段为"0x0021 "时,PPP帧的信息字段就是"IP数据报 ",若为"0xC021 ",则PPP帧的信息字段是"PPP链路控制协议LCP的数据 ",若为"0x8021 "表示这是"网络层的控制数据"
- 信息字段的长度是可变的 ,不超过1500字节
- 尾部中的第一个字段 (2字节)是使用CRC的帧检验序列FCS
字节填充:
当信息字段中出现和标志字段一样的比特(0x7E )组合时,就必须采取一些措施使这种形式上和标志字段一样的比特组合不会出现在信息字段中
当PPP使用异步传输时,它把转义符定义为"0x7D ",并使用"字节填充"
"字节填充"方法如下:
- 把信息字段中出现的每一个0x7E 字节转变成为2字节序列(0x7D,0x5E)
- 若信息字段中出现一个0x7D 字节(即出现了和转义字符一样的比特组合),则把0x7D转变成为2字节序列(0x7D,0x5D)
- 若信息字段中出现ASCII码的控制字符(即数值小于0x20的字符 ),则在该字符前面加入一个0x7D字节 ,同时将该字符的编码加以改变
接收端在收到数据后再进行与发送端字节填充相反的变化,就可以正确地会付出原来的信息
零比特填充:
PPP协议同步传输(一连串的比特连续传送 )而不是异步传输(逐个字符地传送 ),在这种情况下,PPP协议采用"零比特填充 "来实现透明传输
"零比特填充"方法如下:
- 在发送端 ,扫描整个信息字段 ,只要发现有5个连续的1 ,则在5个1 后面填入一个0
- 在接收端 ,每发现连续5个的1 ,就把这5个1 后面的一个0删除
PPP协议的工作状态
PPP链路初始化过程如下:
- 用户拨号接入ISP,建立一条从用户个人电脑到ISP的物理连接
- 电脑向ISP发送一系列的链路控制协议LCP分组(封装成多个PPP帧),从而建立LCP连接
- 网络控制协议NCP给新接入的用户电脑分配一个临时的IP地址
- 用户通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址
- LCP释放数据链路层连接
- 最后释放物理层连接
这个过程如下图所示:
- PPP链路的起始和终止状态永远是上图中的"链路静止"状态,这时在电脑和ISP的路由器之间并不存在物理层的连接
- 链路建立状态:建立链路层的LCP连接
- 鉴别状态:该状态下,只允许传送LCP协议分组、鉴别协议的分组以及监测链路质量的分组
- 网络层协议状态:该状态下,PPP链路两端的网络控制协议NCP根据网络层的不同协议和交换网络层特定的网络控制分组
- 链路打开状态:该状态下,练路的两个PPP端点可以彼此向对方发送分组
- 链路终止状态:准备关闭链路
使用广播信道的数据链路层
广播信道可以进行一对多通信
局域网的数据链路层
局域网 的主要的特点是:"网络为一个单位所拥有,且地理范围和站点数目均有限"
局域网的优点:
- 具有广播功能
- 便于系统扩展和逐渐地演变
- 提高系统的可靠性、可用性、生存性
局域网 按网络拓扑进行分类,可分为:"星形网"、"环形网 "、"总线网"
"以太网 "是"局域网 "的同义词
实现共享信道的两种方法:
- 静态划分信道:频分复用、时分复用、波分复用等等
- 动态媒体接入控制:它又称为多点接入 ,其特点是信道并非用户通信时固定分配给用户
- 随机接入:所有用户随机地发送信息
- 受控接入:用户服从一定的控制发送信息
以太网的两个主要标准
IEEE 802委员会将数据链路层 拆成两个子层:"逻辑链路控制LLC"和"媒体接入控制MAC"
- MAC子层 :与接入到传输媒体有关的内容
- LLC子层 :与传输媒体无关
适配器的作用
计算机与外界局域网的连接通过"适配器"
适配器 本来是在主机箱内插入的一块网络接口板,又称为"网卡"
计算机的硬件地址 就在适配器的ROM中
计算机的软件地址 (IP地址 )在计算机的存储器中
CSMA/CD协议
为了通信简便,以太网采取了以下两种措施:
- 采用较为灵活的无连接的工作方式,即不必先建立连接就可以直接放数据。适配器对发送的数据帧不进行编号,也不要求对方发回确认。以太网提供的服务是尽最大努力的交付,即不可靠的交付
- 以太网使用的协议是CSMA/CD ,即"载波监听多点接入/碰撞检测 "。以太网发送的数据都使用曼彻斯特编码的信号
CSMA/CD协议的要点:
- 多点接入:说明这是总线型网络
- 载波监听:边发送数据边监听数据
- 碰撞检测:适配器边发送数据边检测信道上的信号电压的变化情况
使用集线器的星型拓扑
在星形拓扑的中心,增加了一种可靠性非常高的设备,叫作"集线器"
IEEE制定了 "10BASE-T"标准:
- 10 :10Mbit/s的数据率
- BASE :连接线上的信号是基带信号
- T :代表双绞线
集线器的特点:
- 使用集线器的以太网在逻辑上仍然是一个总线网,各站共享逻辑上的总线,使用的还是CSMA/CD协议,并且在同一时刻至多允许一个站发送数据
- 一个集线器有许多端口
- 集线器工作在物理层,它的每个端口仅仅简单地转发比特,不进行碰撞检测
- 集线器采用了专门的芯片
以太网的信道利用率
假定一个10Mbit/s的以太网同时有10个站在工作,那么每一个站所发送数据的平均速率应当是总数据率的1/10(1Mbit/s)
- 成功发送一个帧需要占用信道的时间是T + r
- 要提高以太网的信道利用率,就必须减小r与T之比,在以太网中定义了参数a,它是"单程端到端时延r与帧的发送时间T"之比,当a -> 0时,信道利用率越高
极限信道利用率S为:
以太网的MAC层
MAC层的硬件地址
在局域网 中,硬件地址 又称为物理地址 或MAC地址 (这种地址用在MAC帧中)
IEEE 802标准规定了一种48位的全球地址 (固化在适配器ROM中的地址)
- 假定连接在局域网上的一台计算机的适配器坏了而我们更换了一个新的适配器,那么这台计算机的局域网的"地址"就变了
- 局域网上的某台主机的"地址 "并不指明这台主机位于什么地方,互联网的"地址"应当是每一个站的"名字 "或"标识符"
MAC帧的格式
以太网V2的MAC帧 较为简单,由五个字段组成:
- 前两个字段 分别为6字节长的"目的地址 "和"原地址"
- 第三个字段 是2字节的"类型字段 ",用来标志上一层使用的是什么协议
- 第四个字段是"数据字段"
- 最后一个字段 是4字节的帧检验序列FCS (使用CRC检验)
以下是无效的MAC帧:
- 真的长度不是整数个字节
- 收到的帧检验序列FCS查出有差错
- 收到的帧的MAC客户数据字段的长度不在46 ~ 1500子街之间
扩展的以太网
扩展的以太网仍然是一个网络
在物理层扩展以太网
在物理层扩展以太网使用一对光纤 和一对光纤调制解调器
我们还可以使用多个集线器,连接成更大范围的多级星型结构的以太网:
在数据链路层扩展以太网
在链路层扩展以太网最初使用的是"网桥"
网桥对收到的帧根据其MAC帧的目的地址进行"转发 "和"过滤"
之后,使用"交换式集线器 "(以太网交换机或第二层交换机 )替代了网桥
以太网交换机的特点
以太网交换机实质上就是一个"多端口的网桥 ",一般都工作在"全双工方式"
相互通信的主机 :"独占传输媒体,无碰撞地传输数据"
以太网交换机的自学习功能
一个以太网交换机的例子:
假定A先向B发送一个帧,从端口1进入到交换机,交换机此时查找交换表,发现没有B的地址,就将A的地址写入交换表,并且向出了A以外的所有主机广播发送这个帧
广播发送可以保证B撒厚道这个帧,而C和D收到后,因为目的地址不匹配便将这个帧丢弃,这一个过程也叫作过滤
由于在交换表中写入了"(A,1)",因此以后不管从哪个端口收到帧,只要其目的地址是A,就把帧从端口一转发给A
虚拟局域网(VLAN)
虚拟局域网 (VLAN)的定义:"由一些局域网网段构成的与地理位置无关的逻辑组,这些网段具有某些共同的需求,每一个VLAN帧都有一个明确的标识符,指明发送这个帧的计算机属于哪一个VLAN"
虚拟局域网其实只是局域网:"给用户提供的一种服务,而不是一种新型局域网"
虚拟局域网协议允许在以太网的帧格式中插入一个4字节的标识符,称为"VLAN标签",用来指明发送该帧的计算机属于哪一个虚拟局域网
高速以太网
100BASE-T以太网
100BASE-T (高速以太网)是:
"在双绞线上传送100Mbit/s基带信号的星形拓扑以太网,仍使用IEEE 802.3的CSMA/CD协议"
- 100:代表传输速率为100Mbit/s
- BASE:表示基本带宽
- T:代表双绞线