计算机网络(3)数据链路层

计算机网络(1)概述
计算机网络(2)物理层

使用点对点信道的数据链路层

数据链路和帧
链路”和“数据链路”并不是一回事。
链路(link)就是从一个结点到相邻结点的一段物理线路(有线或无线),而中间没有任何其他的交换结点。在进行数据通信时,两个计算机之间的通信路径往往要经过许多段这样的链路。可见链路只是一条路径的组成部分。
数据链路(data link)则是另一个概念。这是因为当需要在一条线路上传送数据时,除了必须有一条物理线路外,还必须有一些必要的通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。现在最常用的方法是使用网络适配器(既有硬件,也包括软件)来实现这些协议。一般的适配器都包括了数据链路层和物理层这两层的功能。
把链路分为物理链路和逻辑链路。物理链路就是上面所说的链路,而逻辑链路就是上面的数据链路,是物理链路加上必要的通信协议。
点对点信道的数据链路层的协议数据单元——
数据链路层把网络层交下来的数据构成发送到链路上,以及把接收到的中的数据取出并上交给网络层。在因特网中,网络层协议数据单元就是IP数据报(或简称为数据报分组)。
点对点信道的数据链路层协议,可以采用如图(a)所示的三层模型。在这种三层模型中,不管在哪一段链路上的通信(主机和路由器之间或两个路由器之间),都看成是结点和结点的通信(如图中的结点A和B),而每个结点只有下三层—网络层、数据链路层和物理层。
在这里插入图片描述
点对点信道的数据链路层在进行通信时的主要步骤如下:
(1) 结点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧。
(2) 结点A把封装好的帧发送给结点B的数据链路层。
(3) 若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报上交给上面的网络层;否则丢弃这个帧。
数据链路层不必考虑物理层如何实现比特传输的细节。甚至还可以更简单地设想好像是沿着两个数据链路层之间的水平方向把帧直接发送到对方,如图(b)所示。

