3.数据链路层
数据链路层
基本概念
链路:就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换线路
数据链路:是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路
数据链路层以帧为单位传输和处理数据
数据链路层在传输数据的时候主要考虑三个问题
- 封装成帧
- 透明传输
- 差错检测
同时,也要考虑传输数据时的可靠性
封装成帧:
数据链路层给网络层交付的协议数据单元添加帧头和帧尾的操作,称为封装成帧
帧尾 | 应用层协议单元数据 | 运输层协议首部 | 网络层协议首部 | 帧头 |
---|---|---|---|---|
目的是在链路上以帧为单位传输数据
透明传输:
是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样
差错检测:
帧在传输过程中可能出现误码,根据帧尾中的检错码就可以检测帧中是否有误码
可靠传输:
接收方主机收到有误码的帧后,不会接收该帧,将其丢弃,如果数据链路层提供的是不可靠服务,那么该帧就被永久丢弃了
如果链路层提供的是可靠服务,就需要其他措施来确保接收方主机还可以重新收到被丢弃的这个帧的正确副本。尽管误码是不能完全避免的,但如果能够实现发送方发送什么,接收方就能收到什么,就称为可靠传输
对于使用广播信道的数据链路层,还需要考虑数据的编制问题,和数据在信道传输的碰撞问题
封装成帧
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧
- 帧头和帧尾包含有重要的控制信息
数据链路层会把上层交付下来的协议数据单元封装成帧后,要通过物理层,把各个比特转换成电信号发送到传输媒体,接收方的数据链路层需要从比特流中识别出帧
有如下方法:
在帧头和帧尾添加标志位做标识
帧头和帧尾的作用之一就是帧定界
在帧头和帧尾的中有一个字节的标识字段,用来标识帧,但是并不是每一种帧都包含了帧定界格式
给MAC帧添加前导码
MAC帧交付到物理层后,物理层会给MAC帧添加前导码,然后在转换为电信号发送
前导码中的前七个字节为前同步码,作用是使接收方的时钟同步,后一个字节为定界符,用来表示之后的帧是MAC帧,这样就能识别到帧头
以太网还规定了帧间间隔时间为96bit。所以不需要帧结束定界符
透明传输
透明传输:是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样
对于采用帧定界符的帧来说,对比特流进行处理才能实现透明传输
帧定界标识也是一种字符,上层的数据也有可能使用,如果上层交付的协议数据单元中,包含了帧定界标志,如果不做任何处理的话,接收方就不能正确接收该帧
如果要求上层的协议数据单元不能包含帧定界标志的话,就不能称为透明传输,实际上为了透明传输,所有的数据链路层协议都会解决这个问题
- 面向字节的物理链路使用字节填充的方法实现透明传输
比如,在传输之前,对帧的数据部分进行扫描,如果发现了帧定界符,则在其中加入转义字符,如果其中有转义字符,也需要插入转义字符
- 面向比特的物理链路使用比特填充的方法实现透明传输
如果在帧的数据部分出现了帧定界标志,在发送前,可使用0比特传输法,每5个连续数据的比特1后面添加一个比特0,接收的时候将其剔除即可
对于以太网的MAC帧,由于使用CSMA/CD协议,规定了帧间间隔,没有结束字符段,不需要对帧内容进行转义
为了提高帧的传输效率,应该使帧的数据部分的长度尽可能大些
考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(Maximum Transfer Unit)
差错检测
比特差错:实际的通信链路都不是理想的,比特在传输构成中可能会产生差错:1可能会变成0,而0也可能变成1,这称为比特差错
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER
使用 差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层要解决的问题
奇偶校验:在待发送的数据后面添加1位奇偶校验码,使整个数据中“1”的个数为奇数或者偶数
但是如果传输过程中产生2位误码,那么就无法检出错误了
循环冗余校验CRC(Cyclic Redundancy Check)
- 收发双方约定好一个生成多项式G(x)
- 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输
- 接收方通过生成多项式来计算收到的数据是否产生了误码
检错码只能检查出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误码
循环冗余校验CRC有很好的检错能力,虽然计算复杂,但是容易使用硬件实现,因此广泛用于数据链路层
可靠传输
基本概念
使用差错检测技术可以检测到帧在传输过程中是否产生了误码
不可靠传输服务:仅仅丢弃有误码的帧,其他什么都不做
可靠传输服务:想办法实现发送端发送什么,接收端就收到什么
一般情况下,有线链路的误码率比较低,所以为了减小开销,并不要求数据链路层向上提供可靠服务,即使出现误码,问题可由上层处理
但是对于无线链路,误码率较高,则必须要采用可靠传输服务
比特差错只是传输差错的一种,从整个计算机网络体系结构来看,传输差错还包括分组丢失,分组失序以及分组重复
可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输(在运输层的TCP协议)
流量控制
- 流量控制是数据链路层的一种功能,流量控制对数据链路上的帧的发送速率进行控制,以使接收方有足够的缓冲空间来接受每个帧
- 流量控制的基本方法是由接收方控制发送方发送数据的速率
- 常见的流量控制方式有两种:停止-等待协议、滑动窗口协议
停止等待协议SW(Stop-and-Wait)
当发送方发送了一个数据包之后,就开始等待,当接收方收到了数据之后,会发送一个确认数据给发送方,当发送方收到了确认数据后,才会继续发送数据,当接收方收到误码后,会把数据包丢弃,然后会发送一个错误信息给发送方,发送方收到后会重传。这样就实现了可靠传输
但是这样会有一个问题,如何DATA在传输过程丢失了,那么接收方就不会发送确认消息,此时该怎么办?
为了解决这个问题,可以在发送方发送完一个数据分组时,启动一个超时计时器。如果到了超时计时器所设置的重传时间,而发送方仍收不到接收方的任何消息,则重传原来的数据分组,这就叫做超时重传
一般可将重传时间选为略大于从发送方到接收方的平均往返时间
这样解决了DATA的丢失问题,但是ACK同样也有可能丢失,当ACK丢失的时候,发送方启动超时重传器,重传了DATA数据包,此时接收方无法判断这个数据包是否是刚才的数据包?此时就导致了分组重复
为了避免分组重复这种传输错误,必须给每个分组带上序号
对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就可以了
给数据编号,这样就解决了确认信号的丢失问题,那么需要给确认信号也编号吗?
假如在收到数据后,接收方发出的确认信号经过了一些延迟,发出去的时候,发送方已经启动重传协议发送了数据0,此时收到了确认数据,发送数据1,发送方收到了重复的数据0,发送ACK表示丢弃,问题是发送方如何判断这个ACK的意思呢?
确认分组编号就可以解决这种问题
注意事项:
- 接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传,但对误码率较高的点对点链路,为使发送方尽早重传,也可以给发送方发送NAK分组
- 给数据分组编号的时候,需要要1个比特编号就行了,即0和1
- 给ACK分组编号,所用的比特和给数据分组编号时候一样,但是数据链路层一般不会出现ACK分组迟到的情况,所以在数据链路层实现SW协议时,可以不用给ACK分组编号
回退N帧协议GBN(G0-Back-N)
因为停止等待协议的信道利用率很低,所以如果能流水线式传输数据分组的话,信道利用率会高很多
主要是通过发送窗口的方式来实现多个数据包的发送
1.采用3个比特给分组编序号,即0~7
2.发送窗口的尺寸不能超过$2^n-1$,如果发送窗口尺寸为1,则是SW协议
3.接收窗口的尺寸为1
累计确认
接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后,对按序到达的最后一个数据分组发送确认,
比如在接收到3个数据包后,只需要发送一个ACK2就可以了,说明在ACKn之前的数据包都成功接收了
即使确认分组丢失,发送方也不必重传,只要只要后面的确认分组到了就行,使用累计确认也有缺点,当发送方发送的第一个数据包出现误码的时候,接收方只有全部丢弃数据包
当出现差错的时候,接收窗口每丢弃一次,就会发送一次之前的ACK序号,当发送窗口接收到重复的ACK时,可以不等超时计时器超时就立刻重传
尽管之后的数据分组都正确的到达了接收方,但是由于第一个数据分组没有被接收,它们同样也不能被接收,发送方还要重传这些数据分组,这就是所谓的Go-back-N(回退N帧)
选择重传协议SR(Selective Request)
回退N帧协议的接收窗口尺寸为1,因此接收方只能按序接收正确到达的分组,一个数据的误码导致在其之后的数据不能被接收,这是对通信资源的浪费
为了提高性能,只重传出现误码的数据分组,因此,接收窗口的尺寸应该大于1,以便接收方先收下失序到达但无误码并且序号落在接收窗口的数据分组,等到所缺分组收齐后再一并送交上层。这就是选择重传协议
选择重传协议不采用累计确认,而是逐一确认
发送窗口的尺寸不能超过$1<W_T≤2^{n-1}$,n为编码的比特数
如果尺寸超过了,则会导致重复分组的问题
实际上,发送窗口的值应该是和GBN协议一样,最大是$2^{n}-1$,而非$2^{n-1}$,之所以规定成$2^{n-1}$,是因为如果发送窗口>$2^{n-1}$,而接受窗口=发送窗口的值,会导致分组重复的问题,但是,只要遵循$W_T+W_R=2^{n}$这一规律,发送窗口的值也是可以超过$2^{n-1}$的
信道利用率
停止等待协议
发送一个数据分组开始,到收到确认消息,有三段时间,数据分组的发送时延 $T_D$,数据在信道中的往返时间RTT,收到确认分组的处理时延$T_A$
只有在发送数据的时候才算在利用信道
信道利用率$U=\frac{T_D}{T_D+RTT+T_A}$
当往返时延RTT远大于数据帧发送时延$T_D$的时,信道利用率非常低,为了克服停止等待协议信道利用率低的缺点,就产生了另外两种协议,即后退N帧协议和选择重传协议
滑动窗口协议
滑动窗口协议的发送窗口数$Ws$
数据帧的发送时延$T_S$ (图中的a)
信号的传播时延$T_p$ (图中的b和c)
发送时延$T_S$=帧长度/带宽,滑动窗口协议的信道利用率与发送窗口的大小有关,当$Ws × Ts ≥ ( Ts + 2Tp )$时,信道利用率为100%,否则信道利用率为$Ws × Ts / ( Ts + 2Tp )$
有些时候还要考虑到确认帧的情况
一般来说确认帧的发送时延可以忽略不计,但是在双向传输中,有可能采用捎带确认的方式,此时确认帧会和发送帧一起发出,此时的信道利用率为$Ws × Ts / ( 2Ts + 2Tp )$
捎带确认:在计算机通信中,当一个数据帧到达的时候,接收方并不是立即发送一个单独的确认帧,而是抑制一下自己并且开始等待,直到网络层传递给它下一个分组,然后,确认信息被附在往外发送的数据帧上 (在TCP协议中也会用到)
如果要追求信道利用率,则是要在有限的时间内,发送足够多的帧,即发送的帧的字节数较小比较合适
滑动窗口协议的发送窗口Ws、接收窗口Wr以及帧序号的比特数n之间需满足约束关系:$Ws + Wr ≤ 2n$
广域网
广域网(WAN),通常跨接很大的物理范围,能连接多个城市和国家,或横跨几个州并提供远距离通信
广域网的通信子网主要适用分组交换技术。广域网的通信子网可以利用公用分组交换网,卫星通信网和无线分组交换网,将不同地区的局域网或计算机系统互连起来,达到资源共享的目的。因特网(Internet)是世界范围内最大广域网。
点对点协议PPP
PPP(Point-to-Point Protocol)是目前使用最广泛的点对点链路层协议。用于使用拨号电话接入因特网时一般都使用PPP协议,是面向字节的数据链路层协议。PPP协议只支持全双工链路。
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成
- 对各种协议数据报的封装方法
- 链路控制协议LCP 用于建立,配置以及测试数据链路的连接
- 一套网络控制协议NCPs 其中每一个协议支持不同的网络层协议
封装成帧
帧的格式
标志F(Flag)字段:PPP帧的定界符,取值为0x7E
地址(Address)字段:没什么用
控制(Control)字段:没什么用
协议(Protocol)字段:指明帧的数据部分送交那个协议处理
帧检验序列(Frame Check Sequence)字段:CRC计算出的校验位
透明传输
如果是字节的异步链路,则采用字节填充法
- 将出现的每一个7E字节转变成(7D,5E)
- 出现的每一个7D字节转变成(7D,5D)
- 出现的每一个ASCII控制字符,则在前插入一个7D,同时将该字符编码加上0x20
接收方进行反变换就可以恢复原来帧的数据部分
如果是比特的同步链路则采用比特填充法
发送方对帧的数据部分进行扫描,只要发现5个连续的比特1,就立即填充一个比特0
差错检测
接收方每收到一个PPP帧,就进行CRC校验,若CRC检验正确,就收下这个帧,反之,就丢弃这个帧,
总结:使用PPP协议实现了封装成帧和差错检测的功能,但不提供可靠传输
广域网中采用PPP协议是一种建立连接,不可靠的服务
局域网
概念
局域网自然就是局部地区形成的一个区域网络,其特点就是分布地区范围有限,可大可小,大到一栋建筑楼 与相邻建筑之间的连接,小到可以是办公室之间的联系。局域网自身相对其他网络传输速度更快,性能更稳定,框架简易,并且是封闭性,这也是很多机构选择的原因所在。局域网自身的组成大体由计算机设备、网络连接设备、网络传输介质3大部分构成,其中,计算机设备又包括服务器与工作站,网络连接设备则包含了网卡、集线器、交换机,网络传输介质简单来说就是网线,由同轴电缆、双绞线及光缆3大原件构成。
局域网在数据链路层中又分为逻辑链路控制子层(LLC)和介质访问控制子层(MAC)
LLC层负责识别网络层协议,然后对它们进行封装,为网络层服务,建立连接等
MAC子层负责数据帧的封装,帧的接受发送,寻址,差错控制等
以太网(通用局域网)
以太网(Ethernet)是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问控制的内容。以太网是目前应用最普遍的局域网技术,取代了其他局域网标准如令牌环网、FDDI和ARCNET
以太网实现了网络上无线电系统多个节点发送信息的想法,每个节点必须获取电缆或者信道的才能传送信息,每一个节点有全球唯一的48位地址也就是制造商分配给网卡的MAC地址,以保证以太网上所有节点能互相鉴别。由于以太网十分普遍,许多制造商把以太网卡直接集成进计算机主板
中继器
因为信号的衰减和延时,根据不同的介质以太网段有距离限制。例如,10BASE5同轴电缆最长距离500米 (1,640英尺)。最大距离可以通过以太网中继器实现,中继器可以把电缆中的信号放大再传送到下一段。中继器最多连接5个网段,但是只能有4个设备(即一个网段最多可以接4个中继器)。这可以减轻因为电缆断裂造成的问题:当一段同轴电缆断开,所有这个段上的设备就无法通讯,中继器可以保证其他网段正常工作。
中继器(repeater)对信号进行再生和还原,对衰减的信号进行放大,保持与原数据相同,以增加信号的传输距离,适用于完全相同的两类网络的互连,且网速要相同
集线器
使用集线器的以太网在逻辑上仍是一个总线网,各站共享总线资源,使用的还是CSMA/CD协议
集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测
集线器一般有少量的容错能力和网络管理能力
随着应用的拓展,人们逐渐发现星型的网络拓扑结构最为有效,于是设备厂商们开始研制有多个端口的中继器。多端口中继器就是众所周知的集线器(Hub)。集线器可以连接到其他的集线器或者同轴网络。
集线器实际上就是多端口的中继器
非屏蔽双绞线最先应用在星型局域网中,之后也在10BASE-T中应用,最后取代了同轴电缆成为以太网的标准。集线器的应用使某条电缆或某个设备的故障不会影响到整个网络,提高了以太网的可靠性。双绞线以太网把每一个网段点对点地连起来,这样终端就可以做成一个标准的硬件,解决了以太网的终端问题。
快速以太网
尽管中继器在某些方面分隔了以太网网段,使得电缆断线的故障不会影响到整个网络,但它向所有的以太网设备转发所有的数据。这严重限制了同一个以太网网络上可以相互通信的机器数量。为了减轻这个问题,桥接方法被采用,在工作在物理层的中继器之基础上,桥接工作在数据链路层。通过网桥时,只有格式完整的数据包才能从一个网段进入另一个网段;冲突和数据包错误则都被隔离。通过记录分析网络上设备的MAC地址,网桥可以判断它们都在什么位置,这样它就不会向非目标设备所在的网段传递数据包。像生成树协议这样的控制机制可以协调多个交换机共同工作。
交换机就是多接口网桥
大多数现代以太网用以太网交换机代替Hub。尽管布线方式和Hub以太网相同,但交换式以太网比共享介质以太网有很多明显的优势,例如更大的带宽和更好的异常结果隔离设备。
以太网的标准拓扑结构为总线型拓扑,但目前的快速以太网(100BASE-T、1000BASE-T)为了减少冲突,将能提高的网络速度和使用效率最大化,使用交换机(Switch hub)来进行网络连接和组织。如此一来,以太网的拓扑结构就成了星型;但在逻辑上,以太网仍然使用总线型拓扑和CSMA/CD(Carrier Sense Multiple Access/Collision Detection,即载波多重访问/碰撞侦测)的总线技术。
然而交换机对网络中的广播数据流量不做任何限制,这也影响了网络的性能。通过在三层交换机(有路由转发功能)或路由器上划分VLAN可解决这一问题。
以太网标准:
速度达到100Mbps以上就是快速以太网,以不同的传输介质对标准名称以区分,100BASE-T标准中的T代表双绞线(Twist pair),100BASE-FX中的F代表光纤(Optical Fibre)
交换机
以太网交换机
在交换机中,某台主机想要给另一台主机发送信息,其他的主机不会收到信息
以太网一般有多种接口,每个接口都可以与直接一台主机或另一个以太网交换机相连,一般工作在全双工方式
而使用集线器的以太网在逻辑上是共享总线的,要使用CSMA/CD协议,工作在半双工方式
以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞
以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧
以太网交换机是一种即插即用设备,其内部的帧交换表是通过自学习算法自动逐渐建立起来的
帧有两种转发方式:存储转发,直通交换
存储转发是读取完以太网帧所有数据后再转发,至少需要传输512bit数据,直通转发就是在读取以太网帧的目的MAC后直接转发数据,目的MAC地址为6B=48bit,所以只需要传输48bit
交换机自学习和转发帧
以太网交换机自学习和转发帧的流程:
1.收到帧后登记。登记的内容为帧的源MAC地址及进入交换机的接口号
2.根据帧的目的MAC地址和交换机的帧交换表对帧进行转发,有以下3种情况
- 明确转发:交换机知道从哪个接口转发该帧
- 盲目转发:交换机不知道应当从哪个端口转发帧,只能将其通过除进入交换机的接口外的其他所有接口转发(也称为泛洪)
- 明确丢弃:交换机知道不应该转发该帧,将其丢弃
帧交换机中每条记录都有自己的有效时间,到期删除,原因如下
- 交换机的接口改接了另一台主机
- 主机更换了网卡
以太网交换机的生成树协议STP
为了提高以太网的可靠性,可以添加冗余链路来提高以太网的容错率
但是冗余链路会形成网络环路,导致很多问题
- 广播风暴 大量消耗网络资源,使网络无法正常转发其他数据帧
- 主机会收到重复的广播帧
- 交换机的帧交换表震荡
为了可以在增加网络可靠性的同时,有避免网络环路带来的问题,我们可以使用生成树协议STP(Spanning Tree Protocol)
- STP可以自动计算并构建一个在逻辑上没有环路的网络,其逻辑拓扑结构必须是树型
- 最终生成的树型逻辑拓扑要确保连通整个网络
- 当首先连接交换机或网络物理拓扑发生变化时,交换机都将进行生成树的重新计算
虚拟局域网VLAN
使用一个或多个以太网交换机互连起来的交换式以太网,其所有站点都属于同一个广播域
巨大的广播域会带来很多弊端,因为在网络会频繁的出现广播信息
所以需要分割广播域
- 使用路由器可以隔离广播域
但是路由器的成本较高
- 使用VLAN来分隔广播域
虚拟局域网VLAN(Virtual Local Area Network)是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求
实现机制
IEEE 802.1帧对以太网的MAC帧格式进行了扩展,插入了4字节的VLAN标记
VLAN标记的最后12比特称为VLAN标识符VID,唯一地标识了以太网帧属于哪一个VLAN
VID的有效取值为1~4094,802.1Q帧是由交换机来处理的,而不是用户主机来处理的,当交换机收到普通的以太网帧时,会插入4字节的VLAN标记,称为打标签
当交换机转发802.1Q帧,可能会删除4字节的VLAN标记转变为普通的以太网帧
交换机的端口类型有以下3种:
- Access
- Trunk
- Hybrid
交换机各端口的默认VLAN ID
在华为交换机上称为Port VLAN ID,即端口VLAN ID,简记为PVID
Access端口
Access端口一般用于连接用户计算机
Access端口只能属于一个VLAN
Access端口的PVID值与端口所属VLAN的ID相同
Access端口接收处理方法:一般只接收未打标签的普通以太网帧,根据接收帧的端口PVID给帧打标签,字段中的VID取值与端口的PVID取值相等
Access端口发送处理方法:若帧中的VID与端口的PVID相等,则去标签并且转发该帧,否则不转发
Trunk端口
Trunk端口一般用于交换机之间或交换机与路由器之间的互连
Trunk端口可以属于多个VLAN
用户可以设置Trunk端口的PVID值,默认情况下,Trunk端口的PVID值为1
- Trunk端口发送处理方法:对VID等于PVID的帧,去标签转发
- Trunk端口接收处理方法:接收未打标签的帧,根据接收帧的端口的PVID给帧打标签,字段中的VID取值与端口中的PVID取值相等
无线局域网
WLAN是Wireless Local Area Network的简称,指应用[无线通信技术将计算机设备互联起来,构成可以互相通信和实现资源共享的网络体系。无线局域网本质的特点是不再使用通信电缆将计算机与网络连接起来,而是通过无线的方式连接,从而使网络的构建和终端的移动更加灵活。
IEEE802.11是无线局域网的通用标准,它是由IEEE所定义的无线网络通信标准,IEEE 802.11下属有很多小的标准(如IEEE802.11b、IEEE802.11g),均使用CSMA/CA多路访问控制协议。
801.11体系结构的基本构件模型是基本服务集(Basic Service Set,BSS)。如下图所示
一个BSS包含一个或多个无线站点和一个接入点(Access Point,AP)的中央基站。上图表示两个BSS中的AP,它们连接到一个互联网设备上(如交换机或者路由器),互连设备又连接到因特网中。
无线局域网中的AP类似于以太网中的集线器
MAC地址
网卡
适配器是用于计算机与外界局域网的连接。适配器本来是在主机箱内插入的一块网络接口板,这种接口板又称为网络接口卡NIC(Network Interface Card)或简称为网卡。由于现在计算机主板上都已经嵌入了这种适配器,不再单独使用网卡了。
适配器在接收和发送各种帧时,不使用计算机CPU。这时计算机中的CPU可以处理其他任务。当适配器收到有差错的帧时,就把这个帧直接丢弃而不必通知计算机,当适配器接收到正确的帧时,它就使用中断来通知该计算机,并交付协议栈中网络层。
当多个主机连接在同一个广播信道上,要实现两个主机之间的通信,则每个主机必须有一个唯一的标识,即一个数据链路层地址
当每个主机发送的帧中必须携带标识发送主机和接收主机的地址,这类主机是用于媒体接入控制MAC的,因此这类地址被称为MAC地址
MAC地址一般被固化在网卡的EEPROM中,因此也被称为硬件地址,有时也被称为物理地址,但并不意味在MAC地址属于物理层
一般情况下,用户主机会用有线网卡和无线网卡两个网络适配器,每个适配器有一个全球唯一的MAC地址,而交换机和路由器往往有更多的MAC地址,严格来说,MAC地址是对网络上各接口的唯一标识,而不是各设备的唯一标识
使用点对点的信道的数据链路层不需要MAC地址
字节发送顺序是从第一字节到第六字节
字节内的比特发送顺序是 $b_0$到$b_7$
以太网的MAC帧格式
WLAN的MAC帧格式
有三个地址字段,AP是无线访问接入点
IP地址
IP地址属于网络层
IP地址是因特网上的主机和路由器所使用的地址,用于标识两部分信息:
- 网络编号:标识因特网上数以百计的网络
- 主机编号:标识同一网络上不同主机
数据包转发过程中IP地址与MAC地址的变化情况
数据包转发过程中源IP地址和目的IP地址保持不变
数据包转发过程中源MAC地址和目的MAC地址逐个链路改变
主机和路由器在转发过程中知道对方的IP地址,却不知道对方的MAC地址
ARP协议
地址解析协议ARP(Address Resolution Protocol),是根据主机IP地址获取其MAC地址的一种协议
每个主机都有自己的ARP高速缓存表,源主机在自己的ARP高速缓存表中查找目的主机的IP地址所对应的MAC地址,若找到了,则可以封装MAC帧进行发送,若找不到则发送ARP请求(封装在广播MAC帧中)
目的主机收到了ARP请求后,将源主机的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后给源主机发送ARP响应(封装在单播MAC帧中),ARP响应中包含有目的主机的IP地址和MAC地址
源主机收到了ARP响应后,将目的主机的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后就可以封装之前想发送的MAC帧并发送给目的主机
ARP的作用范围:逐段链路或逐个网络使用
ARP高速缓存表中的类型分为静态和动态
静态是手工设置的,不同操作系统下的生命周期不同,动态的是自动获取的,生命周期默许为两分钟
除了ARP请求和响应外,ARP还有其他类型的报文
ARP没有安全验证机制,存在ARP欺骗问题
媒体接入控制
所有主机共享信道会导致在各主机同时发送数据时会发生信号的碰撞,使信息发送失败,共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC(Medium Access Control)
静态划分信道
信道复用
复用(Multiplexing)是通信技术中的一个重要概念,复用就是通过一个物理线路同时传输多路用户的信号
当网络中传输媒体的传输容量大于多条单一信道的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽
频分复用(FDM)
将传输线路的资源划分成多个子频带,形成多个子信道
频分复用的所有用户同时占用不同的频带资源并行通信
时分复用(TDM)
将时间划分为一个个小的时隙,每对用户只在被划分的时间中传递信息
时分复用的所有用户在不同的时间占用同样的频带宽度
波分复用(WDM)
波分复用其实就是光的频分复用
变换光的波长,来利用波长的不同来传递不同的信息
码分复用(CDMA)
实际上由于该技术主要用于多址接入,人们更常用的名词是码分多址CDMA(Code Divison Multiple Access)
复用和多址的概念:
- 复用是将单一媒体的频带资源划分成很多子信道,这些子信道之间相互独立,互不干扰,从媒体的整体频带资源上来看,每个子信道只占用该媒体频带资源的一部分
- 多址处理的是动态分配信道给用户,这在用户仅仅暂时占用信道的应用是必须的
- 某种程度上,多址是复用的应用
与FDM和TDM不同,CDM的每一个用户可以在同样的时间使用同样的频带进行通信,由于各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰
在CDMA中,每一个比特时间再划分为m个短的间隔,称为码片(Chip)
在使用CDMA的每一个站被指派一个唯一的m bit码片序列
- 一个站如果要发送比特1,则发送它自己的m bit码片序列
- 一个站如果要发送比特0,则发送它自己的m bit码片序列的二进制反码
码片序列的挑选原则如下:
- 分配给每个站的码片序列必须各不相同,实际常采用伪随机码序列
- 分配给每个站的码片序列必须正交(规格化內积为0)
内积:设二维空间内有两个向量$\vec{a}=(x_1,y_1)$和$\vec{b}=(x_2,y_2)$,定义它们的数量积(又叫内积、点积)为以下实数:
更一般地,n维向量的内积定义如下:
规格化内积:将内积结果除以向量的维数,即是规格化,$a·b=1/n\sum_{i=1}^na_ib_i=0$
用收到的码片序列分别与各站的码片序列进行求内积运算(收到了A站的数据,就用数据和A站的码片做内积),若计算结果为1,则被判断的站发送了比特1,若计算结果为-1,则被判断的站发送了比特0,若计算结果为0,则被判断的站没有发送数据
ALOHA协议
不监听信道,不按时间发送,随机重发,想发就发
如果发生冲突,接受方就会检测出错,不予确认,发送方在一定时间内收不到就判断发生冲突
超时后等一随机时间再重传
CSMA协议
和CSMA/CD的差异在于,CSMA会在发送之前检测信道的空闲,确认空闲后之后再发送信息,但是不会在发送过程中检测空闲,属于是先听后发
CSMA/CD协议(以太网)
载波监听多址接入/碰撞检测 CSMA/CD(Carrier Sense Multiple Access/Collision Detection)
以太网中采用CSMA/CD协议是一种无连接,不可靠的服务
适用于总线型网络
多址接入MA:多个站连接在一条总线上,竞争使用总线
载波监听CS:每一个站在发送帧之前先要检测一下总线上是否有其他站点在发送帧
- 若检测到总线空闲96比特时间,则发送这个帧
- 若检测到总线忙,则继续检测并等待总线转为空闲96比特时间
- 96比特时间被成为帧间最小间隔,作用是使接收方可以检测出一个帧的结束
碰撞检测CD:每一个正在发送帧的站边发送边检测碰撞
- 一旦发现总线上出现碰撞,则立即停止发送,退避一段随机时间后再次发送
以太网还采取一种叫做强化碰撞的措施,这就是当发送帧的站点一旦检测到碰撞,除了立即停止发送帧外,还要再继续发送32或48比特的人为干扰信号,以便有足够多的碰撞信号使所有站点都能检测出碰撞
争用期(碰撞窗口)
- 主机最多经过$2\tau$的时长就可检测到本次发送是否遭受了碰撞
- 因此,以太网的端到端往返传播时延$2\tau$称为争用期或碰撞窗口
- 经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞
显然,在以太网中发送帧的主机越多,端到端往返传播时延越大,发生碰撞的概率就越大,因此,共享式以太网不能连接太多主机,使用的总线也不能太长
10Mb/s以太网把争用期定为512比特发送时间,因此其总线长度不能超过5120m,但考虑到其他因素,总线长度不能超过2500m
最小帧长
以太网规定最小帧长为64字节,即512比特,如果发送的数据非常少,那么必须加入一些填充字节,使帧长不小于64字节
以太网的最小帧长确保了主机可在帧发送完成之前就检测到该帧的发送过程中是否遭遇了碰撞
如果在争用期内检测到碰撞,就立即中止发送,这时发送出的数据一定小于64字节,因此但凡长度小于64字节的帧都是由于碰撞而异常中止的无效帧
最小帧长=争用期×数据传输速率
最大帧长
为了避免主机一直发送信息,则帧长应该有上限,以太网MAC帧的最大帧长为1518字节
退避时间—截断二进制指数退避算法
若连续多次发生碰撞,就表明可能有较多的主机参与竞争信道,但使用上述退避算法可使重传需要推迟的平均时间随重传次数而增大,因而减少发生碰撞的概率
当重传的次数达到16次仍不成功时,则表明同时打算发送帧的主机太多,以至于连续发生碰撞,则丢弃该帧
信道利用率
如果各个主机发送帧都不会产生碰撞,那么在极限情况下,发送一帧占用总线的时间为$T_0+\tau$,而帧的本身的发送时间是$T_0$
所以极限信道利用率$S_{max}=\frac{T_0}{T_0+\tau}$
以太网的端距离应该短一些,帧应该长一些
帧发送流程
帧接收流程
CSMA/CA协议(无线局域网)
载波监听多址接入/碰撞避免(Carrier Sense Multiple Access/Collision Avoidance):适用于无限局域网使用的协议
在无线局域网中依然可以使用载波监听多址接入,但是不能使用碰撞检测CD
- 因为无线信道的传输条件特殊,信号强度的动态范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度,如果要在无线网卡上实现碰撞检测CD,对硬件的要求非常高
- 即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性,进行碰撞检测的意义也不大
802.11无线局域网使用CSMA/CA协议,在CSMA的基础上增加了一个CA功能
由于不可能避免所有的碰撞,并且无线信道误码率较高,所以还使用了数据链路层确认机制(停止等待协议)来保证数据被正确接收
无线局域网中采用CSMA/CD协议是一种有连接,可靠的服务
802.11的MAC层标准定义了两种不同的媒体接入控制方式:
- 分布式协调功能DCF(Distributed Coordination Function) 在DCF方式下,没有中心控制站点,每个站点使用CSMA/CA协议通过争用信道来获取发送权
- 点协调PCF(Point Coordination Function) PCF方式,使用集中控制的接入算法,在实际中较少使用
帧间间隔IFS(InterFrame Space)
所有的站点必须在持续检测到信道空闲一段指定时间后才能继续发送帧,这段时间被称为帧间间隔IFS
帧间间隔的长短取决于该站点要发送的帧的类型:高优先级帧等待时间短,低优先级帧等待时间长
短帧间间隔SIFS(28us),是最短的帧间间隔,用来分隔开属于一次对话的各帧,一个站点应当能够在这段时间内从发送方式切换到接收方式。使用SIFS的帧类型有ACK帧,CTS帧,由过长的MAC帧分片后的数据帧,以及所有回答AP探询的帧和在PCF方式中接入点AP发送出的任何帧
帧间间隔DIFS(128us),在DCF方式中用来发送数据帧和管理帧
CSMA/CA协议的工作原理
检测到信道空闲还要等DIFS再发送的原因是:让高优先级的帧先发送
发送第1帧后,等待SIFS后再发送的原因是:SIFS用来分隔帧和帧之间的间隔
经过DIFS,还要退避一段时间是因为:避免很多站点同时发送数据
当站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后立即发送的数据帧,则不使用退避算法
以下情况必须使用退避算法:
- 在发送数据帧之前检测到信道处于忙状态
- 在每一次重传一个数据帧时
- 在每一次成功发送后要连续发送下一个帧时
退避算法
在执行退避算法时,站点为退避计时器设置一个随机的退避时间
- 当退避计时器的时间减小到0,就可以开始发送数据
- 当退避计时器的时间还未减小到0,信道又转到忙状态时,就冻结退避计时器,重新等待信道变为空闲,再经过DIFS,继续启动退避计时器
进行第i次退避时,退避时间在时隙编号${0,1…2^{2+i}-1}$中随机选择一个,然后乘以基本退避时间,就可以得到随机的退避时间,当时隙编号达到255,也就是第6次退避时就不再增加
信道预约和虚拟载波监听
为了尽可能减少碰撞的概率和降低碰撞的影响,802.11标准允许发送数据的站点对信道进行预约
源站在发送数据帧之前先发送一个短的控制帧,称为RTS(Request To Send),包括源地址,目的地址以及这次通信所需的持续时间
若目的站正确收到了源站的RTS帧,且媒体空闲,就发送一个响应控制帧,称为允许发送CTS(Clear To Send ),它也包括这次通信所需的持续时间
- 源站收到了CTS帧后,在等待一段时间SIFS后,就可以发送数据帧
- 若目的站正确收到了源站发来的数据帧,在等待时间SIFS后,就向源站发送确认帧ACK
除源站和目的站以外的其他各站,在收到CTS帧后就推迟接入无限局域网中,这样就保证了源站和目的站之间的通信不会收到其他站的干扰
如果RTS帧发生碰撞,源站就收不到CTS帧,需执行退避算法重传RTS帧
由于RTS帧和CTS帧很短,发生碰撞和碰撞产生的开销很小,所以用很小的代价对信道进行预约是值得的
除了RTS和CTS会携带通信需要持续的时间,数据帧也能携带通信所需要的时间,这称为802.11的虚拟载波监听机制
利用虚拟载波监听机制,站点只要监听到RTS帧,CTS帧或数据帧中的任何一个,就能知道信道被占用的持续时间,而不需要真正监听到信道上的信号,因此虚拟载波监听可以减少隐蔽站的问题
令牌传递协议
令牌是一个特殊格式的MAC控制帧,不含任何信息
令牌在主机之间传递,只有接收到令牌的主机才能发送信息,将数据帧和令牌结合在一起发送,接受方接受到之后,再将令牌发送出去,令牌环网是不会检测到碰撞的
每个结点都可以在一定的时间获得发送数据的权利,而不是无限的持有令牌
应用于负载较重,通信量较大的网络中