概述
计算机网络——数据链路层
3.1 数据链路层概述
数据链路层在网络体系结构中所处的地位
如图所示,主机H1给主机H2发送数据,中间要经过3个路由器、电话网、局域网、广域网等多个网络。从五层原理体系结构来看,主机应具有体系结构中的各个层次,而路由器只需具有体系结构的下面三层。各设备通过物理层下面的传输媒体进行互连。
当主机H1向主机H2发送数据时,数据的流动如图所示。
- 主机H1将待发送的数据逐层封装后,通过物理层将构成数据包的各比特转换成电信号,发送给传输媒体;
- 数据包进入路由器后,由下往上逐层解封到网络层,路由器根据数据包的目的网络地址和自身转发表,确定数据报的转发端口,然后从网络层向下逐层封装数据包,并通过物理层将数据包发送给传输媒体;
- 数据包到达主机H2时,还要由下往上逐层解封,最终解封处主机H1所发送的数据
我们可以只关心数据链路层,而不考虑网络体系结构中的其他各层。换句话说,我们可以想象,数据包只在数据链路层从左向右沿水平方向传送。从数据链路层来看,主机H1到H2的通信,可以看成是4段不同的链路上的通信组成的。
- **链路(Link)**就是从一个节点到相邻结点的一段物流线路,中间没有其他的交换节点。
- 数据链路(Data Link) 是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。
- 在数据链路层上传输的数据包,又称为帧。数据链路层是以帧为单位传输和处理数据的。
数据链路层的三个重要问题
封装成帧
两台主机通过一段链路互连,两台主机都会对所发送或接收的数据包进行五个层次的封装或解封。
- 发送方将待发送的数据通过应用层封装成应用层协议数据单元,然后交付给运输层
- 运输层为其添加运输层协议首部,使之成为运输层协议数据单元,然后交付给网络层
- 网络层为其添加网络层协议首部,使之成为网络层协议数据单元,然后交付给数据链路层
- 数据链路层为其添加一个数据链路层协议首部,简称为帧头,再给起增加一个帧尾。将数据链路层给网络层交付的协议数据单元,添加帧头和帧尾的操作,称为封装成帧。添加帧头和帧尾的目的,是为了在链路上以帧为单元来传送数据,即实现数据链路层本身的功能
例如,以太网V2的MAC帧格式
差错检测
发送方将封装好的帧通过物理层发送到传输媒体,帧在传输过程可能由于干扰产生误码,即比特0变成比特1,反之亦然。接收机通过检错码发现是否产生误码。
发送方在发送帧之前,基于待发送的数据和检错算法计算出检错码,并将其封装在帧尾,例如以太网V2的MAC帧格式的帧尾,就是4字节的帧检验序列FCS字段,即我们所说的检错码。接收机根据帧尾中的检错码和检错算法就可以检测帧中是否有误码。
可靠传输
接收方接收有误码的帧后,是不会接收该帧的,将其丢弃。
- 如果数据链路层向其上层提供的是不可靠服务,丢弃后不会再有更多措施;
- 如果数据链路层向其上层提供的是可靠服务,那么就需要其他措施来确保接收方主机还可以重新收到被丢弃的这个帧的正确副本。
尽管误码是不能完全避免的,但若能实现发送方发送什么,接收方就能收到什么,就称为可靠传输。
使用广播信道的数据链路层(共享式局域网)
除上述三个问题外,还有其他问题。
编址问题
为了确保A中数据可以准确传输到C中,需要将帧的目的地址添加到帧中一起传输。
例如,以太网V2的MAC帧格式:
碰撞
以太网使用一种特殊的协议CSMA/CD,也就是载波监听多点接入/碰撞检测。
无线局域网(共享)
由于无线局域网的广播天性,无线局域网仍然使用的是共享信道技术,例如802.11局域网的媒体接入控制协议是CSMA/CA,也就是载波监听多点接入/碰撞避免。
交换式局域网
随着交换技术的成熟和成本的降低,具有更高兴能的使用点对点链路和链路层交换机的交换式局域网,在有线(局域网)领域已完全取代了共享式局域网。
网桥和交换机的工作原理?
3.2 封装成帧
封装成帧介绍
-
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
-
帧头和帧尾中包含有重要的控制信息。
接收方的数据链路层如何从物理层交付的比特流中提取出一个个的帧?
-
帧头和帧尾的作用之一就是帧定界。例如,PPP帧格式,在帧头和帧尾中各包含一个长度为1字节的标志字段,其作用就是帧定界。
-
假设发送方发送的是PPP帧,比特流中红色部分使帧定界标志,那么接收方的链路层,就可以依据帧定界标志,从物理层交付的比特流中提取出一个个的帧。
PS:并不是每一种数据链路层协议的帧都包含有帧定界标志,例如以太网V2的MAC帧格式,其工作原理:
以太网的数据链路层封装好MAC帧后,将其交付给物理层,物理层会在MAC帧的前面,加上8字节的前导码,然后再将比特流变成电信号进行发送
- 前导码的前七个字节为前同步码,作用是使接收方的时钟同步;
- 之后的1字节为帧开始定界符,表明后面紧跟着的就是MAC帧
另外,以太网还规定了帧间间隔时间为96比特的发送时间,因此MAC帧不需要帧结束定界符。
透明传输
- 透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
面向字节的物理链路使用字节填充(或称字符填充)的方法实现透明传输。
若数据链路层接收的数据中存在和帧定界相同的代码,可能会造成接收机的误判导致其帧结束,即数据链路层对传进来的数据有限制,这样的数据链路层没有什么价值。所以,各种数据链路层协议会来解决这个问题。
在发送帧之前,对帧的数据部分进行扫描,每出现一个帧定界符,就在其前面插入一个转义字符:
接收方数据链路层在物理层交付的比特流中提取帧,遇到第一个帧定界符时,认为这是帧的开始,遇到转义字符就知道,其后面的1字节内容虽然与帧定界字符相同,但它是数据不是定界符,剔除转移字符后将其后面的内容作为数据继续提取。
若在上层交付给数据链路层的协议数据单元中,既包含了帧定界符,有包含了转义字符怎么办?
在发送帧之前,对帧的数据部分进行扫描,每出现一个帧定界符和转义字符,就在其前面插入一个转义字符。
转义字符是一种特殊的控制字符,其长度为1个字节,十进制为27,而并不是ESC这三个字符
面向比特的物理链路使用比特填充的方法实现透明传输
见图,帧的数据部分出现了两个帧定界标志,但它们是数据而不是帧定界,在发送前,可以采用零比特填充法,对数据进行扫描,每五个连续的比特1后面就插入一个比特0,即可以实现透明传输。
接收方的数据链路层,从物理层交付的比特流中提取帧时,将帧的数据部分中的每五个连续的比特1后面的那个比特0剔除即可。
- 为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些。
- 考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(Maximum Transfer Unit) 。
3.3 差错检测
- 实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1。这称为比特差错。
- 在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)。
- 使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
例如,以太网V2的MAC帧格式,其帧尾中包含了一个长度为4字节的帧捡验序列FCS字段,其作用就是让接收方的数据链路层检查,帧在传输过程中是否产生了误码。点对点传送的PPP帧格式,其帧尾也包含了一个长度为2字节的帧检验序列FCS字段。
奇偶校验(漏检率高!)
- 在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中**“1”的个数**为奇数(奇校验)或偶数(偶校验)。
- 如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码;
- 如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检);
循环冗余校验CRC(Cyclic Redundancy Check)
- 收发双方约定好一个生成多项式G(x);
- 发送方基于待发送的数据和生成多项式计算出差错检测码**(冗余码)**,将其添加到待传输数据的后面一起传输
- 接收方通过生成多项式来计算收到的数据是否产生了误码;
- 检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
- 要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用。
- 循环冗余校验CRC有很好的检错能力**(漏检率非常低**),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层。
- 在计算机网络中通常采用我们后续课程中将要讨论的检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。
3.4 可靠传输
3.4.1 可靠传输的基本概念
- 使用差错检测技术(例如循环冗余校验CRC),接收方的数据链路层就可检测出帧在传输过程中是否产生了误码(比特错误)。
- 数据链路层向上层提供的服务类型
- 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做;
- 可靠传输服务:想办法实现发送端发送什么,接收端就收到什么。
- 一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。
- 无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
- 比特差错只是传输差错中的一种。
- 从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复。
- 分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层。
- 可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输。
例如,这是TCP/IP的四层体系结构
- 可靠传输的实现比较复杂,开销比较大,是否使用可靠传输取决于应用需求。
3.4.2 可靠传输的实现机制—停止-等待协议SW(Stop-and-Wait)
- 这三种可靠传输实现机制的基本原理并不仅限于数据链路层,可以应用到计算机网络体系结构的各层协议中。
- 希望同学们在学习时,不要把思维局限在数据链路层,而应放眼于整个网络体系结构。
理论情况
如图所示,收发双方基于互联网进行通信,而不是局限在一条点对点的数据链路,纵坐标为时间
- 发送方给接收方发送数据分组**(DATA)**
- 接收方收到后对其进行差错检测,若没有误码,则接收该数据分组,同时发送方发送确认分组,简称ACK
- 发送方收到对所发送数据分组的确认分组后,才能发送下一个数据分组(DATA),假设这个数据分组在传输过程中出现了误码
- 接收方收到后对其进行差错检测,发现误码,则丢弃该数据分组,并给发送方发送否认分组,简称NAK
- 发送方收到对所发送数据分组的否认分组后,就知道了之前自己所发送的数据分组出现了差错而被接收方拒绝,于是立刻重传该数据分组,因此发送方每发送一个数据分组后,并不能立刻将数据分组从缓存中删除,只有在收到针对数据分组的确认分组后,才能将其从缓存中删除
发送方每发完一个数据分组后,就停止发送下一个数据分组,等待来自接收方的确认分组或否认分组,若确认分组,则可继续发送下一个数据分组,若收到否认分组,则重发之前发送的那个数据分组,这样就实现了发送方发送什么,接收方最终都能收到什么,即可靠传输。
特殊情况1—超时重传
接收方收不到数据分组,就不会发送ACK或NAK。如果不采取其他措施,发送方就会一直处于等待接收方ACK或NAK的状态。
为解决该问题,可以在发送方发送完一个数据分组时.启动一个超时计时器。若到了超时计时器所设置的重传时间而发送方仍收不到接收方的任何ACK或NAK,则重传原来的数据分组,这就叫做超时重传。
一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”。
特殊情况2—确认丢失
此时会产生分组重复的错误,为避免分组重复这种传输错误,必须给每个分组带上序号。
对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了。
Q:确认分组需要编号吗?
特殊情况3—确认迟到
如果不采取措施的话,发送方会误认为这是对1号数据分组的确认,如果对确认分组也进行编号,就可以使发送方避免这种误判。
如图所示,该确认信号的序号为0,发送方通过分组的序号,知道这是一个重复的确认分组,忽略即可。
PS:对于数据链路层的点对点信道,往返时间比较确定,不会出现确认迟到的情况。因此,只在数据链路层实现停止-等待协议,可以不用给确认分组编号
注意事项:
- 接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传。但对于误码率较高的点对点链路,为使发送方尽早重传,也可给发送方发送NAK分组。
- 为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止-等待协议的停等特性,只需1个比特编号就够了,即编号0和1.
- 为了让发送方能够判断所收到的ACK分组是否是重复的,需要给ACK分组编号,所用比特数量与数据分组编号所用比特数量一样。数据链路层一般不会出现ACK分组迟到的情况,因此在数据链路层实现停止-等待协议可以不用给ACK分组编号。
- 超时计时器设置的重传时间应仔细选择。一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”。
- 在数据链路层点对点的往返时间比较确定,重传时间比较好设定。
- 然而在运输层,由于端到端往返时间非常不确定,设置合适的重传时间有时并不容易。
停止-等待协议的信道利用率
为了简单起见,假设收发双方之间是一条直通的信道,发送方发送完一个数据分组后就停止发送,并等待接收方对该数据分组的确认,当收到确认分组后,可以发送下一个数据分组,如此反复进行。
忽略接收方以及发送方对分组的处理时延:
- 发送方发送数据分组所耗费的发送时延TD。
- 收发双方之间的往返时间RTT。
- 接收方发送确认分组耗费的发送时延TA(可忽略)。
- 当往返时延RTT远大于数据帧发送时延Tb时(例如使用卫星链路),信道利用率非常低。
- 若出现重传,则对于传送有用的数据信息来说。信道利用率还要降低。
- 为了克服停止-等待协议信道利用率很低的缺点,就产生了另外两种协议,即后退N帧协议GBN和选择重传协议SR。
- 像停止-等待协议,这种通过确认和重传机制实现的可靠传输协议,常称为自动请求重传协议ARQ(Automatic Repeat reQuest),意思是重传的请求是自动进行的,因为不需要接收方显示的请求,发送方重传某个出错的分组。
3.4.3 回退N帧协议GBN(Go-Back-N)
回退N帧协议在流水线传输的基础上,利用发送窗口来限制发送方可连续发送数据分组的个数。
- 假设采用3个比特给分组编序号,即序号0~7,如图所示是收发双方各自的分组序号,当序号增加到7时下一个序号又从0开始,发送方要维持一个发送窗口,序号落在发送窗口内的数据分组可被连续发送,而不必等收到接收方的相应确认分组后再发送;
- 发送窗口的的尺寸记为WT,对于本例其取值范围是: 1 < W T < 2 3 − 1 1<W_T<2^3-1 1<WT<23−1,3是构成分组序号的比特数量,本例取 W T = 5 W_T=5 WT=5,具体见图,如果WT的值取为1则是停止等待协议,如果WT的值超过取值范围上限,则会造成严重的错误;
- 接收窗口的尺寸 W R W_R WR的取值: W R = 1 W_R=1 WR=1;
无差错情况
- 发送方将序号落在发送窗口内的0~4号数据分组依次连续发送出去,经过互联网的传输,正确到达了接收方也就是没有出现乱序和误码
- 接收方按序接受他们,每接受一个,接收窗口就向前滑动一个位置,并给发送方发送针对所接收分组的确认分组
- 0-4号分组,经过互联网的传输正确到达了发送方,发送方每接受一个,发送窗口就向前滑动一个位置,这样就有新的序号落入发送窗口
- 发送方可以将收到 的确认的数据分组从缓存中删除了,而接收方可以择机将已接收的数据分组交付给上层处理。
累积确认
接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后(由具体实现决定),对按序到达的最后一个数据分组发送确认。ACKn表示序号为n及以前的所有数据分组都已正确接收。即使确认分组丢失,发送方也可能不必重传!
- 发送方将序号落在发送窗口内的0~4号数据分组依次连续发送出去,经过互联网的传输,正确到达了接收方也就是没有出现乱序和误码
- 接收方按序接受他们,当接收方接收0号和1号分组以后,给发送方发送了一个累积确认ACK1,当接受完2-4号分组后,又给发送方发送了一个累积确认ACK4
- 假设ACK1传输过程中丢失,ACK4正确传输,发送方根据ACK4知道,序号为4及之前的数据分组已被接收方正确接受了,于是将发送窗口向前滑动5个位置,这样就有新的序号落入发送窗口
- 发送方可以将收到 的确认的数据分组从缓存中删除了,而接收方可以择机将已接收的数据分组交付给上层处理。
有差错情况
-
发送方将序号落在发送窗口内的5~1号数据分组依次连续发送出去,经过互联网的传输,到达了接收方
-
假设传送过程中受到了干扰,其中5号数据分组出现了误码,接收方通过数据分组中的检错码发现了错误,于是丢弃该数据分组,
-
而后续到达的这4个数据分组的序号,**与接收窗口中的序号不匹配,**接收方同样也不能接受他们,将它们丢弃,并对之前按序接收的最后一个数据分组进行确认,也就是发送ACK4,每丢弃一个分组就发送一个ACK4
-
这四个ACK4经过互联网的传输到达了发送方,发送方之前就接收过这ACK4,发送方收到重复的确认,就知道之前所发送的数据分组出现了差错,于是可以不等超时计时器超时就立刻重传!
-
至于收到几个重复确认就立刻重传,由具体实现决定。
-
若本例中收到4个ACK4并不会立刻重传,当超时计时器超时后,发送方对之前发送窗口内已发送过的这些数据分组全部重传
在本例中,尽管序号为6,7,0,1的数据分组正确到达接收方。但由于5号数据分组误码不被接受。它们也“受到牵连”而不被接受。发送方还要重传这些数据分组,这就是所谓的Go back-N (回退N帧)。
可见。当通信线路质量不好时,回退N协议的信道利用来并不比停止:等待协议高。
Q:若W超过取值范围,例如Wr=8,会出现什么情况?
A:接收方无法分辨新、旧数据分组,进而产生分组重复这种差错
- 回返N帧协议在流水线传输的基础上利用发送窗回来限制发送方连续发送数据分组的数量。是一种连续ARQ协 议。
- 在协议的工作过程中发送窗口和接收窗口不断向前滑动。因此这类协议又称为滑动窗回协议,
- 由于回退N帧协议的特性,当通信线路质量不好时,其信道利用家并不比停止:等待协议高.
3.4.4 选择重传协议SR
- 回退N帧协议的接收窗口尺寸WR只能等于1,因此接收方只能按序接收正确到达的数据分组。
- 一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃(尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大浪费。
- 为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸WR不应再等于1(而应大于1),以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后再一并送交上层。这就是选择重传协议。
选择重传协议为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,需要对每个正确接收到的数据分组进行逐一确认!
WT和WR取值范围
Q:若WT和WR超过取值范围,会出现什么情况?
A:接收方无法分辨新、旧数据分组,进而产生分组重复这种差错
3.5 点对点协议PPP
- 点对点协议PPP(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议。
PPP ocer Ethernet 简称PPPoE 使得ISP可以通过DSL、电路调制解调器、以太网等宽带接入技术,以以太网接口的形式为用户提供接入服务
- PPP协议是因特网工程任务组IETF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准[RFC1661,RFC1662]。
- PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成:
- 对各种协议数据报的封装方法(封装成帧)
- 链路控制协议LCP
用于建立、配置以及测试数据链路的连接 - 一套网络控制协议NCPs其中的每一个协议支持不同的网络层协议
帧格式
透明传输
字节填充法
(7D,5E):相当于在7E字节前插入了转义字节7D,并将7E字节减去十六进制20;
比特填充法
差错检测
工作状态
3.6 流媒体接入控制
3.6.1 流媒体接入控制基本概念
- 共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC(Medium Access Control)。
随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体技术。
3.6.2 流媒体的接入控制—静态划分信道—信道复用
- 复用(Multiplexing)是通信技术中的一个重要概念。复用就是通过一条物理线路同时传输多路用户的信号。
- 当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽。
频分复用FDM
时分复用TDM
波分复用WDM
20Gb/s=8*2.5Gb/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的应用。
-
在CDMA中,每一个比特时间再划分为m个短的间隔,称为码片(Chip)。通常m的值是64或128。为了简单起见,在后续的举例中,我们假设m为8.
-
使用CDMA的每一个站被指派一个唯一的m bit码片序列(Chip Sequence)。
- 一个站如果要发送比特1,则发送它自己的m bit码片序列;
- 一个站如果要发送比特0,则发送它自己的m bit码片序列的二进制反码;
-
码片序列的挑选原则如下:直接序列扩频 DSSS
- 分配给每个站的码片序列必须各不相同,实际常采用伪随机码序列。
- 分配给每个站的码片序列必须相互正交(规格化内积为0)。
令向量S表示站S的码片序列,令向量T表示其他任何站的码片序列。 - 两个不同站S和T的码片序列正交,就是向量S和T的规格化内积为0:
3.6.3 流媒体的接入控制—动态划分信道—随机接入
载波监听多址接入/碰撞检测CSMA/CD (Carrier Sense Multiple Access/Collision Detection)
多址接入
载波监听
碰撞检测
CSMA/CD协议——争用期
- 主机最多经过2 τ τ τ(即6一0)的时长就可检测到本次发送是否遭受了碰撞
- 因此,以太网的端到端往返传播时延2τ称为争用期或碰撞窗口。
- 经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
- 每一个主机在自己发送帧之后的一小段时间内,存在着遭遇碰撞的可能性。这一小段时间是不确定的。它取决于另一个发送帧的主机到本主机的距离,但不会超过总线的端到端往返传播时延,即一个争用期时间。
- 显然,在以太网中发送帧的主机越多,端到端往返传播时延越大,发生碰撞的概率就越大。因此,共亨式以太网不能连接太多的主机,使用的总线也不能太长。
- 10Mb/s以太网把争用期定为512比特发送时间,即51.2p1s,因此其总线长度不能超过5120m,但考虑到其他一些因素,如信号衰减等,以太网规定总线长度不能超过2500m.
CSMA/CD协议——最小帧长
CSMA/CD协议——最大帧长
CSMA/CD协议——截断二进制指数退避算法
CSMA/CD协议——信道利用率
CSMA/CD协议——帧发送流程
CSMA/CD协议——帧接收流程
载波监听多址接入/碰撞避免CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance)
帧间间隔IFS
CSMA/CA协议的工作原理
-
当站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧,则不使用退避算法。
-
以下情况必须使用退避算法:
- 在发送数据帧之前检测到信道处于忙状态时;
- 在每一次重传一个数据帧时;
- 在每一次成功发送后要连续发送下一个帧时(这是为了避免一个站点长时间占用信道)。
CSMA/CA协议的退避算法
CSMA/CA协议的信道预约和虚拟载波监听
3.7 MAC地址、IP地址以及ARP协议
MAC地址
-
当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即—个数据链路层地址;
-
在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC(Media Access Control),因此这类地址被称为MAC地址;
-
假设C向D发送帧,帧首部的目的地址字段应填入主机D的MAC地址,源地址字段应填入主机C自己的MAC地址,这样总线上其他各主机收到该帧后,就可以根据帧首部中的目的地址字段的值是否有自己的MAC地址匹配,进而丢弃或者接收该帧
-
MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址;
-
MAC地址有时也被称为物理地址,但并不意味着MAC地址属于网络体系结构中的物理层!
-
一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡)。每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址。综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
-
IEEE 802局域网的MAC地址格式
由48比特构成,每8个比特1个字节,从左至右分别是第一字节到第六字节,这种标识符,称为扩展的唯一标识符EUI(EUI-48)
-
前三个字节是组织唯一标识符OUI,生产网络设备的厂商需要向IEEE的注册管理机构申请一个或多个OUI;后三个字节是由获得OUI的厂商可以随意分配的
-
MAC地址的表示方法,是将每4个比特写成一个16进制的字符,共12个字符,将每两个字符分为一组,共六组
-
广播地址:FF-FF-FF-FF-FF-FF
-
MAC地址的分类,很久第一字节的第零和第一为进行划分
MAC地址发送顺序
单播MAC地址举例
广播MAC地址举例
多播MAC地址举例
假设主机BCD支持多播:
给主机配置多播组列表进行私有应用时,不得使用公有的标准多播地址,具体可在以下网址查询:
http://standards.ieee.org/develop/regauth/grpmac/public.html
随机MAC地址
略
IP地址
IP地址属于网络层概念,与数据链路层的MAC地址关系密切,这里主要介绍IP地址的作用。
- IP地址是因特网(Internet)上的主机和路由器所使用的地址,用于标识两部分信息:
- 网络编号(黄):标识因特网上数以百万计的网络
- 主机编号(蓝):标识同一网络上不同主机(或路由器各接口)
- 很显然,之前介绍的MAC地址不具备区分不同网络的功能。
- 如果只是一个单独的网络,不接入因特网,可以只使用MAC地址(这不是一般用户的应用方式)。
- 如果主机所在的网络要接入因特网,则IP地址和MAC地址都需要使用。
从网络体系结构看IP地址与MAC地址
ps:地址均包括源和目的地址
数据包转发过程中IP地址与MAC地址的变化情况
关注重点:
- 网络层封装IP数据报时,源IP地址和目的IP地址应该填写什么
- 数据链路层封装帧时,源MAC地址和目的MAC地址应该填写什么
- 数据包转发过程中源IP地址和目的IP地址保持不变;
- 数据包转发过程中源MAC地址和目的MAC地址逐个链路(或逐个网络).改变。
我们下节介绍的地址解析协议ARP要实现的动能!
ARP协议
简介
这是一个共享总线型的以太网,各主机配置的IP地址,以及网卡上固化的MAC地址如图所示:
实际上,每台主机都会有一个ARP高速缓存表,当主机B要给主机C发送数据包时,会首先在自己的ARP高速缓存表中,查找主机C的IP地址所对应的MAC地址,但未找到,因此主机B需要发送ARP请求报文**(广播帧)**,来获取主机C的MAC地址
此时,主机C
- 将B的IP地址与MAC地址记录到自己的ARP高速缓存表中;
- 给B发送ARP响应**(单播帧)**,以告知自己的MAC地址。
此时:
- 除ARP请求和响应外。ARP还有其他类型的报文(例如用于栓查I地址冲文的“无故ARP、免费ARP(Gratuitous ARP” );
- ARP没有安全验证机制。存在ARP欺骗(攻击〉向题。
类型
- 动态
- 记录是主机自动获取到的,生命周期默认为2分钟,当生命周期结束时,该记录就会自动删除
- 这样做的原因是,IP地址和MAC地址的对应关系并不是永久性的,例如主机的网卡坏了更换网卡后主机的IP地址并没有改变,但是MAC地址发生了变化
- 静态
- 手工设置,不同操作系统下的生命周期不同,例如系统重启后不存在或系统重启后依然有效。
Q:ARP协议是否可以在以下网络中使用H1获取H2的MAC地址?
A:ARP协议不可以跨网络使用
3.8 集线器与交换机的区别
- 使用集线器的以太网在逻辑上仍是一个总线网,各站共享总线资源,使用的还是CSMA/CD协议;
- 集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测(由各站的网卡检测);
- 集线器一般都有少量的容错能力和网络管理功能。例如,若网络中某个网卡出了故障,不停地发送帧。此时,集线器可以检测到这个问题。在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作。
使用集线器HUB在物理层扩展以太网
假设某学院下有三个系部,每个系部都有一个使用集线器作为互联设备的以太网,这三个以太网相互独立,各自共享自己的总线资源,是三个独立的碰撞域或称为冲突域,具体如下:
为了使各系部以太网可以相互通信,可再使用一个集线器,将他们互连起来,三个独立的碰撞域合并成一个更大的碰撞域,形成一个更大的总线型以太网,例如:
以太式交换机
1.忽略ARP过程
2.假设交换机的帧交换表已“学习好了”
- 以太网交换机通常都有多个接口。每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式(发送帧和接收帧可以同时进行)。
使用集线器的以太网,在逻辑上是共享总线的,需要使用CSMA/CD协议来协调各主机争用总线,只能工作在半双工模式,也就是收发帧不能同时进行。
- 以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞(不使用CSMA/CD协议)。
- 以太网交换机一般都具有多种速率的接口,例如:10Mb/s、100Mb/s、1Gb/s、10Gb/s接口的多种组合。
- 以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
- 以太网交换机是一种即插即用设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的。
- 存储转发
- 直通交换:采用基于硬件的交叉矩阵(交换时延非常小,但不检查帧是否有差错)
对比集线器和交换机
使用集线器扩展以太网和使用交换机扩展以太网的区别
- 单播
- 广播
- 竞争总线并产生碰撞
总结:
3.9 以太网交换机自学习和转发帧的流程
- 以太网交换机工作在数据链路层〔也包括物理层)
- 以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
- 以太网交换机是一种即插即用设备,刚上电启动时其内部的帧交换表是空的。随着网络中各主机间的通信,以太网交换机通过自学习算法自动逐渐建立起帧交换表。
假设各主机知道网络中其他各主机的MAC地址(无需进行ARP)
A->B
B->A
E->A
以太网交换机丢弃帧的情况
为了演示该情况,我们给交换机1的接口1再连接一台主机G,为了简单起见,没有画出集线器,主机A和交换机1的接口1 都可以收到,主机A的网卡收到该帧后,根据帧的目的MAC地址A就知道这是发送给自己的帧,于是接受该帧,交换机1收到该帧后,首先进行登记工作,随后交换机1对该帧进行转发,该帧的目的MAC地址是A,再帧交换表中查找MAC地址A可以找到,MAC地址A所对应的接口号是1,但是该帧正式从该接口1进入交换机1的,交换机1不会再从该接口将该帧转发出去,因为这是没有必要的,于是丢弃该帧,很显然交换机2不会受到该帧。
每条记录都有自己的有效时间,到期自动删除!
这是因为MAC地址与交换机接口的对应关系并不是永久性的!(更换网卡)
3.10 以太网交换机的生成树协议STP
-
如何提高以太网的可靠性?
-
添加冗余链路可以提高以太网的可靠性
-
但是,冗余链路也会带来负面效应——形成网络环路
-
网络环路会带来以下问题:
- 广播风暴
- 大量消耗网络资源,使得网络无法正常转发其他数据帧;
- 主机收到重复的广播帧
- 大量消耗主机资源
- 交换机的帧交换表震荡(漂移)
- 广播风暴
-
以太网交换机使用生成树协议STP(Spanning Tree Protocol),可以在增加元余链路来提高网络可靠性的同时又避免网络环路带来的各种问题。
-
不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的(无逻辑环路);
-
最终生成的树型逻辑拓扑要确保连通整个网络;
-
当首次连接交换机或网络物理拓扑发生变化时(有可能是人为改变或故障),交换机都将进行生成树的重新计算。
-
3.11 虚拟局域网VLAN
3.11.1 虚拟局域网VLAN概述
-
以太网交换机工作在数据链路层(也包括物理层)
-
使用一个或多个以太网交换机互连起来的交换式以太网,其所有站点都属于同一个广播域。
-
随着交换式以太网规模的扩大,广播域相应扩大。
-
巨大的广播域会带来很多弊端:
-
广播风暴
-
难以管理和维护
-
潜在的安全问题
-
-
网络中会频繁出现广播信息
- TCP/IP协议栈中的很多协议都会使用广播:
- 地址解析协议ARP(已知IP地址,找出其相应的MAC地址)
- 路由信息协议RIP(一种小型的内部路由协议)
- 动态主机配置协议DHCP(用于自动配置lP地址)
- NetBEUI: Widnows下使用的广播型协议
- IPX/SPX: Novell网络的协议栈
- Apple Talk: Apple公司的网络协议栈
- TCP/IP协议栈中的很多协议都会使用广播:
-
分割广播域的方法
-
使用路由器(工作在第三层即网络层)由于路由器默认情况下不对广播波数据包进行转发,因此路由器可以隔离广播域,然而路由器成本比较高
-
虚拟局域网
-
虚拟局域网VLAN(Virtual Local Area Network)是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求。
同一个VLAN之间可以进行广播通信,不同VLAN之间不可以进行广播通信
3.11.2 虚拟局域网VLAN实现机制
IEEE 802.1Q帧
-
IEEE 802.1Q帧(也称Dot One Q帧)对以太网的MAC帧格式进行了扩展,插入了4字节的VLAN标记。
-
VLAN标记的最后12比特称为VLAN标识符VID,它唯一地标志了以太网帧属于哪一个VLAN.
- VID的取值范围是0~ 4095 (0 ~ 2”2-)
- 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。
-
Access端口
-
Access端口-般用于连接用户计算机
-
Access端口只能属于一个VLAN
-
Access端口的PVID值与端口所属VLAN的ID相同(默认为1)
-
Access端口接收处理方法:
一般只接受“未打标签”的普通以太网MAC帧。根据接收帧的端口的PVID给帧**”打标签”**,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等。 -
Access端口发送处理方法:
若帧中的VID与端口的PVID相等,则**“去标签”**并转发该帧;否则不转发。
下面例子,需求将主机AB划到VLAN2,主机CD划到VLAN3,
可以在交换机上创建VLAN2和VLAN3,然后将交换机端口1和2划归到VLAN2,因此端口1和2的PVID值等于2,将交换机端口3和4划归到VLAN3,因此端口3和4的PVID值等于3,
我们来看主机A发送广播帧的情况,该帧从交换机的端口1进入交换机,由于端口1的类型是Access,它会对接受到的“未打标签”的普通以太网MAC帧“打标签”,也就是插入四字节的VLAN标记字段,由于端口1的PVID值等于2,因此,所插入的4字节VLAN标记字段中的VID的值也等于2,广播帧中的VID的取值与端口2中的PVID的取值都等于2,因此,交换机会从端口2对帧进行“去标签”转发。
我们来看主机C发送广播帧的情况,该帧从交换机的端口3进入交换机,由于端口3的类型是Access,它会对接受到的“未打标签”的普通以太网MAC帧“打标签”,也就是插入四字节的VLAN标记字段,由于端口3的PVID值等于3,因此,所插入的4字节VLAN标记字段中的VID的值也等于3,广播帧中的VID的取值与端口4中的PVID的取值都等于3,因此,交换机会从端口4对帧进行“去标签”转发。
Trunk端口
- Trunk端口一般用于交换机之间或交换机与路由器之间的互连
- Trunk端口可以属于多个VLAN
- 用户可以设置Trunk端口的PVID值。默认情况下,Trunk端口的PVID值为1。
如图所示,我们的需求,是将主机ABEF划归为VLAN1,主机EDGH划归为VLAN2,由于交换机首次上电是默认配置各端口属于VLAN1,其相应的PVID值等于1,并且端口的类型值为Access,因此我们需要对交换机进行相应的配置才能满足应用需求
分别在两个交换机上创建VLAN2,并将他们的端口3和4都划归到VLAN2,其相应的PVID值等于2,而两个交换机的端口1和2保持默认配置即可,即属于VLAN1,其相应的PVID等于1,特别注意的是,两个交换机相连的端口5,需要将它们的类型更改为Trunk类型,他们的PVID值保持默认的1即可。
-
Trunk端口发送处理方法:
- 对VID等于PVID的帧,“去标签”再转发;
- 对VID不等于PVID的帧,直接转发;
-
Trunk端口接受处理方法:
- 接收“未打标签”的帧,根据接收帧的端口的PVID给帧**“打标签”**,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等。
-
接受“已打标签的帧”
总结:
在由多个交换机互联而成的交换式以太网划分VLAN时,连接主机的交换机端口应设置为Access类型,交换机之间互联的端口应设置为Trunk类型。
华为交换机私有的Hybrid端口类型
-
Hybrid端口既可用于交换机之间或交换机与路由器之间的互连(同Trunk端口),也可用于交换机与用户计算机之间的互连(同Access端口)
-
Hybrid端口可以属于多个VLAN(同Trun端口)
-
用户可以设置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不能相互通信。
主机A给C发送数据帧
主机B给C发送数据帧
主机A给B发送数据帧
主机B直接转发,收到一个带有标记的802.1Q帧,单主机B不能识别802.1Q帧,只能丢弃该帧
最后
以上就是忐忑冥王星为你收集整理的计算机网络——数据链路层计算机网络——数据链路层的全部内容,希望文章能够帮你解决计算机网络——数据链路层计算机网络——数据链路层所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复