计算机网络笔记 3

数据链路层

数据链路层使用的信道主要分为以下两种类型:

  1. 点对点信道。一对一的点对点通信。

  2. 广播信道。一对多的广播通信方式。

基础概念

数据链路

链路和数据链路的区别:

链路(link)是从一个节点到相邻接点的一段物理线路,中间没有任何其他交换节点,只是一条路径的组成部分。

数据链路(data link)包括物理线路以及必要的通信协议来控制数据的传输。把实现这些协议的硬件和软件加到链路上,就构成了数据链路。

最常用的方法是使用网络适配器实现用于控制数据传输的协议。一般的适配器都包括了数据链路层和物理层两种功能。

注: 因为早期的数据通信协议也叫做通信规程(procedure)。规程和协议是同义词。

数据链路层把网络层下才来的数据构成发送到链路上,以及把接收到的中的数据取出并上交给网络层。

点对点信道

数据流向

为了主要关注数据链路层,使用3层和单层结构表示。

三层简化点对点数据链路层

单层简化点对点数据链路层

点对点的数据链路层进行通信的主要步骤如下:

  1. 节点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成

  2. 节点A把封装好的帧发送给节点B的数据链路层。

  3. 若节点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报交给上面的网络层,否则丢弃这个帧。

数据链路层不必考虑物理层如何实现比特传输的细节,甚至可以简单的设想数据是沿着两个数据链路层之间的水平方向把帧直接发送到对方。

