3.1 数据链路层概述
数据链路层在网络体系结构中所处的地位
链路、数据链路和帧
链路
-
链路(Link)是指从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他的交换节点。
-
数据链路 (Data Link) 是基于链路的。当在一条链路上传送数据时,除需要链路本身,还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
-
计算机中的网络适配器(俗称网卡)和其相应的软件驱动程序就实现了这些协议。一般的网络适配器都包含了物理层和数据链路层这两层的功能。
### 帧 - 帧(Frame) 是**数据链路层**对等实体之间在水平方向进行逻辑通信的**协议数据单元PDU**。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/be5021622e824599b6c4c846a6cb6eaf.png)
3.2 数据链路层的三个重要问题
- 封装成帧
在帧的首部和尾部各有一个标志字段。接收方的数据链路层在收到物理层交付上来的比特流后,根据帧首部和尾部中的标志字段,就可以从收到的比特流中识别出帧的开始和结束,也就是进行帧定界。
- 透明传输
接收方的数据链路层根据帧定界符就能从一连串的比特流中识别出一个个的帧。
但是,如果在帧的数据载荷部分,恰好出现了与帧首部和尾部中的标志字段取值相同的数据,在不采取其他措施的情况下,接收方的数据链路层会出现帧定界错误。
如果能够采取措施,使得数据链路层对上层交付的PDU的内容没有任何限制,就好像数据链路层不存在一样,就称其为透明传输
- 差错检测
发送方给接收方发送帧,由于实际的通信链路都不是理想的,表示比特的信号在信道上传输时,不可避免的会产生失真,甚至出现误码,即比特0变成比特1,比特1变成比特0。接收方的数据链路层收到该帧后,如何才能知道帧中出现了误码呢?
- 可靠传输
若数据链路层向其上层提供的是不可靠传输服务,则接收方的数据链路层直接丢弃有误码的帧即可。
若数据链路层向其上层提供的是可靠传输服务,这就需要数据链路层通过某种机制实现发送方发送什么,接收方最终都能正确收到。
3.2.1 封装成帧和透明传输
封装成帧
-
封装成帧是指数据链路层给上层交付下来的协议数据单元PDU添加一个首部和一个尾部,使之成为帧。
- 帧的首部和尾部中包含一些重要的控制信息。
- 帧的首部和尾部中包含一些重要的控制信息。
-
帧首部和尾部的作用之一就是帧定界
- 为了提高数据链路层传输帧的效率,应当使帧的数据载荷的长度尽可能地大于首部和尾部的长度。
- 考虑到对缓存空间的需求以及差错控制等诸多因素,每一种数据链路层协议都规定了帧的数据载荷的长度上限,即最大传送单元(Maximum Transfer Unit,MTU)。例如,以太网的MTU为1500个字节。
透明传输
- 透明传输是指数据链路层对上层交付下来的协议数据单元PDU没有任何限制,就好像数据链路层不存在一样。
- 面向字节的物理链路使用字节填充的方法实现透明传输
例如,在把帧交付给物理层之前,对帧的数据载荷进行扫描,每出现一个帧定界符,就在其前面插入一个转义字符。接收方的数据链路层在物理层交付的比特流中提取帧,遇到第一个帧定界符时,认为这是帧的开始,当遇到转义字符时就知道,其后面1字节的内容虽然与帧定界符相同,但它是数据而不是帧定界符,剔除转义字符后,将其后面的内容作为数据继续提取。
- 面向比特的物理链路使用比特填充的方法实现透明传输
如图所示。发送方的数据链路层在将该帧交付给物理层进行发送前,会扫描帧的数据载荷,只要出现5个连续的比特1,就在其后填入一个比特0。经过这种比特0填充后的数据载荷,就可以确保其不会包含帧定界符。接收方的数据链路层在把数据载荷向上交付网络层之前,对数据载荷进行扫描,每当发现5个连续的比特1时,就把其后的一个比特0删除,这样就可以还原出原始的数据载荷。
3.2.2 差错检测
误码的相关概念
- 实际的通信链路都是不理想的,比特在传输过程中可能会产生差错(称为比特差错):
- 比特1可能变成比特0
- 比特0可能变成比特1
- 在一段时间内,传输错误的比特数量占所传输比特总数的比率称为误码率(Bit Error Rate,BER)
- 提高链路的信噪比,可以降低误码率。但在实际的通信链路上,不可能使误码率下降为零。
- 使用差错检测技术来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
例如,发送方的数据链路层采用某种检错技术,根据帧的内容计算出一个检错码,将检错码填入帧尾部。接收方的数据链路层,从帧尾部取出检错码,采用与发送方相同的检错技术,就可以通过检错码检测出帧在传输过程中是否出现了误码。
- 帧尾部用来存放检错码的字段称为帧检验序列FCS
奇偶校验
-
奇校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为奇数。
-
偶检验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为偶数。
-
在所传输的数据中,如果有奇数个位发生误码,则所包含比特1的数量的奇偶性会发生变化,可以检测出误码
-
在所传输的数据中,如果有偶数个位发生误码,则所包含比特1的数量的奇偶性补会发生变化,无法检测出误码(漏检)
-
在实际使用时,奇偶校验又可分为垂直奇偶校验、水平奇偶校验以及水平垂直奇偶校验。
### 循环冗余校验
- 数据链路层广泛使用漏检率极低的循环冗余校验(Cyclic Redundancy Check,CRC)检错技术。
- 循环冗余校验CRC的基本思想:
- 收发双方约定好一个生成多项式G(X)
- 发送方基于待发送的数据和生成多项式G(X),计算出差错检错码(冗余码),将冗余码添加到待发送数据的后面一起传输。
- 接收方收到数据和冗余码后,通过生成多项式G(X)来计算收到的数据和冗余码是否产生了误码。
3.2.3 可靠传输
3.2.3.1 可靠传输的基本概念
-
使用差错检测技术(例如循环冗余校验CRC),接收方的数据链路层就可检测出帧在传输过程中是否产生了误码(比特差错)。
-
数据链路层向其上层提供的服务类型
- 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做。
- 可靠传输服务:通过某种机制实现发送方发送什么,接收方最终就能收到什么。
-
一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向其上层提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。
-
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向其上层提供可靠传输服务。
- 可靠传输服务并不局限于数据链层,其他各层均可选择实现可靠传输。
- 可靠传输的实现比较复杂,开销比较大,是否使用可靠传输取决于应用需求。
实现可靠传输的三种机制
- 这三种可靠传输实现机制的基本原理并不仅限于数据链路层,可以应用到其上各层。
3.2.3.2 停止-等待协议
停止-等待协议原理
- 发送方给接收方发送一个数据分组,接收方收到后,对其进行差错检错,若没有检测出误码,则接收该数据分组,并给发送方发送确认分组(简记为ACK),发送方收到确认分组后,才能发送下一个数据分组。
- 假设这个分组在传输过程中出现了误码,接收方收到后,对其进行差错检测,检出了误码则丢弃该数据分组,并给发送方发送否认分组(简记为NAK),发送方收到否认分组后,就知道自己之前所发送的数据分组出现了误码而被接收方丢弃,于是立即重传该数据分组,接收方收到后对其差错检测,若没有检测出误码,则接收该数据分组,并给发送方发送确认分组。
- 因此,发送方每发送完一个数据分组后,并不能立刻将该数据分组从发送缓存中删除。因为之后有可能需要重传该数据分组,只有在收到针对该数据分组的确认分组后,才能将其从发送缓存中删除。
- 如果出现确认分组或否认分组丢失的情况,仅有确认、否认和重传这两种机制的停止-等待协议,就无法实现可靠传输。
- 当发送方的超时计时器出现超时,就立刻重传之前已发送的数据分组,接收方若正确接收到重传的数据分组,就给发送方发送相应的确认分组,发送方收到后就可以发送下一个数据分组了。
-
发送方给接收方发送一个数据分组,接收方正确接收该数据分组后,给发送方发送相应的确认分组。然而该确认分组在传输过程中丢失了,这必然会造成发送方的超时重传,接收方就会收到两个相同的数据分组,如果接收方不能识别出所接收的数据分组与前一次接收的数据分组是重复的,则会导致分组重复这种传输差错。
-
接收方应当丢弃重复的数据分组,并且还必须向发送方在发送一个确认分组,发送方收到后,可以给接收方发送下一个数据分组,其序号与上一个数据分组的序号是不同的
既然数据分组需要编号,那么确认分组是否也需要编号呢?
- 发送方发送0号数据分组,接收方正确接收后给发送方发送确认分组,由于某种原因,该确认分组迟到了,这必然会导致发送方对0号数据分组的超时重传,在0号数据分组的重传过程中,发送方收到了迟到的确认分组,于是给接收方发送1号数据分组组,接收方收到重传的0号数据分组,根据序号可知这是重复的数据分组,将其丢弃,并针对0号数据分组再发送一个确认分组,这样发送方就会收到两个针对0号数据分组的确认,然而发送方会将第二个针对0号数据分组的确认误认为是针对1号数据分组的确认
- 如果给确认分组也编上序号,发送方就可以知道这是对0号数据分组的重复确认,忽略即可,接收方正确收到1号数据分组后,给发送方发送针对1号数据分组的确认分组,发送方收到后,给接收方发送下一个数据分组。
注意事项
- 使用超时重传机制后,就可以不使用否认机制了,这样可使协议实现起来更加简单。但是,如果点对点链路的误码率较高,使用否认机制可以使发送方在超时计时器前就尽快重传。
- 为了让接收方能够判断所收到的数据分组是否重复的,需要给数据分组编号。由于停止-等待协议的特性,只需1个比特编序号即可,即序号0和序号1.
- 为了让发送方能够判断所收到的确认分组是否重复的,需要给确认分组编号,所用比特数量与数据分组所用比特数量一样。
- 数据链路层一般不会出现确认分组延迟的情况,因此在数据链路层实现停止-等待协议可以不用给确认分组编号
- 给超时计时器设置的超时重传时间RTO应仔细选择,一般将RTO设置为略大于收发双方的平均往返时间RTT。
- 在数据链路层,点对点的往返时间RTT比较固定,RTO就比较好设定。
- 在运输层,由于端到端往返时间非常不确定,设置适合的超时重传时间RTO有时并不容易。
- 停止-等待协议属于自动请求重传(Automatic Repeat REquest,ARQ)协议。即重传的请求是发送方自动进行的,而不是接收方请求发送方重传某个误码的数据分组。
停止-等待协议的信道利用率
3.2.3.2 回退N帧协议
-
停止-等待协议,发送方每发送完一个数据分组,就停止发送并等待接收方的确认分组,当收到接收方的确认分组后,才能发送下一个数据分组。
-
如果发送方在未收到接收方发来确认分组的情况下,可以连续发送多个数据分组,而不必每发送完一个数据分组,就停下来等待接收方的确认分组,则这种流水线传输方式,可以显著提高信道利用率。
例子:
- 采用3个比特给分组编序号,即需要0 ~ 7
- 发送窗口的尺寸WT 的取值:本例取WT = 5
- 接收窗口的尺寸WR 取值:WR= 1
-
需要落在发送窗口内的这5个数据分组可以连续发送,而序号落在发送窗口外的数据分组不允许发送
-
序号落在接收窗口内的这个数据分组允许接收,而序号落在接收窗口外的数据分组不允许接收。
无差错情况
- 发送将序号落在发送窗口内的0 ~ 4号数据分组,依次连续发送出去。接收方按序接收它们,每接收一个,接收窗口就向前滑动一个位置,并给发送方发送确认分组。0 ~ 4号确认分组经过互联网传输正确到达了发送方。发送方每接收一个,发送窗口就向前滑动一个位置,这样就有新的序号落入了发送窗口,发送方可以将收到确认的数据分组从缓存中删除了。
累计确认
- 使用回退N帧协议的接收方,可以采用累计确认的方式。接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据后(由具体实现决定),对按序到到达的最后一个数据分组发送确认。
3.2.3.2 选择重传协议
3.3 点对点协议PPP
点对点协议PPP概述
-
点对点协议(Point - to Point protocol,PPP)是目前使用最广泛的点对点数据链路层协议
-
点对点协议PPP是因特网工程任务组(Internet ENgineering Task Force,IETF)于1992年制定的。经过多次修订,目前PPP已称为因特网的正式标准(RFC1661,RFC1662)。
-
点对点协议PPP主要有两种应用:
-
从网络体系结构的角度看点对点协议PPP的组成
## PPP的帧格式 ![在这里插入图片描述](https://img-blog.csdnimg.cn/25d66e7adc4445dbaa18482a7f90c565.png)
PPP的帧的透明传输
面向字节的异步链路使用字节填充来实现透明传输
面向比特的同步链路使用零比特填充来实现透明传输
PPP帧的差错检测
3.4 共享式以太网
3.4.1 网络适配器和MAC地址
网络适配器
- 要将计算机连接到以太网,需要使用相应的网络适配器 (Adapter),网络适配器一般简称为 “网卡〞。
- 在计算机内部,网卡与CPU之间的通信,一般是通过计算机主板上的I/O总线以并行传输方式进行。
- 网卡与外部以大网(局域网)之间的通信,一般是通过传输媒体(同轴电缆、双絞线电缆、光纤)以串行方式进行的。
- 网卡除要实现物理层和数据链路层功能,其另外一个重要功能就是要进行并行传输和串行传输的转换。由于网络的传输速率和计算机内部总线上的传输速率并不相同,因此在网卡的核心芯片中都会包含用于缓存数据的存储器。
- 在确保网卡硬件正确的情况下,为了使网卡正常工作,还必须要在计算机的操作系统中为网卡安装相应的设备驱动程序。驱动程序负责驱动网卡发送和接收帧。
Mac地址
- 当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址。
- 在每个主机发送的帧的首部中,都携带有发送主机(源主机)和接收主机(目的主机)的数据链路层地址。由于这类地址是用于媒体接入控制(Medium Access Control,MAC)的,因此被称为MAC地址。
- MAC地址一般被固化在网卡的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址。
- MAC地址有时也被称为物理地址。
- 一般情況下,普通用户计算机中往往会包含两块网卡:
- 一块是用于接入有线局域网的以太网卡
- 另一块是用于接入无线局域网的Wi-F网卡
- 每快网卡都有一个全球唯一的MAC地址。
- 交换机和路由器往往貝有更多的网络接口,所以会有更多的MAC地址。
IEEE 802局域网的MAC地址格式
单播MAC地址举例
- 假设主机B要给主机C发送一个单播帧,主机B首先要构建该单播帧,在帧首部的目的地址字段填入主机C的MAC地址,源地址字段填入自己的MAC地址。主机B将该单播帧发送出去,主机A和主机C都会收到该单播帧,主机A的网卡发现该单播帧的目的MAC地址与自己的MAC地址不匹配,于是丢弃该帧。主机C的网卡发现该单播帧的目的MAC地址与自己的MAC地址匹配,于是接收该帧。
####广播MAC地址举例
- 假设主机B要发送一个广播帧,主机B首先要构建该广播帧,在帧首部的目的地址字段填入广播地址,也就是FF-FF-FF-FF,源地址字段填入自己的MAC地址,主机B将该广播帧发送出去。主机A和主机C都会收到该广播帧,主机A和主机C各自的网卡发现该帧的目的MAC地址是广播MAC地址,于是接收该广播帧。
多播MAC地址举例
总结
- 网卡从网络上每收到一个无误码的帧,就检查帧首部中的目的MAC地址,按以下情况处理:
- 如果目的MAC地址是广播地址 (FF-FF-FF-FF-FF-FF).则接受该帧。
- 如果目的MAC地址与网卡上固化的全球单播MAC地址相同,则接受该帧。
- 如果目的MAC地址是网卡支持的多播地址,则接受该帧。
- 除上述 (1) 、(2)和(3) 情况外,丢弃该帧。
- 网卡还可被设置为一种特殊的工作方式:混杂方式 (Proriscuous Mode)。工作在混杂方式的网卡,只要收到共享媒体上传来的帧就会收下,而不管帧的目的MAC地址是什么。
- 对于网络维护和管理人员,这种方式可以监视和分析局域网上的流量,以便找出提高网络性能的具体措施.
- 嗅探器(Sniffer)就是一种工作在混杂方式的网卡,再配合相应的工具软件(WireShark) ,就可以作为一种非常有用的网络工具来学习和分析网络。
- 混杂方式就像一把 “双刃剑〞,黑客常利用这种方式非法获取网络用户的口令。
3.4.2 CSMA/CD协议
3.4.2.1 CSMA/CD协议的基本原理
- 在以太网发展初期,人们普遍认为“无源电缆线比有源器件可靠”,因此将多个站点连接在一条总线上来构建共享总线以太网。
- 共享总线以太网具有天然的广播特性,即使总线上某个站点给另一个站点发送单播帧,表示帧的信号也会沿着总线传播到总线上的其他各站点。
- 当某个站点在总线上发送帧时,总线资源会被该站点独占。此时,如果总线上的其他站点也要在总线上发送帧,就会产生信号碰撞。
- 当两个或多个站点同时使用总线发送帧时,就会产生信号碰撞
- 为了解决各站点争用总线的问题,共享总线以太网使用了一种专用协议CSMA/CD,它是载波监听多址接入/碰撞检测(Carrier Sense Multiple Access with Collision Detection)的英文缩写词。
3.7 虚拟局域网VLAN
3.7.1 虚拟局域网VLAN概述
虚拟局域网VLAN的诞生背景
- 将多个站点通过一个或多个以太网交换机连接起来就构成了交换式以太网。
- 交换式以太网中的所有站点都属于同一个广播域。
- 随着交换式以太网规模的扩大,广播域也相应扩大。
- 巨大的广播域会带来一系列问题。
- 广播风暴 广播风暴会浪费网络资源和各主机的CPU资源
- 难以管理和维护,带来潜在的安全问题。
网络中会频繁出现广播信息:
- TCP/IP协议栈中的很多协议都会使用广播:
- 地址解析协议ARP
- 路由信息协议RIPv1
- 动态主机配置协议DHCP
- NetBEUI:windows下使用的广播型协议
- IPX/SPX:Novell网络的协议栈
- Apple Talk:Apple公司的网络协议栈
- 分割广播域的方法:
- 使用路由器可以隔离广播域(成本较高)
- 虚拟局域网技术应运而生
虚拟局域网VLAN概述
- 虚拟局域网(Virtual Loacl Area Network,VLAN)是一种将局域网内的站点划分成为与物理位置无关的逻辑组技术,一个逻辑组就是一个VALN,VLAN中的各站点具有某些共同的应用需求。
- 数据同一VLAN的站点之间可以直接进行通信,而不同VLAN中的站点之间不能直接通信。
- 网络管理员可对局域网中的各交换机进行配置来建立多个逻辑上独立的VALAN。
- 连接在同一交换机上的多个站点可以属于不同的VALN,而属于同一VALN的多个站点可以连接在不同的交换机上。
- 连接在同一交换机上的多个站点可以属于不同的VALN,而属于同一VALN的多个站点可以连接在不同的交换机上。
3.8 以太网的发展
100BASE-T 以太网
## 吉比特以太网 ![在这里插入图片描述](https://img-blog.csdnimg.cn/7c8390eff0ba44fab0a1751768f3198a.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/c1f59059bfb74d15ab4b6eafe1b7ce4a.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/cfba40820bad4217b756058559eb68ae.png)
10吉比特以太网
## 40/100吉比特以太网
3.9 802.11无线局域网
3.9.1 802.11无线局域网的组成
- 随着移动通信的发展,无线局域网(Wireless Loacl Area Network,WLAN)自20世纪80年代末以来逐步进入市场。
- IEEE于1997年制定出了无线局域网的协议标准802.11,802.11无线局域网是目前应用最广泛的无线局域网之一,人们更多地将其简称为Wi-Fi(Wireless Fidelity,无线保真度)。
- 802.11无线局域网可分为以下两类:
- 有固定基础设施的
- 无固定基础设施的
- 固定基础设施是指预先建立的、能够覆盖一定地理范围的、多个固定通信基站。
- 802.11无线局域网使用最多的是它的固定基础设置的组网方式。
有固定基础设施的802.11无线局域网
-
位于其中心的基站被称为接入点,其英文缩写词为AP
-
802.11无线局域网的最小构件称为基本服务集,其英文缩写为BSS
-
在一个BSS中包含有一个AP和若干个移动站
-
一个BSS所覆盖的地理范围称为基本服务区其英文缩写词为BSA,一个BSA的直径不超过100m。
-
本BSS内各站点之间的通信以及本BSS外的站点之间的通信,都必须经过本BSS内的AP进行转发。
-
网络管理员需要为AP分配一个最大32字节的服务集标识符(Service Set Identifier,SSID)和一个无线通信信道,SSID实际上就是使用该AP的802.11无线局域网的名字
- 一个BSS可以是孤立的,也可以通过一个分配系统与其他BSS连接。这样就构成了一个扩展的服务集ESS。
- ESS还可为无线用户提供到其他非802.11无线局域网的接入,例如通过DS有线连接到因特网
无固定基础设施的802.11无线局域网
- 无固定基础设施的802.11无线局域网也称为自组织网络(ad hoc Network)
3.9.2 802.11无线局域网的物理层
-
802.11无线局域网的物理层非常复杂,依据工作频段、调制方式、传输速率等,可以将其分为多种物理层标准。
-
802.11无线网卡一般会被做成多模的,以便能适应多种不同的物理层标准,例如支持802.11b/g/n。
-
无线局域网最终还使用红外技术(infrared ,IR)和跳频扩频(Frequency Hopping Spread Spectrum,FHSS)技术,但目前已经很少使用了。
-
跳频技术的发明人,是好莱坞黄金时代的著名女星海蒂·拉玛,跳频技术为CDMA和Wi-Fi等无线通信技术奠定了基础。因此,海蒂·拉玛被誉为“Wi-Fi之母”
3.9.3 802.11无线局域网的数据链路层
使用CSMA/CA协议(而不使用CSMA/CD协议)
- 对于802.11无线局域网,其使用无线信道传输数据,这与共享总线以太网使用有线传输介质不同。因此802.11无线局域网不能简单照搬共享总线以太网使用的CSMA/CD协议。
- 802.11无线局域网采用了另一种称为CSMA/CA协议,也就是载波监听多址接入/碰撞避免(Carrier Sense Multiple Access / Collision Avoidance, CSMA/CA)。
- CSMA/CA协议协议仍然采用CSMA/CD协议中的CSMA,以“先听后说”的方式来减少碰撞的发生,但是将“碰撞检测CD”改为了“碰撞避免”CA。
- 尽管CA表示碰撞避免,但并不能避免所有的碰撞, 而是尽量减少碰撞发生的概率。
## 3.9.4 802.11无线局域网的MAC帧