数据链路层
大纲要求
(一)数据链路层的功能
(二)组帧
(三)差错控制
- 检错编码
- 纠错编码
(四)流量控制与可靠传输机制
-
流量控制、可靠传输与滑动窗口机制
-
停止-等待协议
-
后退N帧(GBN)协议
-
选择重传(SR)协议
(五)介质访问控制
-
信道划分介质访问控制
频分多路复用、时分多路复用、波分多路复用、码分多路复用的概念和基本原理 -
随机访问介质访问控制
ALOHA协议、CSMA协议、CSMA/CD 协议、CSMACA 协议 -
轮询访问介质访问控制∶令牌传递协议
(六)局域网
- 局域网的基本概念与体系结构
- 以太网与IEE802.3
- IEEE 802.1
- 令牌环网的基本原理
(七)广域网
-
广域网的基本概念
-
PPP
-
HDLC协议
(八)数据链路层设备
-
网桥的概念和基本原理
-
局域网交换机及其工作原理
核心考点
- (★★★★★)流量控制与可靠传输机制、CSMA/CD原理,特别是争用期和截断二进制指数退避算法
- (★★★★)网桥的概念和基本原理
- (★★)组帧机制和差错控制机制,特别是循环冗余码和海明码需重点掌握
- (★★★★)以太网的MAC 帧格式
数据链路层的功能
数据链路层在物理层所提供服务的基础上向网络层提供服务,即将原始的、有差错的物理线路改进成逻辑上无差错的数据链路,从而向网络层提供高质量的服务。它一般包括3种基本服务∶无确认的无连接服务、有确认的无连接服务和有确认的有连接服务(记忆方式∶有连接就一定要有确认,因为对方主机必须确认才可建立连接,即不存在无确认的有连接服务)。至于以上3种服务的详细讲解可参考第1章的1.2.4小节。
具体地说,数据链路层的主要功能如下。
- 链路管理∶负责数据链路的建立、维持和释放,主要用于面向连接的服务。
- 帧同步∶接收方确定收到的比特流中一帧的开始位置与结束位置。
- 差错控制∶用于使接收方确定接收到的数据就是由发送方发送的数据。
- 透明传输∶假设在图 3-1中的透明传输区间里出现了011110这样的比特组合,也就是与帧定界符相同,岂不是会被误认为是传输结束而丢弃后面的数据?显然,这样的情况是绝对不允许发生的,于是就发明了透明传输来解决此问题。其实,透明传输就是不管数据是什么样的比特组合,都应当能在链路上传送。本章后面还会对透明传输用图文并茂的形式进行详细解释,此处了解即可。
补充知识点∶帧定界。
解析∶当两个主机互相传送信息时,网络层的分组必须将封装成帧,并以帧的格式进行传送。将一段数据的前后分别添加首部和尾部,就构成了帧。首部和尾部中含有很多控制信息,这些信息的重要作用之一是确定帧的界限,即帧定界。例如,在HDLC协议中的帧格式使用标志F(01110)来标识帧的开始和结束,如图3-1所示(有关HDLC协议在本章3.7.3小节会有详细讲解)。
可能疑问点∶在近两年的答疑过程中,编者发现大部分考生存在着一些共同的矛盾问题,也正因为这些问题导致考生复习完数据链路层后总是处在矛盾之中,于是在论坛频繁出现下面这个问题。
常见问题一∶旧版的《计算机网络》教材认为数据链路层的任务是在两个相邻节点之间的线路上无差错地传送以帧(Frame)为单位的数据。数据链路层可以把一条有可能出差错的实际链路,转变为让网络层向下看起来好像是一条不出差错的链路。但《计算机网络》(第5 版)中对数据链路层的提法改变了∶数据链路层的传输不能让网络层向下看起来好像是一条不出差错的链路。到底哪种说法是正确的?
解析∶首先需要回到第1章讲解的OSI体系结构和TCP/IP体系结构。旧版的《计算机网络》教材对数据链路层的阐述都是基于OSI体系结构的,OSI体系结构的数据链路层采用的是面向连接的HDLC协议(后面讲),它提供可靠传输的服务。因此,旧版的《计算机网络》教材的提法对OSI体系结构是正确的,也就是说,以前确实是数据链路层向网络层提供了一条不出差错的链路。
2003年以后出的新版《计算机网络》教材更加突出了TCP/IP体系结构。现在互联网的数据链路层协议使用得最多的就是PPP和CSMA/CD协议(这种情况就是使用拨号入网或使用以太网入网)。这两种协议都不使用序号和确认机制,因此也就不能"让网络层向下看起来好像是一条不出差错的链路。"
因此,新版的《计算机网络》教材的提法符合当前计算机网络的现状。当接收端通过差错检测发现帧在传输中出了差错后,或者默默丢弃而不进行任何其他处理(当使用 PPP 或CSMA/CD 协议时),这是现在的大多数情况;或者使用重传机制要求发送方重传(当使用HDLC协议时),但这种情况现在很少使用。如果需要可靠传输,那么就由高层的TCP(后面讲)负责重传。但数据链路层并不知道这是重传的帧,所以还是默认可靠传输由传输层的TCP 负责,而不是数据链路层。
但是很多同学就可能会问,当数据链路层使用PPP或CSMA/CD协议时,既然不保证可靠传输,那么为什么对所传输的帧进行差错检验呢?这不是多此一举吗?
其实不是这样的。当数据链路层使用PPP或 CSMA/CD协议时,在数据链路层的接收端对所传输的帧进行差错检验是为了不将已经发现了有差错的帧(不管是什么原因造成的)收下来。如果在接收端不进行差错检验,那么接收端上交给主机的帧就可能包括在传输中出了差错的帧,而这样的帧对接收端主机是没有用处的。换言之,接收端进行差错检验的目的是保证"上交主机的帧都是没有传输差错的,有差错的都已经丢弃了(丢弃的不重传,所以不可靠)"。或者更加严格地说,应当是"我们以很接近于1的概率认为,凡是上交主机的帧都是没有传输差错的"。
常见问题二∶数据链路层有流量控制吗?
解析∶数据链路层到底有没有流量控制,不能一概而论,而需要看讨论的前提。在 OSI 体系结构中,数据链路层肯定有流量控制,而在TCP/IP体系结构中,数据链路层的流量控制被移到了传输层,那么就没有必要再在数据链路层设置流量控制了。
在谢希仁的《计算机网络》第7版中,已经将流量控制放到了传输层进行讲解,但是由于考研中考试大纲仍然将这部分内容放到了数据链路层,且在数据链路层进行流量控制讲解,有助于考生理解滑动窗口机制,故我们仍然把这部分知识点放在这一章。
组帧
为什么要组帧?直接传送比特流不就可以了,还免去了帧同步、帧定界、透明传输等问题。
但是反过来思考,万一传送比特流出错了呢?那就得重传全部的比特流。
而组帧的优点是,如果出错了,只需发送出错的帧即可,这相对于增加了帧同步、帧定界、透明传输问题是值得的。
组帧也不能随意组合,要让接收方看得懂才可以,所以就需要依据一定的规则将网络层递交下来的分组组装成帧。通常情况下,只需掌握以下4种组帧方法。
4种组帧方法包括字符计数法、字节填充的首尾界符法、比特填充的首尾标志法、物理编码违例法。
可能疑问点∶为什么组帧的时候既要加首部,又要加尾部?而报文切割成分组只加首部?
解析∶因为在网络中是以帧为最小单位进行传输的,所以接收端要正确地收到帧,必须要清楚该帧在一串比特流中是从哪里开始到哪里结束的(因为接收端收到的是一串比特流,没有首部和尾部是不能正确区分帧的)。而分组(也称为IP数据报)仅仅是包含在帧的数据部分(后面将详细讲解),所以不需要加尾部来定界。
字符计数法
字符计数法是用一个特殊的字符来表示一帧的开始,然后用一个计数字段来表明该帧包含的字节数。当目的主机接收到该帧时,根据此字段提供的字节数,便可知道该帧的结束位和下一帧的开始位,如图3-2所示。
注意∶从图3-2中可以看出,计数字段提供的字节数包含自身所占的一个字节。字符计数法存在的问题∶如果计数字段在传输中出现差错,接收方就无法判断所传输帧的结束位,当然也无法知道下一帧的开始位,这样就无法帧同步了。由于此原因,字符计数法很少被使用。
字节填充的首尾界符法
其实可以将其拆开理解,首先讨论一下首尾界符法。
由C语言的知识可以知道ASCⅡ码是7位编码,可以组成128个不同的ASCI码,但是可以打印(就是可以从键盘输入的字符)的只有95个字符,那么当传送的帧是文本文件(都是从键盘输入的)时,就可以在剩下的33个控制字符中选定2个字符(教材中选用了SOH 与EOT分别作为帧开始符和帧结束符)作为每一帧的开始和结束,这样接收端只需要判断这两个控制字符出现的位置就能准确地分割成帧,如图3-3所示。
注意∶字符SOH代表Start of Header(首部开始),而EOT代表Endof Transmision(传输结束)。SOH和EOT都是ASCⅡ码中的控制字符。SOH的十六进制编码是01,而EOT的士六进制编码是04。不要误认为SOH是"S""O""H"3个字符,也不要误认为EOT是"E""O""T"3个字符。
这种方式对于帧数据为文本文件是绝对没有问题的。但是还有一种情况就比较麻烦了,假设要传送的帧不是文本文件,即帧数据部分可能包含控制字符,就不能仅仅使用控制字符去进行帧定界了,否则将会导致错误地"找到帧的边界",把部分帧收下(误认为是一个完整的帧),如图3-4所示。
从图3-3中可以看出确实解决了帧定界问题,但是从图3-4中看得出并不是所有比特流都可以被正确地传输,所以说此时透明传输问题仍未得到解决,首尾界符法是不严谨的,于是出现了字节填充的首尾界符法。
字节填充的首尾界符法设法将数据中可能出现的控制字符"SOH"和"EOT"在接收端不解释为控制字符。其方法如下:
在数据中出现字符"SOH"或"EOT"时就将其转换为另一个字符,而这个字符是不会被错误解释的。但所有字符都有可能在数据中出现,于是就将数据中出现的字符"SOH"转换为"ESC"和"x"两个字符,将数据中出现的字符"EOT"转换为"ESC"和"y"两个字符。而当数据中出现了控制字符"ESC"时,就将其转换为"ESC"和"z"两个字符。这种转换方法能够在接收端将收到的数据正确地还原为原来的数据。"ESC"是转义符,它的十六进制编码是 1B.
如图3-5所示,在上方的数据中出现了4个控制字符"ESC""EOT""ESC"和"SOH"。按以上规则转换后的数据即为图3-5 下方的数据。
读者可以很容易地看出,在接收端只要按照以上转换规则进行相反的转换,就能够还原出原来的数据(如遇到"ESC"和"z",就还原为"ESC")。
提醒∶近几年有不少考生在论坛里提出疑问,为什么谢希仁的教材和图3-5的方法不一样?教材上是将EOT转换成 ESC EOT等。其实解决透明传输的方法有很多种,只要合理就行,即与接收方约定一种方式。在可以创新的情况下不要一味地追求权威,你应该相信自己对该原理的理解。
比特填充的首尾标志法
比特填充的首尾标志法是使用01111110作为帧的开始和结束标志,似乎帧定界又解决了,但是如果帧数据部分出现了01111110怎么办?透明传输仍然是个问题。其解决方法如下∶
不难发现01111110中有6个连续的"1"",只要数据帧检测到有5个连续的"1",马上在其后插入"0",而接收方做该过程的逆操作,即每收到5个连续的"1",自动删除后面紧跟的"0",以恢复原始数据。因此,此方法又称为零比特填充法,具体可见下面的模拟过程。
模拟过程∶
- 原始数据∶0110101111110010111111011(数据中出现两次011110)。
- 零比特填充后的数据∶011010111110010111101011(加下画线的0表示填充的0)。
- 接收方收到数据,一旦遇到5个连续的"I"就将后面的"0"去掉,即可得到原始数据。
物理编码违例法
物理编码违例法利用物理介质上编码的违法标志来区分帧的开始与结束,例如,在曼彻斯特编码中,码元1编码成高-低电平,码元0编码成低-高电平,而高-高和低-低电平的编码方式是无效的,可以分别用来作为帧的起始标志和结束标志。
注意∶
- 在使用字节填充的首尾界符法时,并不是所有形式的帧都需要帧开始符和帧结束符,如MAC 帧就不需要帧结束符。因为以太网在传送帧时,各帧之间还必须有一定的间隙,所以,接收端只要找到帧开始定界符。其后面的连续到达的比特流就都属于同一个MAC 帧,可见以太网不需要使用帧结束定界符,也不需要使用字节插入来保证透明传输。
- PPP帧用来进行帧定界的字段为Ox7E。一些考生在做习题时问怎么没有发现"1B""1B"是谢希仁教材中对于普通帧透明传输的处理,即转义字符"ESC"的十六进制编码。
差错控制
检错编码
检错编码∶通过一定的编码和解码,能够在接收端解码时检查出传输的错误,但不能纠正错误。常见的检错编码有奇偶校验码和循环冗余码(CRC)。
奇偶校验码
奇偶校验码就是在信息码后面加一位校验码,分奇校验和偶校验。
奇校验∶添加一位校验码后,使得整个码字里面1的个数是奇数。接收端收到数据后就校验数据里1的个数,若检测到奇数个1,则认为传输没有出错;若检测到偶数个1,则说明传输过程中,数据发生了改变,要求重发。
偶校验∶添加一位校验码后,使得整个码字里面1的个数是偶数。接收端收到数据后就校验数据里1的个数,若检测到偶数个1,则认为传输没有出错;若检测到奇数个1,则说明传输过程中,数据发生了改变,要求重发。
可见,当数据中有一位数据发生改变时,通过奇偶校验能够检测出来,但并不知道是哪一位出错了;如果数据中同时有两位数据发生了改变,此时奇偶校验是检测不到数据出错的,所以它的查错能力有限。
例如,信息数据是1100010,经过奇校验编码后,就变成100100,如果收到数据变成01000100,因为1的个数不为奇数,所以检测出数据出错了,但如果收到的数据是01100100,则无法检测出它出错了。
补充知识点∶奇偶校验码实际使用时又分为垂直奇偶校验、水平奇偶校验与水平垂直奇偶校验,上面讲的属于水平奇偶校验,垂直奇偶校验与水平垂直奇偶校验不需要掌握,知道有即可。
循环冗余码
奇偶校验码的检错率极低,不实用。目前,在计算机网络和数据通信中,用得最广泛的是检错率极高、开销小、易实现的循环冗余码(CRC)。
循环冗余码的原理比较简单,这里就不再赘述了,教材讲解得很细致。以下仅给出考生求解循环冗余码过程中遇到的一个最常见疑问的解答,即循环冗余码中的二进制除法,参考例3-1。
【例3-1】试计算10110010000/11001。
解析∶解题技巧有以下3点。
- 0±1=1,0±0=0,1±0=1,1±1=0(可以简化为做异或运算,在除法过程中,计算部分余数,全部使用异或操作,相同则为0,不同则为1)。
- 上商的规则是看部分余数的首位,如果为1,商上1;如果为0,商上0。
- 当部分余数的位数小于除数的位数时,该余数即为最后余数。
解题算术过程如图3-6所示。
步骤分析∶首先将10110010000中的前5位10110看成部分余数,首位为1,商上1;结果为11110,首位为1,商仍然上1;结果为01111,首位为0,商上0,图3-6中省略了这一步(平常做普通十进制除法时,也会省去),直接到11110,首位为1,商上1;然后为01110,首位为0,商上0,图3-6中仍然省略了这一步,又直接到1100,首位为1,商上1;得到01010,首位为0,商上0,得到1010,部分余数小于除数的位数,即最后的余数为1010。
循环冗余码进行检错的重要特性(以下性质不要试图证明,也不要问为什么是这样,无法给解释,记住就好,记不住就不记)∶
- 有r检测位的多项式能够检测出所有小于或等于r的突发错误。
- 长度大于r+1的错误逃脱的概率是1/2。
注意∶
-
循环冗余码仅能做到无差错接收,那么无差错接收和可靠传输有什么区别?请参考3.42小节。
-
循环冗余码(CRC)是具有纠错功能的,可能在计算机网络这门学科中一般不使用CRC的纠错,如果出错,直接重传。因此,默认CRC为检错码,而不是纠错码。尽管在《计算机组成原理》中将会提到CRC纠错,但是CRC纠错绝对不是重点,纠错码的重点应放在海明码上,所以大部分辅导书会将CRC的纠错省略。
纠错编码
纠错编码∶在接收端不但能检查错误,而且能纠正检查出来的错误。常见的纠错编码是海明码。
海明码∶又称为汉明码,它是在信息字段中插入若干位数据,用于监督码字里的哪一位数据发生了变化,具有一位纠错能力。假设信息位有k位,整个码字的长度就是k+r位;
每一位的数据只有两种状态,不是1就是0,有r位数据就能表示出2r种状态。如果每一种状态代表一个码元发生了错误,有k+r位码元,就要有k+r种状态来表示,另外还要有一种状态来表示数据正确的情况,所以2r-1≥k+r才能检查一位错误,即2r≥k+r+1。
例如,信息数据有4位,由2r≥k+r+1得r≥3,也就是至少需要3位监督数据才能发现并改正1位错误。例如,给8个学员进行编号,可以用3位数来编码∶学号为000、001、…、11;也可以用5位数来编码∶学号为0000、00001、00010、…、0011,但是没有必要用5位,只要能满足编码的要求就可以了,所以只需求出满足条件的最小的k值即可。
海明码求解的具体步骤如下∶
- 确定校验码的位数r。
- 确定校验码的位置。
- 确定数据的位置。
- 求出校验位的值。
下面开始实战练习。假设要推导D=101101这串二进制数的海明码,应按照以下步骤进行。
-
确定校验码的位数r。数据的位数k=6,按照公式来计算满足条件时r的最小值,如下∶
2r-1≥k+r
2r≥7+r解此不等式,满足不等式的最小r为4,也就是D=101101的海明码应该有(6+4)位=10 位,其中原数据6位,校验码4位。
-
确定校验码的位置。不妨假设这4位校验码分别为P1、P2、P2、P4;数据从左到右为D1、D2、…、D6。编码后的数据共有6+4=10位,设为M1、M2、…、M10。
校验码Pi(i取1,2,3,4)在编码中的位置为2i-1,见表3-1。
-
确定数据的位置。除了校验码的位置,其余的就是数据的位置,填充进去即可,于是可以把数据信息先填进去,见表3-2的"乙"行。
-
求出校验位的值。这个公式不难,99%左右的考生都能看懂海明码的求解过程,但是能够过目不忘的就是极少数了,很多考生抱怨记不住。与其这样,倒不如考前几天突击一下。其实完全没有必要死记硬背,该公式是有规律可循的,但基本没有任何教材讲过,编者也是无意中在一篇论文中看到的,现分享给大家。
假设出错位为e1、e2、e3、e4,现在需要做的就是将M1、M2、…、M10和e1、e2、e3、e4 的关系对应出来,只要这个关系对应出来了,所有问题就都解决了。演示几个,剩下的考生自己推导(看了肯定会)。
M1下标中的1可以表示成0001,这里的0001分别对应e4、e3、e2、e1(倒过来看),由于e1的值为1,因此M1只和e1有关;M3下标中的3可以表示成0011,因此M3和e1、e2有关;M7下标中的7可以表示成0111,因此M7和e1、e2、e3有关。其他以此类推,只需要将这些有关的用异或符号连接起来即可,最后可得以下公式∶
故101101的海明码为001001101。
但是知道了怎么编写海明码,还需要知道怎么校验,方法如下∶
现在假设第5位出错了,也就是第5位在传输的过程中被改为"1",即得到的数据为00101101。现在要找出错误的位置(假设现在不知道出错的位置)。
继续使用∶
补充知识点∶
海明码如果要检测出d位错误,需要一个海明距为d+1的编码方案;如果要纠正d位错误,需要一个海明距为2d+1的编码方案。对于以上知识点,考生应该理解到什么样的程度?
解析∶首先,解释码距的概念。它反映的是两个码字不一样的程度,就是把两个码字对齐以后,有几位不相同,则称为码距,又称为海明距。例如,码字110和码字111 对齐之后,发现只有第三位不一样,则码距为1。什么是海明距为1的编码方案?一个编码方案一般都对应许多码字,而定义许多码字的海明距只需要看最小的即可。如,某个编码方案中有码字110、001、11,尽管110和001的码距为3,但是110和111 的码距为1,所以取最小的。以此类推,考生应该不难理解海明距为d+1的编码方案。从这里应该可以得到一个很明显的结论,对于海明距为1的编码方案是不能检测出任何错误的,只要d 取0即可。
其次,考生在教材中肯定见到过以下公式∶
L-1=D+C 且D≥C
如果要纠正d位错误,说明至少要检测出d位错误(当然可以检测得更多),代入即可得到L-1=d+d,即L=2d+1。同理,如果==只要求检测出d位错误(默认纠错为0,即C等于0),代入即可得到L=d+1,于是就有了补充知识点1)。
海明码的纠错能力桓小于或等于检错能力(见上面的公式)。
为什么误码率和信噪比有关?
解析∶因为信噪比越高,失真就会越小,到达接收端之后波形的变化就会很小,这样就不会将0译码成1、1译码成0了,自然误码率就低了。
流量控制与可靠传输机制
流量控制
申明∶流量控制与可靠传输机制其实是属于传输层的功能,但是作为知识点的讲解放在哪里讲都无所谓,因为该知识点不以后续章节的知识点为基础,所以就直接按照大纲知识点的顺序来讲解了。如果考生习惯按照谢希仁《计算机网络》第7版的讲解顺序进行理解和复习,可以先不看这部分内容,复习到传输层的5.3.3和5.3.4小节的时候,再来复习这部分知识点。
流量控制就是要控制发送方发送数据的速率,使接收方来得及接收。
一个基本的方法是由接收方控制发送方的数据流。常见的有两种方式∶停止-等待流量控制和滑动窗口流量控制。
停止-等待流量控制。它是流量控制中最简单的形式。停止-等待流量控制的工作原理就是发送方发出一帧,然后等待应答信号到达再发送下一帧;接收方每收到一帧后,返回一个应答信号,表示可以接收下一帧,如果接收方不返回应答,则发送方必须一直等待。
故事助记∶某个班有40个人,周日下午需要召开一次紧急班会,班长需要拿出通讯录联系每一个人(学号为1~40号)。这位班长联系了1号,一定要等1号回复了短信确定参加,再依次联系后面同学,而不用群发。这位班长用的就是停止-等待流量控制。
滑动窗口流量控制。停止-等待流量控制中每次只允许发送一帧,然后就陷入等待接收方确认信息的过程中,传输效率很低。而滑动窗口流量控制允许一次发送多个帧。
滑动窗口流量控制的工作原理就是在任意时刻,发送方都维持了一组连续的允许发送的帧的序号,称为发送窗口。同时,接收方也维持了一组连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。发送方窗口内的序列号代表了那些已经被发送但是还没有被确认的帧,或者是那些可以被发送的帧。发送端每收到一个帧的确认,发送窗口就向前滑动一个帧的位置。当发送窗口尺寸达到最大尺寸时,发送方会强行关闭网络层,直到有一个空闲缓冲区出来。在接收端只有当收到的数据帧的发送序号落入接收窗口内才允许将该数据帧收下,并将窗口前移一个位置。若接收到的数据帧落在接收窗口之外(就是说收到的帧号在接收窗口中找不到相应的该帧号),则一律将其丢弃。
图3-7和图3-8所示分别为滑动窗口流量控制的发送窗口和接收窗口示意图。
如图3-7a所示,在发送端,发送窗口的大小为5,在发送开始时,允许发送5个帧,帧序号为0~4。每发送一帧之后,若未收到确认,发送窗口自动减1,如图3-7b所示。
若序号为0~4的帧都已发送完毕,且未收到确认帧,则无法继续发送后续的帧,如图3-7c所示。
而当发送端每收到一个确认帧后,发送窗口就向前滑动一个帧的位置,图3-7d给出了收到3 个帧的确认之后的发送窗口示意,此时可继续发送序号为5~7的3个帧。
接收窗口的大小与发送窗口无关,当接收窗口大小为1时,如图3-8所示,收到一个数据帧后,将窗口向前移动一个位置,并发送确认帧。若收到的数据帧落在接收窗口之外,则一律丢弃该数据帧。
可靠传输机制
可靠传输与无差错接收的区别总结。
解析∶在数据链路层若仅仅使用循环冗余码检验差错检测技术,只能做到对帧的无差错接收,即"凡是接收端数据链路层接收的帧,都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错"。
接收端虽然收到了帧,但最终还是因为有差错被丢弃,即没有被接收。以上所述可以近似地表述为"凡是接收端数据链路层接收的帧均无差错"。
注意∶现在并没有要求数据链路层向网络层提供"可靠传输"的服务。所谓"可靠传输",就是数据链路层的发送端发送什么,接收端就接收什么。
传输差错可分为两大类,一类就是比特差错(可以通过CRC来检测),而另一类传输差错更复杂,这就是收到的帧并没有出现比特差错,但却出现了帧丢失(如发送1、2、3,收到1、3)、帧重复(如发送1、2、3,收到1、2、2、3)、帧失序(如发送1、2、3,收到1、3、2)。这3种情况都属于"出现传输差错",但都不是这些帧里有"比特差错"。
帧丢失很容易理解,但是帧重复、帧失序的情况较为复杂,在这里暂不讨论,学完可靠传输的工作原理后,就会知道在什么情况下接收端可能会出现帧重复或帧失序。
总之,"无比特差错"和"无传输差错"并不是同样的概念,在数据链路层使用CRC检验只能实现无比特差错的传输,但这还不是可靠传输。
也许会有人提出∶既然会丢失那就让接收端不管收到还是没收到都给回复,即确认。如果没接到回复就再发一次,直到对方确认。对于帧失序只要给发的帧编号,等所有帧均收到再排序。以上说的都是对的,但是为什么现在不使用呢?原因有以下两个∶
- 以前在数据链路层使用这种方式是因为以前的通信质量太差了,所以确认和重传机制会起到很好的效果,但是现在的通信质量已经大大提高了,由通信链路质量不好引起差错的概率已经大大降低,再使用这种确认机制代价就太大了,完全不合算。
- 即使数据链路层能够实现无差错的传输,可能端到端的传输也会出现差错,这样得不偿失,还不如把数据链路层做得简单点,可靠的传输由上层协议来完成。也许看了这些还不是很清楚,为了使大家更清楚理解将数据链路层的可靠传输移到高层的原因,我们将网络月的一个知识点先放在这里讲解,见2)。
互联网使用的IP是无连接的,因此其传输是不可靠的。这样容易使人们感到互联网很不可靠。那么为什么当初不把互联网的传输设计成为可靠的?
解析∶这个问题很重要,需要多一些篇幅来讨论。
先打一个比方∶邮局寄送的平信很像无连接的IP数据报。每封平信可能走不同的传送路径,同时平信也不保证不丢失。当发现收信人没有收到寄出的平信时,去找邮局索赔是没有用的。邮局会说∶"平信不保证不丢失。如果担心丢失,就请您寄挂号信。"但是大家并不会将所有信件都用挂号方式邮寄,这是因为邮局从来不会随意地将平信丢弃,而丢失平信的概率并不大,况且寄挂号信成本高。总之,尽管寄平信有可能会丢失,但绝大多数的信件还是平信,因为寄平信方便、便宜。
传统的电信网最主要的用途是进行电话通信。普通的电话机很简单,没有什么智能功能。因此,电信公司就不得不把电信网设计得非常好,这种电信网可以保证用户通话时的通信质量。这点对使用非常简单的电话机的用户是非常方便的,但电信公司为了建设能够确保传输质量的电信网则付出了巨大的代价(使用昂贵的程控交换机和网管系统)。数据的传送显然必是非常可靠的。当初美国国防部在设计ARPAnet时有一个很重要的讨论内容就是"谁应当负责数据传输的可靠性?"
这时出现了两种对立的意见∶一种意见是主张应当像电信网,由通信网络负责数据传输的可靠性(因为电信网的发展历史及其技术水平已经证明了人们可以将网络设计得相当可靠);另一种意见则坚决主张由用户的主机负责数据传输的可靠性。这里最重要的理由是,这样可以使计算机网络便宜、灵活,同时还可以满足军事上的各种特殊的需求。
下面用一个简单例子来说明这一问题。设主机A通过互联网向主机B传送文件,如图3-9所示。
怎样才能实现文件数据的可靠传输呢?
如果按照电信网的思路,就是设法将不可靠的互联网做成可靠的互联网(成本高)。但设计计算机网络的人采用了另外一种思路,即设法实现端到端的可靠传输。
提出这种思路的人认为,计算机网络和电信网的一个重大区别就是终端设备的性能差别很大。电信网的终端是非常简单的,是没有什么智能的电话机。因此,电信网的不可靠必然会严重地影响人们利用电话通信。但计算机网络的终端是有很多智能的主机,这样就使得计算机网络和电信网有两个重要区别。
-
第一,即使传送数据的因特网有一些缺陷(如造成比特差错或分组丢失),但具有很多智能的终端主机仍然有办法实现可靠的数据传输(如能够及时发现差错并通知发送方重传刚才出错的数据)。
-
第二,即使网络可以实现100%的无差错传输,端到端的数据传输仍然有可能出现差错。
可以用一个简单例子来说明这个问题。设主机A向主机B传送一个文件。文件通过一个文件系统存储在主机A的硬盘中。主机B也有一个文件系统,用来接收和存储从主机A发送过来的文件。应用层使用的应用程序现在就是文件传送程序,这个程序一部分在主机A运行,另一部分在主机B运行。现在讨论文件传送的大致步骤。
- 主机A的文件传送程序调用文件系统将文件从硬盘中读出,然后文件系统将文件传递给文件传送程序。
- 主机A请求数据通信系统将文件传送到主机B。这里包括使用一些通信协议和将数据文件划分为适当大小的分组。
- 通信网络将这些数据分组逐个传送给主机B。
- 在主机B中,数据通信协议将收到的数据传递给文件传送应用程序在主机B运行的那一部分。
- 在主机B中,文件传送程序请求主机B的文件系统将收到的数据写到主机B的硬盘中。
在以上的几个步骤中,都存在使数据受到损伤的一些因素,例如∶
- 虽然文件原来是正确地写在主机A的硬盘上,但在读出后就可能出现差错(如在磁盘存储系统中的硬件出现了故障)。
- 文件系统、文件传送程序或数据通信系统的软件在对文件中的数据进行缓存或复制的过程中都有可能出现故障。
- 主机A或B的硬件处理器或存储器在主机A或B进行数据缓存或复制的过程中也有可能出现故障。
- 通信系统在传输数据分组时有可能产生检测不出来的比特差错,甚至丢失某些分组。
- 主机A或B都有可能在进行数据处理的过程中突然崩溃。
由此可看出,即使对于这样一个简单的文件传送任务,仅仅使通信网络非常可靠,并不能保证文件从主机A硬盘到主机B硬盘的传送也是可靠的。也就是说,花费很多的钱将通信网络做成非常可靠的,对传送计算机数据来说是得不偿失的。
既然现在的终端设备有智能的,就应当把网络设计得简单些,而让具有智能的终端来完成"使传输变得可靠"的任务。
于是,计算机网络的设计者采用了一种策略,这就是"端到端的可靠传输"。更具体些,就是在传输层使用面向连接的TCP(后面讲),它可保证端到端的可靠传输。只要主机B的TCP发现数据传输有差错,就告诉主机A将出现差错的那部分数据重传,直到这部分数据正确传送到主机B为止(见第5章)。而TCP发现不了数据有差错的概率是很小的。
采用以上的建网策略,既可以使网络部分价格便宜和灵活可靠,又能够保证端到端的可靠传输。
可以这样想象,将互联网的范围稍微扩大一些,即扩大到主机中的传输层。由于传输层使用了TCP,使得端到端的数据传输成为可靠的,因此这样扩大了范围的因特网就成为可靠的网络。
"互联网提供的数据传输是不可靠的"或"互联网提供的数据传输是可靠的"这两种说法都可以在文献中找到,问题是怎样界定因特网的范围。
如果说因特网提供的数据传输是不可靠的,那么这里的互联网指的是不包括主机在内的网络(仅有物理层、数据链路层和网络层)。如果说互联网提供的数据传输是可靠的,就表明互联网的范围已经扩大到主机的传输层。
下面通过邮局寄平信的例子解释说明。当人们寄出一封平信后,可以等待收信人的确认(通过他的回信)。如果隔了一些日子还没有收到回信,可以将该信件再寄一次。这就是将"端到端的可靠传输"的原理用于寄信的例子。
滑动窗口机制
-
只有在接收窗口向前滑动时(与此同时也发送了确认),发送窗口才有可能向前滑动。
-
可靠传输机制包括停止-等待协议、后退N 帧协议和选择重传协议。从滑动窗口的层次上看,该3种协议只是在发送窗口和接收窗口大小上有所差别。
停止-等待协议∶发送窗口大小=1,接收窗口大小=1。
后退N帧协议∶发送窗口大小>1,接收窗口大小=1。
选择重传协议∶发送窗口大小>1,接收窗口大小>1。
-
当接收窗口的大小为1时,一定可保证帧按序接收。
补充知识点∶为什么不管发送窗口多大,只要当接收窗口大小为 1时,可保证帧按序接收?
解析∶因为接收窗口为1,所以里面有一个唯一的帧序号,不管发送窗口一次性可以发送多少字节,接收窗口只选择接收窗口里的帧序号接收,只有等到该帧,接收窗口才往后移动,所以按照这样的顺序接收的帧一定是有序的。
停止-等待协议
讲解之前,先讨论一下怎么去实现可靠传输。
可靠传输就是说发送方发送什么,接收方就收到什么,一般来说,使用确认(发送确认帧)和超时重传两种机制来共同完成。
确认帧是一个没有数据部分的控制帧,只是用来告诉发送方发的某帧已经接收到了。有时,为了提高传输效率,将确认捎带在一个回复帧中,称为捎带确认(捎带确认与累计确认的区别见下面的补充知识点)。
超时重传是指发送方在发送一个数据帧时设置一个超时计时器,如果在规定时限内没有收到该帧的确认,就重新发送该数据帧。导致发送方没有收到确认的原因有以下两种∶
- 当接收方检测到出错帧时,接收方直接丢弃该帧,而不返回确认。
- 该帧在传输过程中丢失。
使用确认和超时重传两种机制实现可靠传输的策略又称为自动请求重发(ARQ)。
补充知识点∶捎带确认与累计确认有什么区别?
解析∶每两个发送数据的站都是通过全双工连接的,每个站既维持发送窗口也维持接收窗口,但是课本为了讲解清楚,仅仅是单方向传送,所以在同一时间某站可能既发送数据又发送确认,这样就可以将确认放在数据里面一起发过去,这就是捎带确认;
还有一种情况是接收方每收到K个帧发一个ACK告知发送方已正确接收前(K-1)帧并期待第K帧,有人可能会问那第一帧设置的计时器早就超时了,没错,这种可能性相当大,所以对超时的就要单独发ACK,以免发送方一直发送,这就是累计确认。
下面讲解停止-等待协议。
从名称上来看,也可以看出停止-等待协议是基于停止-等待流量控制技术的。从滑动窗口的角度来理解就是其发送窗口大小为1,接收窗口大小也为1。
停止-等待协议的基本思想∶发送方传输一个帧后,必须等待对方的确认才能发送下一帧。若在规定时间内没有收到确认,则发送方超时,并重传原始帧。
看到这里也许有人会问,停止-等待流量控制技术(这里是停止-等待流量控制技术而不是停止-等待协议)为什么要一直等待?为什么不设置一个规定时间?
这里就要回到第1章协议的制定。首先协议需要建立在一定技术(停止-等待流量控制技术)之上,然后在此技术之上需要考虑一切可能突发的不利状况(可以这么理解∶协议=技术+考虑不利因素,即停止-等待协议=停止-等待流量控制技术+不利因素),设置规定时间重传就是为了解决这些不利因素。如果不设置时间就会造成死锁,这样就无法推进,在这里可以联系到操作系统的死锁,如果没有外力参与去打破死锁,就一直等待下去,而这里的外力就是重传计时器。
停止-等待协议中会出的差错主要有以下两类(虽然简单,请仔细看,这里有很多考生的疑问点,其他辅导书都没有涉及)。
-
帧一般被分为数据帧和确认帧。第一类错误就是数据帧被损坏或者丢失,那么接收方在进行差错检验时,会检测出来。
处理数据帧被损坏的情况时,使用计时器即可解决。这样发送方在发送一个帧后,若数据能够正确地接收到,接收方就发送一个确认帧,没有问题;若接收方收到的是一个被损坏的数据帧,则直接丢弃,此时发送方还在那里苦等,不过没有关系,只要计时器超时了,发送方就会重新发送该数据帧,如此重复,直到这一数据帧无错误地到达接收方为止。
-
第二类错误确认帧被破坏或者丢失。一旦确认帧被破坏或者丢失,造成的后果就是发送方会不断地重新发送该帧,从而导致接收方不断地重新接收该帧。怎么解决?
显然,对于接收方而言,需要有能够区分某一帧是新帧还是重复帧的能力。解决方法很简单,就是让发送方在每个待发的帧的头部加一个编号,而接收方对每个到达的帧的编号进行识别,判断是新帧还是要抛弃的重复帧。
考生发现某些辅导书会有这么一道题∶停止-等待协议需要对确认帧进行编号吗?
基本上给出的答案如下∶停止-等待协议的工作原理是当每发送完一个数据帧后,发送端就停止继续发送,直至接收到接收端返回该帧的确认信息为止才继续发送,因此确认帧不需要序号。那么确认帧到底需要序号吗?
以下是天勤论坛一位会员问的问题,很有代表性,所以拿出来与大家分享,希望大家在复习时,都能带着这种发现问题的模式去思考。
疑问∶假设a发送1号帧给b,b收到,但是b发给a的确认帧在网络中堵塞了,于是当a端的计时器超时时,a又重发1号帧。此时,b又收到了一个1号帧。正在此时,b发送的第一个确认帧到了a,于是a发送2号帧,但是b没收到,但此时b的第二个确认帧到了a 端,由于确认帧没有编号,因此a以为b收到了2号帧,这个岂不是错误了?
解析∶这个问题问得非常好,其实问题本身在于技术演变,而不是题目和答案的问题。该考生的分析没有错误,可以很好地说明需要对确认帧进行编号才能正常工作。但是由于目前的数据链路层协议是用在点对点的链路上,而在条件固定的链路上,数据的往返时延一般都比较稳定,不会忽大忽小地大幅度起伏变化。在这种情况下,如果选择合适大小的超时重传时间,那么确认帧没有序号的停止-等待协议也是可以工作的。
因此,在讨论停止-等待协议的原理时,有时也省略了确认帧中的序号。从严格的意义上讲,既然协议应当保证在任何不利的情况下都能够正常工作,那么完整的停止-等待协议的确认帧就应当有序号。如果考研中真遇到了,建议还是填写确认帧需要序号。
后退N帧(GBN)协议
后退N帧协议基于滑动窗口流量控制技术。若采用n个比特对帧进行编号,其发送窗口尺寸WT必须满足 1 < WT ≤2n-1(请参考下面的补充知识点),接收窗口尺寸为1。若发送窗口尺寸大于2n-1,会造成接收方无法分辨新、旧数据帧的问题。由于接收窗口尺寸为1,因此接收方只能按序来接收数据帧。
后退N帧协议的基本原理∶
发送方发送完一个数据帧后,不是停下来等待确认帧,而是可以连续再发送若干个数据帧。如果这时收到了接收方的确认帧,那么还可以接着发送数据帧。如果某个帧出错了,接收方只能简单地丢弃该帧及其所有的后续帧。发送方超时后需重发该出错帧及其后续的所有帧。由于减少了等待时间,后退N帧协议使得整个通信的吞吐量得到提高。但接收方一发现错误帧,就不再接收后续的帧,造成了一定的浪费。据此改进,得到了选择重传协议。
补充知识点∶为什么后退N帧协议的发送窗口尺寸WT必须满足1<WT≤2n-1?
解析∶假设发送窗口的大小为2",发送方发送了0号帧,接收窗口发送 ACK1(0 号帧已收到,希望接收1号帧,但是ACK1丢失),接着发送方发送了1号帧,接收窗□发送ACK2(1号帧已收到,希望接收2号帧,但是ACK2丢失),以此类推,直到发送方发了第2n-1号帧,接收方发送ACK2n(丢失),此时不能再发送数据了,因为已经发送了2n个帧,但一个确认都没有收到,所以过一段时间0号帧的计时器会到达预定时间进行重发,此时发过去接收方认为是新一轮的0号帧还是旧一轮重传的呢?
接收方并不知道,很有可能接收方就把该0号帧当作新一轮的帧接收了,但实际上这个0号帧是重传的,所以出现了错误,即发送窗口的大小不可能为2n。现在假设发送窗口的大小为2n-1,情况和上面一样,发送方发送了0~2~2n-2号帧,接收方发送的确认帧都丢失了,如果没有丢失就应该接着传2n-1号帧,但是丢失了,发送方应该发送0号帧。由于这种情况接收方可以判断出来(下一帧只要不是第2n-1号帧就是重传),因此不会发生错误。如果发送窗□尺寸小于2-1,那就更不会发生错误了。
综上所述,后退N帧协议的最大发送窗口是2n-1。
【例3-2】(2009年统考真题)数据链路层采用了后退N帧(GBN)协议,发送方已经发送了编号为0~7的帧。当计时器超时时,若发送方只收到0、2、3号帧的确认,则发送方需要重发的帧数是()。
A.2
B.3
C. 4
D.5
解析∶C。想要准确地做出该题需要懂得两个知识点∶
- 只要收到ACKn就认为前面n-1帧一定全部收到;
- 后退N帧重发原理是发送方超时后需重发该出错帧及其后续的所有帧。从题中可以看出收到了3号确认帧(尽管没有收到1号确认帧),就可以认为0、1、2、3号帧接收方都已经收到,而4号帧的确认没有收到,发送方就应该发送4号帧以及后续的所有帧,即重传4、5、6、7号帧,即帧数为4。
其实这道题目如果将选项D改为7,就更具有迷惑性了,相信会有不少考生认为应该从1号帧开始重传,即需要重传1、2、3、4、5、6、7共计7帧,这样就会误选D,但是一看到选项没有7,估计才会想到只要收到ACKn就认为前面n-1帧一定全部收到。
需要提醒的一点∶前面讲过某个帧的确认没有收到是否一定要重发此帧?这个题目恰好是一个反例,在发送方超时之前收到了比1号帧更高的确认,所以不需要重发1号帧。
【例3-3】(2012年统考真题)两台主机之间的数据链路层采用后退N帧(GBN)协议传输数据,数据传输速率为16kbit/s,单向传播时延为270ms,数据帧长度为128~512B,接收方总是以与数据帧等长的帧进行确认。为使得信道利用率达到最高,帧序号的比特数至少为( )
A.5
B.4
C.3
D.2
解析∶B。首先,要使得信道利用率达到最高,就需要使发送数据的主机尽量保持不停地在发送数据,即尽量保证信道不空闲。在这里需要考虑最坏的情况,即帧长最小的时候。因为帧长最小时,在文件同等大小时,需要帧的个数最大,这样就可以求出所需帧序号比特数的最小值。
所以,接下来就需要计算从主机发送数据开始到接收到确认帧所经历的总时间。
总时间应该等于发送数据的时间+传播数据的时间+发送确认帧的时间+传播确认帧的时间,在这里数据长度取最小值,即128B。所以,总时间为
T=(128×8)bit/16kbit/s+270ms+(128×8)bit/16kbit/s+270ms=668ms
而在668ms内,至少可以发送10个长度为128B的帧(10<668ms/64ms<11),所以帧序号的比特数n必须满足2n≥11解得 n≥4。
选择重传(SR)协议
选择重传协议也是基于滑动窗口流量控制技术的。
它的接收窗口尺寸和发送窗口尺寸都大于1,以便能一次性接收多个帧。
若采用n个比特对帧进行编号,为避免接收端向前移动窗口后,新接收窗口与旧接收窗口产生重叠,发送窗口的最大尺寸应该不超过序列号范围的一半∶WT ≤ 2n-1(请参考下面的补充知识点)。
当发送窗口取最大值时,WR = WT = 2n-1(=大部分情况都是发送窗口等于接收窗口,且等于2,因为这样可达到最大效率,记住就好)。
此时,若 WT取大于2n-1的值,可能造成新、旧接收窗口重叠。
选择重传协议的基本思想∶若一帧出错,则其后续帧先存入接收方的缓冲区中,同时要求发送方重传出错帧,一旦收到重传帧后,就和原先存在缓冲区的其余帧一起按正确的顺序送至主机。选择重传协议避免了重复传输那些本来已经正确到达接收方的数据帧,进一步提高了信道利用率,但代价是增加了缓冲空间。
补充知识点∶
-
为什么选择重传协议的最大发送窗口的大小是2n-1?
解析∶现在先假设选择重传协议的最大发送窗口是W,那么可以一次性发送0~W-1号帧,并且接收方都已经接收到了(也就是说,这W个确认帧都已经发了),但是这W 个确认帧全部都在传输的过程中丢失了,此时接收窗口的位置已经移动到W~2W-1。如果发送方再发一轮,这W个帧应该落在W~2W-1,但是此时的W帧是重传的,所以若要正确,就必须满足2W-1是在最大序号2n-1 之内,也就是说2W-1≤2n-1,即W≤2n-1。综上所述,选择重传协议的最大发送窗口是2n-1。
-
由于选择重传协议的最大发送窗口是2n-1还是比较难理解的,在此举一个例子来帮助大家理解。假设n=3,2n-1=4。若发送窗口为5,则接收窗口为5。假设t时刻发送方发送序号为0~4的帧,t时刻接收方接收到序号为0~4的帧,接收窗口滑动到[5,6,7,0,1],并发送0~4号的确认帧。但是确认帧在传输中都丢失了。于是,发送方在t 时刻重发帧0。当t时刻接收方收到帧0时,由于帧0在其接收范围,0被错误地当作新帧接收,导致协议错误。因此,对于选择重传协议,必须使发送窗口的大小于或等于2n-1。
可能疑问点∶有些考生举出反例,假设n=3,然后又假设发送窗口为5(超过2n-1=4),但是接收窗口为3,此时则验证不了上面的结论,以证明上面的结论是错的,即发送窗口的最大值可以超过2n-1。
解析∶其实这种分析貌似正确,但是却忽略了一个前提(记住即可),即发送窗口最好不要超过接收窗口。其实从后面讲解的拥塞控制可以看出,发送窗口是取拥塞窗口和接收窗口的最小值,不会超过接收窗口,所以发送窗口大于接收窗口没有意义。
【例3-4】(大纲样题)在选择重传协议中,当帧的序号字段为3bit,且接收窗口与发送窗口尺寸相同时,发送窗口的最大值为()。
A.2
B.4
C.6
D.8
解析∶B。假设帧的序号字段为nbit,选择重传协议的发送窗口最大尺寸为2n-1;将n=3 代入,得到答案。
【例3-5】(2011年统考真题)数据链路层采用选择重传(SR)协议传输数据,发送方已发送了0~3号数据帧,现已收到1号帧的确认,而0、2号帧依次超时,则此时需要重传
的帧数是()
A.1
B.2
C.3
D.4
解析∶B。此题需要考生很清楚地了解选择重传协议的工作原理。
选择重传协议是不支持累积确认的。什么是累积确认?即如果发送方连续发送0、1、2、3、4号帧,前面0、1、2、3号帧的确认都丢失,但是在发送方重发之前却收到了ACK5,表明前面的0、1、2、3、4号帧都已经收到,接收方期待5号帧的接收。后退N帧协议是支持累积确认的。回到题目,由于只收到1号帧的确认,0、2号帧超时,且不支持累积确认,因此需要重传0、2号帧。
重点提醒∶对于选择重传协议,题且并没有说3号帧是否正确接收,仅仅是说了0、2 号帧超时,故无须考虑3号帧的状态。
如果此题数据链路层采用后退N帧(GBN)协议传输数据,由于它具有累积确认的作用,因此收到了1号帧的确认,就说明0号帧也被正确接收了,只需重传1号帧的后续所有帧,即需要重传2号帧和3号帧,故答案仍然选B。
可能疑问点∶如果不按序接收,交给主机岂不是全部乱套了?
解析∶如果没有按序,正确的接收帧先存入接收方的缓冲区中,同时要求发送方重传出错帧,一旦收到重传帧后,就和原先存在缓冲区的其余帧一起按正确的顺序送至主机。
所以说选择重传协议避免了重复传输那些本来已经正确到达接收方的数据帧,进一步提高了信道利用率,但代价是增加了缓冲空间。
发送缓存和接受缓存
如图3-10所示,发送窗口与发送缓存以及接收窗口与接收缓存有什么区别?为什么计算机进行通信时发送缓存和接收缓存总是需要的?
从图 3-10b 中可以看到,按序到达的且没有被交付给主机的帧被放在接收缓存(接收窗口外的那一部分接收缓存,以下讲的接收缓存都是指这部分)里面(因为已经发送过确认帧了,仅仅是等主机的应用程序来取),而不是接收窗口里面。那些不是按序到达的数据且没有错误的帧一定是要放在接收窗口里面,因为这些帧不能直接给主机,而放在接收缓存的帧是要给主机的,等到缺少的帧收到后,再一起放到接收缓存,这一点要注意区分,其他都比较好理解,不再赘述。
发送窗口的大小不一定等于接收窗口的大小(但是通常情况下都是等于),这里先记住这个结论,第5章讲到拥塞控制的时候就会很清楚了。
当计算机的两个进程(在同一台机器中或在两台不同的机器中)进行通信时,如果发送进程将数据直接发送给接收进程,那么这两个动作(一个是发送,另一个是接收)是非常难协调的。这是因为计算机的动作很快,如果在某一时刻接收进程开始执行接收的动作,但发送进程的发送动作稍微早了一点或稍微晚了一点(在收发双方事先未进行同步的情况下,发送时刻不可能恰好和接收时刻精确地重合),这都会使接收失败。
综上所述,在计算机进程之间的通信过程中,广泛使用缓存。缓存就是在计算机的存储器中设置的一个临时存放数据的空间。发送进程将欲发送的数据先写入缓存,然后接收进程在合适的时机读出这些数据。缓存类似于邮局在街上设立的邮筒。人们可以将欲发送的信件投到邮筒中。邮局的邮递员按照他的计划在适当的时候打开邮筒,将信件取走,交到邮局,进行下一步处理。缓存可以很好地解决发送速率和接收速率不一致的矛盾,还可以很方便地进行串并转换,即比特流串行写入并行读出,或并行写入串行读出。缓存也可称为缓冲或缓冲区(有关缓存更详细的讲解可参考《2021 版操作系统高分笔记》)。
介质访问控制
介质访问控制分类
知识背景∶在局域网中,如果某共用信道的使用产生竞争,怎么能够更好地分配信道的使用权,是一个非常重要的问题,而介质访问控制就是为了解决此问题而诞生的。
考研所要求的介质访问控制分为以下3类∶
- 信道划分介质访问控制。
- 随机访问介质访问控制。
- 轮询访问介质访问控制。
其中,1)是静态分配信道的方法,而2)和3)是动态分配信道的方法。
信道划分介质控制访问
首先介绍多路复用技术的基本概念。
当传输介质的带宽超过了传输单个信号所需的带宽时,人们就通过在一条介质上同时携带多个传输信号的方法来提高传输系统的利用率,这就是所谓的多路复用,也是实现信道划分介质访问控制的途径。
多路复用技术能把多个信号组合在一条物理信道上进行传输,使多个计算机或终端设备共享信道资源,从而提高了信道的利用率。图3-11为多路复用技术的示意图。
故事助记∶现在杭州市有10个不同地方的人都去杭州市某一个邮局寄信,寄往上海的10个不同地方(这里的邮局就类似于多路复用器),而到了上海之后,邮递员再将这10封信送到各自的目的地。
信道划分介质访问控制分为以下4种。
频分多路复用
将一条信道分割成多条不同频率的信道,就类似于将一条马路分割成多个车道,尽管同一时间车辆都在这条马路上行驶,但是分别行驶在不同的车道上,所以不会发生冲突。现在假设每个车道的宽度不能改变了,但是需要加车道,所以马路就必须变宽,类似于使用频分复用时,如果复用数增加,那么信道的带宽(此时的带宽是频率带宽,不是数据的发送速率)必须得增加。
注意∶每个子信道分配的带宽可以不相同(可联想人行道和机动车道是不一样宽的),但它们的总和一定不能超过信道的总带宽。在实际应用中,为防止子信道之间的干扰,相邻信道之间要加入"保护频带"(可联想人行道与机动车道、机动车道与机动车道之间的栏杆的作用)。
时分多路复用
假设现在只有一个玩具,却有10个小孩要玩,这时候只能将一个固定的时间分割成10 份,10个小孩轮流玩这个玩具,即时分多路复用。
所以当使用时分多路复用时,复用数增加并不需要加大信道带宽,只需将每个信道分得的时间缩小即可。也许很多人在这里会有疑问,如果恰好某个时间轮到一个小孩玩了,但是这个小孩现在睡着了,岂不是这段时间就浪费了吗?没错,是浪费了,这时候就需要把时分复用改进,于是引入统计时分复用。
继续上面的例子,现在如果该玩具轮到某个小孩玩,但是他睡着了,立刻跳过他,给下一个小孩玩,这样就基本可以保证玩具没有空闲时刻。可见每个孩子下次轮到自己玩的时间都是不确定的,如果睡觉的人多了,很快就轮到了;如果睡觉的人少,就很慢。因此,统计时分复用是一种动态的时间分配(会考选择题,请记住),同时又是异步的(每个孩子玩玩具的时间周期是不固定的),所以统计时分复用又称为异步时分复用。而普通的时分复用就是同步时分复用(因为每个孩子都在一个固定的周期才能得到玩具,即使中间有孩子睡觉也要等)。由上面的分析,一种极其经典的题型就诞生了,参考例3-6。
【例3-6】假设某线路的传输速率为10Mbits,且有10个用户在使用。使用同步时分复用和异步时分复用的最高速率分别是多少?
解析∶分析可知,同步时分复用不管此时信道是否空闲,一定要等到时间分配给它,才可进行数据传输,所以最高速率为(10Mbit/s)/10=1Mbit/s;
而使用异步时分复用则不同,信道是没有空闲的。当只有一个用户传输数据时,其他9个用户都停止,那么此时该用户的传输速率可以达到最大,即10Mbit/s。类似上面10个小朋友,如果9个小朋友睡着了,没睡着的那个小孩就可以一直玩。
波分多路复用
波分多路复用就是光的频分多路复用,在一根光纤中传输多种不同频率(波长)的光信号,由于各路光的频率(波长)不同,因此各路光信号不互相干扰。最后,再用分波器将各路波长不一样的光分解出来,如图3-12所示。
码分多路复用
码分多路复用又称为码分多址(CDMA),它既共享信道的频率,又共享时间,是一种真正的动态复用技术。本书主要讲解CDMA原理中的一个考点,其他内容考研不会涉及,有兴趣的考生可参考教材上的详细讲解。考点分析如下。
概念∶每个站点都维持一个属于该站点的芯片序列,并且是固定的。
假如站点A的芯片序列为00011011,则A站点发送00010111表示发送比特1;而将00011011每位取反,即发送11100100表示发送比特0。习惯将芯片序列中的0写为-1,1写为+1,所以A站的芯片序列就是(-1-1-1+1+1-1+1+1),一般将该向量称为该站的码片向量。
以下两个定理记住即可。
- 任意两个不同站的码片向量正交,即任意两个站点的码片向量的规格化内积一定为0。
- 任意站点的码片向量与该码片向量自身的规格化内积一定为1;任何站点的码片向量和该码片的反码向量的规格化内积一定为-1。
考点∶某个CDMA站接收到一个碎片序列,怎么去判断是哪站发来的数据,并怎么识别发送了什么信息?见例3-7。
【例3-7】某个CDMA站接收方收到一条如下所示的碎片系列:(-1+1-3+1-1-3+1+1)
假设各个站点的码片向量如下∶
站点A∶(-1-1-1+1+1-1+1+1)
站点B∶(-1-1+1-1+1+1+1-1)
站点C∶(-1+1-1+1+1+1-1-1)
站点D∶(-1+1-1-1-1-1+1-1)
试问∶哪些站点发送了数据?分别发送了什么数据?
解析∶此题的解答步骤较为固定,只需将接收到的碎片序列分别与站点A、B、C、D的码片向量进行规格化内积即可。内积为1表示发送了比特1,内积为-1表示发送了比特0,内积为0表示没有发送数据,计算如下∶
站点A∶(-1+1-3+1-1-3+1+1)·(-1-1-1+1+1-1+1+1)/8=1。
站点B∶(-1+1-3+1-1-3+1+1)·(-1-1+1-1+1+1+1-1)/8=-1。
站点C∶(-1+1-3+1-1-3+1+1)·(-1+1-1+1+1+1-1-1)/8=0。
站点D∶(-1+1-3+1-1-3+1+1)·(-1+1-1-1-1-1+1-1)/8=1。
由以上计算结果可知,站点A和站点D发送了比特1,站点B发送了比特0,站点C没有发送数据。
总结∶码分多路复用技术具有抗干扰能力强、保密性强、语音质量好等优点,还可以洞少投资和降低运行成本,主要用线通信系统,特别是移动通信系统。CDMA手机就使用了此技术。
随机访问介质访问控制
当几台计算机都使用一条信道发送数据时,就需要去共享这条信道,而共享信道需着重考虑的一个问题就是如何使众多用户能够合理而方便地共享,并且不发生冲突,于是出现以下两种划分信道的方法。
第一种是静态划分信道,读者也许马上想到3.5.2小节刚讲过的频分多路复用、时分多路复用等方法,这种方法只要用户分配到了信道就不会和其他用户发生冲突。但这种划分信道方法的代价是相当高的,在一个小的局域网里面使用这种方法实在不合适。
第二种是动态地划分信道,而动态地划分信道又分为随机接入和受控接入。
随机接入的意思是所有用户都可以根据自己的意愿随机地发送信息,这样就会产生冲突(或者称为碰撞),从而导致所有冲突用户发送数据失败。为了解决随机接入发生的碰撞,CSMA/CD等协议被引入。
受控接入就是不能随机地发送数据,一定要得到某种东西才有权发数据。
随机接入在考研中需要掌握4种,即ALOHA 协议、CSMA 协议、CSMA/CD协议和CSMA/CA协议。
以上4种协议的核心思想是通过争用,胜利者才可以获得信道,从而获得信息的发送权。正因为这种思想,随机访问介质访问控制又多了一个绰号∶争用型协议。
ALOHA协议
最初的ALOHA称为纯ALOHA协议,其基本思想比较简单∶当网络中的任何一个节点需要发送数据时,可以不进行任何检测就发送数据。如果在一段时间内没有收到确认,该节点就认为传输过程中发生了冲突。发生冲突的节点需要等待一段随机时间后再发送数据,直至发送成功为止。
纯ALOHA 协议虽然简单,但其性能特别是信道利用率并不理想。于是,后来又有了时分ALOHA(Sltted ALOHA)。在时分ALOHA中,所有节点的时间被划分为间隔相同的时隙(Slot),并规定每个节点只有等到下一个时隙到来时才可发送数据。
CSMA协议
载波侦听多路访问(CSMA)协议是在 ALOHA 协议的基础上改进而来的一种多路访问控制协议。
在CSMA中,每个节点发送数据之前都使用载波侦听技术来判定通信信道是否空闲。常用的CSMA有以下3种策略。
- 1-坚持CSMA∶当发送节点监听到信道空闲时,立即发送数据,否则继续监听。
- p-坚持CSMA∶当发送节点监听到信道空闲时,以概率p发送数据,以概率(1-p)延迟一段时间并重新监听。
- 非坚持CSMA∶当发送节点一旦监听到信道空闲时,立即发送数据,否则延迟一段随机的时间再重新监听。
CSMA/CD协议
CSMA/CD全称为带冲突检测的载波侦听多路访问协议,它是在局域网中被广泛应用的介质访问控制协议。
在CSMA机制中,由于可能存在多个节点侦听到信道空闲并同时开始传送数据,从而造成冲突,但是即使冲突了,CSMA协议也要将已破坏的帧发送完,使总线的利用率降低。
一种CSMA的改进方案是在发送站点传输的过程中仍继续监听信道,以检测是否存在冲突。如果发生冲突,信道上可以检测到超过发送站点本身发送的载波信号的幅度,由此判断出冲突的存在,那么就立即停止发送(推迟一个随机的时间再发送),并向总线上发一串阻塞信号,用以通知总线上其他各有关站点,各有关站点接收到该阻塞信号,就不再发送数据了。由此,信道容量就不会因白白传送已受损的帧而浪费了,从而可以提高总线的利用率。这种方案称为载波监听多路访问/冲突检测协议,简写为CSMA/CD,这种协议已广泛应用于局域网中。下面详细讲解CSMA/CD协议。
CSMA/CD工作流程∶
每个站在发送数据之前要先检测一下总线上是否有其他计算机在发送数据,若有,则暂时不发送数据,以免发生冲突;若没有,则发送数据。计算机在发送数据的同时检测信道上是否有冲突发生,若有,则采用截断二进制指数类型退避算法来等待一段随机时间后再次重发。总体来说,可概括为"先听后发,边听边发,冲突停发,随机重发"。
争用期∶以太网端到端的往返时延(用2x表示),又称为冲突窗口或者碰撞窗口。只有经过争用期这段时间还没有检测到冲突,才能肯定这次发送不会发生冲突。
例如,以太网规定取51.2us为争用期的长度。对于10Mbit/s的以太网,在争用期内可发送512bit,即64B。在以太网发送数据时,如果前64B没有发生冲突,那么后续的数据也不会发生冲突(表示已成功抢占信道)。换句话说,如果发生冲突,就一定在前64B。由于一检测到冲突就立即停止发送,这时发送出去的数据一定小于64B,因此,以太网规定最短帧长为64B,凡长度小于64B的都是由于冲突而异常终止的无效帧。
需要指出的是,以太网端到端的单程时延实际上小于争用期的一半(25.6us),以太网之所以这样规定,还考虑了其他一些因素,如中继器所增加的时延等。
疑问1∶在教材或者其他辅导书中出现凡是长度小于64B的帧都是由于冲突而异常终止的无效帧,也许会有人提出疑问,如果只发50B的帧,并且在发送的过程中没有发生碰撞,接收端也正确收到了,难道也当作无效帧吗?
当然不是,因为在以太网中传输数据帧时,没有小于64B的帧。如果发送的帧小于64B,MAC子层会在数据字段的后面加入一个整数字节的填充字段,以保证以太网的MAC帧的长度不小于64B。关于上层协议是如何剥掉这个没用的填充字段的,将在MAC 帧的格式中详细讲解。
疑问2∶以太网把争用期定为51.2us,即对于10Mbit/s的以太网,在争用期内可以发送64B,所以最短有效帧为64B,那么如果现在是100Mbits的以太网,最短有效帧还是64B吗?
解析∶没错,仍然是64B,此时只需将争用期设置为5.12us(也就是将电缆长度减少到100m,并且帧间的时间间隔从原来的9.6μs改为现在的0.96us,都是10Mbit/s 以太网的1/10)。可见,最短有效帧长和最远两个站的距离及传输速率都是有关系的,并且成正比,参考例3-8。
【例3-8】(大纲样题)根据CSMA/CD协议的工作原理,下列情形中需要提高最短帧长度的是( )。
A.网络传输速率不变,冲突域的最大距离变短
B.冲突域的最大距离不变,网络传输速率提高
C.上层协议使用TCP的概率增加
D.在冲突域不变的情况下减少线路中的中继器数量
解析∶B。根据以上分析,很容易得知A说反了,B为正确选项,C和D纯属胡扯。
【例3-9】(2009年统考真题)在一次采用CSMA/CD协议的网络中,传输介质是一根完整的电缆,传输速率为1Gbit/s,电缆中的信号传播速度是2×108m/s。若最小数据帧长度减少800bit,则最远的两个站点之间的距离至少需要( )。
A.增加160m
B.增加80m
C.减少 160m
D.减少 80m
解析∶D。可以计算出减少800bit后,节省了多少发送时间,即 800bit/10000000000bit/s=0.8×10-6s,也就是说,最大往返时延可以允许减少0.8×10-6s,或者说最大端到端单程时延可以减少0.4×10-6s。要使得单程时延减少,且传播速度不变,只有将最远的两个站点之间的距离减少才能满足要求,并且需要减少0.4×10-6s×2×10m/s=80m。
疑问3∶为什么CSMA/CD用于信道使用半双工的网络环境,而对于使用全双工的网络环境则无需采用这种介质访问控制技术?
解析∶以太网工作模式有两种,一种是全双工工作模式,另一种是半双工工作模式。现在分析这两种模式下是不是都使用了CSMA/CD 冲突检测机制。
全双工模式∶在同一时间内,网卡不可能接收到两个都要求发送数据的请求,就好像CPU 不可能在同一时间执行两条指令一样,也就是说,网卡在接收到需要发送的数据报后,就像排队一样一个一个往外发送,怎么可能会冲突呢?
所以,因为同时发送数据而产生的碰撞就不可能发生了。这个时候有人可能要问,那接收呢?发送可能会和接收冲突,其实这么想就错了。在全双工工作模式下,将使用双绞线中的两对线进行工作,一对用于发送,另一对用于接收。既然发送和接收是分开的两条链路,那么就不存在冲突的问题了。就像在高速公路上,一个车道是由东往西的行驶车道,另一个车道是由西往东的行驶车道。两车对开,行驶于各自的车道,不可能发生冲撞。所以,全双工工作模式下是不需要使用CSMACD 冲突检测机制的。还有一点需要注意,全双工通信只有在数据传输链路两端的节点设备都支持全双工时才有效。
半双工模式∶因为发送和接收使用同一个信道,所以肯定要使用CSMA/CD冲突检测机制。
疑问4∶碰撞是什么时候检测出来的?
解析∶并不是说一碰撞就可以检测出来,而是当发送端在发送数据时竟然收到了数据(相当诡异的事情),收到数据的这一刻才知道中途碰撞了。2010年考研真题的计算机网络最后一道大题就是考查此知识点。
截断二进制指数类型退避算法∶发生碰撞的站在停止发送数据后,要推迟一个随机时间才能再发送数据。退避的时间按照以下算法计算。
- 确定基本退避时间,一般取争用期 2t。
- 定义重传参数k,k=Min【重传次数,10】。可见,当重传次数不超过10时,参数k等于重传次数;当重传次数超过10时,k 就不再增大而一直等于10。
- 从整数集合{0,1,…,2k-1}中随机选择一个数记为r,重传所需时延就是r倍的基本退避时间,即2rt。
- 当重传次数达到16次仍不能成功时,说明网络太拥挤,直接丢弃该帧,并向高层报告。
截断二进制指数类型退避算法可使重传需要推迟的平均时间随重传次数的增大而增大。但当数据发送量大时,可能导致一方的重传推迟时间越来越长,而另一方却在连续发送数据帧,这称为捕获效应。
【例3-10】在二进制指数后退算法中,16次碰撞之后,站点会在0~( )之间选择一个随机数。
A.1023
B.215-1
C.216-1
D.以上都错误
解析∶D。在二进制指数后退算法中,N次碰撞之后,站点会在0~M之间选择一个随机数,分以下3类情况讨论。
- 当1≤N≤10时,M=2N-1。
- 当10≤N≤15时,M=210-1=1023。
- 当N=16时,直接丢弃,并给计算机发送一个错误报告。
注意∶二进制指数后退算法=解决了站点检测到冲突后继续等待的时间问题。
补充知识点∶什么是非受限协议?
解析∶非受限就是不用停下来等待确认帧。既然不用等待确认帧,就可以一直不停地发送,因此计算数据传输率时,应该忽略传播时延。
【例3-1】((2010年统考真题)某局域网采用CSMA/CD协议实现介质访问控制,数据传输率为10Mbit/s,主机甲和主机乙之间的距离为2000m,信号传播速度是2×108m/s,请回答下列问题,要求说明理由或写出计算过程。
- 若主机甲和主机乙发送数据时发生冲突,则从开始发送数据时刻起,到两台主机均检测到冲突时刻为止,最短经过时间是多少?最长经过时间是多少?假设主机甲和主机乙发送数据时,其他主机不发送数据。
- 若网络不存在任何冲突与差错,主机甲总是以标准的最长以太数据帧(1518B)向主机乙发送数据,主机乙每成功收到一个数据帧后立即向主机甲发送一个64B的确认帧,主机甲收到确认帧后立即发送下一个数据帧。此时主机甲的有效数据传输速率是多少?不考虑以太网帧的前导码。
解析∶
-
题目中已经说明主机甲和主机乙发送数据时发生冲突,说明在主机甲发送的数据未到达主机乙时,主机乙已经开始发送数据了。从开始发送数据时刻起,到两台主机均检测到冲突时刻为止(解释一下什么是检测到冲突∶就是主机甲在发送数据的同时,竟然收到数据了,也就是说冲突了),显然是甲和乙同时发送数据时才能使得时间最短,假设甲和乙不同时发送数据,不妨设甲开始发送数据,此时计时器已经开始计时,乙再发送数据到达甲的时间肯定大于单倍时延,所以甲和乙同时发送数据可以使得时间最短。
与此同时,要使得时间最长,显然就是让甲发送的数据就快到达乙了,乙立刻发送数据,这样就可以使得时间拉到2倍的单程时延。这两个问题解决了,剩下的就是求单程传播时延了,题目告诉了主机甲和主机乙的距离为2000m,信号传播速度是2×108m/s,所以单程时延=2000m/2×108m/s=0.01ms。综上所述,从开始发送数据时刻起,到两台主机均检测到冲突时刻为止,最短经过时间是0.01ms,最长经过时间是0.02ms。
-
首先计算主机甲发送一个以太网数据帧的时间=1518×8bit÷10Mbit/s=1.2144ms,接着主机乙每成功收到一个数据帧后立即向主机甲发送一个64B的确认帧,发送此确认帧需要时间=64×8bit÷10Mbit/s=0.0512ms,中间还有一个往返时延,时间为0.02ms,1)中已经计算过,所以主机甲成功发送一数据帧所需要的总时间=1.2144ms+0.0512ms+0.02ms=1.2856ms,也就是说,主机甲在1.2856ms里可以发送1518B的数据帧。还有一点需要提醒大家,题目中是说有效数据传输速率,这1518B的帧里面还包括18B的首部和尾部,不属于有效数据部分,所以真正有效的数据其实只有1500B,主机甲的有效数据传输速率=1500×8bit/1.2856ms=9.33Mbit/s。
CSMA/CA 协议
CSMA/CA主要用在无线局域网中,由IEEE 802.11 标准定义,它在CSMA的基础上增加了冲突避免的功能。冲突避免要求每个节点在发送数据之前监听信道。如果信道空闲,则发送数据。发送节点在发送完一个帧后,必须等待一段时间(称为帧间间隔),检查接收方是否发回帧的确认(说明CSMA/CA协议对正确接收到的数据帧进行确认,2011年真题中的一道选择题考查了此知识点)。若收到确认,则表明无冲突发生;若在规定时间内没有收到确认,表明出现冲突,重发该帧。
【例3-12】(2011年统考真题)下列选项中,对正确接收到的数据帧进行确认的MAC 协议是( D)。
A. CSMA
B.CDMA
C.CSMA/CD
D.CSMA/CA
解析∶D。此题相信大部分考生的情况是对于A和C比较熟悉,对于B和D则完全不知所云。因为在复习的过程中可能不会太在意。CSMA/CD协议相信考生再熟悉不过了,整个过程也能够倒背如流,立马可以被排除。其次,CSMA/CD协议是对CSMA协议的改进,既然CSMA/CD都没有,那CSMA 协议就必然没有。
CDMA称为码分多路复用,工作在物理层,不存在对数据帧进行确认。
轮询访问介质访问控制
轮询访问介质访问控制主要用在令牌环局域网中,目前使用得很少。
在轮询访问介质访问控制中,用户不能随机地发送信息,而是通过一个集中控制的监控站经过轮询过程后再决定信道的分配。典型的轮询访问介质访问控制协议就是令牌传递协议。
令牌环局域网把多个设备安排成一个物理或逻辑连接环。为了确定哪个设备可以发送数据,让一个令牌(特殊格式的帧)沿着环形总线在计算机之间依次传递。当计算机都不需要发送数据时,令牌就在环形网上"游荡",而需要发送数据的计算机只有拿到该令牌才能发送数据帧,所以不会发生冲突(因为令牌只有一个),这就是所谓的受控接入。有关令牌环网络更详细的讲解请参考3.6.7小节。
局域网
局域网的基本概念和体系结构
局域网(LocalArea Network,LAN)是指一个较小范围(如一个公司)内的多台计算机或者其他通信设备,通过双绞线、同轴电缆等连接介质互连起来,以达到资源和信息共享目的的互联网络。
局域网最主要的特点
- 局域网为一个单位所拥有(如学校的一个系使用一个局域网)。
- 地理范围和站点数目有限(双绞线的最大传输距离为100m,如果要加大传输距离,则在两段双绞线之间安装中继器,最多可安装4个中继器。例如,安装4个中继器连接5个网段,则最大传输距离可达500m,所以地理范围有限。局域网一般可以容纳几台至几千台计算机,所以站点数目有限)。
- 与以前非光纤的广域网相比,局域网具有较高的数据率、较低的时延和较小的误码率(现在局域网的数据率可以达到万兆了;传输距离较短所以时延小;距离短了失真就小,误码率自然就低)。
局域网的主要优点
- 具有广播功能(具体见补充知识点),从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
补充知识点∶局域网的厂播功能。
解析∶要清楚局域网的广播并不是该局域网的每个站点都要接收该数据,每个帧的首部都会有接收站点的物理地址(MAC 地址),而当该帧到达每个站点时,该站点就会用网卡中的地址和首部的物理地址进行比较,如果一样就接收该帧,否则丢弃该帧。但是千万注意广域网不能用广播通信(会造成网络堵塞),而应该用点对点通信,使用交换机来转发(后讲)。
- 便于系统的扩展和演变,各设备的位置可灵活地调整和改变。
- 提高了系统的可靠性、可用性。
- 各站为平等关系而不是主从关系。
局域网的主要技术要素
局域网的主要技术要素包括网络拓扑结构、传输介质与介质访问控制方法。其中,介质访问控制方法是最为重要的技术要素,决定着局域网的技术特性。
局域网的主要拓扑结构
局域网的主要拓扑结构包括星形网、环形网、总线型网和树形网(星形网和总线型网的结合)。
局域网的主要传输介质
局域网的主要传输介质包括双绞线、铜缆和光纤等,其中双绞线为主流传输介质。
局域网的主要介质访问控制方法
局域网的主要介质访问控制方法包括CSMA/CD、令牌总线和令牌环。
前两种作用于总线型网,令牌环作用于环形网。IEEE的802标准定义的局域网参考模型只对应于OSI参考模型的数据链路层和物理层,并且将数据链路层拆分为两个子层∶逻辑链路控制(LLC)子层和媒体接入控制(MAC)子层。与接入到传输媒体有关的内容都放在MAC子层,而LLC子层与传输媒体无关。
由于以太网在局域网市场中取得了垄断地位,DIX Ethemet V2标准被广泛使用,而802 委员会制定的LLC子层作用已经不大,现在很多网卡上仅装有MAC协议而没有LLC协议,因此局域网的考点重心应该围绕以太网,本书也将会着重讲解以太网。
以太网的工作原理
知识背景∶IEEE 802.3标准是一种基带总线型的局域网标准。在不太严格区分的时候,IEEE 802.3可以等同于以太网标准,因为它是基于原来的以太网标准诞生的一个总线型局域网标准,所以下面重点讲解以太网。
以太网是迄今为止世界上最为成功的局域网产品。以太网最初由Xerox 公司研制出。它的最初规约是DIX Ethenet V2标准。
在此基础上,专门负责制定局域网和城域网标准的IEEE 802委员会制定了IEEE 802.3标准。IEEE 802.3标准和DIX EthermetV2标准差别很小,所以一般也称802.3局域网为以太网。特别是随着快速以太网、千兆以太网和万兆以太网相继进入市场,以太网现在几乎成了局域网的同义词。
以太网采用总线拓扑结构,所有计算机都共享一条总线,信息以广播方式发送。为了保证数据通信的方便性和可靠性,以太网使用了CSMA/CD技术对总线进行访问控制。考虑到局域网信道质量好,以太网采取了以下两项重要的措施以使通信更加简便。
- 采用无连接的工作方式。
- 不对发送的数据帧进行编号,也不要求对发送方发送确认。
因此以太网提供的服务是不可靠的服务,即尽最大努力交付,差错的纠正由传输层的TCP 完成。
疑问∶前面已经说过数据链路层是不提供重传机制的,为什么以太网会有重传机制?
解析∶以太网是不可靠的,这意味着它并不知道对方有没有收到自己发出的数据报,但如果由它发出的数据报发生错误(并且知道错了),它会进行重传。在以前讲数据链路层时,发送方根本不知道自己发送的数据报有错(因为接收方不会发确认,有错都是直接丢弃的),但是现在不一样了,发送方知道碰撞了(数据没发完之前),知道错了,肯定要重传的。因为以太网的重传是微秒级,而传输层的重传(如TCP的重传)为毫秒级,应用层的重传达到秒级,可以看到越底层的重传,速度越快,所以对于以太网错误,以太网必须要具有重传机制,不然高层重传就会花费更多的时间。但是还有一种情况即使知道碰撞了,也不需要重传,那就是发送方的数据已经发完了再收到碰撞信号,这时候就不要重传了,因为发送方已经发完了,不能肯定这个碰撞是不是因为自己发送数据时产生的,所以不需要重传。
以太网的MAC帧
局域网中的每台计算机都有一个唯一的号码,称为MAC地址或物理地址、硬件地址。
每块网卡出厂即被赋予一个全球唯一的MAC地址,它被固化在网卡的ROM中,共48bit(6B)
例如,01-3e-01-23-4e-3c十六进制表示,最前面的01,如果转换成二进制就是0000 0001。高24bit为厂商代码,低24bit为厂商自行分配的网卡序列号。
由于总线上使用的是广播通信,因此网卡从网络上每收到一个MAC 帧,先要用硬件检查 MAC帧中的MAC地址,如果是发往本站的帧就收下,否则丢弃。
MAC帧的格式有两种∶IE 802.3标准和DIX Ethemet V2标准。
考研一般考查的是最常用的DIX Ethernet V2标准格式,如图3-13所示。
MAC 帧组成部分的详细分析如下。
-
前导码∶在帧的前面插入8B,使接收端与发送端进行时钟同步。这8B又可分为前同步码(7B)和帧开始定界符(1B)两部分。
注意∶不知道大家还记不记得,在讲解组帧的时候,特意说明了MAC帧不需要帧结束符,因为以太网在传送帧时,各帧之间必须有一定的间隙。因此,接收端只要找到帧开始定界符,其后面连续到达的比特流就都属于同一个MAC帧,所以图3-13中只有帧开始定界符。
-
目的地址、源地址∶均使用48bit(6B)的MAC地址。
注意∶地址字段包括目的地址和源地址两部分。处于前面的地址字段为目的地址,处于后面的地址字段为源地址。
IEEE 802.3标准规定,源地址字段中前8位的最后一位恒为"0",这一点从目的地址格式中可以看出。目的地址字段有较多的规定,原因是一个帧有可能发送给某一个工作站,也有可能发送给一组工作站,还有可能发送给所有工作站。因此,将后面两种情况分别称为组播帧和广播帧。
当目的地址前8位的最后一位为"0"时,表示帧要发送给某一个工作站(这个就是为什么源地址字段中前8位的最后一位恒为"0"的原因),即所谓的单站地址。
当目的地址前8 位的最后一位为"1",其余不全为"1"时,表示帧发送给一组工作站,即所谓的组播地址。
当目的地址前8位的最后一位为"1",其余也全为"1"时,表示帧发送给所有工作站,即所谓的广播地址。
看到这里考生可能会问,每个主机很明显可以认识单播帧(与自己MAC地址一样)和广播帧(全"1"),但是组播帧怎么识别?组播帧的识别,由适配器通过使用编程的方法实现,不在考试范围之内。
综上分析,只有目的地址才能使用多播地址和广播地址。
-
类型∶占 2B,指出数据域中携带的数据应交给哪个协议实体处理。例如,若类型字段的值为0x0800,就表示上层使用的是IP数据报等,这个无需记忆,知道是怎么回事就行。
-
数据∶占46~1500B。46和1500是怎么来的?首先,由CSMA/CD算法可知,以太网帧的最短帧长为64B,而MAC帧的首部和尾部的长度为18B,所以数据最短为64B-18B=46B。其次,最大的1500B是规定的,没有为什么。
补充知识点∶什么原因使以太网有一个最小帧长和最大帧长?
解析∶设置最小帧长是为了区分噪声和因发生碰撞而异常终止的短帧。设置最大帧长是为了保证每个站都能公平竞争接入到以太网。因为如果某个站发送特别长的数据帧,则其他站就必须等待很长的时间才能发送数据(了解即可)。
-
填充∶前面讲过,由于CSMA/CD算法的限制,最短帧长为64B,因此除去首部18B,如果数据长度小于46B,那么就得填充,使得帧长不小于64B。当数据字段长度小于46B时,需要填充至46B;当数据字段长度大于或等于46B时,则无需填充。因此,填充数据长度的范围为0~46B。
-
校验码(FCS)∶占4B,采用循环冗余码,不但需要校验MAC帧的数据部分,还要校验目的地址、源地址和类型字段,但是不校验前导码。
-
802.3帧格式与DIX 以太帧格式的不同之处∶
1)帧起始标志∶与802.4和802.5兼容。
2)长度域∶替代了DIX帧中的类型域,指出数据域的长度。
以太网的传输介质
传统以太网可使用的传输介质有4种,即粗缆、细缆、双绞线和光纤。
对应的,MAC层下面给出了这4种传输介质的物理层,即10Base5(粗缆))、10Base2(细缆)、10Base-T(双绞线)和10Base-F(光纤)。
其中,Base指电缆上的信号为基带信号,采用曼彻斯特编码;
Base前面的10表示数据传输速率为10Mbit/s;
Base后面的5或2表示每一段电缆最长为500m 或200m(实为185m);
T表示双绞线,F表示光纤。常用以太网线缆见表3-4。
高速以太网
一般,数据传输速率达到或超过100Mbit/s的以太网称为高速以太网。
100Base-T以太网
100Base-T以太网是在双绞线上传送 100Mbit/s 基带信号的星形拓扑结构以太网,使用CSMA/CD协议。
100Base-T以太网又称为快速以太网。
100Base-T以太网可在全双工方式下工作而无冲突发生,此时无须使用CSMA/CD协议,如果是在半双工方式下工作时仍需使用CSMA/CD协议。
为了提高数据传输速率,100Base-T以太网保持最短帧长不变,但将一个网段的最大电缆长度减小到100m,帧间时间间隔从原来的9.6ms 改为现在的0.96ms。
吉比特以太网
吉比特以太网又称为千兆以太网,具有以下特点。
- 允许在1Gbit/s下全双工和半双工两种方式工作。
- 在半双工方式下使用CSMA/CD协议(全双工方式不需要使用CSMA/CD协议,前面已经讲过)。
当吉比特以太网工作在半双工方式下时,必须使用CSMA/CD协议进行冲突检测。
如果要提高数据传输速率,只有减小最大电缆长度或增大帧的最小长度,这样才能使得信道的利用率比较高。吉比特以太网保持了网段最大电缆长度仍为100m,但采用了"载波延伸"的方法。这样使得最短帧长仍为64B,同时将争用期增大为512B。凡发送的MAC帧长不足512B 时,就用一些特殊字符填充在帧的后面,使MAC帧的发送长度达到512B。
但是这样又会出现问题,如果每次都是发送30B,岂不是每次都填充482B,这样的话就造成了太大的浪费,所以吉比特以太网增加了一种功能即分组突发(分组突发为非考点,有兴趣的考生可参考相关教材)。
10吉比特以太网(非重点)
10吉比特以太网的特点∶
- 保留了IEEE802.3标准规定的以太网帧格式、最小帧长和最大帧长,便于升级。
- 不再使用铜线而只使用光纤作为传输介质。
- 只工作在全双工方式下,因此没有争用问题,也不使用CSMA/CD协议。
最后,以太网从10Mbits到10Gbits的演进证明了以太网是∶
- 可扩展的(10Mbit/s~10Gbit's)。
- 灵活的(多种传输媒体、全/半双工、共享/交换)。
- 易于安装。
- 稳健性好。
【例3-13】(2012年统考真题)以太网的MAC协议提供的是( )。
A.无连接不可靠服务
B. 无连接可靠服务
C.有连接不可靠服务
D.有连接可靠服务
解析∶A。
- 有连接与无连接的判断∶很明显MAC帧首部格式中只有目的MAC地址、源MAC 地址和类型字段,并没有建立连接的字段,所以以太网MAC协议提供的是无连接的服务。
- 可靠与不可靠的判断∶以太网帧是一种无编号的帧,当目的站收到有差错的数据帧时,就丢弃此帧,其他什么也不做,差错的纠正由高层来决定,所以以太网的 MAC 协议是不可靠的。
无线局域网
IEEE802.11是无线局域网的协议标准,包括IEEE802.11la和IEEE802.11b等。
无线局域网的组成
无线局域网可分为两大类∶有固定基础设施和无固定基础设施。
-
有固定基础设施的无线局域网的组成
对于有固定基础设施的无线局域网,IE802.1 标准规定其最小构件为基本服务集(BSS)。一个基本服务集包括一个基站和若干个移动站,所有站在本BSS 内可直接通信,但在和本BSS以外的站通信时都必须通过本BSS的基站。因此,BSS中的基站称为接入点(AP)。
一个基本服务集可以是孤立的,也可通过接入点连接到一个主干分配系统(Distitution System,DS),然后再接入到另一个基本服务集,构成扩展的服务集(Extended ServiceSet,ESS)。
ESS还可通过门桥(Portal)设备为无线用户提供到非IEEE 802.11无线局域网(如到有线连接的因特网)的接入。门桥的作用就相当于一个网桥。
-
无固定基础设施的无线局域网的组成
无固定基础设施的无线局域网又称为自主网络,自主网络没有上述基本服务集中的接入点,而是由一些处于平等状态的移动站之间相互通信组成的临时网络。这些移动站都具有路由器的功能。
IEEE 802.11 标准中的物理层
IEEE 802.11标准中的物理层有以下3种实现方法。
- 跳频扩频(FHSS)。
- 直接序列扩频(DSS)。
- 红外线(IR)。
IEEE 802.11标准中的MAC 层
IEEE802.11标准中的MAC层在物理层上面。它包括两个子层,从下往上依次为分布协调功能(DCF)子层和点协调功能(PCF)子层。
由于用CSMA/CD协议对无线局域网进行冲突检测花费过大并且冲突检测到信道空闲后仍可能发生冲突,因此在无线局域网的MAC层中,使用的是带有碰撞避免功能的CSMA/CA 协议,同时还增加了确认机制。
令牌环网工作原理
最有影响的令牌环网是IBM公司的Token Ring,IEEE802.5标准就是在IBM公司的Token Ring 协议的基础上发展和形成的,如图3-14所示。
在Token Ring中,节点通过环接口连接成物理环形。令牌是一种特殊的MAC控制帧,帧中有一位标志令牌(忙/闲)。令牌总是沿着物理环单向逐站传送,传送顺序与节点在环中排列顺序相同。
令牌环网中令牌和数据的传递过程如下∶
-
当网络空闲时,环路中只有令牌在网络中循环传递。
-
令牌传递到有数据要发送的节点处,该节点就修改令牌中的一个标志位,然后在令牌中附加自己需要传输的数据,这样就将令牌改换成了一个数据帧,源节点将这个数据帧发送出去。
-
数据帧沿着环路传递,接收到的节点一边转发数据,一边查看帧的目的地址。如果目的地址和自己的地址相同,接收节点就复制该数据帧以便进行下一步处理。
-
数据帧沿着环路传输,直到到达该帧的源节点,源节点接收自己发出去的数据帧便不再转发。同时,该源节点可以通过校验返回的数据帧,以查看数据传输过程中是否有错,若有错,则重传该帧。
-
源节点传送完数据以后,重新产生一个令牌,并将令牌传递给下一个站点,以交出发送数据帧的权限。
广域网
广域网的基本概念
广域网通常是指覆盖范围很广(远远超出一个城市的范围)的长距离网络。
广域网由一些节点交换机以及连接这些交换机的链路组成。节点交换机将完成分组存储转发的功能。互联网虽然覆盖范围也很广,但一般不称它为广域网。因为在这种网络中,不同网络(可以为局域网也可以为广域网)的"互连"才是其最主要的特征,它们之间通常采用路由器来连接。
而广域网只是一个单一的网络,它使用节点交换机连接各主机而不是用路由器连接各网络。虽然节点交换机和路由器都是用来转发分组的,它们工作原理也类似,但区别是节点交换机在单个网络中转发分组,而路由器在多个网络构成的互联网中转发分组。广域网和局域网的区别与联系见表3-5。
注意∶
- 从层次上考虑,广域网和局域网的区别很大,因为局域网使用的协议主要在数据链路层(包含少量物理层的内容),而广域网使用的协议主要在网络层。
- 广域网中存在一个最重要的问题,即路由选择和分组转发。路由选择协议负责搜索分组从某个节点到目的节点的最佳传输路由,以便构造路由表。从路由表再构造出转发分组的转发表,分组是通过转发表进行转发的。
补充知识点∶局域网、广域网和因特网之间的关系。
解析∶为了方便理解,可以将广域网看成一个大的局域网,从专业角度来讲就是通过交换机连接多个局域网,组成更大的局域网,即广域网。因此,广域网仍然是一个网络。而因特网是多个网络之间互连,即因特网由大局域网(广域网)和小局域网共同通过路由器相连。因此,局域网就可通过因特网与另一个相隔很远的局域网进行通信。
PPP
知识背景∶SLIP主要完成数据报的传送,但没有寻址、数据检验、分组类型识别和数据压缩等功能,只能传送IP分组。此协议实现起来较简单,但如果上层不是IP就无法传输,并且此协议对一些高层应用也不支持。为了改进 SLIP的缺点,于是制定了点对点协议,即PPP。PPP主要由以下3个部分组成。
- 一个将IP数据报封装到串行链路的方法。
- 一个链路控制协议(#)。其用于建立、配置和测试数据链路连接,并在不需要时将它们释放。
- 一套网络控制协议(NCP)。其中每个协议支持不同的网络层协议,用来建立和配置不同的网络层协议。
PPP的帧格式
PPP的帧格式如图3-15所示。
-
标志字段(F)∶首部和尾部各占1个字节,规定为Ox7E。
补充知识点∶PPP帧的透明传输。
解析∶其实在3.1节中讲解HDLC帧的帧定界问题时就提到了。当时说的是01111110 为 HDLC帧的首尾标志。这里的7E不就是011110吗?但是在解决HDLC的透明传输时,使用的是零比特填充,即数据部分一旦发现有5个连续的"1",就在后面自动加上一个"0"。但是为了实现 PPP帧的透明传输,可不是这样做的,而是采用了字节填充,步骤如下∶
①把信息字段中出现的每一个Ox7E转变为2字节序列(Ox7D,Ox5E)。
②若信息字段中出现一个Ox7D(出现了和转义字符一样的比特组合),则把Ox7D 转变为2字节序列(Ox7D,Ox5D)。
③若信息字段中出现 ASCI码的控制字符(数值小于Ox20的字符),则在该字符前面加入一个Ox7D,同时将该字符的编码加以改变。例如,出现Ox03(在控制字符中表示"传输结束"ETX),就要把Ox03转换为2字节序列(Ox7D,Ox23)。为什么Ox03 会转换成 Ox23?其实就是对控制字符的十六进制编码加了一个偏移量(因为控制字符有Ox20个,所以加上Ox20,保证其不再是控制字符)。
另外,到目前为止,所接触到的帧只有MAC 帧是有帧间隙的,所以无须加入尾标志。而PPP帧和HDLC帧都是没有帧间隙的,所以前后都得加标志字段。
-
地址字段(A)∶占1个字节,规定为OxFF,没有为什么。
-
控制字段(C)∶占1个字节,规定为Ox03,没有为什么。
-
协议字段∶占2个字节。例如,当协议字段为0x0021时,PPP帧的信息字段就是IP 数据报;若为0xC021,则信息字段是PPP链路控制数据;若为0x8021,则表示这是网络控制数据。
-
信息部分∶占0~1500个字节。为什么不是46~1500个字节?因为PPP是点对点的,并不是总线型,所以无需采用CSMA/CD协议,自然就没有最短帧。另外,当数据部分出现和标志位一样的比特组合时,就需要采用一些措施来实现透明传输(上面的补充知识点已讲)。
-
帧检验序列(FCS)∶占2个字节,即循环冗余码检验中的冗余码。检验区间包括地址字段、控制字段、协议字段和信息字段。
可能疑问点∶每个PPP帧首部和尾部都有标志字段F,为什么教材上说连续两个PPP帧之间只需一个标志字段?
解析∶当连续传输两个帧时,前一个帧的结束标志字段F可以同时作为后一个帧的起始标志字段。
PPP的工作状态
当用户拨号接入 ISP时,路由器的调制解调器对拨号做出确认,并建立一条物理连接。这时,个人计算机向路由器发送一系列的LCP分组(封装成多个PPP帧)。
这些分组及其响应选择了将要使用的一些PPP参数。接着就进行网络层配置,网络控制协议(NCP)给新接入的个人计算机分配一个临时的IP地址。
这样,个人计算机就成为因特网上的一个主机了。
当用户通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址。接着,# 释放数据链路层连接,最后释放物理层连接。
总结∶
- PPP是一个面向字节的协议。
- PPP不需要的功能∶纠错(PPP只负责检错)、流量控制(由TCP负责)、序号(PPP 是不可靠传输协议,所以不需要对帧进行编号)、多点线路(PPP是点对点的通信方式)、半双工或单工(PPP只支持全双工链路)。
HDLC协议
在通信质量较差的年代,在数据链路层使用可靠传输协议曾经是一种好的办法。因此,能实现可靠传输的高级数据链路控制(HDLC)就成为当时比较流行的数据链路层协议。下面介绍HDLC协议。
HDLC协议的基本特点
高级数据链路控制(HDLC)协议是ISO制定的面向比特(PPP是面向字节的,这个要记住)的数据链路控制协议。它可适用于链路的两种基本配置∶非平衡配置和平衡配置。
- 非平衡配置的特点是由一个主站控制整个链路的工作。
- 平衡配置的特点是链路两端的两个站都是复合站,每个复合站都可以平等地发起数据传输,而不需要得到对方复合站的允许。
HDLC协议的帧格式
当采用HDLC协议时,从网络层交下来的分组,变成了HDLC协议帧的数据部分,数据链路层在信息字段的头尾各加上24位控制信息,这样就构成了一个完整的HDLC协议帧,如图 3-16所示。
-
标志字段(F)∶占8位,为"01111110",首尾各有一个"0"作为帧的边界。为防止在两个标志字段F之间出现"01111110",HDLC使用比特填充的首尾标志法。当一串比特流未加上控制信息时,扫描整个帧,只要发现有5个连续"1",就立即填入一个"0"。
-
地址字段(A)∶占8位。若使用非平衡方式传送数据,为次站的地址;若使用平衡方式传送数据,为确认站的地址。全"1"为广播方式,全"0"为无效地址。
-
控制字段(C)∶占8位,最复杂的字段,HDLC的许多重要功能都靠控制字段实现。根据其最前面两位的取值,可将HDLC帧划分为3类∶信息帧(I帧)、监督帧(S帧)和无编号帧(U 帧)。
-
提醒∶3类帧的记忆方式,每当看到HDLC帧的分类就想到"无监息"=""无奸细"。
信息帧用来传输数据信息,或使用捎带技术对数据进行确认和应答;
监督帧用于流量控制和差错控制,执行对信息帧的确认、请求重发和请求暂停发送等功能;
无编号帧用于提供对链路的建立、拆除以及多种控制功能。
-
信息字段∶长度任意,存放来自网络层的协议数据单元。
-
帧检验序列(FCS)∶占16位,即循环冗余码检验中的冗余码。检验区间包括地址字段、控制字段和信息字段。
补充知识点∶PPP的帧格式和 HDLC 协议的帧格式的区别。
解析∶
-
PPP是面向字节的,而 HDLC 协议是面向比特的。这里也可以看出,PPP 应该使用字节填充,而HDLC协议应该使用比特填充。
注意∶有考生提出在谢希仁的第5版教材中提到,当使用同步传输时,PPP使用比特填充(这个知识点可以忽略)。
其实可以更专业地解释为什么PPP一定要面向字节。首先,PPP被明确地设计为以软件的形式实现,而不像HDLC协议那样几乎总是以硬件形式实现。对于软件实现,完全用字节操作比用单个比特操作更简单。此外,PPP被设计成跟调制解调器一起使用,而调制解调器是以一个字节为单元,而不是以一个比特为单元接收和发送数据的。
综上所述,考生可完全默认PPP是面向字节的。
-
PPP帧比HDLC协议帧多一个2字节的协议字段。当协议字段值为Ox0021时,表示信息字段是 IP数据报。
-
PPP不使用序号和确认机制,只保证无差错接收(通过硬件进行循环冗余码校验),而端到端差错检测由高层协议完成。HDLC协议的信息帧使用了编号和确认机制。
数据链路层设备
网桥的概念和基本原理
随着局域网的普及和发展,往往需要将多个局域网用一些中间设备连接起来,实现局域网之间的通信,这就是局域网的扩展。这里主要是在物理层和数据链路层对局域网进行扩展。在物理层扩展局域网使用的是中继器和集线器。其缺点如下∶
- 扩大了冲突域且总的吞吐量未提高。
- 不能互连使用不同以太网技术的局域网。
在数据链路层扩展局域网是使用网桥。
网桥工作在数据链路层,其特点是具有过滤帧的功能。
网桥至少有两个端口,每个端口与一个网段相连。网桥每从一个端口接收到一个帧,就先暂存到缓存中。若该帧未出现差错,且欲发往的目的站 MAC地址属于另一个网段(同一个网段无需转发,应该丢弃),则通过查找转发表,将该帧从对应的端口发出。
因此,仅在同一个网段中通信的帧,不会被网桥转发到另一个网段中,因而不会加重整个网络的负担。网桥的内部结构如图3-17所示。
网桥的优点网桥的优点如下∶
- 过滤通信量。
- 扩大了物理范围。
- 提高了可靠性。
- 可互连不同物理层、不同MAC子层和不同速率(如10Mbit/s和100Mbit/s)的以太网。
网桥的缺点网桥的缺点如下∶
- 存储转发增加了时延。
- 在MAC子层并没有流量控制功能。
- 具有不同MAC子层的网段桥接在一起时时延更大。
- 网桥只适合于用户数不太多(不超过几百个)和通信量不太大的局域网,否则有时还会因传播过多的广播信息而产生网络拥塞,即广播风暴。
网桥的分类
网桥包括透明网桥和源选径网桥。
透明网桥(选择的不是最佳路由)
透明网桥是目前使用最多的网桥。"透明"是指局域网上的站点并不知道所发送的帧将经过哪几个网桥,因为网桥对各站来说是看不见的。透明网桥是一种即插即用设备,意思是只要把网桥接入局域网,不用人工配置转发表,网桥就可以开始工作。
既然上面提到了网桥可以不用人工配置转发表,那么网桥是怎么进行自学习的呢?步骤如下∶
- 网桥收到一帧后先进行自学习。查找转发表中与收到帧的源地址有无相匹配的项目。若没有,就在转发表中增加一个项目(源地址、进入的接口和时间);若有,则把原有的项目进行更新。
- 转发帧。查找转发表中与收到帧的目的地址有无相匹配的项目。若没有,则通过所有其他接口(但进入网桥的接口除外)进行转发;若有,则按转发表中给出的接口进行转发。
若转发表中给出的接口是该帧进入网桥的接口,则应丢弃这个帧(因为这时不需要经过网桥进行转发)。
可能疑问点1∶为什么网桥需要登记该帧进入网桥的时间?
解析∶原因有以下两种。
- 以太网的拓扑可能经常会发生变化,站点也可能会更换适配器(这就改变了站点的地址)。另外,以太网上的工作站并非总是接通电源的。
- 把每个帧到达网桥的时间登记下来,就可以在转发表中只保留网络拓扑的最新状态信息。这样就使得网桥中的转发表能反映当前网络的最新拓扑状态。
可能疑问点2∶假定连接在透明网桥上的一台计算机把一个数据帧发给网络上不存在的一个设备,网桥将如何处理这个帧?
解析∶网桥并不知道网络上是否存在该设备,它只知道在其转发表中没有这个设备的MAC地址。因此,当网桥收到这个目的地址未知的帧时,它将通过所有其他接口(但进入网桥的接口除外)进行转发。
以上并没有讨论一个特殊情况,也就是帧在网络中不断地转圈,导致网络资源被白白浪费,如图 3-18所示。
分析∶设站A发送一个帧F,它经过网桥1和网桥2(箭头①和箭头②)。假定帧F的目的地址都不在网桥1和网桥2的转发表中,因此网桥1和网桥2都转发帧F(箭头③和箭头④),把经网桥1和网桥2转发的帧F在到达局域网2以后,分别记为F1和F2。接着F1传到网桥2(见箭头⑤),而F2传到网桥1(见箭头⑥)。网桥1和网桥2分别收到了F2和F1,又将其转发到局域网1。结果引起一个帧在网络中不停地转圈,从而使得网络资源不断地白白浪费。
为了避免转发的帧在网络中不断地转圈,透明网桥使用了一种生成树算法。
生成树使得整个扩展局域网在逻辑上形成树形结构,所以工作起来逻辑上没有环路,但生成树一般不是最佳路由,具体算法不做要求。下面是引自网络的《生成树算法》有助于考生理解。
生成树算法
我想我永远也不会看到
像一棵树那么优美的图画
树那至关紧要的特性是无回路的连通
树需要无限地扩展
包才能到达每一个LAN
首先,需要选好树根指定 ID即可选定
从树根开始,计算最小代价的路径
这些路径,就是这棵树的枝条
网络出自我等愚人之手
而网桥却发现了一棵生成树
源选径网桥(选择的是最佳路由,了解即可)
在源选径网桥中,路由选择由发送数据帧的源站负责,网桥只根据数据帧中的路由信息对帧进行接收和转发。
为了发现合适的路由,源站先以广播方式向欲通信目的站发送一个发送帧。发送帧将在整个局域网中沿着所有可能的路由传送,并记录所经过的路由。当发送帧到达目的站时,就沿原来的路径返回源站。源站在得知这些路由后,再从所有可能的路由中选择一个最佳路由。
发送帧除了可以用来确定最佳路由,还可以用来确定整个网络可以通过的帧的最大长度。
注意∶透明网桥和源选径网桥中提到的最佳路由并不一定是经过路由器最少的路由,也可以是发送帧往返时间最短的路由,这样才能真正地进行负载平衡。因为往返时间长,说明中间某个路由器可能超载了,所以不走这条路,换个往返时间短的路走。
局域网交换机及其工作原理
局域网交换机的基本概念
局域网交换机实质上是多端口网桥,它工作在数据链路层。局域网交换机的每个端口都直接与主机或集线器相连,并且一般都工作在全双工方式。当主机需要通信时,交换机能同时连通许多对的端口,使每一对相互通信的主机都能像独占通信媒体那样,进行无冲突地传输数据, 通信完成后断开连接。
补充知识点∶以太网交换机独占传输媒体的带宽。对于普通的10Mbi/ts的共享式以太网(不使用交换机),若有N 个用户,则每个用户占有的平均带宽只有总带宽的1/N。
在使用以太网交换机时,虽然在每个端口到主机的带宽还是10Mbit/s,但由于一个用户在通信时是独占而不是和其他网络用户共享传输媒体的带宽,且交换机工作在全双工状态,因此对于拥有N个端口的交换机的总容量为2xNx10Mbit/s(如果是半双工,则总容量为N ×10Mbits,谢希仁编写的第5版教材上默认是半双工),这正是交换机的最大优点。
可能疑问点∶这里不是"N对",就是"N个"。谢希仁的教材上虽然是"N对"但也是含糊其辞。针对此疑问,编者特地请教清华大学教授计算机网络课程的老师,答案如下,记住即可(并且四级网络工程师的真题中也是这么解释的)。
交换机总容量计算方式∶端口数×每个端口带宽(半双工);端口数x每个端口带宽×2(全双工)。N 对的说法很多教材都是不赞同的!
【例3-14】(2009年统考真题)以太网交换机进行转发决策时使用的PDU地址是()。
A.目的物理地址
B.目的IP地址
C.源物理地址
D.源IP地址
解析 A。首先,交换机是工作在数据链路层的设备,所以进行转发决策时,是不可能使用IP地址的,排除选项B和D;其次,在进行转发的过程中,都是使用目的地址,不可能用源地址进行转发。
另一种思路∶以太网交换机其实就是多端口网桥,网桥是根据目的物理地址转发帧的,所以以太网交换机也是根据目的物理地址转发帧的。
【例3-15】某以太网交换机具有24个100Mbit/s的全双工端口与2个1000Mit/s的全双工端口,其总带宽最大可以达到()。
A.0.44Gbit/s
B.4.4Gbits
C.0.88Gbits
D.8.8Gbits
解析∶D。因为是全双工,根据上面的公式可知,总带宽
=24×100Mbits×2+2×1000Mbit/s×2=8800Mbit/s=8.8Gbit/s。考生注意∶据编者3年的答疑题目中若不说明都默认是半双工。若此题改为半双工,则答案为B。
交换机最大的优点是不仅其每个端口节点所占用的带宽不会因为端口节点数量的增加而减少,而且整个交换机的总带宽会随着端口节点的增加而增加。
交换机的两种交换模式
- 直通式交换。只检查帧的目的地址,这使得帧在接收后能马上被转发出去。这种方式速度很快,但缺乏安全性,也无法支持具有不同速率的端口的交换。
- 存储转发式交换。先将接收到的帧存储在高速缓存中,并检查数据是否正确,确认无误后,查找转发表,并将该帧从查询到的端口转发出去。如果发现该帧有错误,就将其丢弃。存储转发式交换的优点是可靠性高,并能支持不同速率端口间的转换,缺点是延迟较大。很多习题上提到一种"无碎片转发",意思是交换机在得到数据报的前64个字节后就转发,对于小于64个字节的数据报,交换机将其认为是碎片,不进行转发。这种方式既避免了存储转发速度慢的问题,又避免了直通转发中有碎片的问题。
局域网交换机的工作原理
与网桥类似,检测从某端口进入交换机的帧的源MAC地址和目的MAC地址,然后与系统内部的动态查找表进行比较,若数据报的MAC地址不在查找表中,则将该地址加入查找表中,并将数据报发送给相应的目的端口。
补充知识点∶虚拟局域网(了解即可,不重要)。
虚拟局域网的出现主要是为了解决交换机在进行局域网互连时无法限制广播的问题。普通的交换机即使连接了多个局域网,仍然属于一个网络,即仍然是一个广播域,这样就容易产生广播风暴,但是将一个局域网划分成多个虚拟局域网之后(交换机就类似于路由器的功能)就等于将一个大的广播域划分成多个小的广播域,这样就会降低发生广播风暴的可能性。也许看到这里很多人会产生疑问,交换机能连接不同的网络9普通交换机是不能的,但这里的交换机已经不是普通的交换机了,而是具有第三层特性的第二层交换机,此内容点到为止,了解即可。
关于虚拟局域网是怎么划分的,这个不是大纲内容,在此不做介绍。
各层设备的广播域、冲突域及总结
要清楚什么是冲突域(碰撞域)和广播域。
当一块网卡发送信息时,只要有可能和另一块网卡冲突,则这些可能冲突的网卡就构成冲突域。一块网卡发出一个广播,能收到这个广播的所有网卡的集合称为一个广播域。
一般来说,一个网段就是一个冲突域,一个局域网就是一个广播域。
先了解这么多,下面先集中复习中继器、集线器、网桥、交换机、路由器的基本概念,再在这基础之上来讨论冲突域和广播域会理解得更深。
物理层设备
中继器∶在接触到的网络中,最简单的就是两台计算机通过两块网卡构成双机互连,两块网卡之间一般是由非屏蔽双绞线来充当信号线的。由于双绞线在传输信号时信号功率会逐渐衰减,当信号衰减到一定程度时将造成信号失真,因此在保证信号质量的前提下,双绞线的最大传输距离为100m。当两台计算机之间的距离超过100m时,为了实现双机互连,人们在这两台计算机之间安装一个中继器,它的作用就是将已经衰减得不完整的信号经过整理,重新产生出完整的信号再继续传送。放大器和中继器都是起放大信号的作用,只不过放大器放大的是模拟信号,中继器放大的是数字信号。
集线器∶中继器就是普通集线器的前身,集线器实际就是一种多端口的中继器。
数据链路层设备
网桥∶参考下面的交换机,因为交换机就是多端口网桥。
交换机∶交换机也称为交换式集线器,它通过对信息进行重新生成,并经过内部处理后转发至指定端口,具备自动寻址能力和交换作用。由于交换机根据所传递数据报的目的地址,将每一数据报独立地从源端口送至目的端口,避免了和其他端口发生碰撞。简单地说就是,交换机某端口连接的主机想和另一个端口连接的主机通信,交换机就会通过转发表发送到那个端口,不可能去其他端口,不存在发错端口(打错电话),因此交换机的每一个端口都是一个冲突域,也就是说,交换机可以隔离冲突域。
交换机的工作原理∶在计算机网络系统中,交换机是针对共享工作模式的弱点而推出的。集线器是采用共享工作模式的代表,如果把集线器比作一个邮递员,那么这个邮递员不认识字,如果要他去送信,他不知道直接根据信件上的地址将信件送给收信人,只会拿着信分发给所有人,然后让接收的人根据地址信息来判断是不是自己的,而交换机则是一个聪明的邮递员———交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的所有端口都挂接在这条背部总线上,当控制电路收到数据报以后,处理端口会查找内存中的地址对照表以确定目的 MAC 地址应该从哪个端口发出,通过内部交换矩阵迅速将数据报传送到目的端口。
如果目的 MAC 地址不存在,交换机才广播到所有的端口,接收端口回应后交换机会学习新的地址,并把它添加入内部地址表中。
可见,交换机在收到某个网卡发过来的"信件"时,会根据上面的地址信息以及自己掌握的"户口簿"快速将"信件"送到收信人的手中。万一收信人的地址不在"户口簿"上,交换机才会像集线器一样将"信件"分发给所有人,然后从中找到收信人。而找到收信人之后,交换机会立刻将这个人的信息登记到"户口簿"上,这样以后再为该客户服务时,就可以迅速将"信件"送达了。
由于交换机能够智能地根据地址信息将数据快速送到目的地,因此它不会像集线器那样在传输数据时"打扰"非收信人。这样交换机在同一时刻可进行多个端口组之间的数据传输,并且每个端口组都可视为独立的网段,相互通信的双方独自享有全部的带宽,无需同其他设备竞争使用。
补充知识点∶尽管交换机也称为多端口网桥,但是交换机和网桥有不同之处,下面——列出。
解析∶交换机和网桥的不同主要包念以下4点。
- 以太网交换机实质上是一个硬件实现的多端口网桥,以太网交换机通常有十几个端口,而网桥一般只有两个端口,常用软件实现。它们都工作在数据链路层。
- 网桥的端口一般连接到局域网的网段,而以太网交换机的每个端口一般都直接与主机相连,也可连接到Hub。
- 交换机允许多对计算机间同时通信,而网桥最多允许每个网段上的一对计算机同时通信。
- 网桥采用存储转发方式进行转发,而以太网交换机还可采用直通方式转发。以太网交换机采用了专用的交换机构硬件芯片,转发速度比网桥快。
网络层设备
路由器∶简单地说就是,路由器把数据从一个网络发送到另一个网络,具体过程见第4 章网络层。
前面已经讲过中继器或集线器不能隔离冲突域,交换机可以隔离冲突域,自然路由器肯定也可以隔离冲突域(因为也有一张转发表可以转发)。
下面来讨论广播域。广播域其实可以看成一个单独的网络,如果一个主机要发送一个广播数据,这样就应该在整个网络都可以听得见,但是集线器和交换机分别工作在物理层和数据链路层,不能连接两个不同的网络,所以说不管是集线器还是交换机遇到广播数据都要每个端口发一遍(因为每个端口连接的网络仍然属于同一个网络)。这样又存在打错电话的情况,所以集线器和交换机不能隔离广播域。但是路由器可以连接不同的网络,且路由器在默认情况下是不转发广播报文的(因为每个端口连接的是不同的网络),路由器的每一个端口都是一个广播域,所以路由器可以隔离广播域。
各层设备的冲突域、广播域总结见表3-6。