3.3 使用广播信道的数据链路层
3.3.1 局域网的数据链路层
广播通信可以进行一对多的通信,下面讨论的局域网使用的就是广播信道,局域网技术在计算机网络中占有非常重要的地位。
局域网最主要的特点是:网络为一个单位所拥有,且地理范围和站点数目均有限。
局域网的特点:
具有广播功能,从一个站点可以很方便的访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
便于系统的扩展和逐渐演变、各设备的位置可灵活调整和改变
提高了系统的可靠性(reliability)、可用性(availability)和生存性(survivability)
局域网可以按网络拓扑进行分类:
星形网:由于集线器的出现和双绞线,所以星型网的结构的以太网使用的比较广发
环形网:
总线网:各站连在总线上,总线两端的匹配电阻吸收在总线上传播的电磁波信号能量,避免在总线上产生有害的电磁波反射。总线网以传统以太网最为著名。
局域网发展几十年以太网已经在局域网市场占据了绝对的优势,现在以太网几乎成为了局域网的同义词,因此以下都是讨论以太网技术。局域网可使用多种传输媒体,双绞线最便宜。双绞线已经成为局域网中的主流传输媒体。当数据率很高时,往往需要使用光纤作为传输媒体。
必须指出,局域网工作的层次跨越了数据链路层和物理层。由于局域网技术中有关数据链路层的内容比较丰富,因此我们就把局域网的内容放在数据链路层这里讨论,但是这并不代表局域网仅仅与数据链路层相关。
共享信道:
共享信道要着重考虑的一个问题就是如何使众多用户能够合理而方便地共享通信媒体资源,有两种办法:
1.静态划分信道:如第二章的2.4节中介绍过的频分复用、时分复用、波分复用和码分复用等。User只有分配到了信道就不会和其他用户发生冲突。但是这种划分信道的方法代价较高,不适合于局域网使用。
2.动态媒体接入控制,又叫多点接入(multiple access),特点是信道并非在User通信时固定分配给User,通常分为两类:
随机接入:所有的User可以随机发送信息。如果有两个或以上的User同时发送信息,就要产生碰撞,使得User的发送都失败。因此,必须解决碰撞的网络协议。
受控接入:User不能随机发送信息必须服从一定的控制。这类的典型代表有分散控制的令牌环局域网和集中控制的多点线路探寻(polling),或称为轮询。
属于随机接入的以太网会重点讨论。受控接入由于目前在局域网中使用较少,将不再讨论。
由于以太网的数据率已演进到很高了,因此通常用“传统以太网”来表示最早流行的10Mbit/s速率的以太网。
拆分数据链路层:
原因:
因为没能达成统一,最佳的局域网标准,而又为了使数据链路层更好的适应多种标准,就把数据链路层拆成了两个子层。
局域网的两个标准:
1.1983年,IEEE802委员会的802.3工作组,制定了第一个IEEE的以太网标准IEEE802.3[W-IEEE802.3],数据率为10Mbit/s。
2.802.3局域网对以太网标准中的帧格式做了一点小改动,但允许这两中标准的硬件可以在同一个局域网上互相操作。以太网的两个标准DIX Ethenet V2和IEEE的802.3标准差别很小。
把数据链路层拆成两个子层:逻辑链路控制LLC(Logical Link Control)子层和媒体接入控制MAC(Medium Access Control)子层。于接入到传输媒体有关的都放在MAC,而LLC与传输媒体无关。不管什么传输媒体和MAC子层的局域网对LLC来说都是透明的。
而在更新后对于很多厂商都只有MAC无LLC了,所以就不再考虑LLC了。
适配器的作用:
首先了解一下计算机是如何连接到局域网的,计算机与外界局域网的连接是通过通信适配器(adapter)运行的。适配器本来是在主机箱内插入一块网络接口板(或者是在笔记本电脑中插入一块PCMCIA卡-个人计算机存储器卡接口适配器)。这种接口板又称为网络接口卡NIC(Network Interface Card)或简称为“网卡”。因为现在的计算机主板上都嵌入了这种适配器,不再用单独的网卡,所以用适配器更准确。在这种通信适配器上面装有处理器和存储器(包括RAM和ROM)。适配器和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的,而适配器和计算机直接通信是通过计算机主板上的I/O总线以并行传输方式进行的。因此,适配器的一个重要功能就是要进行数据串行传输和并行传输的转换。由于网络上的数据率和计算机总线上的数据率并不相同,因此在适配器中必须装有对数据进行缓存的存储芯片。在主板上插入适配器时,还必须把管理该适配器的设备驱动程序安装在计算机的操作系统中。这个驱动程序以后就会告诉适配器,应当从存储器的什么位置上把多长的数据库发送到局域网,或者应当在存储器的什么位置上把局域网传送过来的数据块存储下来。适配器还需要能够实现以太网协议。
适配器实现的功能包含了物理链路层和物理层。
适配器在接受和发送各种帧的时候,不使用计算机的CPU。这时计算机的CPU可以处理其他任务,当适配器收到错误的帧的时候,就会直接把这个帧丢掉且不通知计算机,而收到正确的帧的时候,适配器就会用中断来通知计算机,并交付协议栈中的网络层。当计算机要发送IP数据,就由协议栈把IP数据交给适配器,然后适配器组长成帧再发送到互联网。
*
计算机的硬件地址在适配器的ROM中,而计算机的软件地址-IP地址,在计算机的存储器中。
3.3.2 CSMA/CD协议
总线的特点:当一台计算机发送数据时,总线上的所有计算机都能检测到这个数据,这就是广播通信方式。
但是为了在局域网上实现一对一通信,可以使每一台计算机的适配器拥有一个其他适配器都不同的地址。在发送数据帧时,在帧的首部写明接收站的地址。仅当数据帧的目的地址与适配器ROM中存放的硬件地址一致时,适配器才能接受到这个数据帧。
为了通信的方便,以太网采取了两种措施:
1.采用无连接工作方式,也就是不用先建立连接就可以直接发送数据,适配器对发送的数据帧不进行编号,也不要求对方发回确认。当目的站收到有差错的数据帧时,就把帧丢掉。对有差错的数据帧是否需要重传则由高层来觉得。例如:高层用TCP发现数据丢失,决定重新传递给以太网重传,但是以太网并不知道,而是当做新的数据帧来发送。
当总线上有一台计算机发送数据时,总线的传输资源就会被占用,所以在同一时间只能允许一台计算机发送数据,否则计算机就会互相干扰,导致数据被破坏。以太网采用最简单的随机接入来减少冲突的发生,但是同时也采取了协议来协调。这个协议就是CSMA/CD,意思是载波监听多点接入/碰撞检测(当有人在传输的时候必须等传输完了传输,当多个同时传输的时候需要立即停止等到没人传输了再传输)
2.以太网发送的数据都使用曼切斯特(Manchester)编码的信号。
CSMA/CD协议的要点:
多点接入:说明是总线型网络,许多计算机以多点接入的方式连接在一根总线上。
载波监听: 用电子技术检测总线上有无其他计算机在发送。载波并不存在,只是借用名词。载波监听就是检测信道,不管在发送前还是发送中,每个站都必须不停地检测信道。在发送中检测是为了及时发现有没有其他站的发送与自己的碰撞,这就叫碰撞检测
碰撞检测:也就是边发送边监听,也就是配置器边发送数据边检测信道上的信号电压变化情况,以便判断自己在发送数据的时候其他站是否在发送数据。当几个站同时在总线上发送数据时,总线上的信号电压变化幅度将会增大。当适配器检测到的信号电压变化幅度超过一定值,就认为总线上至少有两个站同时在发送数据,表明发生了碰撞。也可以称为冲突检测。这时总线上传输的信号产生了失真,无法从中恢复出有用的信息。因此,任何一个正在发送数据的站,一旦发现出了碰撞,其适配器就要立即停止发送,免得继续进行无效的发送。
每个站在发送数据之前已经监听到信道为“空闲”,但是由于电磁波在总线上总是以有限的速率传播还是会出现数据在总线上碰撞。电磁波在1KM电缆的传播时延为5us。
在局域网的分析中,常把总线上的单程端到端传播时延记
发送数据的站希望尽早知道是否发生了碰撞。最迟要经过的时间最多是两倍的总线端到端的传播时延2倍
,或总线的端到端往返传播时延。
显然,在使用CSMA/CD协议时,一个站不可能同时进行发送和接收(但必须边发送边监听信道)。因此使用CSMA/CD协议的以太网不可能进行全双工通信而只能进行双向交替通信(半双工通信)
所以,每个站在自己发送数据的一段时间后,存在者遭遇碰撞的可能性。这一段时间是不确定的,取决于发送数据端到端的距离。因此,以太网不能保证某一时间之内一定能成功发自己的数据帧。这一特点称为发送的不确定性。
发送数据帧后至多2就可知道发送的数据帧是否遭受了碰撞。因此以太网的端到端往返时间2称为争用期(contention period),争用期又称为碰撞窗口(collision window)。经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会产生碰撞可以放心发送。
以太网使用截断二进制指数退避(truncated binary exponential backoff)算法来确定碰撞后重传的时机。截断二进制退避算法并不复杂。这种算法让发生碰撞的站在停止发送数据后,不是等待信道变为空闲后就立即再发送数据,而是推迟一个随机的时间。具体的退避算法如下:
1.协议规定了基本退避时间为争用期2,具体的争用期时间是51.2us。对于10M/bits以太网,争用期内可发送512bit。也可以说争用期是512比特时间。1比特时间就是发送1比特需要的时间。为了方便可以直接使用比特作为争用期的单位。
2.
3.当重传达16次依然不能成功时,丢弃该帧,并向高层报告。
若连续多次发生冲突,就表明可能有较多的站参与争用信道。但退避算法可使重传需要推迟的平均时间随重传次数而增大,因此减小发送碰撞的概念,有利于系统的稳定。
但是适配器每发送一个新的帧,就需要执行一次CSMA/CD算法。适配器对过去碰撞并无记忆功能,当几个适配器都在执行退避算法时,可能有推迟了很久的站缺继续执行退避算法,继续等待。
当发送的帧非常短,假设发送的时候产生了碰撞,那么就是有差错的帧就会丢弃,但是发送站却不会知道,因此为了避免这种情况,以太网规定最短的帧为64字节长也就是512bit。如果要发送的数据非常少,那么就必须加入一些填充字节,使帧长不小于64字节。
由此可见,以太网在发送数据时,如果在争用期没有发生碰撞,那么后续发送的数据不会产生冲突,也就是说发生碰撞一定是在发送前的64字节内,一检测到冲突就立即终止发送,这时发送的数据小于64字节,因此但凡是小于64字节的帧由于冲突而异常停止的无效帧,就会立即丢弃。
信号在以太网传播1km大约需要5us,以太网最大的端到端的时延必须小于争用期的一半(25.6us)相当于最大端到端长度约为5km。但是实际上以太网的范围没这么大,因此使用的以太网都能争取在51.2us内检测到可能发生的碰撞。争用期这么长是因为不仅考虑到端到端的时延,还包括了其他的因素。
强化碰撞:
当发送数据的站一旦发现发生了碰撞时,除了停止发送外,还需要再继续发送32或48bit的人为干扰信号让其他User都知道发生了碰撞。对于10Mbit/s以太网发送32(或48)bit只需要3.2(或4.8)us
以太网还规定了帧间最小间隔为9.6us,相当于96bit时间,这样是为了使刚收到数据帧的站的接受缓存清理,为接受下一帧的准备。
归纳CSMA/CD协议要点:
1.准备发送:适配器从网络层获得一个分组,加上以太网的首部和尾部组成以太帧,放到适配器的缓存中,在发送前必须先检测信道
2.检测信道:若检测到信道忙则继续一直检测,直到信道空闲,并且保存96比特时间内信道保持空闲(保证帧最小间隔),就发送这个帧
3.在发送过程中依然不停检测信道,既网络适配器边发送边监听。有两种可能发生:
First.发送成功。然后回到1
Second:发送失败:在争用期检测到碰撞。停止发送,按规定发送人为干扰信号,适配器执行指数退避算法,等待r倍512比特时间后,返回步骤2,继续检测信道再步骤3,如果重传达16次不成功就停止重传向上汇报。
以太网每发送完一帧,就需要把已发送的帧暂时保留,如果争用期检测出碰撞,那么还要推迟一段时间后,把这个帧重新传输一次。
3.3.3 使用集线器的星型拓扑
传统以太网最初是使用粗同轴电缆,演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜灵活的双绞线。这种以太网采用星型拓扑,在星型的中心增加了一种可靠性非常高的设备叫做集线器(hub)。双绞线以太网总是和集线器配合使用。每个站需要两队无屏蔽双绞线分别用于发送和接受。双绞线的两端使用RJ-45插头,集线器使用大规模集成电路芯片,因此可靠性大大提高。
使双绞线能够传送高速数据的主要措施是把双绞线的绞合度做得非常精确。这样不仅可使特性阻抗均匀减少失真,且大大减少了电磁波辐射和无线电频率的干扰。在多对双绞线的电缆中,还要使用更加复杂的绞合方式。
集线器的特点:
1.使用集线器的局域网在物理上是一个星型网,但是集线器使用电子器件模拟实际电缆线工作,因此整个系统像传统以太网运行。也就是说使用集线器的以太网在逻辑上依旧是一个总线为,还是使用的CSMA/CD协议。在同一时刻至多只允许一个站发送数据。
2.一个集线器有许多接口,每个接口通过RJ-45接头用两对双绞线与一台计算机的适配器相连,因此一个集线器就像是一个多接口的转发器。
3.集线器工作在物理层。它的每个接口仅简单转发比特,不进行碰撞检测。如果碰撞检测则都收不到正确的帧。
4.集线器采用了专门芯片,进行自适应串音回波抵消,使接口转发出去的较强信号不对该接口接受到的较弱信号产生干扰。
集线器本身必须非常可靠,现在的堆叠式集线器由4-8个集线器堆叠使用。集线器一般都有少量的容错能力和网络管理功能。
3.3.4 以太网的信道利用率
成功发送一个帧需要占用信道的时间是
,比帧发送时间要多一个单程端到端的时延。
要提高以太网的信道利用率,必须减小与To之比。在以太网中定义了参数a,a=/To。
当a->0时,表示发生碰撞会立即检测出来,因此信道资源烂费的比较少,反之如果参数a越大,表明争用期所占有比例越大,使得信道利用率降低。因此以太网的参数a应该尽可能的小。为了使利用率提高则表明应该尽可能的小,所以以太网的连线长度受到限制,同时帧长不能太长不然To会变大。
假定以太网上发送数据都不会产生碰撞,并且能够高效利用网络的传输资源。也就是一空闲就传输数据。这样发送一帧的时间就是To+而帧本身发送的时间是To,那么可以求出极限利用率Smax:
这个公式的意义表明,虽然实际的以太网不可能这么高利用率,但是只有当参数a远小于1才能够极可能高的极限信道利用率。反之如果a远大于1就会浪费较多的传输数据的时间
3.3.5 以太网的MAC层
在局域网中,硬件地址又叫物理地址或MAC地址(因为这种地址用在MAC帧中)
所有的计算机系统中,标识系统是一个核心,标识系统中,地址就是识别某个系统的一个非常重要的标识符。
在IEEE 802标准为局域网规定了一种48位的全球地址(简称为地址)指局域网上的每一台计算机中固化在适配器的ROM中的地址。因此:
1.如果更换了适配器那么,这太计算机的局域网地址就改变了
2.计算机更换了地理位置,但是适配器不变那么在局域网中的地址就不会改变。
所以局域网中的地址,只是对于适配器的一个标识符,并不是地理位置。
如果有多个适配器那么就有多个地址。
在指定局域网的地址标准时,为了使User在配置了适配器就可以使用后IEEE 802标准规定MAC地址子弹可采用6字节(48
位)或2字节(16位)两种中的一种。由于6字节的地址可使全世界的局域网适配器都有不同的地址,所以采用的局域网适配器都是使用的6字节的MAC地址。
IEEE的注册管理机构RA负责分配地址字段6字节中的前三个字节(也就是高位24位)。生产适配器的厂家都必须购买这三个字节构成的这个号。这个号正式名称是组织唯一标识符OUS,通常也叫公司标识符。地址字段的后三个字节由厂家自己安排,也称为扩展标识符。用这种方式得到的48位地址称为EUI-48这里的EUI表示扩展的唯一标识符。EUI适用范围不局限于局域网硬件,也可以用于软件接口。
这种6字节的MAC地址被固话在适配器的ROM中,因此MAC地址也叫硬件地址或物理地址。MAC地址就是适配器地址或适配器标识符EUI-48。适配器插入计算机后,就是这台计算机的MAC地址了。
IEEE规定,地址字段的第一字节的最低位为I/G位,I/G表示individual/Group。
当I/G位为0时,地址字段表示一个单个站地址。
为1时,表示组地址用来进行多播
因此IEEE只分配字段前三个字节中的23位。当I/G位分别为0和1时,一个地址块可分别生成2的24次方个单个站地址和2的24次方个组地址。IEEE对高低位地址的记法是最左边的最低位是第一维
同样,IEEE把最低第二位规定为G/L位,global/local。当G/L为0时是全球管理,向IEEE买的都是global,当G/L为1时是本地的自己随便用。
MAC帧的格式:
常用的以太网MAC帧格式有两种标准,一种是DIX Ethernet V2(也就是以太网V2),另一种是IEEE的802.3标准。用的最多的是以太网V2的MAC帧格式。
假定网络层使用的是IP协议(其他协议也可以)
以太网V2的MAC帧由五个字段组成:
前面两个字段分别为6字节长的目的地址和源地址。
第三个字段是2字节的类型字段,用来标记上一层使用的协议以便把收到的MAC帧的数据上交给上一层的协议。
第四个字段是数据字段:长度在46-1500字节中(46字节是由最小字节64减去18字节的首部和尾部得出的数据字段最小长度)
最后一个字段是4字节的帧检验序列FCS(使用CRC检验)。当传输媒体的误码率为1x10(-8)时,MAC子层可使未检测到的差错小于1x10(-14)。
在以太网V2的MAC帧格式中,首部没有一个帧长度,MAC子层通过接受曼切斯特编码判断出以太网帧的结束位置,然后往前数四个字节来确定数据字段的结束为止。
当数据字段的长度小于46字节时,MAC子层就会在数据字段后面填充证书字节字段来确保以太网的MAC帧长不小于64字节。需要注意MAC帧的首部并没有指出数据字段的长度那么上一层如何识别填充字段长度。上层必须有意思判断填充字段的长度。
从图3.2.2可以看到,实际传输的地址比MAC地址要多8个字节,因为在刚开始接受MAC帧时,由于适配器的时钟没有与比特率同步,因此最前面的MAC就无法接受。为了同步从MAC子层向下传到物理层的时候还要在帧前面插入8个字节。这八个字节由两个字段构成:
第一个字段是7个字节的前同步码(1和0交替码)用阿里使接收端的适配器在接受MAC帧时迅速调整时钟频率,和发送端的时钟同步。
第二个字段是帧开始定界符,定义为10101011,前六位和前同步码一样,最后两位告诉接收端适配器:MAC帧来了注意接受。MAC帧的FCS字段的检验范围不包括这两个字段。
在使用SONET/SDH进行同步传输的时候不需要前同步码,因为在同步传输时双方的同步总是保持着。
以太网传送数据是以帧为单位,各帧之间有间隙,只要接受到帧开始定界符,后面连续到达的比特流就是同一个帧,不需要使用帧结束定界符,也不用字节插入来保证透明传输。
IEEE 802.3标准规定无效MAC帧的情况
1.帧的长度不是整数字节
2.FCS有错
3.收到的MAC数据字段不在46-1500之间。MAC帧首部和尾部那么MAC帧长度不在64-1518之间。
对于有问题的直接就丢弃,不负责重传。
IEEE 802.3与以太网V2 MAC帧格式的区别:
1.IEEE 802.3规定的MAC帧的第三个字段是“长度/类型”这个字段大于0x0600(十进制的1536)表示类型这就和以太网V2一样。当字段值小于0x0600时表示长度,也就是MAC帧的数据部分长度。
2.当“长度/类型”字段值小于0x0600时,数据字段必须装入上面的逻辑链路控制LLC子层的LLC帧。
由于广泛使用的局域网就是以太网,所以LLC帧已经失去了意义。都流行以太网V2的MAC帧,但大家也常常称为IEEE 802.3标准的MAC帧