基本问题

  1. 封装成帧

    封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,来构成帧。

    接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到比特流中识别帧的开始和结束。

    封装成帧

    网络层的IP数据报传送到数据链路层就成为帧的数据部分。在帧的数据部分的前面和后面分别添加上首部和尾部,就构成了完整的帧。

    一个帧的帧长等于帧的数据部分长度加上帧首部和帧尾部的长度。

    帧首部和尾部的作用不仅是进行帧定界,此外还包含许多必要的控制信息。

    在发送帧时,是从帧首部开始的。各种数据链路层的协议都对帧首部和帧尾部的格式有明确的规定。

    为了提高帧的传输效率,应当使帧的数据部分长度尽可能地大于首部和尾部的长度。但是,每一种链路层协议都规定了所能传送帧的数据部分的长度上限:最大传送单元MTU(Maximum Transfer Unit)

    当数据在传输中出现差错时,帧定界符就体现了它的作用。假定发送端在尚未发送完一个帧时突然出现故障,中断了发送,随后恢复正常,重头开始发送刚才未发送完的帧。在接收端,由于使用了帧定界符,接收端就知道前面收到的数据是不完整的帧,需要丢弃。下一个接收的帧是完整的帧,可以收下。

  2. 透明传输


    所谓透明传输,即在数据链路层透明传送数据,表示无论怎样的比特组合数据,都能够原样没有差错地通过这个数据链路层。也就是说,对于传送的数据,数据链路层是”透明”的。

    为了解决透明传输问题,在帧的数据部分绝对不可以出现链路层协议所定义的SOH(Start of Header)以及EOT(End of Transmission)。

    为了解决帧的数据部分出现假性”SOH”和”EOT”,具体方式是字节填充(byte stuffing)/字符填充(character stuffing),即发送端的数据在假性”SOH”或”EOT”之前插入一个转义字符(ESC),0x1B,在接收端的数据链路层把数据送往网络层之前删除这个插入的转义字符。如果转义字符也出现在数据中,那么就在转义字符之前插入一个转义字符。

    字节填充方法

  3. 差错检测

    比特差错: 比特在传输过程中可能会产生差错:1可能会变成0,0可能变成1。

    误码率BER(bit error rate): 在一段时间内,传输错误的比特占所传输比特总数的比率。

    首先,这里的差错仅指比特差错,但在比特差错之上,还会有帧丢失帧重复帧失序

    发送端发送帧: [#1]-[#2]-[#3]

    帧丢失: 接收端收到[#1]-[#3] 丢失[#2]

    帧重复:收到[#1]-[#2]-[#2]-[#3] 收到两个[#2]

    帧失序:收到[#1]-[#3]-[#2]

    无比特差错和无传输差错因此并不是同一个概念。因此在CRC检错(针对比特差错)的基础上增加了帧编号确认重传机制

    收到正确的帧就要向发送端发送确认。发送端在一定的期限内若没有收到对方的确认,就认为出现了差错,因而就进行重传,直到收到对方的确认的为止。

    目前的做法是,对于通信质量良好的有线传输线路,数据链路层协议不使用确认和重传机制,不要求数据链路层向上层提供可靠的传输服务。如果出错,改正差错的任务交由上层协议完成。对于通信质量较差的的无线传输链路,数据链路层协议使用确认和重传机制,向上层提供可靠传输的服务。

    此节仅针对比特差错问题进行讨论,目前在数据链路层广泛使用的是循环冗余检验CRC(Cyclic Redundancy Check)技术。

    在发送端,CRC利用预先约定好的除数P对帧数据作除法操作,最终的余数作为冗余码,又叫帧检验序列FCS(Frame Check Sequence),构成发送数据。

    在接收端,CRC以帧为单位进行检测。把接收的帧数据除以约定好的除数。如果得出的余数为0,判定此帧没有差错,接受。如果得出的余数不为0,判定此帧有差错,丢弃。

    使用多项式来表示CRC检验过程。此多项式称为生成多项式。

    目前广泛使用的生成多项式$ P(X) $包括:

    1. $ CRC-16 = X^{16} + X^{15} + X^{2} + 1 $

    2. $ CRC-CCITT = X^{16} + X^{12} + X^{5} + 1 $

    3. $ CRC-32 = X^{32} + X^{26} + X^{23} + X^{22} + X^{16} + X^{12} + X^{11} + X^{10} + X^{8} + X^{7} + X^{5} + X^{4} + X^{2} + X + 1 $

点对点协议PPP

点对点协议PPP(Point-to-Point Protocol)是在目前通信线路质量变好的情况下点对点链路使用的数据链路层协议。

PPP协议是用户计算机和ISP进行通信时所使用的数据链路层协议。

PPP协议应满足的需求:

  1. 简单


    互联网体系结构最复杂的部分是TCP协议,其次是IP网络协议,IP协议提供不可靠的数据报服务。


    在此基础上数据链路层没必要提供多于IP协议的功能。


    数据链路层协议: 接收方每收到一个帧,就进行CRC检验。如果CRC检验正确,就收下这个帧;反之,丢弃此帧。

  2. 封装成帧


    PPP协议必须规定特殊的字符作为帧定界符(SOH EOT),以便使接收端从收到的比特流中能准确地找出帧的开始和结束位置。

  3. 透明性


    PPP协议必须保证数据传输的透明性。

  4. 多种网络层协议


    PPP协议必须能够在同一条物理链路上同时支持多种网络层协议的运行。

  5. 多种类型链路


    PPP协议必须能够在多种类型的链路上运行。

  6. 差错检测(error detection)


    PPP协议必须能够对接收端收到的帧进行检测,并立刻丢弃有差错的帧

  7. 检测链接状态


    PPP协议必须具有一种机制能够及时自动检测出链路是否处于正常工作状态。

  8. 最大传送单元


    PPP协议必须对每一种类型的点对点链路设置最大传送单元MTU的标准默认值。


    如果高层协议发送的分组长度超过MTU的数值,PPP就要丢弃这样的帧,并返回差错。


    MTU是数据链路层的帧可以载荷的数据部分的最大长度,不是帧的总长度

  9. 网络层地址协商


    PPP协议必须提供一种机制使通信的两个网络层的实体能够通过协商知道或能够配置彼此的网络地址。

  10. 数据压缩协商


    PPP协议必须提供一种方法协商来使用数据压缩算法。

PPP协议只支持全双工链路。

PPP帧的格式

PPP帧的首部和尾部分别为四个字段和两个字段。

首部的第一个字段和尾部的第二个字段都是标志字段F(Flag),规定为0x7E,即二进制的01111110。标志字段表示一个帧的开始或结束,即PPP帧的定界符。

首部中的地址字段A规定为0xFF,即二进制的11111111。

首部中的控制字段C规定为0x03,即二进制的00000011。

首部中的第四个字段是2字节的协议字段。当协议字段为0x0021时,PPP帧的信息字段就是IP数据报。若为0xC021,信息字段是PPP协议链路控制协议LCP的数据。若为0x8021,信息字段是网络层的控制数据

信息字段的长度是可变的,不超过1500字节(MTU)。

尾部中第一个字段(2字节),是使用CRC检验的帧检验序列FCS。

当信息字段中出现和标志字段一样的比特(0x7E)组合时,就必须要采取一些措施使得这种形式上和标志字符一样的比特组合不出现在信息字段中。

当PPP使用异步传输(逐个字符地传送) 时,它把 转义符定义为0x7D,即二进制的01111101,并使用字节填充。填充方法如下:

  1. 把信息字段中出现的每一个0x7E转变为2字节序列(0x7D,0x5E)。

  2. 若信息字段中出现一个0x7D的字节,则把0x7D转变成为2字节序列(0x7D,0x5D)。

  3. 若信息字段中出现ASCII码中的控制字符,即小于0x20的字符,则在该字符前加入0x7D字节,同时改变该字符的编码。

当PPP协议用在SONET/SDH链路时,使用同步传输(一连串的比特连续发送)。在这种情况下,PPP协议采用零比特填充方法来实现透明传输,具体做法如下:

零比特填充

  1. 在发送端,扫描整个信息字段,只要发现有连续5个1,则立刻填入一个0。

  2. 接收端在接收到一个帧时,先找到标志字段F以确定一个帧的边界,接着对比特流进行扫描。

  3. 每发现5个连续的1时,删除后续的一个0,以还原成原来的信息比特流。

PPP协议的状态图

  1. 用户拨号接入ISP,建立从用户个人电脑到ISP的物理连接。

  2. 用户个人电脑向ISP发送一系列的链路控制协议LCP分组(封装成多个PPP帧),以便建立LCP连接。

  3. 进行网络层配置,网络控制协议NCP给新接入的用户个人电脑分配一个临时的IP地址。

  4. 用户通信完毕,NCP释放网络层连接,收回原来分配的IP地址。

  5. LCP释放数据链路层连接。

  6. 释放物理层的连接。

PPP链路的起始状态和终止状态永远是链路静止(Link Dead)状态,这时在用户个人电脑和ISP的路由器之间并不存在物理层的连接。

当用户个人电脑通过调制解调器呼叫路由器时,路由器就能够检测到调制解调器发出的载波信号。在双方建立了物理层连接后,PPP就进入链路建立(Link Establish)状态,目的是建立链路层的LCP连接。

LCP在建立连接后,开始协商一些配置选项,即发送LCP的配置请求帧(Configure-Request)。这也是一个PPP帧,其首部的协议字段置为LCP对应的代码(0xC021),而信息字段包含特定的配置请求。连路的另一端可以发送的响应有:

  1. 配置确认帧(Configure-Ack) 所有选项都接受。

  2. 配置否认帧(Configure-Nak) 所有选项都理解但不能接受。

  3. 配置拒绝帧(Configure-Reject) 所有选项有的无法识别或不能接受,需要协商。

LCP配置选项包括链路上的最大帧长,所使用的鉴别协议(authentication protocol)的规约,以及不使用PPP帧中的地址和控制字段。

协商结束后双方建立起了LCP链路,接着进入鉴别(Authenticate)状态。在这一状态,只允许传送LCP协议的分组,鉴别协议的分组以及监测链路质量的分组。若使用口令鉴别协议PAP(Password Authentication Protocol),则需要发起通信的一方发送身份标识符和口令。系统允许用户重试若干次,如果需要有更好的安全性,则可使用更复杂的口令握手鉴别协议CHAP(Challenge-Handshake Authentication Protocol)。若鉴定身份失败,则转到链路终止(Link Terminate)状态。若鉴别成功,则进入网络层协议(Network-Layer Protocol)状态。

网络层协议状态,PPP链路的两端的网络控制协议NCP根据网络层的不同协议相互交换网络层特定的网络控制分组,即PPP协议两端网络层可以运行不同的网络层协议,但仍然可以使用同一个PPP协议进行通信。

如果在PPP链路上运行的是IP协议,则对PPP链路的每一端配置IP协议模块时就要使用NCP中支持IP的协议-IP控制协议IPCP(IP Control Protocol)。IPCP分组也封装成PPP帧(帧的首部协议字段为0x8021)在PPP链路上传送。

当网络层配置完毕后,链路就进入可进行数据通信的链路打开(Link Open)状态。链路的连个PPP端点可以彼此向对方发送分组。两个PPP端点还可以发送回送请求LCP分组(Echo-Request)和回送回答LCP分组(Echo-Reply),以检查链路的状态。

数据传输结束后,可以由链路的一端发出终止请求LCP分组(Terminate-Request)请求终止链路连接,在收到对方发送的终止确认LCP分组(Terminate-Ack)后,转到链路终止状态。如果链路出现故障,也会从链路打开状态转到链路终止状态。当调制解调器的载波停止后,则回到链路静止状态。

广播信道

广播信道可以进行一对多的通信。

局域网的数据链路层

局域网最主要的特点是网络为一个单位所拥有,且地理范围和站点数目均有限

局域网具有如下优点:

  1. 具有广播功能,从一个站点可很方便的访问全网。局域网的主机可共享连接在局域网上的各种硬件和软件资源。

  2. 便于系统的扩展和逐渐演变,各设备的位置可灵活调整和改变。

  3. 提高了系统的可靠性,可用性和生存性。

局域网的拓扑

局域网按照网络拓扑分类,可分为星形网,环形网和总线网。

星形网的出现是因为集线器(hub)的出现和双绞线的大量应用。

环形网总线网的各站直连在总线上。总线两端的匹配电阻吸收再总线上传播的电磁波信号的能量,避免在总线上产生有害的电磁波反射。

局域网可使用多种传输媒体,双绞线最便宜,是局域网中的主流传输媒体,但只能在10Mbit/s至10Gbit/s上使用。在数据率比较高时,往往需要使用光纤作为传输媒体。

共享信道技术上实现众多用户合理而方便的使用共享信道媒体资源有两种方法:

  1. 静态划分信道


    频分复用,时分复用,波分复用,码分复用都在此列。用户只要分配到了信道就不会和其他用户发生冲突。但这种划分信道的方式代价较高,不适合局域网使用。

  2. 动态媒体接入控制,又称多点接入(multiple access)


    特点是信道并非在用户通信是固定分配给用户。

    1. 随机接入


      随机接入的特点是所有的用户可随机地发送信息。


      但如果恰巧有两个或更多的用户在同一时刻发送信息,那么在共享媒体上就要产生碰撞,使得这些用户的发送都失败。因此,必须有解决碰撞的网络协议。

    2. 受控接入


      受控接入的特点是用户不能随机地发送信息而必须服从一定的控制。


      这类的典型代表有分散控制的令牌环局域网和集中控制的多点线路探询(polling)或称为轮询

传统以太网用来称呼最早流行的10Mbit/s速率的以太网。
现今的以太网数据率已经演进到每秒吉比特乃至100吉比特。

为讨论原理,从传统以太网入手。

媒体接入控制MAC(Medium Access Control)

由于历史原因,局域网802标准难以形成一个统一的局域网标准。为了使数据链路层能更好的适应多种局域网标准,局域网的数据链路层拆分为逻辑链路控制层LLC(Logical Link Control)和媒体接入控制MAC(Medium Access Control)。与接入媒体有关的内容都放在MAC子层,LLC子层与传输媒体无关。

在以太网占据局域网市场的垄断地位后,802标准被淘汰,使用DIX Ethernet V2标准。此时LLC的作用已经消失,厂商的适配器仅存在MAC协议。

适配器

计算机通过适配器和局域网进行通信

计算机和外界局域网的链接是通过通信适配器(adapter)实现的。

原本计算机仅有PCMCIA卡,又称网络接口卡NIC(Network Interface Card),简称网卡。现今适配器已经集成到计算机主板上。这种适配器上装有处理器和存储器(RAM和ROM)。

适配器和局域网之间的通信是通过电缆或双绞线以串行运输方式进行的,而适配器和计算机之间的通信则是通过计算机主板的I/O总线以并行运输方式进行的。因此适配器的一个重要功能是进行数据串行传输和并行传输的转换。由于网络上的数据率和计算机总线上的数据率并不相同,因此在适配器中必须装有对数据进行缓存的存储芯片。

在主板插入适配器时,必须把管理该适配器的设备驱动程序安装在计算机操作系统中。这个驱动程序会告诉适配器额,应当从存储器的什么位置上把多长的数据块发送到局域网,或者应当在存储器的什么位置上把局域网传送的数据块存储下来。

适配器还需要能够实现以太网协议。

适配器在接收和发送各种帧时,不使用计算机的CPU。这时计算机中的CPU可以处理其他任务。

当适配器收到有差错的帧时,就把这个帧直接丢弃而不必通知计算机。当适配器收到正确的帧时,它就使用中断来通知该计算机,并交付协议栈中的网络层。

当计算机要发送IP数据报时,就由协议栈把IP数据报向下交给适配器,组装成帧后发送到局域网。

计算机的硬件地址在适配器的ROM中,计算机的软件地址-IP地址在计算机的存储器中。

CSMA/CD 协议

最早的以太网是将许多计算机都连接到一根总线上。当一台计算机发送数据时,总线上的所有计算机都能检测到这个数据,即广播通信。

为了在总线上实现一对一通信,可以使每一台计算机的适配器拥有一个与其他适配器都不同的地址。在发送数据帧时,在帧的首部写明接收站的地址。

仅在数据帧中的目的地址与适配器ROM中存放的硬件地址一致时,该适配器才能接收这个数据帧。适配器不是发送给自己的数据帧就丢弃。

局域网上的计算机也称为主机,工作站,站点,站。

为了通信的简便,以太网采取了以下两种措施:

  1. 采用较为灵活的无连接的工作方式,即不必先建立连接就可以直接发送数据。适配器对发送的数据帧不进行编号,也不要求对方发回确认。这样做可以使以太网工作起来非常简单,而局域网信道的质量很好,因通信质量不好产生差错的概率是很小的。因此,以太网提供的服务是尽最大努力的交付,即不可靠的交付


    当目的站收到有差错的数据帧时,就把帧丢弃,其他什么也不做。对有差错的帧是否需要重传则由高层决定


    在总线上,只要有一台计算机在发送数据,总线的传输资源就被占用。在同一时间只能允许一台计算机发送数据,否则各计算机之间就会互相干扰,使得所发送的数据被破坏。


    以太网采用最简单的随机接入,但有很好的协议用来减少冲突发生的概率,即CSMA/CD,**载波监听多点接入/碰撞检测(Carrier Sense Multiple Access with Collision Detection)**。

  2. 以太网发送的数据都使用曼彻斯特(Manchester)编码


    曼彻斯特编码的编码方法是把每一个码元再分成两个相等的间隔。码元1是前一个间隔为低电压而后一个间隔为高电压。码元0正好相反,从高电压到低电压。也可以采用相反的约定。


    但这样的操作会使得所占频带宽度会比原始的基带信号增加一倍。

CSMA/CD协议要点

多点接入说明这是总线型网络,许多计算机以多点接入的方式连接在一根总线上。

协议的实质是载波监听碰撞检测

载波监听是用电子技术检测总线上是否有正在发送的数据。它在检测信道。不管在发送前,还是发送中,每个站都必须不停地检测信道。

在发送前检测信道,是为了获得发送权。如果检测出已经有其他站在发送,则自己就暂时不许发送数据,必须要等到信道变为空闲时才能发送。

在发送中检测信道,是为了及时发现有没有其他站的发送和本站发送的碰撞,即碰撞检测。

碰撞检测边发送边监听。适配器边发送数据边检测信道上的信号电压的变化情况,以便判断自己在发送数据时其他站是否也在发送数据。

当几个站同时在总线上发送数据时,总线上的信号电压变化幅度将会增大(互相叠加)。当适配器检测到的信号电压变化幅度超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,产生了碰撞。此时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息。因此,任何一个正在发送数据的站一但发现总线上出现了碰撞,其适配器就要立刻停止发送,免得继续进行无效的发送,浪费网络资源,然后等待一段随机时间后再次发送。

传播时延对载波监听的影响

设图中的局域网两端的站A和B相距1km,用同轴电缆相连。

电磁波在1km电缆的传播时延约为5微秒

A向B发出的数据,约在5微秒后才能传送到B。B若在A发送的数据到达B之前发送自己的帧,则必然要在某个时间和A发送的帧发生碰撞。

假设总线上单程端到端传播时延为$ \tau $。

A在发送数据后,最迟要经过两倍的总线端到端的传播时延($ 2\tau $) 才能知道自己发送的数据和其他站发送的数据有没有发生碰撞。

由于局域网上任意两个站之间的传播时延有长有短,因此局域网必须按最坏情况设计,即取总线两端的两个站之间的传播时延(距离最大的两个站)为端到端传播时延。

显然,在使用CSMA/CD协议时,一个站不可能同时进行发送和接收(但必须边发送边监听信道)。因此,使用CSMA/CD协议的以太网不可能进行全双工通信,只能进行双向交替通信/半双工通信

  1. 在$ t=0 $时,A发送数据。B检测到信道为空闲。

  2. 在$ t = \tau - \delta, \tau > \delta > 0 $时,A发送的数据还没有到达B时,由于B检测到信道是空闲的,因此B发送数据。

  3. 经过时间$ \delta / 2 $后,即在$ t = \tau - \delta / 2 $时,A发送的数据和B发送的数据发生了碰撞。但这时A和B都不知道发生了碰撞。

  4. 在$ t = \tau $时,B检测到发生了碰撞,于是停止发送数据。

  5. 在$ t = 2\tau - \delta $时,A也检测到发生了碰撞,因此也停止发送数据。

  6. A和B发送数据均失败,他们都要推迟一段时间再重新发送。

每一个站在自己发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。这一小段时间是不确定的,它取决于另一个发送数据的站到本站的距离。因此,以太网不能保证某一时间之内一定能够把自己的数据帧成功地发送出去。这一特点称为以太网的发送的不确定性

要使在以太网上发生碰撞的机会很小,必须使整个以太网的平均通信量远小于以太网的最高数据率。

最先发送数据帧的A站,在发送数据帧后至多经过时间$ 2\tau $就能够知道所发送的数据帧是否遭受到了碰撞。这是$ \delta → 0 $的情况。因此,以太网的端到端往返时间$ 2\tau $称为**争用期(contention period)/碰撞窗口(collision window)**。

以太网使用**截断二进制指数退避(truncated binary exponential backoff)**算法来确定碰撞后重传的时机。

在发生碰撞后,该算法让站在停止发送数据后,不是等待信道变为空闲后就立刻再发送数据,而是推迟/退避一个随机的时间。

具体的退避算法如下:

  1. 协议规定了基本退避时间为争用期$ 2\tau $,具体的争用期时间是51.2微秒。对于10Mbit/s以太网,在争用期内可发送512bit,即64字节。也可以说争用期是512比特时间。

  2. 从离散的整数集合$ [0,1,\cdots,(2^k-1)] $中随机取出一个数,记为r。重传应推后的时间就是r倍的争用期。上面的参数k按$ 式 \eqref{eq:one} $计算:


    $$ k=Min[重传次数,10] \tag{1} \label{eq:one}$$
    可见当重传次数不超过10时,参数k等于重传次数;但当重传次数超过10时,k就不再增大而一直等于10。
  3. 当重传次数达到16次仍不能成功时,则丢弃此帧,并向高层报告。

为什么要考虑这种情况?现考虑一种情况,某个站发送了一个很短的帧。但在发送完毕之前并没有检测出碰撞。假定这个帧在继续向前传播到达目的站之前和别的站发送的帧发生了碰撞,因而目的站将收到这个有差错的帧,并丢弃。可是发送站不知道这个帧发生了碰撞,因而不会重传这个帧。为避免发生这种情况,以太网规定了一个最短帧长64字节。如果发送的数据非常少,必须加入填充字节,使得帧长不小于64字节。

以上,以太网在发送数据时,如果在争用期没有发生碰撞,那么后续发送的数据就一定不会发生冲突。也就是说,如果发生碰撞,一定是在发送的前64字节内。

由于一检测到冲突就立刻中止发送,这时已经发送出去的数据一定小于64字节,因此,长度小于64字节的帧都是由于冲突而异常中止的无效帧。只要收到这种无效帧,就应当立即将其丢弃。

以太网的争用期确定为51.2微秒,不仅考虑到以太网的端到端时延,而且还包括其他的许多因素,例如存在的转发器所增加的时延,以及强化碰撞的干扰信号的持续时间。

强化碰撞是指当发送数据的站一旦发现发生了碰撞时,除了立即停止发送数据外,还要继续发送32bit/48bit的**人为干扰信号(jamming signal)**,以便让所有用户都知道现在已经发生了碰撞。

人为干扰信号的加入

B站得知发生碰撞后也要发送人为干扰信号,忽略。

A站从发送数据开始到发现碰撞并停止发送的时间间隔是$ T_B $。A站得知碰撞已经发生时所发送的强化碰撞的干扰信号的持续时间是$ T_J $。发生碰撞使A浪费时间$ T_B + T_J $。可是整个信道被占用的时间还要增加一个单程端到端时延$ \tau $。因此,总线被占用的时间是$ T_B + T_J + \tau $。

以太网还规定了帧间最小间隔为9.6微秒。相当于96比特时间。这样做是使得刚接收数据帧的站的接收缓存来得及清理,做好接收下一帧的准备。

CSMA/CD协议的要点归纳如下:

  1. 准备发送:适配器从网络层获得一个分组,加上以太网的首部和尾部,组成以太网帧,放入适配器的缓存中。但在发送之前,必须先检测信道

  2. 检测信道:若检测到信道忙,则应不停地检测,一直等待信道转为空闲,若检测到信道空闲,并在96bit时间内信道保持空闲(帧间最小间隔),就发送这个帧。

  3. 在发送过程中仍不停地检测信道,即网络适配器要边发送边监听。这里只有两种可能性:

    1. 发送成功:在争用期内一直未检测到碰撞。这个帧肯定能够发送成功。发送完毕后,什么也不做,返回第1步。

    2. 发送失败:在争用期内检测到碰撞。这时立即停止发送数据,并按规定发送人为干扰信号。适配器接着就执行指数退避算法,等待r倍512比特时间后,返回第2步,继续监测信道。若重传16次仍不能成功,则停止重传而向上报错。

以太网每发送完一帧,一定要把已发送的帧暂时保留一下。如果在争用期内检测出发生了碰撞,那么在推迟一段时间后再把这个暂时保留的帧重传一次。

使用集线器的星型拓扑

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2022 eightyninth
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信