1.数据链路层的三个基本问题
数据链路层的三个基本问题: 封装成帧、透明传输和差错检测
1.1.封装成帧(framing)
封装成帧就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。 接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
由粉组件交换的一个重要概念:所有在互联网上传送的数据都以分组(即IP数据报)为传送单位,网络层的IP数据报传送到数据链路层就成为帧的数据部分。在帧的数据部分的前面后后面分别添加上首部和尾部,构成了一个完整的帧。这样的帧就是数据链路层的数据传送单元。 一个帧的帧长等于帧的数据部分长度加上帧首部和帧尾部的长度。首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限)。此外,首部和尾部还包含许多必要的控制信息。在发送帧时,是从帧首部开始发送的。各种数据链路层协议都对帧首部和帧尾部的格式有明确规定。 显然,为提高帧的传输效率,应当使帧的数据部分长度尽可能地大于首部和尾部的长度。但是,每一种链路层协议都规定了所能传送的数据部分长度上限————最大传送单元MTU(Maximum Transfer Unit)。
帧首部帧尾部作为定界符,首部定界符一般我们叫做SOH(Start Of Header),尾部定界符则为EOT(End Of Transmission).
1.2.透明传输
当传送的帧是用文本文件组成的帧时,其数据部分不会出现SOH以及EOT这样的帧定界控制字符。此时不论从键盘上输入什么字符都能放在帧中传输过去,这样的传输就是透明传输。(传输文本中不包含SOH 以及 EOT 等会使得传输出现错误的定界符)。 为了实现透明传输,必须使SOH 以及 EOT在接收端不被解释为控制字符,具体的方法是: 发送段的数据链路层在数据中出现控制字符 SOH 或 EOT的前面Haru一个转义字符"ESC"。而在接收端的数据链路层这是在把数据送往网络层之前删除这个插入的转义字符。(如果转义字符也出现在数据中心,则解决方法是在转义字符前插入一个转义字符,当接收端收到连续两个转义字符时,删掉前面的一个) 这种方法称为字节填充(byte stuffing)或字符填充(character stuffing).
1.3.差错检测
比特在传输过程中可能产生差错,即1可能变成0,0也可能变成1,这就叫比特差错.比特差错是传输差错中的一种,一段时间内传输错误的比特占传输比特总数的比率称为误码率BER(Bit Error Rate). 误码率与信噪比有很大关系,如果设法提高信噪比,可以使误码率减小。但实际的通信链路并非理想,误码率不可能为0. 因此在计算机网络传输数据时,必须采用各种差错检验措施,如目前在数据链路层广泛使用了循环冗余检验CRC(Cycle Redundancy Check)的检错技术。
1.3.1.循环冗余检验CRC(Cycle Redundancy Check)
在发送端,先把数据划分为组,规定每组k个比特。现假定待传送的数据M=101001(k=6)。CRC运算即在数据M的后面添加供差错检测的n位冗余码,然后构成一帧发送出去,共发送(k+n)位。 这n位冗余码可用以下方法得出: 用二进制的模2运算进行2^n乘M的运算,这相当于在M后面添加n个0,得到的(k+n)位的数除以收发双方事先商定的长度为(n+1)位的除数p,得出商是Q而余数是R(n位,比P少1位)。 例如:M=101001(k=6) 假定除数p=1101(n=3)。经过模2除法可知:商Q=110101(商没有什么用处),余数R=001。这个余数R就作为冗余码拼接在数据M的后面发送出去。这种为了进行检错而添加的冗余码常常称为帧检验序列FCS(Frame Check Sequence).因此加上FCS后发送的帧为101001001(2^n*M+FCS),共(k+n)位。 循环冗余检测CRC和帧检测序列FCS并不是同一个概念。CRC是检错方法,而FCS是添加在数据后的冗余码。
CRC检验: 在接收端把接收到的数据以帧为单位进行CRC检验;把收到的每一个帧都除以同样的除数p(模2运算),然后检验得到的余数R。如果传输过程中无差错,那经过CRC检验的余数R肯定为0. 以上例子为例,发送的帧:被除数101001001,除数P=1101,易知余数R为0;即如果接收端收到的帧为101001001则说明数据传输无误。反之如果接收到的帧与除数P=1101进行模2运算得余数不是0,则说明该帧有差错。
可用多项式P(X)=X3+X2+1表示除数P=1101;(从右往左第n位代表x^n)
1.3.2.FCS计算图
2.点到点协议PPP及其透明传播的实现(同步传输)
点到点PPP协议(Point-to-Point Protocol)是目前使用得最广泛的数据链路层协议。
2.1.PPP协议应满足的需求
IETF认为,在设计PPP协议时必须考虑以下多方面的需求: (1)简单 (2)封装成帧 (3)透明性 (4)多种网络层协议 (5)多种类型链路 (6)差错检测 (7)检测连接状态 (8)最大传送单元 (9)网络层地址协商 (10)数据压缩协商
2.2.PPP协议的组成
PPP协议有三个组成部分: (1)一个将IPP数据报封装到串行链路的方法。PPP既支持异步链路(无奇偶检验的8比特数据),也支持面向比特的同步链路。IP数据报在PPP帧中就是其信息部分。这个信息部分的长度受最大传送单元MTU的限制。 (2)一个用来建立、配置和测试数据链路连接的链路控制协议LCP(Link Control Protocol)。通信的双方可协商一些选项。在RFC 1661中定义了11种类型的LCP分组。 (3)一套网络控制协议NCP(Network Control Protocol),其中的每一个协议支持不同的网络层协议,如IP、OSI的网络层、DECnet和AppleTalk等.
2.3.PPP协议的帧格式
2.3.1.各字段的意义
PPP协议帧格式如图。PPP帧的首部和尾部分别为四个字段和两个字段。 首部的第一个字段和尾部的第二个字段都是标志字段F(Flag),规定为0x7E,标志字段表示一个帧的开始或结束。因此标志字段就是PPP帧的定界符。连续两帧直接只需要用一个标志字段。若连续出现两个标志字段,表示这是一个空帧,应该丢弃。 首部中地址字段A规定为0xFF,控制字段C规定为0x03. PPP首部的第四个字段是2字节的协议字段。当协议字段为0x0021时,PPP帧的信息字段为IP数据报。若为0xC021,则信息字段是PPP链路控制协议LCP的数据,而0x8021表示这是网络层的控制数据。 信息字段长度可变,不超过1500字节。 尾部第一个字段(2字节)为使用CRC的帧检验序列FCS。
2.3.2.字节填充
当信息字段中出现和标志字段一样的比特(0x7E)组合时,需采用一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中。 当PPP使用异步传输时,它把转移字符定义为0x7D,并用字节填充(RFC1662规定):
(1)把信息字段中出现的每一个0x7E字节转变为2字节序列(0x7D,0x5E)
(2)若信息字段中出现0x7D的字节(同转义字符一样的比特组合),则把0X7D转变为2字节序列(0x7D,0x5D)
(3)若信息字段中出现ASCII码的控制字符(数值小于0x20的字符),则在该字符前加入一个0x7D字节,同时将该字符的编码加以改变。如 0x03->(0x7D,0x23)
由于在发送端进行了字节填充,因此在链路上传送的信息字节数就超过了原本的信息字节数。但接收端在收到数据后再进行与发送端字节填充相反的变换,就可以正确地恢复出原来的信息。
2.3.3.零比特填充[其透明传播的实现(同步传输)]
PPP协议用在SONET/SDH链路时,使用同步传输(一连串的比特连续传送)而不是异步传输(逐个字符地传送)。此时PPP协议采用零比特填充方法来实现透明传输。 零比特填充: 在发送端,先扫描整个信息字段。只要发现有5个连续1,即立即填入一个0。因此经过这种零比特填充后的数据,就可以保证信息字段中不会出现6个连续1. 接收端在收到一个帧时,先找到标志字段F以确定一个帧的边界,接着再用硬件对其中的比特流进行扫描。每当发现5个连续1时,就把这5个连续1后面的一个0删除,以还原成原来的信息比特流。 这样就保证了透明传输:在所传送的数据比特流中可以传送任意组合的比特流,而不会引起对帧边界的错误判断。
3.差错检测技术(CRC)
见1.3
4.局域网的拓扑类型、特点等
4.1.局域网的特点
局域网最主要的特点是:网络为一个单位所拥有,且地理范围和站点数目均有限。
局域网具有以下优点:
(1)具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在广域网上的各种硬件和软件资源。
(2)便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变。
(3)提高了系统的可靠性(reliability)、可用性(availability)和生存性(survivability)
4.2.局域网的拓扑类型
局域网可按网络拓扑进行分类: 星形网、环形网、总线网
图例: 星形网:
环形网:
总线网:
4.3.计算机如何连接到局域网
计算机与外界局域网的连接一般是通过适配器(adapter)。适配器本来是在主机箱内插入的一块网络接口板————个人计算机存储器卡接口适配器)。这种接口又称为网络接口卡NIC(Network Interface Card)或简称为网卡,由于现在计算机主板上都已嵌入这种适配器,不再使用单独网卡,因此本书使用适配器这更准确术语。 通信适配器上装有处理器和存储器(含RAM和ROM)。适配器和局域网直接的通信是通过电缆或双绞线以串行运输方式进行的,而适配器和计算机总线的之间的通信这是通过计算机主板上的I/O总线以并行传输方式进行的。因此,适配器的一个重要功能就是进行数据串行传输和并行传输的转换。由于网络上的数据率和计算机总线上的数据率并不相同,因此适配器中必须装有对数据进行缓存的存储芯片。在主板上插入适配器时,还必须把管理该适配器的设备驱动程序安装在计算机的操作系统中。这个驱动程序以后会高数适配器,应从存储器的什么位置把多长的数据块发送到局域网,或应该在存储器的什么位置上把局域网传送过来的数据块存储下来,适配器还要能实现以太网协议。 适配器在接收和发送各种帧时,不适用计算机的CPU。此时计算机中的CPU可以进行其他任务。适配器收到有差错的帧时,就把该帧直接丢弃而不通知计算机。当收到正确帧时,它适用中断来通知该计算机,并交付协议栈中的网络层。当计算机要发送IP数据报时,由协议栈把IP数据报向下交给适配器,组装成帧后发送到局域网。
计算通过适配器和局域网进行连接如图:
5.CSMA/CD协议的工作过程,及争用期、最短帧常等概念和应用
5.1.载波监听多点接入/碰撞检测CSMA/CD(Carrier Sense Multiple Access With Collision Detection)协议
最早的以太网是将许多计算机都连接到一根总线上。 总线的特点为:当一台计算机发送数据时,总线上的所有计算机都能检测到这个数据,这种就是广播通信方式。 而当我们想在总线上实现一对一的通信时,可使每一台计算机的适配器都拥有一个与其他适配器不同的地址。在发送数据帧时,在帧的首部写明接收站的地址。 仅当数据帧中的目的地址与适配器ROM中存放的硬件地址一致时,该适配器才能接收到该数据帧。适配器对不是发送给自己的数据帧就丢弃。这样就在具有广播特性的总线上实现了一对一的通信
为通信简便,以太网采取以下两种措施: (1)采用较灵活的无连接的工作方式,即不必先建立连接就可以直接发送数据。适配器对发送的数据帧不进行编号,也不要求对方发回确认。这样做可以使以太网工作起来非常简单,而局域网信道的质量很好,因通信质量不好产生差错的概率很小。因此以太网提供的服务为尽最大可能的交付,即不可靠的交付。 当目的站收到有差错的数据帧时,把帧丢弃,然后什么也不做。对有差错帧是否需要重传则由高层来决定。如:若高层使用TCP协议,那TCP就会发现丢失一些数据,并在经过一定时间后,TCP把这些数据重新传递给以太网进行重传。但以太网并不知道这是重传帧,而是当做新的数据帧来发送。
我们知道总线上只要有一台计算机在发送数据,总线的传输资源就会被占用。因此同一时间内只允许一台计算机发送数据,否则各计算机之间就会互相干扰,使得所发送数据被破坏。因此,如何协调总线上各计算机的工作就是一台网要解决的一个重要问题。以太网采用最简单的随机接入,但有更好的协议来减少冲突发生的概率。 而以太网采用的协议即为CSMA/CD,意为载波监听多点接入/碰撞检测(Carrier Sense Multiple Access With Collision Detection)
(2)以太网发送的数据都使用曼彻斯特(Manchester)编码的信号: 中间向下为1 中间向上为0
曼彻斯特编码的问题是它所占的频带宽度比原始的基带信号增加了一倍(因为每秒传送的码元数增加了)。
CSMA/CD协议的要点
(1)多点接入:说明此为总线型网络,许多计算机以多点接入的方式连接在一根总线上。协议的实质是 载波监听 和 碰撞检测 (2)载波监听:边发送边监听。载波监听即不管在想要发送数据之前还是在发送数据之中,每个站都必须不停地检测信道。 这是为了检测其他站是否在发送信号来避免冲突,当其他站在发送时本站不能发送数据,这就称为碰撞检测 (3)碰撞检测:适配器变发送数据边检测信道上的信号电压的变化情况,当两个站同时在总线上发送数据时,总线上的信号电压变化幅度将会增大。当适配器检测到的信号电压变化幅度超过一定门限值时,就认为总线上至少欧两个站同时在发送数据,表明出现了碰撞。碰撞就是发生了冲突,因此"碰撞检测"也称"冲突检测"。 任何一个正在发送数据的站一旦发现总线上出现碰撞,其适配器就要立刻停止发送,避免继续进行无效的发送,然后等待一端随机时间后再次发送。
为什么一个站在发送数据前监听到信道空闲,却还是会出现总线上的碰撞? 因为电磁波在总线上以有限速率传播。如站A B相隔1km,用同轴电缆相连,电磁波在1km电缆传播时延约为5μs。因此A传送的数据5μs后才能传送到B,即B若在A发送的数据到达B之前发送自己的数据,则必然会在某时间与A发送的帧发送碰撞。结果是两个帧都变得无用。 局域网的分析中,把总线上端到端的传播延迟记为τ。发送数据的站希望尽早知道是否发生了碰撞,由图易知该时间最多为二倍的总线端到端的传播时延(2τ),或总线的端到端的往返时延。
图解:
t=0: A发送数据 B检测信道为空闲
t=τ-δ: A发送数据未到B,B检测信道空闲,发送数据
t=τ-δ/2: A发送数据与B发送数据发送碰撞,但A B均不知道发送碰撞
t=τ: B检测到发生碰撞,停止发送数据
t=2τ-δ: A检测到发生碰撞,也停止发送数据
A B发送数据均失败,双方推迟一段时间再重新发送
在使用CSMA/CD协议时,一个站不可能同时进行发送和接收(必须边发送边监听信道),因此使用CSMA/CD协议的以太网不太可能全双工通信,而只能进行双向交替通信(半双工通信)。
由图可知,每个站在发送数据后的一小段时间内,存在遭遇碰撞的可能性。这小段时间并不确定。以太网这一特点称为发送的不确定性.若希望以太网发生碰撞的机会很小,必须使整个以太网的平均通信量远小于以太网的最高数据率。
5.2.争用期(以太网的端到端往返时间2τ)
从图中可知A终于在发送数据帧,在发送数据帧后至多经过2τ便可知道发送的数据帧是否遭受碰撞。这是δ=0的情况,因此以太网的端到端往返时间2τ称为争用期(contention period)。争用期又称为碰撞窗口(collision window).如果经过争用期后还没有检测到碰撞,那么才能肯定这次发送不会发生碰撞
5.3.最短帧(64字节 512比特)
当检测到碰撞后,以太网使用截断二进制指数退避(truncated binary exponential backoff)算法来确定碰撞后重传的时机。 即在发生碰撞后不是等待信道空闲而是退避一个随机的时间内再发送数据。 退避算法: 略
某个站发送了一个很短的帧,但发送完毕前并没有检测出碰撞。假定这个帧继续向前传播到底目的站之前和别的站发送的帧发生了碰撞,因此目的站会受到有差错的帧然后将其丢弃,但发送站不知道这个帧发生了碰撞(因为已经发完了),因此不会重传这个帧。为了避免由于帧过短导致的不能检测碰撞的现象,以太网规定了一个最短帧长64字节,即512比特。若发送数据非常少,则必须加入一些填充字节,使其帧长不少于64比特。 因此凡长度小于64字节的帧都是由于冲突而异常终止的无效帧,一旦收到这种无效帧,应立刻将其丢弃。
6.以太网的MAC地址及帧格式中各字段的作用
6.1.MAC地址定义
在局域网中,硬件地址又称为物理地址或MAC地址(因为这种地址用在MAC帧中) IEEE802标准为局域网规定了一种48位的全球地址,这就是局域网上的每一台计算机中固化在适配器中的ROM中的地址,也就是MAC地址。因此MAC地址实际上就是适配器地址或适配器标识符EUI-48。
6.2.MAC帧
适配器有过滤功能,当适配器从网络上收到一个MAC帧时先用硬件检测MAC帧中的地址。发往本站帧则留下,否则丢弃。 发往本站帧有以下三种:
(1)单播(unicast帧(一对一),收到的帧的MAC地址与本机MAC地址相同
(2)广播(broadcast)帧(一对全体),发送给本局域网上所有站点的帧(全1地址)
(3)多播(multicast)帧(一对多),发送给本局域网上一部分站点的帧
6.2.MAC地址帧格式
常用以太网MAC帧格式有两种标准: (1)DOX Ethermet V2标准(以太网V2标准) (2)IEEE的802.3标准
此处介绍用的最多的以太网V2的MAC帧地址。
前两个字段分别为6字节长的目的地址和源地址字段
第三个字段是2字节的类型字段,用来标志上一层用的是什么协议,以便把收到的MAC帧的数据上交给上一层的这个协议
第四个字段是数据字段,长度46-1500字节(46:最小长度64减去18字节的首部和尾部)
最后一个字段是4字节的帧检测序列FCS(使用CRC检验) FCS检验范围是整个的MAC帧:从目的地开始到FCS未知的这5个字段,但不包含物理层插入的8字段的前同码和帧开始定界符。
V2帧获取帧长度:
MAC帧采用曼彻斯特编码,其特点是每一个码元的正中间必定欧一次电压的转换,因此当发送放网络适配器的接口上的电压不再变化时,接收方能确定以太网帧的结束位置,该位置向前4字节即为数据字段的结束位置。
当数据字段长度小于46字节时,MAC子层会在数据字段后面加入一个整数字节的填充字段以保证以太网的MAC帧长不低于64字节。 如何确定有没有填充字段: IP数据报的"总长度"是否小于46字节?
小于:有填充字段 若总长度42 则填充字段为4字节 然后MAC帧将这46字段数据上交给IP层时,IP层会将最后4字节的填充字段丢弃。
不小于:无填充字段
由图可知传输媒体上实际还传输了8个字节的数据,这是因为当一个站在刚开始接收MAC帧时,由于适配器的时钟尚未与到达的比特流达成同步,因而MAC帧的最前端的若干位无法接收,使得整个的MAC成为无用的帧。为了接收端迅速实现位同步,从MAC子层向下传送到物理层时,还要在帧的前面插入8个字节(硬件生成). 这8个字节由两个字段构成:
第一个字段:7字节的前同步码(1和0交替码),用于使接收端的适配器在接收MAC帧时能迅速调整其时钟频率,使它和发送端的时钟同步,即"实现位同步"。
第二个字段:帧开始定界符,定义为10101011。前六位的作用和同步码一样,最后两个连续的1是告诉接收端适配器"MAC帧的信息马上就要来了,请适配器注意接收"。
MAC帧的FCS字段的检验范围不包括前同步码和帧开始定界符。
注意: 在以太网上传送数据时以帧为单位进行传送。以太网在传送帧时,各帧间须有一定间隙。因此接收端只要找到帧开始定界符,其后面的连续到达的比特流就属于同一个MAC帧。可见以太网不需要使用帧结束定界符,也不需要使用字节插入来保证透明传输。
|