封装成帧、透明传输和差错检测

  1. 封装成帧
    封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
    分组交换的一个重要概念就是:所有在因特网上传送的数据都是以分组(即IP数据报)为传送单位的。网络层的IP数据报传送到数据链路层就成为帧的数据部分。在帧的数据部分的前面和后面分别添加上首部和尾部,构成了一个完整的帧。这样的帧就是数据链路层的数据传送单元。
    一个帧的帧长等于帧的数据部分长度加上帧首部和帧尾部的长度。首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限)。此外,首部和尾部还包括许多必要的控制信息。在发送帧时,是从帧首部开始发送。各种数据链路层协议都对帧首部和帧尾部的格式有明确的规定。显然,为了提高帧的传输效率,应当使帧的数据部分长度尽可能地大于首部和尾部的长度。但是,每一种链路层协议都规定了所能传送的帧的数据部分长度上限—— 最大传送单元 MTU(Maximum Transfer Unit)。
    在这里插入图片描述
    当数据是由可打印的ASCII码组成的文本文件时,帧定界可以使用特殊的帧定界符
    在这里插入图片描述
    当数据在传输中出现差错时,帧定界符的作用更加明显。假定发送端在尚未发送完一个帧时突然出故障,中断了发送。但随后很快又恢复正常,于是重新从头开始发送刚才未发送完的帧。由于使用了帧定界符,在接收端就知道前面收到的数据是个不完整的帧(只有首部开始符SOH而没有传输结束符EOT),必须丢弃。而后面收到的数据有明确的帧定界符(SOH和EOT),因此这是一个完整的帧,应当收下。

  2. 透明传输
    由于帧的开始和结束的标记是使用专门指明的控制字符,因此,所传输的数据中的任何8比特的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误。
    当传送的帧是用文本文件组成的帧时(文本文件中的字符都是从键盘上输入的),其数据部分显然不会出现像SOH或EOT这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,因此这样的传输就是透明传输。
    但当数据部分是非ASCII码的文本文件时(如二进制代码的计算机程序或图像等),情况就不同了。如果数据中的某个字节的二进制代码恰好和SOH或EOT这种控制字符一样(见下图),数据链路层就会错误地“找到帧的边界”,把部分帧收下(误认为是个完整的帧),而把剩下的那部分数据丢弃(这部分找不到帧定界控制字符SOH)。
    在这里插入图片描述
    “在数据链路层透明传送数据”表示无论什么样的比特组合的数据都能够通过这个数据链路层。因此,对所传送的数据来说,这些数据就“看不见”数据链路层有什么妨碍数据传输的东西。或者说,数据链路层对这些数据来说是透明的。
    为了解决透明传输问题,就必须设法使数据中可能出现的控制字符“SOH”和“EOT”在接收端不被解释为控制字符。具体的方法是:发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个 转义字符 “ESC”(其十六进制编码是1B,二进制是00011011)。而在接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符。这种方法称为 字节填充 (byte stuffing)或 字符填充 (character stuffing)。如果转义字符也出现在数据当中,那么解决方法仍然是在转义字符的前面插入一个转义字符。因此,当接收端收到连续的两个转义字符时,就删除其中前面的一个。
    在这里插入图片描述

  3. 差错检测
    比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1。这就叫做 比特差错
    在一段时间内,传输错误的比特占所传输比特总数的比率称为 误码率 BER (BitError Rate)。
    为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。目前在数据链路层广泛使用了 循环冗余检验 CRC(Cyclic Redundancy Check)的检错技术。
    下面通过一个简单的例子来说明循环冗余检验的原理。
    在发送端,先把数据划分为组,假定每组 k个比特。现假定待传送的数据 M = 101001 (k = 6)。CRC运算就是在数据M的后面添加供差错检测用的n位 冗余码 ,然后构成一个帧发送出去,一共发送(k + n)位。在所要发送的数据后面增加n位的冗余码,虽然增大了数据传输的开销,但却可以进行差错检测。当传输可能出现差错时,付出这种代价往往是很值得的。
    n 位冗余码可用以下方法得出。
    用二进制的 模 2 运算 进行 2^n 乘 M 的运算,这相当于在M后面添加n个0。得到的(k + n)位的数除以收发双方事先商定的长度为(n + 1)位的除数P,得出商是Q而余数是R(n 位,比P少一位)。关于除数P下面还要介绍。在下图所示的例子中,M = 101001(即k = 6)。假定除数P = 1101(即n = 3)。经模2除法运算后的结果是:商Q =110101(这个商并没有什么用处),而余数R = 001。这个余数R就作为冗余码拼接在数据 M 的后面发送出去。这种为了进行检错而添加的冗余码常称为 帧检验序列 FCS (Frame CheckSequence)。因此加上FCS后发送的帧是101001001(即2nM+ FCS),共有(k + n)位。
    循环冗余检验CRC和帧检验序列FCS并不是同一个概念。CRC是一种 检错方法 ,而FCS是添加在数据后面的 冗余码 ,在检错方法上可以选用CRC,但也可不选用CRC。
    在这里插入图片描述
    在接收端把接收到的数据以帧为单位进行CRC检验:把收到的每一个帧都除以同样的除数P(模2运算),然后检查得到的余数R。
    如果在传输过程中无差错,那么经过CRC检验后得出的余数 R肯定是0。
    但如果出现误码,那么余数 R 仍等于零的概率是非常非常小的。
    总之,在接收端对收到的每一帧经过CRC检验后,有以下两种情况:
    (1) 若得出的余数R = 0,则判定这个帧没有差错,就接受(accept)。
    (2) 若余数 R ≠ 0,则判定这个帧有差错(但无法确定究竟是哪一位或哪几位出现了差错),就丢弃。
    如果我们在传送数据时不以帧为单位来传送,那么就无法加入冗余码以进行差错检验。因此,如果要在数据链路层进行差错检验,就必须把数据划分为帧,每一帧都加上冗余码,一帧接一帧地传送,然后在接收方逐帧进行差错检验。

在数据链路层若 仅仅 使用循环冗余检验CRC差错检测技术,则只能做到对帧的 无差错接受 ,即:“ 凡是接收端数据链路层接受的帧,我们都能以非常接近于 1的概率认为这些帧在传输过程中没有产生差错 ”。接收端丢弃的帧虽然曾 收到 了,但最终还是因为有差错被丢弃,即没有被 接受 。以上所述的可以 近似地 表述为(通常都是这样认为):“ 凡是接收端数据链路层接受的帧均无差错 ”。

