小黎一天学一章,小黎真棒
上一章笔记的图片尺寸有些过于大了…
小黎懒得改,小黎真懒
数据链路层概述
- 链路:从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点
- 数据链路:把实现通信协议的硬件和软件加到链路上,就构成了数据链路
- 数据链路层以帧为单位传输和处理数据
使用点对点信道的数据链路层
封装成帧
数据链路层给网络层交付的协议数据单元添加帧头和帧尾的操作,称为封装成帧。添加帧头和帧尾都是为了在链路上以帧为单元传送数据,也就是为了实现数据链路层本身的功能。
差错检测
发送方将封装好的帧通过物理层发送到传输媒体,帧在传输过程中遭遇干扰后可能会出现误码(0变成1,1变成0)。发送方在发送数据之前,基于待发送的数据和检错算法计算出检错码,并将其封装在帧尾;接收方主机收到帧后,通过检错码和检错算法能够判断出帧在传输过程中是否出现了误码。
可靠传输
尽管误码不能完全避免,但若能实现发送方发送什么,接收方就能收到什么,就称为可靠传输。
使用广播信道的数据链路层
- 编址问题:将帧的目的地址放在帧中一起传输
- 碰撞问题:多个主机同时使用总线传输帧时,传输信号会发生碰撞。
(共享式以太网的媒体接入控制协议CSMA/SD、802.11局域网的媒体接入控制协议CSMA/CA)
数据链路层的互连设备
- 网桥和交换机的工作原理
- 集线器(物理层互连设备)与交换机的区别
封装成帧
帧定界
- 帧头和帧尾的作用之一就是帧定界
- 并不是所有帧头和帧尾都包含帧定界标志,物理层会给其添加前导码,其中包括前同步码和帧开始定界符。另外以太网还规定了帧间间隔时间,故MAC不需要帧结束定界符。
透明传输
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。(例如不要求不能出现帧定界符,通过扫描上层传输数据并在与帧定界符相同内容前面添加转义字符解决
- 面向字节的物理链路使用字节填充(字符填充)的方法实现透明传输
- 面向比特的物理链路使用比特填充的方法实现透明传输
传输效率
- 为了提高帧的传输速率,应当使帧的数据部分长度尽可能大些。
- 考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU。
差错检测
- 实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1可能变成0,0可能变成1,这称为比特差错。
- 在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER。
- 使用差错检测来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
奇偶校验
- 在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中1的个数为奇数(奇校验)或偶数(偶校验)
- 如果有奇数个位数发生误码,则奇偶性发生变化,可以检查出误码
- 如果有偶数个位数发生误码,则奇偶性不发生变化,不可以检查出误码(漏检)
(太弱了,一般不用
循环冗余校验CRC(Cyclic Redundancy Check)
- 收发双方约定好一个生成多项式G(x)
- 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到代传输数据的后面一起传输
- 接收方通过生成多项式来计算收到的数据是否产生了误码
发送方
- 待发送的数据作为被除数的一部分,后面添加生成多项式最高次个0以构成被除数。
- 生成多项式各项系数构成的比特串作为除数
- 相除得到的余数作为冗余码,将其添加到待发送数据的后面一起发送
- 冗余码的长度与生成多项式最高次数相同,商仅作为标记,防止计算过程中对错位
接受方
- 已接收的数据作为被除数。
- 生成多项式各项系数构成的比特串作为除数
- 相除得到的余数如果为0则可以判定传输过程没有产生误码,否则产生了误码
特别说明
- 检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误
- 要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用
- 循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层
- 在计算机网络中通常采用检错重传方式来纠正传输中的差错,或者仅丢弃检测到差错的帧,这取决于数据链路层向上层提供的传输服务是否可靠
可靠传输
基本概念
- 一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由上层处理。
- 无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
- 传输差错种类:比特差错、分组丢失、分组失序、分组重复。后面三种差错一般不会出现在数据链路层,而会出现在其上层。
- 可靠传输服务不仅局限于数据链路层,其他各层均可实现可靠传输
- 可靠传输的实现比较复杂,开销也比较大。是否使用可靠传输取决于应用需求
可靠传输的实现机制
(这三种可靠传输实现机制的基本原理并不仅限于数据链路层,可以应用到计算机网络体系结构的各层协议中
停止-等待协议SW(Stop-and-Wait)/自动请求重传ARQ(Automatic Repeat reQuest)
确认与否认
- 发送方给接收方发送数据分组,接收方收到后进行差错检测检测,若没有误码则接受该分组,给发送方发送确认分组(ACK)。发送方收到接收方的确认分组后,才能发送下一个数据分组。
- 若发现了误码,则丢弃该分组,并给发送方发送否认分组(NAK)。发送方收到否认分组后重传数据分组。因此发送方发送完成数据分组后,并不能立刻将该数据分组从缓存中删除,只有收到确认分组才可删除。
超时重传
(对于数据链路点对点信道而言不太容易出现这种情况,但对于多个网络通过多个路由器互联的复杂互联网而言,这种情况会经常出现。
- 为避免发送方一直等待接收方ACK或NAK的状态,可以启用超时计时器,若超过计时器所设置的重传时间,则重传原先的数据分组,称为超时重传。
- 一般重传时间略大于从发送方到接收方的平均时间。
确认丢失
- 若接收方发送的ACK在传输过程中丢失,会导致发送方的超时重传,从而导致分组重复
- 为避免分组重复,给每个分组带上序号。
- 对于停止-等待协议,由于每发送一个分组就停止等待,只要保证每发送一个新的数据分组,其编号与上一组不同即可,因此只用一个比特来编号即可。
确认迟到
(对于数据链路点对点信道而言不太容易出现这种情况,往返时间比较固定,不会出现确认迟到的情况。因此如果只在数据链路层实现该协议,可以不用给确认组编号。
- 由于某些原因确认分组迟到了,导致超时重传。在重传的过程中发送方收到了迟到的确认分组,再次发送下一分组。而此时发送方接收到了重传的分组,再次发送确认分组,导致发送方误认为是对下一分组的确认。
- 为避免该种误判,需要对确认分组进行编号。
注意事项
- 数据链路层点对点往返时间比较确定,重传时间比较好设定
- 运输层由于端到端往返时间不确定,设置合适的重传时间有时并不容易
信道利用率
- 图中忽略了接收方对数据分组的处理时延,以及发送方对确认分组的处理时延
- 一般TA都远小于TD,可以忽略
- 当RTT远大于TD时(例如使用卫星链路),信道利用率会非常低。若出现重传,利用率会更低。
- 为克服SW协议信道利用率低的缺点,产生了GBN协议和SR协议。
回退N帧协议GBN(Go-Back-N)
该协议在流水线传输的基础上,利用发送窗口来限制发送方可连续发送数据分组的个数。如图所示:
- 本例采用3个比特给分组编号,即序号0-7
- 发送窗口的尺寸WT的取值为:1 <= WT <= 2^3 - 1,本例取5
- 接收窗口的尺寸WR只能取1,与停止等待协议相同
无差错情况
- 发送发将落在发送窗口内的0-4号数据分组,依次连续发送出去
- 数据分组经过互联网的传输,没有出现乱序和误码,正确地到达了接收方
- 接收方按序接受数据,每接收一个,接收窗口就向前滑动一个位置,并给发送方发送针对所接收分组的确认分组
- 确认分组经过互联网的传输,没有出现乱序和误码,正确地到达了发送方
- 发送方按序接受数据,每接收一个,发送窗口就向前滑动一个位置,这样就有新的序号落入发送窗口,发送方将收到确认分组的数据分组从缓存中删除
累积确认
接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后对按序到达的最后一个数据分组发送确认。ACKn表示序号为n及以前的所有数据分组都已正确接收。
- 发送发将落在发送窗口内的0-4号数据分组,依次连续发送出去
- 数据分组经过互联网的传输,没有出现乱序和误码,正确地到达了接收方
- 接收方按序接受数据,当接受完0-1号数据分组后,发送累计确认ACK1;接受完2-4号数据分组后,发送累计确认ACK4
- 假设ACK1丢失,ACK4正确到达
- 发送方接受ACK4之后,知道了序号为4及之前的数据分组已经被正确接收。于是移动窗口,删除缓存。
-
优点
- 即使确认分组丢失,发送方也可能不必重传
- 此外,还能减少接收方的开销,减少对网络资源的占用
-
缺点
- 不能向发送方及时反映出接收方已经正确接收的分组信息
有差错情况
- 发送发将落在发送窗口内的5-6-7-0-1-2号数据分组,依次连续发送出去
- 数据分组经过互联网的传输,5号数据分组出现误码
- 接收方按序接受数据,发现5号数据分组的错误,于是丢弃该数据分组。后续到达的四个分组的序号与接收窗口中的序号不匹配,接收方也不能接受,将其丢弃,并对之前按序接收的最后一个数据分组进行确认,即发送ACK4。每丢弃一个数据分组,就发送一次ACK4。
- 四个ACK4经过互联网的传输,没有出现乱序和误码,正确地到达了发送方
- 发送方收到重复的ACK4时,知道了之前发送的数据分组出现差错,于是可以不等超过计时器超时就立即重传。至于收到几个重复确认就立刻重传,由具体实现决定。
在本例中,尽管序号为6-7-0-1的数据分组正确到达接收方,但由于5号数据分组误码不被接受,它们也“受到牵连”而不被接受,发送方还要重传这些数据分组,这就是所谓的Go-Back-N(回退N帧)
可见,当通信线路质量不好时,回退N帧协议的信道利用率并不比停止-等待协议高。
发送窗口尺寸超过上限
- 发送发将落在发送窗口内的0-7号数据分组,依次连续发送出去
- 数据分组经过互联网的传输,没有出现乱序和误码,正确地到达了接收方
- 接收方按序接受数据,每接收一个,接收窗口就向前滑动一个位置,并给发送方发送针对所接收分组的确认分组
- 确认分组经过互联网的传输丢失,没有到达发送方
- 发送方超时重传,重复发送0-7号数据分组
- 接收方重复接收之前的0-7号数据分组。即接收方无法分辨新旧分组,进而产生分组重复这种数据差错。
回退N帧协议小结
- 回退N帧协议在流水线传输的基础上利用发送窗口来限制发送方连续发送数据分组的数量,是一种连续ARQ协议。
- 在协议工作过程中发送窗口和接收窗口不断向前滑动,因此这类协议又称为滑动窗口协议。
- 由于回退N帧协议的特性,当通信线路质量不好时,其信道利用率并不比停止-等待协议高。
选择重传协议SR(Selective Request)
- 回退N帧协议的接收窗口尺寸只能等于1,因此接受方只能按序接收正确到达的数据分组。
- 一个数据分组的误码就会导致其后续多个数据分组不能被接收方按需接收而丢弃(尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大浪费。
- 为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸不再等于1,而应大于1,以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后再一并送交上层。这就是选择重传协议。
- 选择重传协议为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,而需要对每个正确接收到的数据分组进行逐一确认。
工作原理
- 本例采用3个比特给分组编号,即序号0-7
- 发送窗口的尺寸WT的取值为:1 <= WT <= 2^(3 - 1),本例取4
- 接收窗口的尺寸WR一般情况下和发送窗口尺寸WT相同,本例取4
- 发送发将落在发送窗口内的0-3号数据分组,依次连续发送出去
- 数据分组经过互联网的传输,但其中的2号数据分组出现丢失
- 只要序号落入接收窗口内且无误码的分组,接收方都会接收。此时接收窗口为0-1-2-3。
- 接收方接收0号和1号数据分组,并发送0号和1号确认分组。接收窗口向前滑动两个位置。这样就有4和5这两个新的信号落入接收窗口。
- 接收方接收3号数据分组,并发送三号确认分组,但接收窗口不能向前滑动,因为3号分组是未按序到达的数据分组。
- 确认分组经过互联网的传输,陆续到达了发送方
- 发送方按序接接收确认分组,每接收一个,发送窗口就向前滑动一个位置。发送方接收0号和1号确认分组,发送窗口向前滑动两个位置,这样就有4-5新的序号落入发送窗口。
- 发送方将序号落入发送窗口的4号和5号发送窗口的数据分组发送出去,并将已确认收到的0和1号数据分组从发送缓存中删除。
- 发送方接收3号确认分组,但发送窗口不能向前滑动,因为这是一个未按序到达的确认分组。但需要记录3号数据分组已收到确认,这样该数据分组就不会超时重发。
- 假设在4号和5号确认分组的传输过程中,发送方针对2号数据分组的重传计时器超时,发送方重新发送2号数据分组。
- 4号和5号数据分组到达接收方,接收方接收它们并发送4号和5号确认分组,但接收窗口不能向前滑动,因为是未按序到达的数据分组。但需要记录4号和5号数据分组已收到确认,这样就不会超时重发。
- 发送方之前重传的2号数据分组到达接收方,接收方接收该数据分组,并发送2号数据分组。由于之前3-4-5已标记收到,此时接收窗口可以向前滑动四个窗口,这样就有6-7-0-1这四个新的序号落入接收窗口。
- 2号确认分组经过互联网的传输到达发送方,发送方接收该确认分组。由于之前3-4-5已标记发送,此时发送窗口可以向前滑动四个窗口,这样就有6-7-0-1这四个新的序号落入发送窗口。
- 此时发送方可以继续将6-7-0-1这四个序号的数据分组发送出去。
发送窗口和接收窗口的尺寸问题
发送方的发送窗口尺寸WT必须满足1 < WT <= 2^(n-1) ,其中n是构成分组序号的比特数量。
- 若WT = 2,则与停止-等待协议相同。
- 若WT > 2^(n-1),则会导致接收方无法辨析新旧数据分组的问题。
接收方的接收窗口尺寸WR必须满足1 < WR <= WT。
- 若WR = 1,则回退N帧协议相同。
- 若WR > WT,则没有意义。
发送窗口尺寸过大
- 本例采用3个比特给分组编号,即序号0-7
- 发送窗口的尺寸WT的取值为:1 <= WT <= 2^(3 - 1),本例取5
- 接收窗口的尺寸WR一般情况下和发送窗口尺寸WT相同,本例取5
- 发送发将落在发送窗口内的0-4号数据分组,依次连续发送出去
- 接收方接收0-4号数据分组,并发送0-4号确认分组。接收窗口向前滑动5个位置。这样就有5-6-7-0-1这5个新的信号落入接收窗口。
- 确认分组经过互联网的传输,陆续到达发送方,但其中0号确认分组丢失。
- 发送方按序接收确认分组,并记录1-4号数据分组已收到确认,发送窗口不能向前移动。
- 发送方针对0号数据分组的重传计时器超时,发送方重新发送0号数据分组。
- 0号确认分组经过互联网的传输到达发送方,其序号0落在窗口内,接收方接收。但接收方先前已经正确接收过该数据分组,现在再次接收,接收方无法辨析新旧分组,会导致出现重复传输的传输差错。
选择重传协议小结
点对点协议PPP(Point-to-Point Protocol)
PPP协议为在点对点链路传输各种协议数据提供了一个标准方法,主要由以下三部分构成:
- 对各种协议数据报的封装方法(封装成帧)
- 链路控制协议LCP:用于建立、配置以及测试数据链路的连接
- 一套网络控制协议NCPs:其中的每一个协议支持不同的网络层协议
帧格式
- 标志(Flag)字段:PPP帧的定界符,取值为0x7E
- 地址(Address)字段:取值为0xFF,预留
- 控制(Control)字段:取值为0x03,预留
- 协议(Protocol)字段:指明帧的数据部分交送哪个协议处理
- 帧检查序列(Frame Check Sequence):使用循环冗余校验CRC计算出的校验位,用于检查PPP帧是否存在误码
其中预留的俩字段在创建之初都说以后有用,但是目前都没啥用(可能在韬光养晦 (也有可能单纯地忘了
透明传输
- 面向字节的异步链路:使用字节填充法,插入转义字符
- 面向比特的同步链路:使用比特填充法,插入比特0
字节填充法
发送方
- 出现的每一个7E(PPP的定界符)字节变成2字节序列(7D,5E)
- 出现的每一个7D(转义字符)字节变成2字节序列(7D,5D)
- 出现的每一个ASCII码控制字符(数值小于0x20的字符),则在该字符前面插入一个7D字节,同时将该字符的编码加上0x20
接收方
进行反变换即可恢复出原来帧的数据部分
比特填充法
发送方
对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,则立即填充1个比特0。
接收方
对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,则把后面的1个比特0删除。
差错检测
接收方每收到一个PPP帧,就进行CRC检验。若CRC检验正确,就收下这个帧,反之则丢弃。使用PPP的数据链路层向上不提供可靠传输服务。
工作状态(以拨号接入为例)
- PPP的开始和结束状态都是“静止”状态,这时并不存在物理层的链接
- 当检测到调制解调器的载波信号,并建立物理层连接后,PPP就进入链路的“建立”状态
- 这时,链路控制协议LCP开始协商一些配置选项。若协商成功,则进入“鉴别”状态;若协商失败,则退回到“静止”状态。所协商的配置包括最大帧长、鉴别协议等。
- 可以不使用鉴别,也可以使用口令鉴别协议PAP,或挑战握手鉴别协议CHAP。若通信双方无需鉴别或鉴别身份成功,则进入“网络”状态;若鉴别失败,则进入“终止”状态。
- 进入“网络”状态后,进行NCP配置。配置完成后,进入“打开”状态。
- PPP链路的两端通过互相交换网络层特定的NCP分组来进行NCP配置。如果链路上运行的是IP协议,则使用IP控制协议IPCP来对PPP链路的每一端配置IP模块(如配置IP地址
- 只要链路处于“打开”状态,就可以进行数据通信。当出现故障或链路的一端发出终止请求时,就进入“终止”状态。当载波停止后,则回到“静止状态”。
媒体接入控制MAC(Medium Access Control)
共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC。
随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路交换机的交换式局域网在有线领域已经完全取代了共享式局域网。但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体技术。
静态划分信道
信道复用
- 复用:通过一条物理线路同时传输多条用户的信号
当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可利用信道复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽。
常见的信道复用技术:
频分复用FDM
将传输线路的频带资源划分成多个子频带,形成多个子信道。各子信道之间需要留出隔离频带,以免造成子信道之间的干扰。当多个信号输入一个多路复用器时,这个复用器将每一路信号调制到不同频率的载波上,接收端由相应的分用器通过滤波将各路信号分开,将合成的复用信号恢复成原始的多路信号。显然,频分复用的所有用户同时占用不同的频带资源并行通信。
时分复用TDM
将传输线路的带宽资源按时隙轮流分配给不同的用户,每对用户只在所分配的时隙里使用线路传输数据。时分复用技术将时间划分成了一段段等长的时分复用帧,每一个时分复用的用户在每一个时分复用帧中占用固定序号的时隙。显然,时分复用的所有用户在不同的时间占用同样的频带宽度。
波分复用WDM
波分复用其实就是光的频分复用。如图为8路传输速率均为2.5Gbit/s的光载波,其波长均为1310nm。经光调制后,分别将波长变换到1550-1561.2nm,每个光载波相隔1.6nm。这8个波长很接近的光载波,经过光复用器(合波器)在一根光纤中传输。因此,在一根光纤上数据传输的总速率就达到了8*2.5Gbit/s = 20Gbit/s。光信号传输一段距离后会衰减,因此对衰减了的光信号必须进行放大才能继续传输。
码分复用CDM
码分复用CDM是另一种共享信道的方法。实际上该技术主要用于多址接入,人们更常用的名词是码分多址CDMA(Code Division Multiple Access)。同理,频分复用FDM和时分复用TDM同样可以用于多址接入,相应的名词为频分多址FDMA(Frequency Division Multiple Access)和时分多址TDMA(Time Division Multiple Access)。
本课程中不严格区分复用与多址的概念,可以简单理解如下:
- 复用是将单一媒体的频带资源划分成多个子信道,这些信道之间相互独立,互不干扰。从媒体的整体频带资源上开,每个子信道只占用该媒体频带资源的一部分。
- 多址(更确切地应该称为多点接入)处理的是动态分配信道给用户。这在用户仅仅暂时性地占用信道的应用中是必须的,而所有的移动通信系统基本上都属于这种情况。相反,在信道永久性地分配给用户的应用中,多址是不需要的(对于无线广播或电视广播站就是这样)。
- 从某种程度上看,FDMA、TDMA、CDMA可以看成是FDM、TDM、CDM的应用。
与FDM和TDM不同,CDM的每一个用户可以在同样的时间使用同样的频带进行通信。由于各用户使用经过特殊挑选的不同码型,因此用户之间不会造成干扰。
在CDMA中,每一个比特时间再划分为m个短的间隔,称为码片(Chip)。通常m的取值为64或128。使用CDMA的每一个站被指派一个唯一的m bit码片序列(Chip Sequence):
- 一个站如果要发送比特0,则发送其自身的m bit码片序列
- 一个站如果要发送比特1,则发送其自身的m bit码片序列的二进制反码
- 为方便起见,习惯将码片序列中的0写为-1,1写为+1
- 这种通信方式称为直接序列扩频DSSS
码片序列的挑选原则:
- 分配给每个站的码片序列必须各不相同,实际常采用伪随机码序列
- 分配给每个站的码片序列必须正交(规格化内积为0)
- 令向量S表示站S的码片序列,令向量T表示其他任何站的码片序列
- 两个不同站S和T的码片序列正交,就是向量S和T的规格化内积为0
- $S\cdot T\equiv0
S\cdot \bar{T}\equiv0S\cdot S\equiv 1~~ S\cdot\bar{S}\equiv -1$
CDMA应用举例:
随机接入
CSMA/CD(Carrier Sense Multiple Access/Collision Detection)协议
多址接入(Multiple Access):
- 多个站连接在一条总线上,竞争使用总线
载波监听(Csrrier Sense):
- 每一个站在发送帧之前先要检测一下总线上是否有其他站点正在发送帧(“先听后说”)
- 若检测总线空闲96比特时间,则发送这个帧
- 若检测到总线忙,则继续检测并等待总线转为96比特时间,然后发送这个帧
碰撞检测(Collision Detection):
- 每一个正在发送帧的站边发送边检测碰撞(“边说边听”)
- 一旦发送总线上出现碰撞,则立即停止发送,退避一段随机时间后再次发送(“一旦冲突,立即听说,等待时机,重新再说”)
举例说明
现对CSMA/CD举例说明。如下图,多址接入就是多个主机连接到一条总线上,各主机随机发送帧。
- 主机C要发送帧,首先进行载波监听,检测到总线空闲96比特时间后,发送帧。
- 在主机C发送帧的过程中,主机B也要发送帧。主机B进行载波监听,发现总线忙,于是持续监听总线。一旦发现总线空闲96比特时间,则立即发送帧。
- B边发送帧边检测碰撞,只要没检测到碰撞,则可继续发送帧的剩余部分。
- 主机B发送帧的过程中,主机C也要发送帧,主机C进行载波监听,发现总线空闲96比特时间后立即发送帧,产生碰撞。
- 在产生碰撞的时刻,主机B和C都在边发送边检测碰撞,但都检测不到碰撞。
- 碰撞信号沿总线传播,主机C比主机B更早检测到碰撞并停止发送,退避一段随机时间后,重新发送之前所发送的帧。当主机B检测到碰撞信号后,退避一段随机时间后,重新发送之前所发送的帧。
争用期
- 主机最多经过$2\tau$(即$\delta\rightarrow 0$)的时长就可检测到本次发送是否遭受碰撞
- 因此,以太网的端到端往返传播时延$2\tau$称为争用期或碰撞窗口
- 经过争用期这段时间还没检测到碰撞,才能肯定这次发送不会发生碰撞
- 每一个主机在自己发送帧之后的一小段时间内,存在着遭遇碰撞的可能性。这一小段时间是不确定的。它取决于另一个发送帧的主机到本主机的距离,但不会超过总线的端到端往返传播时延,即一个争用期时间。
- 显然,在以太网中发送帧的主机越多,端到端往返传播时延越大,发生碰撞的概率就越大。因此,共享式以太网不能连接太多的主机,使用的总线也不能太长。
- 10Mb/s以太网把争用期定为512比特发送时间,即51.2μs,因此其总线长度不能超过5120m,但考虑到其他一些因素,如信号衰减等,以太网规定总线长度不能超过2500m。
最小帧长
最小帧长 = 争用期 * 数据传输速率
- 以太网规定最小帧长为64字节,即512比特(512比特时间即为争用期)
- 如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于64字节
- 以太网的最小帧长确保了主机可在帧发送完成之前就检测到该帧的发送过程中是否遭遇了碰撞
- 如果在争用期(共发送64字节)没有检测到碰撞,那么后续发送的数据就一定不会发生碰撞
- 如果在争用期内检测到碰撞,就立即中止发送,这时已经发送出去的数据一定小于64字节,因此凡长度小于64字节的帧都是由于碰撞而异常终止的无效帧
最大帧长
(我的帧很大,你要忍一下
截断二进制指数退避算法
- 若连续多次发生碰撞,就表明可能有较多的主机参与竞争信道。但使用上述退避算法可以使重传需要推迟的平均时间随重传次数而增大(也称为动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。
- 当重传16次仍不能成功时,表明同时打算发送帧的主机太多,以至于连续发生碰撞,则丢弃该帧,并向高层报告。
信道利用率
帧发送流程
帧接收流程
CSMA/CA(Carrier Sense Multiple Access / Collision Avoidance)协议
-
在无线局域网中,仍然可以使用载波监听多址接入CSMA,即在发送帧之前先对传输媒体进行载波监听。若发现有其他站在发送帧,就推迟发送以免发生碰撞。
-
在无线局域网中,不能用碰撞检测CD,原因如下:
-
802.11无线局域网使用CSMA/CA协议,在CSMA的基础上增加了一个碰撞避免CA功能,而不再实现碰撞检测功能。
-
由于不可能避免所有的碰撞,并且无线信道误码率较高,802.11标准还使用了**数据链路层确认机制(停止-等待协议)**来保证数据被正确接收。
-
802.11的MAC层标准定义了两种不同的媒体接入控制方式:
- 分布式协调功能DCF(Distributed Coordination Function)。在DCF方式下,没有中心控制站点,每个站点使用CSMA/CA协议通过争用信道来获取发送权,这是802.11定义的默认方式。
- 点协调功能PCF(Point Coordination Function)。PCF方式使用集中控制的接入算法(一般在接入点AP实现集中控制),是802.11定义的可选方式,在实际中较少使用。
帧间间隔IFS(InterFrame Space)
802.11标准规定,所有的站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这段时间称为帧间间隔IFS
-
帧间间隔的长短取决于该站点要发送的帧的类型
- 高优先级帧需要等待的时间较短,因此可优先获得发送权;
- 低优先级帧需要等待的时间较长。若某个站的低优先级帧还没来得及发送,而其他站的高优先级帧已发送到信道上,则信道变为忙态,因而低优先级帧就只能再推迟发送了。这样就减少了发生碰撞的机会。
-
常用的两种帧间间隔如下:
- 短帧间间隔SIFS(28μs),是最短的帧间间隔,用来分隔开属于一次对话的各帧。一个站点应当能够在这段时间内从发送方式切换到接收方式。使用SIFS的帧类型有ACK帧、CTS帧、由过长的MAC帧分片后的数据帧、以及所有回答AP探询的帧和在PCF方式中接入点AP发送出的任何帧。
- DCF帧间间隔DIFS(128μs),它比短帧间间隔SIFS要长得多,在DCF方式中用来发送数据帧和管理帧。
工作原理
Q1:源站为什么在检测到信道空闲后还要再等待一段时间DIFS?
考虑到可能有其他的站有高优先级的帧要发送。若有,就要让高优先级帧先发送。
Q2:目的站为什么正确接收数据帧后还要等待一段时间SIFS才能发送ACK帧?
SIFS是最短的帧间间隔,用来分隔开属于一次对话的各帧。在这段时间内,一个站点应当能够从发送方式切换到接收方式。
Q3:信道由忙转为空闲且经过DIFS时间后,为什么还要退避一段随机时间才能使用信道?
防止多个站点同时发送数据而产生碰撞。
-
当站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧,则不使用退避算法。
-
以下情况必须使用退避算法:
- 在发送数据帧之前检测到信道处于忙状态时;在每一次重传一个数据帧时;
- 在每一次成功发送后要连续发送下一个帧时(这是为了避免一个站点长时间占用信道)。
退避算法
-
在执行退避算法时,站点为退避计时器设置一个随机的退避时间
- 当退避计时器的时间减小到零时,就开始发送数据;
- 当退避计时器的时间还未减小到零时而信道又转变为忙状态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过时间DIFS后,继续启动退避计时器。
-
在进行第i次退避时,退避时间在时隙编号$(0, 1, …, 2^{2+i}-1)$中随机选择一个,然后乘以基本退避时间(也就是一个时隙的长度)就可以得到随机的退避时间。这样做是为了使不同站点选择相同退避时间的概率减少。当时隙编号达到255时(对应于第6次退避)就不再增加了。
信道预约
-
为了尽可能减少碰撞的概率和降低碰撞的影响,802.11标准允许要发送数据的站点对信道进行预约。
- 源站在发送数据帧之前先发送一个短的控制帧,称为请求发送RTS(Recuest To Send),它包括源地址,目的地址及这次通信(包括相应的确认帧)所需的持续时间。
- 若目的站正确收到源站发来的RTS帧,且媒体空闲,就发送一个响应控制帧,称为允许发送CTS(Ciear To Send),它也包括这次通信所需的持续时间(从RTS帧中将此持续时间复制到CTS帧中)。
- 源站收到CTS帧后,再等待一段时间SIFS后,就可发送其数据帧。
- 若目的站正确收到了源站发来的数据帧,在等待时间SIFS后,就向源站发送确认帧ACK。
-
除源站和目的站以外的其他各站,在收到CTS帧(或数据帧)后就推迟接入到无线局域网中。这样就保证了源站和目的站之间的通信不会受到其他站的干扰。
-
如果RTS帧发生碰撞,源站就收不到CTS帧,需执行退避算法重传RTS帧。
-
由于RTS帧和CTS帧很短,发送碰撞的概率、碰撞产生的开销及本身的开销都很小。而对于一般的数据帧,其发送时延往往大于传播时延(因为是局域网),碰撞的概率很大,且一旦发生碰撞而导致数据帧重发,则浪费的时 间就很多,因此用很小的代价对信道进行预约往往是值得的。802.11标准规定了3种情况供用户选择:
- 使用RTS帧和CTS帧 不使用RTS帧和CTS帧
- 只有当数据帧的长度超过某一数值时才使用RTS帧和CTS帧
虚拟载波监听
-
除RTS帧和CTS帧会携带通信需要持续的时间,数据帧也能携带通信需要持续的时间,这称为802.11的虚拟载波监听机制。
-
由于利用虚拟载波监听机制,站点只要监听到RTS帧、CTS帧或数据帧中的任何一个,就能知道信道被占用的持续时间,而不需要真正监听到信道上的信号,因此虚拟载波监听机制能减少隐蔽站带来的碰撞问题。
MAC地址
-
当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址;
-
在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC(Media Access Control),因此这类地址被称为MAC地址;
-
MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址;
-
MAC地址有时也被称为物理地址。请注意:这并不意味着MAC地址属于网络体系结构中的物理层!
-
-
一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡)。每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址。综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
IEEE 802局域网的MAC地址
MAC地址格式
地址发送顺序
-
字节发送顺序:第一字节 -> 第六字节
-
字节内的比特发送顺序:b0 -> b7
单播MAC地址
广播MAC地址
多播MAC地址
给主机配置多播组列表进行私有应用时,不得使用公有的标准多播地址
IP地址(网络层范畴)
-
IP地址是因特网(Internet)上的主机和路由器所使用的地址,用于标识两部分信息:
- 网络编号:标识因特网上数以百万计的网络
- 主机编号:标识同一网络上不同主机(或路由器各接口)
-
很显然,之前介绍的MAC地址不具备区分不同网络的功能。
- 如果只是一个单独的网络,不接入因特网,可以只使用MAC地址(这不是一般用户的应用方式)。
- 如果主机所在的网络要接入因特网,则IP地址和MAC地址都需要使用。
从网络体系结构看IP地址与MAC地址
数据包转发过程中IP地址与MAC地址的变化情况
-
数据包转发过程中源IP地址和目的IP地址保持不变
-
数据包转发过程中源MAC地址和目的MAC地址逐个链路(或逐个网络)改变
(先暂时这么认为吧,详细的会在以后有介绍的
(这里有一个问题,只知道IP地址不知道MAC地址可咋整,下一个协议会解决的
ARP协议
(就是表白墙捞人
总的来说就是B要给C发消息,但是只知道C的IP地址,不知道C的MAC地址。于是在自己的通讯录ARP高速缓存里面找找自己有没有C的IP地址对应的MAC地址,没有的话就上表白墙捞人发送ARP请求报文,请求得到C的MAC地址。所有看到表白墙收到请求报文的主机如果发现不是自己就拉到了,发现自己居然上表白墙了是自己的话就发送自己的MAC地址给请求的主机B正经人发现自己上表白墙也不会全世界发自己的联系方式吧。主机B收到C的MAC地址后,就可以发送消息给C啦。
ARP协议只能在一段链路或一个网络上使用,而不能跨网络使用。对于下图,ARP协议的使用是逐段链路进行的。
也就是你不能在南开幼儿园的校园墙捞南开幼儿园附属大学的人
MAC地址、IP地址、ARP协议小结
集线器与交换机的区别
使用双绞线和集线器HUB的星型以太网
-
使用集线器的以太网在逻辑上仍是一个总线网,各站共享总线资源,使用的还是CSMA/CD协议;
-
集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测(由各站的网卡检测);
-
集线器一般都有少量的容错能力和网络管理功能。例如,若网络中某个网卡出了故障,不停地发送帧。此时,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作。
使用集线器HUB在物理层扩展以太网
以太网交换机
-
以太网交换机通常都有多个接口。每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式。(使用集线器的以太网在逻辑上是共享总线的,需要使用CSMA/CD协议来协调各主机争用总线,只能工作在半双工模式)
-
以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞(不使用CSMA/CD协议)。
-
以太网交换机一般都具有多种速率的接口,例如:10Mb/s、100Mb/s、1Gb/s、10Gb/s接口的多种组合。
-
以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
-
以太网交换机是一种即插即用设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的。
-
帧的两种转发方式:
- 1.存储转发
- 2.直通交换:采用基于硬件的交叉矩阵(交换时延非常小,但不检查帧是否右差错)
对比集线器和交换机
集线器HUB | 交换机SWITCH |
|
|
以太网交换机自学习和转发帧的流程
-
以太网交换机工作在数据链路层(也包括物理层)
-
以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
-
以太网交换机是一种即插即用设备,刚上电启动时其内部的帧交换表是空的。随着网络中各主机间的通信,以太网交换机通过自学习算法自动逐渐建立起帧交换表。
流程举例
如图所示,相互连接的两台以太网交换机各自连接了三台主机,构成了一个交换式以太网。为了简单起见,各主机中网卡上固化的MAC地址仅用一个大写字母表示,各主机互不相同。假设各主机知道网络中其他各主机的MAC地址(无需ARP)。
假设主机A给主机B发送帧,该帧从交换机1的接口1进入交换机1。交换机1首先进行登记的工作,将该帧的源MAC地址A记录到自己的帧交换表中,将该帧进入自己的接口的接口号1相应地也记录到帧交换表中。上述登记工作就称为交换机的自学习。
之后交换机1对该帧进行转发,该帧的目的MAC地址是B,在帧交换表中查找MAC地址B。找不到,于是对该帧进行盲目转发,也称为泛洪。也就是从除该帧进入交换机接口外的所有接口转发该帧。可以看出,交换机开始时还没有足够的知识来明确转发帧,只能进行盲目地转发。
主机B的网卡收到该帧后,根据帧的目的MAC地址B,就知道这是发送给自己的帧,于是就接受该帧。主机C的网卡收到该帧后,根据帧的目的MAC地址B,就知道这不是发送给自己的帧,于是就丢弃该帧。
该帧从交换机的接口2进入交换机2,交换机2首先进行登记的工作,将该帧的源MAC地址A记录到自己的帧交换表中。将该帧进入自己的接口的接口号2相应地也记录到帧交换表中。之后交换机2对该帧进行转发,该帧的目的MAC地址是B,在帧交换表中查找MAC地址B,找不到,于是对该帧进行盲目转发。主机DEF都会收到该帧,根据帧的目的MAC地址B,就知道这不是发送给自己的帧,于是丢弃该帧。
接下来,主机B给主机A发送帧,该帧从交换机1的接口3进入交换机1.交换机1首先进行登记的工作,将该帧的源MAC地址B记录到自己的帧交换表中,将该帧进入自己的接口的接口号3相应地也记录到帧交换表中。之后,交换机1对该帧进行转发,该帧的目的MAC地址是A,在帧交换表中查找MAC地址A,可以找到,于是按照MAC地址A所对应的接口号1从接口1转发该帧,这是明确的转发。
主机A的网卡收到该帧后,根据帧的目的MAC地址A,就知道这是发送给自己的帧,于是接受该帧。很显然,交换机2不会收到该帧。
接下来,主机E给主机A发送帧,该帧从交换机2的接口3进入交换机2。交换机2首先进行登记的工作。之后,交换机2对该帧进行转发,该帧的目的MAC地址是A,在帧交换表中查找MAC地址A,可以找到。于是按照MAC地址A所对应的接口号2从接口2转发该帧,这是明确的转发。
该帧从交换机1的接口4进入交换机1,交换机1首先进行登记的工作。之后,交换机1对该帧进行转发。该帧的目的MAC地址是A,在帧交换表中查找MAC地址A,可以找到,于是按照MAC地址A所对应的接口号1从接口1转发该帧,这是明确的转发。
主机A的网卡收到该帧后,根据帧的目的MAC地址A就知道这是发送给自己的帧,于是接受该帧。
为演示丢弃帧的情况,给交换机1的接口1再连接一台主机G。为简单起见,没有画出集线器。这样,主机A、主机G、交换机1的接口1就共享同一条总线。
假设主机G给主机A发送帧,该帧通过总线进行传输,主机A和交换机1的接口1都可以收到。主机A的网卡收到该帧后,根据帧的目的MAC地址A就知道这是发送给自己的帧,于是接受该帧。
交换机1收到该帧后,首先进行登记工作。之后,交换机1对该帧进行转发,该帧的目的MAC地址是A,在帧交换表中查找MAC地址A,可以找到,MAC地址A所对应的接口号是1,但是该帧正是从接口1进入交换机1的,交换机1不会再从该接口将该帧转发出去,因为这是没有必要的,于是丢弃该帧。很显然,交换机2不会收到该帧。
随着网络中各主机都发送帧后,网络中的各交换机就可以学习到各主机的MAC地址,以及它们与自己各接口的对应关系。需要注意的是,因为MAC地址与交换机接口的对应关系并不是永久性的,所以帧交换表中的每条记录都有自己的有效时间,到期自动删除。
例如交换机某接口所连接的主机更换成了另一台主机,又或者主机中的网卡坏了,更换了新的网卡。这些情况都会导致MAC地址与交换机对应接口关系的改变。(ARP高速缓存表类似
流程小结
-
以太网交换机自学习和转发帧的流程:
- 收到帧后进行登记。登记的内容为帧的源MAC地址及进入交换机的接口号
- 根据帧的目的MAC地址和交换机的帧交换表对帧进行转发,有以下三种情况:
- 明确转发:交换机知道应当从哪个(或哪些)接口转发该帧(单播,多播,广播)
- 盲目转发:交换机不知道应当从哪个端口转发帧,只能将其通过除进入交换机的接口外的其他所有接口转发(也称为泛洪)。
- 明确丢弃:交换机知道不应该转发该帧,将其丢弃。
-
帧交换表中的每条记录都有自己的有效时间,到期删除。原因如下:
- 交换机的接口改接了另一台主机;
- 主机更换了网卡。
以太网交换机的生成树协议STP
添加冗余链路可以提高以太网的可靠性,但是会带来网络环路的问题,会带来以下问题:
- 广播风暴:大量消耗网络资源,使得网络无法正常转发其他数据帧
- 主机收到重复的广播帧:大量消耗主机资源
- 交换机的帧交换表震荡(漂移)
以太网交换机使用生成树协议STP(Spanning Tree Protocol),可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题。
- 不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的(无逻辑环路);
- 最终生成的树型逻辑拓扑要确保连通整个网络;
- 当首次连接交换机或网络物理拓扑发生变化时(有可能是人为改变或故障),交换机都将进行生成树的重新计算。
虚拟局域网VLAN(Virtual Local Area Network)
-
以太网交换机工作在数据链路层(也包括物理层)
-
使用一个或多个以太网交换机互连起来的交换式以太网,其所有站点都属于同一个广播域。随着交换式以太网规模的扩大,广播域相应扩大。
-
巨大的广播域会带来很多弊端:
- 广播风暴
- 难以管理和维护
- 潜在的安全问题
-
网络中会频繁出现广播信息(TCP/IP协议栈中很多协议都会使用广播,例如ARP、RIP、DHCP等)
-
分割广播域的方法:使用路由器可以隔离广播域,但路由器成本较高,虚拟局域网VLAN技术应运而生。
-
虚拟局域网VLAN(Virtual Local Area Network)是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求。
对于下图,网络中的各主机使用同一个广播域,某个主机发送的广播数据包,其他主机都可以收到
如果把主机划分成两个VLAN,则VLAN1中的广播数据包不会传送到VLAN2,VLAN2中的广播数据包不会传送到VLAN1。也就是说,同一个VLAN内部可以广播通信,不同VLAN之间不能广播通信。
实现机制
IEEE 802.1Q帧
- IEEE 802.1Q帧(也称Dot One Q帧)对以太网的MAC帧格式进行了扩展,插入了4字节的VLAN标记。
-
VLAN标记的最后12比特称为VLAN标识符VID,它唯一地标志了以太网帧属于哪一个VLAN。
- VID的取值范围是0~4095 $(0,2^{12}—1)$
- 0和4095都不用来表示VLAN,因此用于表示VLAN的VID的有效取值范围是1~4094。
-
802.1Q帧是由交换机来处理的,而不是用户主机来处理的。
- 当交换机收到普通的以太网帧时,会将其插入4字节的VLAN标记转变为802.1Q帧,简称“打标签”。
- 当交换机转发802.1Q帧时,可能会删除其4字节VLAN标记转变为普通以太网帧,简称“去标签”。
交换机的端口类型
-
交换机的端口类型有以下三种:
- Access
- Trunk
- Hybrid(思科交换机没有,华为交换机私有
-
交换机各端口的缺省VLAN ID
- 在思科交换机上称为Native VLAN,即本征VLAN。
- 在华为交换机上称为Port VLAN ID,即端口VLAN ID,简记为PVID。(为描述方便,后续都用PVID而不是本征VLAN
Access端口
- Access端口一般用于连接用户计算机
- Access端口只能属于一个VLAN
- Access端口的PVID值与端口所属VLAN的ID相同(默认为1)
- Access端口接收处理方法:
一般只接受“未打标签”的普通以太网MAC帧。根据接收帧的端口的PVID给帧“打标签”,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等。 - Access端口发送处理方法:
若帧中的VID与端口的PVID相等,则“去标签”并转发该帧;否则不转发。
Trunk端口
- Trunk端口一般用于交换机之间或交换机与路由器之间的互连
- Trunk端口可以属于多个VLAN
- 用户可以设置Trunk端口的PVID值。默认情况下,Trunk端口的PVID值为1。
- Trunk端口发送处理方法:
- 对VID等于PVID的帧,“去标签”再转发;
- 对VID不等于PVID的帧,直接转发;
- Trunk端口接收处理方法:
- 接收“未打标签”的帧,根据接收帧的端口的PVID给帧“打标签”,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等。
- 接收“已打标签的帧”;
Hybrid端口
- Hybrid端口既可用于交换机之间或交换机与路由器之间的互连(同Trunk端口),也可用于交换机与用户计算机之间的互连(同Access端口)
- Hybrid端口可以属于多个VLAN(同Trunk端口)
- 用户可以设置Hybrid端口的PVID值。默认情况下,Hybrid端口的PVID值为1(同Trun端口)
- Hybrid端口发送处理方法(与Trunk端口不同)查看帧的VID是否在端口的“去标签”列表中:
- 若存在,则“去标签”后再转发;
- 若不存在,则直接转发;
- Hybrid端口接收处理方法(同Trunk端口)
- 接收“未打标签”的帧,根据接收帧的端口的PVID给帧“打标签”,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等。
- 接收“已打标签的帧”:
【应用举例】主机A、B、C连接在同一个交换机的不同接口上。利用Hybrid端口的功能,实现以下应用需求:A和B都能与C相互通信,但A与B不能相互通信。