1.数据链路层概况
数据链路层位于OSI模型中的倒数第二层。即物理层的上一层。在学习数据链路层之前,需要明确什么是链路?什么又是数据链路。
- 链路(link):一条无源的点到点的物理线路段,中间没有交换结点。
- 数据链路:把实现通信协议的硬件和软件添加到链路上,常通过网卡实现。
了解了链路和数据链路之后,更重要的是数据链路层的概念,它到底实现了什么功能呢?
数据链路层将数据报以帧为单位通过单一通信链路从一个节点移动到相邻节点。
1.1 数据链路层基本问题
数据链路层所提供的服务随着链路层协议的不同而变化,但有三个基本问题是不变的:
- 封装成帧
- 透明传输
- 差错控制
接下来我们详细介绍一下各部分的功能。
1.1.1 封装成帧(framing)
封装成帧即在一段数据的前后分别添加首部和尾部,构成一个帧。而每一帧传输的数据,是有大小限制的,即帧的数据部分要小于等于MTU(Maximum Transmision Unit)。
加上首部、尾部一定是有作用的,就像报头文字含有很有信息一样,帧的首部和尾部被用作给帧定界。即标志帧的开始与结束。标志开始的字符SOH放在帧的最前面,标志结束的字符EOT放在帧的末端。
1.1.2 透明传输
透明传输的出现其实和封装成帧有着密切的联系。SOH、EOT都是由十六进制字符表示的,若帧数据中有与标识符相同的字符,则会错误地认为其为帧的末端,造成传输的提前结束。
这个时候就需要透明传输上场了。
透明传输即无论发送什么样的比特组合的数据,这些数据都能按原样通过数据链路层。
那这么神奇的透明传输时是怎么实现的呢?
透明传输采用一种字节填充或字符填充的方法,在数据中出现的SOH、EOT、转义字符前面插入一个转义字符ESC。接收端的数据链路层再将转义字符删除掉。这个过程其实就像编程语言中的转义字符一样。
1.1.3 差错检测
在传输过程中,可能会产生比特差错,即某位1变0,0变1。对于差错采用**误码率(BER)**进行量化:
误码率:在一段时间内,传输错误的比特占所传输比特总数的比率
为了解决这个问题,广泛采用一种叫**循环冗余检验(CRC)**的方法。
循环冗余检验即在发送端将数据划分为组,在每组M后面添加供差错检测用的n位冗余码。
那么n位冗余码是怎么来的呢?怎么样的n位冗余码才能提供差错检测的功能?
冗余码是通过计算产生的。对于k位的M分组数据,先在M后面添加n个0,用k+n位的数除以事先选定的长度为n+1位的除数P,得出的余数即为n位冗余码。
在计算得到冗余码后,具体的检验流程如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200928165200589.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQwMzYwNQ==,width = “60%”,color_FFFFFF,t_40#pic_center)
在数据后面添加的冗余码叫作帧检验序列FCS。但CRC并非是获得FCS的唯一方法。
显然,CRC只能保证数据无差错,但并不确定差错出现的位置并进行改正。
无差错接受、无差错传输、无比特差错、无传输差错
无差错接受:接受的帧都没有传输差错
无传输差错:需要在CRC检验上加入确认机制和重传机制。
2. 点对点协议PPP
PPP协议即Point-to-Point Protocol,点对点协议。用户在使用拨号电话线接入因特网时,都是使用PPP协议。从它的名字就可以看出来,PPP协议主要用于点对点的传输信道中。
PPP协议由3个部分组成:
- 一个将IP数据封装到链路的方法
- 链路控制协议LCP(Link Control Protocol)
- 网络控制协议NCP(Network Control Protocol)
2.1 PPP协议的帧格式
PPP协议的帧格式如下:
其中首部由标志字段、地址字段、控制字段、协议组成,协议字段根据不同的值可以表示信息字段为IP数据报、PPP链路控制数据、网络控制数据等。
尾部由FCS(帧检测序列)、标志字段组成。
透明传输问题
- PPP用在同步传输链路时,采用硬件完成比特填充
零比特填充:在发送端,每发送5连续的1,填充一个0;在接收端,每接受5个连续的1,把之后的0删除。
- PPP用在异步传输时,采用特殊的字符填充法。
字符填充法:将0x7E填充为(0x7d,0x5E);将0x7D填充为(0x7d,0x5d);对于ASCII码的控制字符,在字符前加入0x7D字节,并对该字符的编码加以改变。
2.2 PPP协议的工作状态
工作流程如下:
graph LR
A(用户接入ISP,建立物理连接)-->B(PC机向路由器发送LCP分组)
B-->C(选择PPP参数,NCP分配临时IP地址)
C-->D(NCP释放网络层连接)
D-->E(LCP释放数据链路层连接)
3. CSMA/CD协议
CSMA/CD协议是使用广播信道的数据链路层协议。
3.1 局域网的数据链路层
局域网在生活中接触比较广泛的,比如某个学校、单位的公共网络,就可以看作一个局域网。
局域网为一个单位所有,地理范围和站点数目有限。具有广播功能,局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
而我们常听到的以太网技术就是一种广播类型的计算机局域网技术。其采用CSMA/CD总线技术
对于广播信道,如何解决信道共享问题至关重要。媒体共享技术可以分为两大类:
- 静态划分信道:包括频分复用、时分复用、波分复用、码分复用等
- 动态媒体接入控制(多点接入):随机接入、受控接入
在局域网中使用动态媒体接入控制的随机接入方式。
3.1.1 两个子层
为了使数据链路层能更好地适应多种局域网标准,局域网的数据链路层被拆成了两个子层:
- 逻辑链路控制LLC(Logic Link Control)子层
- 媒体接入控制MAC(Medium Access Control)子层:与接入到传输媒体有关
3.1.2 适配器
网络接口板又称为通信适配器或网络接口卡,也就是我们平常所说的网卡。
那么这个网卡有啥用呢???
- 进行串行/并行转换
- 对数据进行缓存
- 在计算机操作系统安装设备驱动程序
- 实现以太网协议
在通信过程中,适配器发挥着什么作用呢?计算机通过适配器和局域网进行通信。
3.2 CSMA/CD协议
为了通信的简便,以太网采取两种措施:
- 采用无连接的工作方式,不必事先建立连接就可发送数据
- 以太网对发送的数据帧不进行编号,也不要求对方回复确认
为什么可以采取这种措施呢?这种服务是不可靠的交付,难道不怕出现错误嘛?
实际上,局域网信道的质量很好,因信道质量产生差错的概率很小。即使当接收方丢失了一些数据时,也是由以太网的高层进行重传,而重传的帧对于以太网来说,当作一个新的数据帧。
在研究CSMA/CD之前,首先得知道它到底是个啥,能用它来做什么?
CSMA/CD是一种总线技术。属于广播信道中随机访问技术中的一种竞争型访问方法。
说文解字
多点接入:许多计算机以多点接入的方式连接在一根总线上
载波监听:每一个站在发送数据前检测总线上是否有其他计算机在发送数据
碰撞检测:计算机边发送数据边检测信道上的信号电压大小
3.2.1 碰撞检测
上面说了,碰撞检测是通过检测信道上的信号电压大小得到的,当信号电压超出某个阈值,就认为信道内发生了碰撞。
争用期
最先发送数据帧的站,在发送数据帧后最多经过时间2t(两倍的端到端往返时延)就能知道发送的数据帧是否遭受到碰撞,这个两倍的端到端往返时延就是争用期,也叫做碰撞窗口。
在检测到发生碰撞后,要停止发送数据,推迟一个随机时间才能再发送数据。从停止到再次成功发送的时间需要通过算法进行。
由于碰撞的存在,因此使用CSMA/CD协议的以太网不能进行全双工通信,智能进行双向交替通信,即半双工通信。
3.2.2 二进制指数类型退避算法
当碰撞发生后,发送方要停止发送数据,并停止一段时间后再次发送数据。这个停止的时间可以用二进制指数类型退避算法得到。算法的具体操作步骤如下图所示:
争用期长度
以太网取51.2微秒为争用期长度,对于10M/s的以太网,在争用期内可发送512bit即64字节,如果前64字节没有冲突,则在后续数据也不会冲突。若帧的长度小于64字节,则可能在未检测到是否发生碰撞时,帧就已经发送完了,无法检测是否冲突。64字节即为最短有效帧长。
帧间最小间隔
帧间最小间隔为9.6微秒,当一个站在检测到总线开始空闲后,还要等待9.6微秒才能再次发送数据。设置帧间最小间隔的目的是为了使刚刚收到数据帧的站的接收缓存来得及清理,做好接收下一帧的准备。
强化碰撞
当发送数据的站发生碰撞后
- 立即停止发送数据
- 继续发送若干比特的人为干扰信号,也叫作阻塞信号。
整个CSMA/CD的工作方式如下图所示:
3.3 信道利用率
发送一帧所需要的平均时间要考虑发生碰撞后进入退避的时间。
定义参数α: α = t T 0 \alpha=\frac{t}{T_0} α=T0t
- α \alpha α趋近于0,表示碰撞可以立即检测出来,并立即停止发送,信道利用率很高
- α \alpha α越大,争用期所占比例越大,信道利用率降低
理想情况下(未发生碰撞),信道利用率为: S m a x = 1 1 + α S_{max}=\frac{1}{1+\alpha} Smax=1+α1
4. 以太网的MAC层
始终铭记,什么是以太网。
4.1 MAC层的硬件地址
所谓的硬件地址也就是我们平常所说的MAC地址,也称作物理地址。MAC地址共有48位,其中前24位由注册管理机构负责向厂家分配;后24位由厂家自行指派,叫做扩展标识符。指派的要求呢,就是保证生产出的适配器没有重复地址。
这个MAC地址有什么用呢?当适配器从网络上收到一个MAC帧时,首先检查MAC帧中的MAC地址。若该MAC帧发往本站,则将该帧收下;否则将该帧丢弃。而发往本站的帧,又可分为以下三种:
- 单播帧(私聊)
- 广播帧(艾特全体成员)
- 多播帧(拉小群)
MAC帧的格式如下图所示:
其中需要注意的是,类型字段表示的是上一层使用的协议类型(即网络层)。
MAC帧的长度受最短有效帧长的限制,进而限制了数据字段、IP数据报的最小长度。当数据字段小于最小长度时,需要在数据字段后面加入整数字节进行填充。
5. 局域网的扩展
碰撞域,也叫做冲突域,在任何一个时刻,每一个碰撞域只有一个节点发送数据。
5.1 在物理层扩展局域网
在物理层扩展局域网使用集线器,组成一个更大的局域网,这些主机都在同一个碰撞域中。
需要注意的是!若不同的碰撞域使用不同的数据率,那么就不能用集线器互连起来。
5.2 在数据链路层扩展局域网
在数据链路层扩展局域网使用的是网桥,
网桥工作在数据链路层,根据MAC帧的目的地址对收到的帧进行转发。
网桥的一个突出的优势是:网桥使各网段成为隔离开的碰撞域。这也意味着网桥可以互连不同物理层、MAC子层和不同速率的局域网。同时,网桥并不改变他转的帧的源地址。这是它与路由器的区别。
另外,与集线器相比,集线器在转发帧时,不对传输媒体进行检测,网桥在转发前必须执行CSMA/CD算法。
网桥的核心部分是转发表,转发表是网桥通过自学习建立的。建立步骤如下图所示:
为了避免产生转发的帧在网络中不断地兜圈子,需要引入生成树算法。
生成树算法:找出网络拓扑的一个不存在回路的子集,即在任何两站间只有一条路径。
帧在网络中兜圈子的原因是什么呢?
主要是因为通信网络存在一条回路。利用生成树可以避免回路造成的网络资源浪费。
5.3 多接口网桥——以太网交换机
以太网交换机实质上就是一个多接口的网桥。每个接口直接与主机相连,并且一般都工作在全双工方式。
以太网交换机在使用时每个用户独占带宽,与共享式以太网相比,有很大的优势。
5.4 虚拟局域网(VLAN)
虚拟局域网实际上是局域网给用户提供的一种服务,并非一种新型局域网。虚拟局域网协议需要在以太网的帧格式中插入一个4字节的标识符,即VLAN标记,用于指明该帧属于哪一个虚拟局域网。
广播域:任何一台设备发出的广播通信都能被该部分网络中所有其他设备接收。
每个虚拟局域网就是一个广播域。由于广播域的限制,就限制了接收广播信息的工作站数,避免网络产生广播风暴。
6. 无线局域网
6.1 无线局域网的组成
我们所常说的无线局域网(WLAN),可将移动设备接入到由路由器发出的网络中,在这里移动设备可看作移动站,路由器看作一个基站。
- 基本服务集BSS:一个基站+若干个移动站
- 接入点AP:也就是基站
- 扩展服务集:将一个基本服务集通过AP接入到一个主干分配系统DS中,再接入另一个基本服务集
移动站接入AP,需要与AP建立关联,由两种方式:
- 被动扫描:接入站周期性发出信标帧
- 主动扫描:移动站发出探测请求帧,AP返回探测响应帧
6.2 无线局域网标准IEEE 802.11
首先我们需要弄清楚为啥无线局域网不直接使用CSMA/CD?而是用了个啥802.11?
- 无线局域网,接收信号的强度往往小于发送信号的强度,因此若要实现碰撞检测,硬件上的花费过大.
- 无线局域网中,并非所有的站点都能听见对方
那么既然我们的老朋友CSMA/CD不能满足需求,就只能再学习一下802.11了。
802.11的MAC层
无论是CSMD/CD还是802.11,需要解决的都是如何在局域网中收发数据的问题。802.11的MAC层通过协调功能确定移动站在何时发送或接收数据。
其协调功能包括以下两种
- 分布协调功能DCF(CSMA/CA):在每个结点使用CSMA机制,向上提供争用服务,每个站通过争用信道获取发送权。
- 点协调功能PCF:把发送数据权轮流交给各个站,避免碰撞产生。
在学习CSMA/CD的时候,我们知道每相邻两帧间存在发送间隔。好家伙,802.11这里直接设置了三种长度的帧间空隙IFS,用于提供基于优先权的介质访问控制方法。
- SIFS(短):使用SIFS的帧类型有ACK帧、CTS帧、分片后的数据帧、回答AP探询的帧、PCF中AP发送的任何帧
- PIFS(点协调功能帧间间隔):开始使用PCF方式时
- DIFS(分布协调功能,最长):在DCF方式中发送数据帧、管理帧
CSMA/CA协议
CSMA/CA协议其中的CA是Collision Avoid,即碰撞避免,而上面我们学过的是CD,Collision Detect。CSMA/CA是怎么实现碰撞避免的呢,从它的过程看一下:
** 退避算法**
- 信道从忙态变为空闲,发送数据需要等待DIFS的间隔,进入争用窗口。
- 信道由忙态转为空闲,各站执行退避算法
- 不使用退避算法:信道空闲时发送的第一个数据帧
虚拟载波监听
源站将其所要占用信道的时间通知给其他所有站,使其他所有站在这段时间都停止发送数据。将占用时间写在MAC帧中。当一个站检测到传送的MAC帧首部的持续时间字段,调整自己的网络分配向量NAV。
6.3 802.11局域网的MAC帧
好家伙,802.11的帧也有三种类型。
- 控制帧
- 数据帧
- 管理帧