传输差错可分为两大类:一类就是前面所说的最基本的比特差错,而另一类传输差错则更复杂些,这就是收到的帧并没有出现比特差错,但却出现了 帧丢失、帧重复或帧失序 。例如,发送方连续传送三个帧:[#1]-[#2]-[#3]。假定接收端收到的每一个帧都没有比特差错,但却出现下面的几种情况:
帧丢失:收到[#1]-[#3](丢失[#2])。
帧重复:收到[#1]-[#2]-[#2]-[#3](收到两个[#2])。
帧失序:收到[#1]-[#3]-[#2](后发送的帧反而先到达了接收端,这与一般数据链路层的传输概念不一样)。
以上三种情况都属于“出现传输差错”,但都不是这些帧里有“比特差错”。
应当明确,“无比特差错”与“无传输差错”并不是同样的概念。在 数据链路层使用CRC检验,能够实现无比特差错的传输,但这还不是可靠传输

对于通信质量良好的有线传输链路,数据链路层协议不使用确认和重传机制,即不要求数据链路层向上提供可靠传输的服务。如果在数据链路层传输数据时出现了差错并且需要进行改正,那么改正差错的任务就由上层协议(例如,运输层的TCP协议)来完成。
对于通信质量较差的无线传输链路,数据链路层协议使用确认和重传机制,数据链路层向上提供可靠传输的服务。

点对点协议PPP

我们知道,因特网用户通常都要连接到某个ISP才能接入到因特网。PPP协议就是用户计算机和ISP进行通信时所使用的数据链路层协议。
在这里插入图片描述
PPP协议应满足的需求
(1) 简单
接收方每收到一个帧,就进行CRC检验。如CRC检验正确,就收下这个帧;反之,就丢弃这个帧,其他什么也不做。
(2) 封装成帧
PPP协议必须规定特殊的字符作为帧定界符(即标志一个帧的开始和结束的字符),以便使接收端从收到的比特流中能准确地找出帧的开始和结束位置。
(3) 透明性
PPP协议必须保证数据传输的透明性。这就是说,如果数据中碰巧出现了和帧定界符一样的比特组合时,就要采取有效的措施来解决这个问题。
(4) 多种网络层协议
PPP协议必须能够在在同一条物理链路上同时支持多种网络层协议(如IP和IPX等)的运行。当点对点链路所连接的是局域网或路由器时,PPP协议必须同时支持在链路所连接的局域网或路由器上运行的各种网络层协议。
(5) 多种类型链路
除了要支持多种网络层的协议外,PPP还必须能够在多种类型的链路上运行。例如,串行的(一次只发送一个比特)或并行的(一次并行地发送多个比特),同步的或异步的,低速的或高速的,电的或光的,交换的(动态的)或非交换的(静态的)点对点链路。
(6) 差错检测(error detection)
PPP协议必须能够对接收端收到的帧进行检测,并立即丢弃有差错的帧。若在数据链路层不进行差错检测,那么已出现差错的无用帧就还要在网络中继续向前转发,因而会白白浪费许多的网络资源。
(7) 检测连接状态
PPP协议必须具有一种机制能够及时(不超过几分钟)自动检测出链路是否处于正常工作状态。当出现故障的链路隔了一段时间后又重新恢复正常工作时,就特别需要有这种及时检测功能。
(8) 最大传送单元
PPP协议必须对每一种类型的点对点链路设置 最大传送单元 MTU的标准默认值。这样做是为了促进各种实现之间的互操作性。如果高层协议发送的分组过长并超过MTU的数值,PPP就要丢弃这样的帧,并返回差错。需要强调的是,MTU是数据链路层的帧可以载荷的 数据部分 的最大长度,而 不是帧的总长度
(9) 网络层地址协商
PPP协议必须提供一种机制使通信的两个网络层(例如,两个IP层)的实体能够通过协商知道或能够配置彼此的网络层地址。协商的算法应尽可能简单,并且能够在所有的情况下得出协商结果。这对拨号连接的链路特别重要,因为仅仅在链路层建立了连接而不知道对方网络层地址时,则还不能够保证网络层可以传送分组。
(10) 数据压缩协商
PPP协议必须提供一种方法来协商使用数据压缩算法。但PPP协议并不要求将数据压缩算法进行标准化。

在TCP/IP协议族中,可靠传输由运输层的TCP协议负责,因此数据链路层的PPP协议不需要进行纠错,不需要设置序号,也不需要进行流量控制。PPP协议不支持多点线路(即一个主站轮流和链路上的多个从站进行通信),而只支持点对点的链路通信。此外, PPP协议只支持全双工链路。

PPP协议的组成
PPP协议有三个组成部分:
(1) 一个将IP数据报封装到串行链路的方法。PPP既支持异步链路(无奇偶检验的8比特数据),也支持面向比特的同步链路。IP数据报在PPP帧中就是其信息部分。这个信息部分的长度受最大传送单元MTU的限制。
(2) 一个用来建立、配置和测试数据链路连接的 链路控制协议LCP (Link Control Protocol)。通信的双方可协商一些选项。在RFC 1661中定义了11种类型的LCP分组。
(3) 一套 网络控制协议NCP (Network Control Protocol),其中的每一个协议支持不同的网络层协议,如IP、OSI的网络层、DECnet,以及AppleTalk等。

PPP协议的帧格式
PPP帧的首部和尾部分别为四个字段和两个字段。
在这里插入图片描述
首部的第一个字段和尾部的第二个字段都是标志字段F (Flag),规定为0x7E(符号“0x”表示它后面的字符是用十六进制表示的。十六进制的7E的二进制表示是01111110)。标志字段表示一个帧的开始或结束。因此标志字段就是PPP帧的定界符。连续两帧之间只需要用一个标志字段。如果出现连续两个标志字段,就表示这是一个空帧,应当丢弃。
首部中的地址字段A规定为0xFF(即11111111),控制字段C规定为0x03(即00000011)。最初曾考虑以后再对这两个字段的值进行其他定义,但至今也没有给出。可见这两个字段实际上并没有携带PPP帧的信息。
PPP首部的第四个字段是2字节的协议字段。当协议字段为0x0021时,PPP帧的信息字段就是IP数据报。若为0xC021,则信息字段是PPP链路控制协议LCP的数据,而0x8021表示这是网络层的控制数据。
信息字段的长度是可变的,不超过1 500字节。
尾部中的第一个字段(2字节)是使用CRC的帧检验序列FCS。

字节填充
当PPP使用异步传输时,它把转义符定义为0x7D(即01111101),并使用 字节填充 , RFC 1662规定了如下所述的填充方法:
(1) 把信息字段中出现的每一个0x7E字节转变成为2字节序列(0x7D, 0x5E)。
(2) 若信息字段中出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把0x7D转变成为2字节序列(0x7D, 0x5D)。
(3) 若信息字段中出现ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面要加入一个0x7D字节,同时将该字符的编码加以改变。例如,出现0x03(在控制字符中是“传输结束”ETX)就要把它转变为2字节序列(0x7D, 0x23)。
由于在发送端进行了字节填充,因此在链路上传送的信息字节数就超过了原来的信息字节数。但接收端在收到数据后再进行与发送端字节填充相反的变换,就可以正确地恢复出原来的信息。

零比特填充
PPP协议用在SONET/SDH链路时,是使用同步传输(一连串的比特连续传送)而不是异步传输(逐个字符地传送)。在这种情况下,PPP协议采用零比特填充方法来实现透明传输。
零比特填充的具体做法是:在发送端,先扫描整个信息字段(通常是用硬件实现,但也可用软件实现,只是会慢些)。只要发现有5个连续1,则立即填入一个0。因此经过这种零比特填充后的数据,就可以保证在信息字段中不会出现6个连续1。接收端在收到一个帧时,先找到标志字段F以确定一个帧的边界,接着再用硬件对其中的比特流进行扫描。每当发现5个连续1时,就把这5个连续1后的一个0删除,以还原成原来的信息比特流。这样就保证了透明传输:在所传送的数据比特流中可以传送任意组合的比特流, 而不会引起对帧边界的判断错误。
在这里插入图片描述

PPP协议的工作状态
当用户拨号接入ISP后,就建立了一条从用户PC到ISP的物理连接。这时,用户PC向ISP发送一系列的链路控制协议LCP分组(封装成多个PPP帧),以便建立LCP连接。这些分组及其响应选择了将要使用的一些PPP参数。接着还要进行网络层配置,网络控制协议NCP给新接入的用户PC分配一个临时的IP地址。这样,用户PC就成为因特网上的一个有IP地址的主机了。
当用户通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址。接着,LCP释放数据链路层连接。最后释放的是物理层的连接。
在这里插入图片描述
PPP链路的起始和终止状态永远是图中的“ 链路静止 ”(Link Dead)状态,这时在用户PC和ISP的路由器之间并不存在物理层的连接。
当用户PC通过调制解调器呼叫路由器时(通常是在屏幕上用鼠标点击一个连接按钮),路由器就能够检测到调制解调器发出的载波信号。在双方建立了物理层连接后,PPP就进入“ 链路建立 ”(Link Establish)状态,其目的是建立链路层的LCP连接。
这时LCP开始协商一些 配置选项 ,即发送LCP的 配置请求帧 (Configure-Request)。这是个PPP帧,其协议字段置为LCP对应的代码,而信息字段包含特定的配置请求。链路的另一端可以发送以下几种响应中的一种:
(1) 配置确认帧(Configure-Ack):所有选项都接受。
(2) 配置否认帧(Configure-Nak):所有选项都理解但不能接受。
(3) 配置拒绝帧(Configure-Reject):选项有的无法识别或不能接受,需要协商。

LCP配置选项包括链路上的最大帧长、所使用的 鉴别协议 (authenticationprotocol)的规约(如果有的话),以及不使用PPP帧中的地址和控制字段(因为这两个字段的值是固定的,没有任何信息量,可以在PPP帧的首部中省略这两个字节)。
协商结束后双方就建立了LCP链路,接着就进入“ 鉴别 ”(Authenticate)状态。在这一状态,只允许传送LCP协议的分组、鉴别协议的分组以及监测链路质量的分组。若使用 口令鉴别协议 PAP (Password Authentication Protocol),则需要发起通信的一方发送身份标识符和口令。系统可允许用户重试若干次。如果需要有更好的安全性,则可使用更加复杂的 口令握手鉴别协议 CHAP (Challenge-HandshakeAuthentication Protocol)。若鉴别身份失败,则转到“ 链路终止 ”(LinkTerminate)状态。若鉴别成功,则进入“ 网络层协议 ”(Network-Layer Protocol)状态。
在“ 网络层协议 ”状态,PPP链路的两端的网络控制协议NCP根据网络层的不同协议互相交换网络层特定的网络控制分组。这个步骤是很重要的,因为现在的路由器都能够同时支持多种的网络层协议。总之,PPP协议两端的网络层可以运行不同的网络层协议,但仍然可使用同一个PPP协议进行通信。
如果在PPP链路上运行的是IP协议,则对PPP链路的每一端配置IP协议模块(如分配IP地址)时就要使用NCP中支持IP的协议—— IP控制协议 IPCP (IP ControlProtocol)。IPCP分组也封装成PPP帧(其中的协议字段为0x8021)在PPP链路上传送。在低速链路上运行时,双方还可以协商使用压缩的TCP和IP首部,以减少在链路上发送的比特数。
当网络层配置完毕后,链路就进入可进行数据通信的“ 链路打开 ”(Link Open)状态。链路的两个PPP端点可以彼此向对方发送分组。两个PPP端点还可发送 回送请求 LCP分组(Echo-Request)和 回送回答 LCP分组(Echo-Reply),以检查链路的状态。
数据传输结束后,可以由链路的一端发出 终止请求 LCP分组(Terminate-Request)请求终止链路连接,在收到对方发来的 终止确认 LCP分组(Terminate-Ack)后,转到“ 链路终止 ”状态。如果链路出现故障,也会从“ 链路打开 ”状态转到“ 链路终止 ”状态。当调制解调器的载波停止后,则回到“ 链路静止 ”状态。
从设备之间无链路开始,到先建立物理链路,再建立链路控制协议LCP链路。经过鉴别后再建立网络控制协议NCP链路,然后才能交换数据。由此可见,PPP协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。

使用广播信道的数据链路层

广播信道可以进行一对多的通信。
局域网最主要的特点是:网络为一个单位所拥有,且地理范围和站点数目均有限
局域网具有如下的一些主要优点:
(1) 具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
(2) 便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变。
(3) 提高了系统的可靠性(reliability)、可用性(availability)和生存性(survivability)。

局域网可按网络拓扑进行分类。
图(a)是星形网。由于集线器(hub)的出现和双绞线大量用于局域网中,星形以太网以及多级星形结构的以太网获得了非常广泛的应用。
图(b)是环形网。
图©为总线网,各站直接连在总线上。总线两端的匹配电阻吸收在总线上传播的电磁波信号的能量,避免在总线上产生有害的电磁波反射。总线网以传统以太网最为著名。
在这里插入图片描述
共享信道要着重考虑的一个问题就是如何使众多用户能够合理而方便地共享通信媒体资源。这在技术上有两种方法:
(1) 静态划分信道,如在物理层中已经介绍过的频分复用、时分复用、波分复用和码分复用等。用户只要分配到了信道就不会和其他用户发生冲突。但这种划分信道的方法代价较高,不适合于局域网使用。
(2) 动态媒体接入控制 ,它又称为 多点接入 (multiple access),其特点是信道并非在用户通信时固定分配给用户。这里又分为以下两类:
随机接入 随机接入的特点是所有的用户可随机地发送信息。但如果恰巧有两个或更多的用户在同一时刻发送信息,那么在共享媒体上就要产生 碰撞 (即发生了 冲突 ),使得这些用户的发送都失败。因此,必须有解决碰撞的网络协议。
受控接入 受控接入的特点是用户不能随机地发送信息而必须服从一定的控制。这类的典型代表有分散控制的令牌环局域网和集中控制的多点线路 探询 (polling),或称为 轮询

计算机与外界局域网的连接是通过 通信适配器 (adapter)。适配器本来是在主机箱内插入的一块网络接口板(或者是在笔记本电脑中插入一块PCMCIA卡——个人计算机存储器卡接口适配器)。这种接口板又称为 网络接口卡 NIC (NetworkInterface Card)或简称为“ 网卡 ”。适配器和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的,而适配器和计算机之间的通信则是通过计算机主板上的I/O总线以并行传输方式进行的。
计算机通过适配器和局域网进行通信

CSMA/CD协议
最早的以太网是将许多计算机都连接到一根总线上。
总线的特点是:当一台计算机发送数据时,总线上的所有计算机都能检测到这个数据。这种就是广播通信方式。
总线上只要有一台计算机在发送数据,总线的传输资源就被占用。因此,在 同一时间只能允许一台计算机发送数据 ,否则各计算机之间就会互相干扰,使得所发送数据被破坏。
以太网采用的协调方法CSMA/CD,意思是 载波监听多点接入/碰撞检测 (Carrier Sense Multiple Access with Collision Detection)。
多点接入 ”就是说明这是总线型网络,许多计算机以多点接入的方式连接在一根总线上。协议的实质是“载波监听”和“碰撞检测”。
载波监听 ”就是用电子技术检测总线上有没有其他计算机也在发送。其实总线上并没有什么“载波”,这里只不过借用一下“载波”这个名词而已。因此载波监听就是 检测信道 ,这是个很重要的措施。 不管在发送前,还是在发送中,每个站都必须不停地检测信道 。在发送前检测信道,是为了获得发送权。如果检测出已经有其他站在发送,则自己就暂时不许发送数据,必须要等到信道变为空闲时才能发送。在发送中检测信道,是为了及时发现有没有其他站的发送和本站发送的碰撞。这就称为碰撞检测。
碰撞检测 ”也就是“ 边发送边监听 ”,即适配器边发送数据边检测信道上的信号电压的变化情况,以便判断自己在发送数据时其他站是否也在发送数据。当几个站同时在总线上发送数据时,总线上的信号电压变化幅度将会增大(互相叠加)。当适配器检测到的信号电压变化幅度超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。所谓“碰撞”就是发生了冲突。因此“碰撞检测”也称为“ 冲突检测 ”。这时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。因此,任何一个正在发送数据的站,一旦发现总线上出现了碰撞,其适配器就要立即停止发送,免得继续进行无效的发送,白白浪费网络资源,然后等待一段随机时间后再次发送。
在这里插入图片描述
显然,在使用CSMA/CD协议时,一个站 不可能同时进行发送和接收(但必须边发送边监听信道 。因此使用CSMA/CD协议的以太网不可能进行全双工通信而只能进行双向交替通信(半双工通信)
在t = 0时,A发送数据。B检测到信道为空闲。
在t = τ - δ 时(这里τ > δ > 0),A发送的数据还没有到达B时,由于B检测到信道是空闲,因此B发送数据。
经过时间δ / 2后,即在t = τ - δ / 2时,A发送的数据和B发送的数据发生了碰撞。但这时A和B都不知道发生了碰撞。
在t = τ 时,B检测到发生了碰撞,于是停止发送数据。
在t = 2τ - δ 时,A也检测到发生了碰撞,因而也停止发送数据。
A和B发送数据均失败,它们都要推迟一段时间再重新发送。
由此可见, 每一个站在自己发送数据之后的一小段时间内,存在着遭遇碰撞的可能性 。这一小段时间是 不确定的 ,它取决于另一个发送数据的站到本站的距离。因此,以太网 不能保证 某一时间之内一定能够把自己的数据帧成功地发送出去(因为存在产生碰撞的可能)。以太网的这一特点称为 发送的不确定性 。如果希望在以太网上发生碰撞的机会很小,必须使整个以太网的平均通信量远小于以太网的最高数据率。
最先发送数据帧的A站,在发送数据帧后 至多 经过时间2τ就可知道所发送的数据帧是否遭受了碰撞。这就是δ →0的情况。因此以太网的端到端往返时间2τ称为 争用期 (contention period),它是一个很重要的参数。争用期又称为 碰撞窗口 (collision window)。这是因为一个站在发送完数据后,只有通过争用期的“考验”,即 经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞 。这时,就可以放心把这一帧数据顺利发送完毕。

以太网使用 截断二进制指数退避 (truncated binary exponential backoff)算法来确定碰撞后重传的时机。
这种算法让发生碰撞的站在停止发送数据后,不是等待信道变为空闲后就立即再发送数据,而是 推迟 (这叫作 退避 )一个随机的时间。这点很容易理解,因为如果几个发生碰撞的站都在监听信道,那么都会同时发现信道变成了空闲。如果大家都同时再重新发送,那么肯定又会发生碰撞。为了使各站进行重传时再次发生冲突的概率减小。
(1) 协议规定了基本退避时间为争用期2τ
(2) 从离散的整数集合[0,1,…, (2k -1)]中随机取出一个数,记为r。重传应推后的时间就是r倍的争用期。上面的参数k按下面的公式计算:
在这里插入图片描述
当重传次数不超过10时,参数k等于重传次数;但当重传次数超过10时,k就不再增大而一直等于10。
(3) 当重传达16次仍不能成功时(这表明同时打算发送数据的站太多,以致连续发生冲突),则丢弃该帧,并向高层报告。

CSMA/CD协议的要点归纳如下:
(1) 准备发送:适配器从网络层获得一个分组,加上以太网的首部和尾部,组成以太网帧,放入适配器的缓存中。但在发送之前,必须先检测信道。
(2) 检测信道:若检测到信道忙,则应不停地检测,一直等待信道转为空闲。若检测到信道空闲,并在96比特时间内信道保持空闲(保证了帧间最小间隔),就发送这个帧。
(3) 在发送过程中仍不停地检测信道,即网络适配器要边发送边监听。这里只有两种可能性:
一是发送成功:在争用期内一直未检测到碰撞。这个帧肯定能够发送成功。发送完毕后,其他什么也不做。然后回到(1)。
二是发送失败:在争用期内检测到碰撞。这时立即停止发送数据,并按规定发送人为干扰信号。适配器接着就执行指数退避算法,等待 r倍512比特时间后,返回到步骤(2),继续检测信道。但若重传达16次仍不能成功,则停止重传而向上报错。
以太网每发送完一帧,一定要把已发送的帧暂时保留一下。如果在争用期内检测出发生了碰撞,那么还要在推迟一段时间后再把这个暂时保留的帧重传一次。

使用广播通信的以太网

使用集线器的星形拓扑
发展为使用更便宜和更灵活的双绞线。这种以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫做集线器(hub)。
在这里插入图片描述
集线器的一些特点如下:
(1) 从表面上看,使用集线器的局域网在物理上是一个星型网,但由于集线器是使用电子器件来模拟实际电缆线的工作,因此整个系统仍像一个传统以太网那样运行。也就是说,使用集线器的以太网在逻辑上仍是一个总线网,各站共享逻辑上的总线,使用的还是CSMA/CD协议(更具体些说,是各站中的适配器执行CSMA/CD协议)。网络中的各站必须竞争对传输媒体的控制,并且在同一时刻至多只允许一个站发送数据。因此这种10BASE-T以太网又称为星型总线(star-shaped bus)或盒中总线(bus in a box)。
(2) 一个集线器有许多接口,例如,8至16个,每个接口通过RJ-45插头(与电话机使用的插头RJ-11相似,但略大一些)用两对双绞线与一个工作站上的适配器相连(这种插座可连接4对双绞线,实际上只用2对,即发送和接收各使用一对双绞线)。因此,一个集线器很像一个多接口的转发器。
3) 集线器工作在物理层,它的每个接口仅仅简单地转发比特——收到1就转发1,收到0就转发0,不进行碰撞检测。若两个接口同时有信号输入(即发生碰撞),那么所有的接口都将收不到正确的帧。
(4) 集线器采用了专门的芯片,进行自适应串音回波抵消。这样就可使接口转发出去的较强信号不致对该接口接收到的较弱信号产生干扰(这种干扰即近端串音)。每个比特在转发之前还要进行再生整形并重新定时。

太网的信道利用率
下图的例子是以太网的信道被占用的情况。一个站在发送帧时出现了碰撞。经过一个争用期2τ后(τ是以太网单程端到端传播时延),可能又出现了碰撞。这样经过若干个争用期后,一个站发送成功了。假定发送帧需要的时间是T0。它等于帧长(bit)除以发送速率(10Mb/s)。
在这里插入图片描述
成功发送一个帧需要占用信道的时间是 T0 + τ ,比这个帧的发送时间要多一个单程端到端时延τ 。这是因为当一个站发送完最后一个比特时,这个比特还要在以太网上传播。在最极端的情况下,发送站在传输媒体的一端,而比特在媒体上传输到另一端所需的时间是τ 。因此,必须在经过时间 T0 + τ 后以太网的媒体才完全进入空闲状态,才能允许其他站发送数据。
要提高以太网的信道利用率,就必须减小τ 与 T0之比。在以太网中定义了参数a,它是以太网单程端到端时延τ 与帧的发送时间T0之比:
在这里插入图片描述
当 a→0时,表示只要一发生碰撞,就立即可以检测出来,并立即停止发送,因而信道资源被浪费的时间非常非常少。反之,参数a越大,表明争用期所占的比例增大,这就使得每发生一次碰撞就浪费了不少的信道资源,使得信道利用率明显降低。因此,以太网的参数a的值应当尽可能小些。从式可看出,这就要求上式分子τ 的数值要小些,而分母T0的数值要大些。这就是说,当数据率一定时,以太网的连线的长度受到限制(否则τ 的数值会太大),同时以太网的帧长不能太短(否则T0的值会太小,使a值太大)。

以太网的MAC层
在局域网中, 硬件地址 又称为 物理地址MAC地址(因为这种地址用在MAC帧中)。
“MAC地址”实际上就是 适配器地址适配器标识符 EUI-48。当这块适配器插入(或嵌入)到某台计算机后,适配器上的标识符EUI-48就成为这台计算机的MAC地址了。

MAC帧的格式
在这里插入图片描述
以太网V2的MAC帧比较为简单,由五个字段组成。前两个字段分别为6字节长的 目的地址源地址字段 。第三个字段是2字节的 类型字段 ,用来标志上一层使用的是什么协议,以便把收到的MAC帧的数据上交给上一层的这个协议。例如,当类型字段的值是0x0800时,就表示上层使用的是IP数据报。若类型字段的值为0x8137,则表示该帧是由Novell IPX发过来的。第四个字段是 数据字段 ,其长度在46到1500字节之间(46字节是这样得出的:最小长度64字节减去18字节的首部和尾部就得出数据字段的最小长度)。最后一个字段是4字节的 帧检验序列 FCS(使用CRC检验)。

计算机网络(4)网络层
计算机网络(5)传输层
计算机网络(6)应用层

猜你喜欢

转载自blog.csdn.net/yeqing1997/article/details/113098661