1 使用点对点信道的数据链路层
1.1 封装成帧
- 封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧
- 为提高帧的传输效率,应使帧的数据部分长度尽可能大
- 透明传输是指数据链路层对上层交付的数据没有任何限制,就好像数据链路层不存在一样
- 面向字节的透明传输解决办法:每出现帧定界符,就插入转义字符,如果数据部分有转义字符,就在前面再插入转移字符
- 面向比特的透明传输解决办法:使用比特填充,每五个1后面插入一个比特0
1.2 差错检测
实际的通信链路可能产生0变成1,1变成0的情况,成为比特差错。使用差错检测码来检测数据在传输链路层是否产生了比特差错,是数据链路层所要解决的问题之一。
注意:检错码只能检测出帧在传输过程中出现了差错,但是不能定位错误或纠正错误。要想纠正错误可以使用冗余信息更多的纠错码,但纠错码的开销比较大,计算机网络中较少使用。
1.2.1 奇偶校验
在待发送的数据后面添加一位奇偶校验位,使整个数据中1的个数为奇数(奇校验)或偶数(偶校验)。
若出现两位误码,有可能检测不出错误
1.2.2 循环冗余校验
循环冗余校验(Cyclic Redundancy Check)步骤如下:
- 收发双方约定一个生成多项式G(x)
- 发送方基于数据和生成多项式生成差错检测码(冗余码),将其添加到待传输数据的后面一起传输
- 接收方通过生成多项式来计算收到的数据是否存在误码
CRC具有很好的检错能力,虽然计算复杂,但易于用硬件实现,因此广泛应用于数据链路层。
1.3 可靠传输
在传输过程中产生误码后,数据链路层向上层提供的服务分为:
- 不可靠传输服务:仅仅丢弃有误码的帧,其余什么也不做
- 可靠传输服务:想办法实现发送端发送什么,接收端收到什么
一般情况下,有线链路的误码率比较低,为了减少开销,一般并不要求数据链路层向上提供可靠传输服务,即使出现了误码,可靠传输的问题由上层解决。但无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
比特差错只是传输差错中的一种,传输差错还包括分组丢失、分组失序、分组重复,这三种传输差错一般不会出现在数据链路层,而会出现在上层。因此可靠传输服务并不局限在数据链路层,其他层也可以实现可靠传输服务,如下图。可靠传输的实现比较复杂,开销比较大,是否需要使用可靠传输取决于应用需求。
下面介绍的三种可靠传输协议并不局限于数据链路层,可以应用到各层协议中。
1.3.1 停止-等待 协议(Stop-and-Wait, SW)
- 检测到分组有误码时,为使发送方尽早重传,可以给发送方发送NAK分组
- 超时重传,一般可将重传时间设为略大于发送方到接收方的往返时间
- 为了让接收方判断收到的数据分组是否重复,需要给数据分组编号,用一个比特0或1就行
- 为了让发送方判断收到的确认分组是否重复,需要给确认分组编号,用一个比特0或1就行(数据链路层一般不会出现ACK迟到,因此不用给ACK分组编号)
停止-等待协议的信道利用率
信道利用率:
U
=
T
d
T
d
+
R
T
T
+
T
A
U = \dfrac{ T_{d} }{ T_{d} + RTT +T_{A} }
U=Td+RTT+TATd
Td 表示发送信号分组的发送时延
RTT 表示往返时延
TA 表示发送确认分组花费的发送时延
当往返时延大于数据帧发送时延时,信道利用率非常低,因此为了克服停止-等待协议信道利用率低的缺点,出现了下述两种协议。
1.3.2 回退N帧 协议(Go-Back-N, GBN)
如果发送方在收到确认分组前,连续发送多个数据分组,可以大大提高信道利用率。
-
发送方:发送窗口内的数据分组可以不用等待确认分组就进行发送
- 发送窗口尺寸取值是:1<WT<=2n-1,n为表示分组序号的比特数
- WT=1时,变成停止-等待协议
- WT>2n-1,接收方无法分辨新旧数据
-
接收方的接收窗口只能为1
-
累积确认:接收方不一定要对每个数据分组发送确认,而是在收到按序到达的几个数据分组后,对最后一个数据分组发送确认,ACKn表示对序号为n及之前的数据分组都已正确接收。
- 好处:即使确认分组丢失,发送方也可能不必重传。可以减小接收方的开销。减少对网络资源的占用。
- 缺点:不能向发送方及时反映出接收方已经正确接收的数据分组信息。
-
有差错情况:接收方发送重复的确认,发送方就直到之前发送的数据分组出现了差错,于是不等待计时超时器超时就重传。具体收到几个重复确认就立刻重传,由具体实现决定。
-
回退N帧:有差错情况时,某一数据分组由于误码不被接收,剩余的数据分组都会“受到牵连”而不被接收,发送方还要重传这些不被接收的数据分组,这就是回退N帧。
当通信线路质量不好时,回退N帧协议的信道利用率并不比停止-等待协议高。
当发送窗口大于时:接收方发送的确认分组如果丢失,发送方在超时计时器超时后会重新发送数据报文,这时接收方不能分辨新旧分组。
1.3.3 选择重传 协议(Selective Request, SR)
回退N帧协议中,一旦中途一个数据分组无限误码,会导致后面的数据分组都被丢弃,需要发送方重传,这是对网络资源的浪费,因此选择重传协议就是发送方可在未收到确认分组的情况下,将序号落在发送窗口内的数据分组全部发送出去;接收方先收下失序到达但无误码且分组序号落在接收窗口的数据分组,等所缺分组收齐后,再一并送交上层。注意:选择重传协议不能使用累积确认,而应该对每个数据分组进行确认。
- 发送方发送窗口尺寸必须满足:1<WT<=2n-1(注意n-1在指数上,最大是一半)
- 若WT=1,则与停止-等待协议相同
- WT>2n-1,接收方无法分辨新旧数据
- 接收方接收窗口为:1<=WR<=WT
- 如果WR=1,与回退N帧协议相同
- 如果WR>WT,则无意义
如果超出数据范围,会出现接收方无法分辨新旧分组,进而出现分组重复的问题。
1.4 点对点协议PPP(Point-to-Point Protocol)
PPP协议是目前使用最广泛的点对点数据链路层协议。PPP协议在点对点链路传输各种协议数据报提供了一个标准方法,主要由一下三方面构成:
- 对各种协议数据报的封装方法
- 链路控制协议LCP,用于建立、配置和测试数据链路的连接
- 一套网络控制协议NCPs,其中的每一个协议支持不同的网络层协议(例如,TCP/IP协议的IP,Novell NetWare网络操作系统的IPX,Apple公司的AppleTalk)
PPP协议的帧格式如下所示:
使用PPP协议的数据链路层向上不提供可靠传输服务,仍然提供透明传输,差错检验。
工作状态:
2 使用广播信道的数据链路层
媒体接入控制(Medium Access Control),共享信道要着重考虑的一个问题就是如何协调多个发送站点和接收站点对一个共享传输媒体的占用。
媒体接入控制分为两种,静态划分信道(预先固定分配好信道,这种方法不灵活,对于突发性数据传输信道利用率会很低,通常在无线网络的物理层使用,而不是数据链路层),动态接入控制:
- 静态划分信道
- 频分多址
- 时分多址
- 码分多址
- 动态接入控制
- 受控接入(已被淘汰)
- 集中控制:主站以轮询每个站点有无数据发送,只有被轮询到的站点才能发送数据,缺点是存在单点故障问题
- 分散控制:各站点连接成环形网络,令牌沿环逐站传递,接收到令牌的站点才能发送数据,并在数据发送完整后,将令牌传递到下一站点
- 随机接入:所有站点通过竞争,随机在信道上发送数据,如果某一时刻多个站点同时发送数据,信号在共享媒体上发生碰撞,这些站点的发送都失败。关键问题是如何避免冲突,或有冲突时如何尽快恢复通信。
- 受控接入(已被淘汰)
目前无线局域网使用的仍然是共享媒体技术,但是有线领域共享式局域网已经完全被交换式局域网替代了。
2.1 静态划分信道
频分复用:
时分复用:
波分复用:
码分复用:每个站被分配m bit的码片序列,如果要发送比特1,就发送m bit的码片序列,如果要发送比特0,就发送m bit码片序列的反码。每个站的码片序列各不相同,且相互正交。
2.2 随机接入–CSMA/CD
载波监听多址接入/碰撞检测(Carrier Sense Multiple Access/Collision Detection, CSMA/CD)用于有线局域网。
- 载波监听:每个站点在发送帧之前先检测总线上是否有其他站点在发送帧,若检测到总线空闲96bit时间,则发送这个帧(“先听后说”)
- 多址接入:多个站连接在一条总线上,竞争使用总线
- 碰撞检测:每一个正在发送帧的站边发送边检测(“边听边说”),一旦发现碰撞,立即停止发送,退避一段随机时间后再发送(“一旦冲突,立即停说,等待时机,重新再说”)
强化碰撞:发送帧的站点一旦检测到碰撞,除了立即停止发送帧,还会发送32比特或者48比特的人为干扰信号,以便有足够的碰撞时间使所有站点都能检测出碰撞。
主机最多经过2t就能检测出本次发送是否遭受了碰撞。2t成为争用期或者碰撞窗口。连接主机更多,争用期就更长,因此共享式以太网不能连接太多主机。
最小帧长:64字节,即512比特为最小帧长,如果帧太短,在发送完成前检测不到发送过程是否发生了碰撞。
最大帧长:1518字节,数据载荷不能小于46字节。
2.2.1 截断二进制指数退避算法
退避时间 = 争用期 x 随机数r
随机数r:{0, 1, 2, …, 2k-1},k=min[重传次数,10]。
2.3 随机接入–CSMA/CA
载波监听多址接入/碰撞避免(Carrier Sense Multiple Access/Collision Avoidance, CSMA/CA)用于无线局域网。因为无线局域网不能实现碰撞检测。
3 MAC地址
MAC地址:帧中必须携带标识发送主机和接收主机的地址,用于媒体接入控制(Medium Access Control),因此叫做MAC地址,是数据链路层地址。MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
注意:MAC地址也称物理地址,但是不属于物理层,而是属于数据链路层。
4 IP地址(网际层)
(网际层会详细解释,这里说明基本作用)
IP地址是因特网的主机和路由器所标识的地址,用于标识两类信息:
- 网络编号
- 主机编号
数据包转发过程中,源IP地址和目的IP地址不发生变化,但是源MAC地址和目的MAC地址发生变化。
5 ARP协议(网际层)
地址解析协议ARP,首先在本地ARP高速缓存表中根据目的IP地址查找目的MAC地址,如果没有找到,再发送ARP请求报文(广播),被封装在MAC帧中,目的地址为广播地址。目的主机在收到后,先把发送方的IP地址和MAC地址记录到本地ARP高速缓存表中,再给发送方发送ARP响应报文,被封装在MAC帧中,目的地址为发送方的MAC地址。高速缓存分为两种类型,动态和静态。动态类型是主机主动获取的,生命周期默认为两分钟,这是因为IP地址和MAC地址的对应关系不是永久性的。静态是网络人员手动配置的,生命周期取决于不同操作系统。ARP是在一个网络中使用的,如果需要获取其他网络的主机MAC地址,需要逐段使用ARP协议。
6 数据链路层的互连设备
6.1 集线器与交换机的区别
集线器:
- 早期以太网的互连设备
- 使用集线器的以太网在逻辑上仍是一个总线网,使用CSMA/CD协议
- 集线器只工作在物理层(使用集线器在物理层拓展以太网)
- 集线器一般有少量的容错能力和网络管理能力
- 扩大了广播域和碰撞域
以太网交换机:
- 目前以太网使用最广泛的设备
- 通常有多个接口,每个接口与一台主机或另外一台交换机相连,一般工作在全双工模式
- 具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞(不使用CSMA/CD)
- 支持多种速率的接口
- 工作在数据链路层,也包括物理层,它收到帧后,在帧交换表中查找目的MAC地址所对应的接口号,然后通过该接口转发帧
- 内部的帧交换表是通过自学习算法自动建立的
- 扩大了广播域,隔离碰撞域,每个接口是独立的碰撞域
6.1.1 交换机的自学习和转发帧
泛洪:交换机在交换表中找不到目的MAC地址对应的端口号,就会对除了发送端口以外的所有端口进行转发
每条记录都有自己的有效时间,到期自动删除,因为MAC地址和端口号的对应关系不是永久的
6.1.2 生成树协议STP(Spanning Tree Protocol)
在增加冗余链路增加网络可靠性的同时,避免网络环路带来的各种问题(比如广播风暴)
交换机自动计算并构建逻辑上没有环路的网路,确保连通整个网络,当物理拓扑发生改变时,交换机进行生成树重新计算
7 虚拟局域网
巨大的广播域会带来弊端:广播风暴(浪费网络中的网络资源和主机的CPU资源)、难以管理和维护、潜在的安全问题
TCP/IP协议栈中很多协议都会使用广播:地址解析协议ARP,路由信息协议RIP,动态主机配置协议DHCP
隔离广播域的方法:
- 路由器,工作在网络层,路由器默认情况下不对广播数据包进行转发,因此很容易就隔离了广播域,但是路由器成本较高,全部使用路由器来隔离广播域是不现实的
注:交换机会隔离碰撞域,扩大广播域 - 虚拟局域网技术(VLAN),是将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求
7.1 虚拟局域网原理
虚拟局域网是在交换机上实现的,需要交换机实现两个功能,一个是能够处理带有VLAN标记的帧,也就是IEEE 802.1Q帧,第二个是交换机的各端口可以支持不同的端口类型
- IEEE 802.1Q帧,对以太网的MAC帧格式进行了拓展,插入了4字节的VLAN帧
VLAN帧的最后12比特成为VLAN标识符VID,0和4095都不用来表示VLAN,因此VID使用范围为0~4094
VLAN帧是由交换机处理的,而不是用户主机处理的 - 交换机的端口类型
-
Access
一般用于连接用户计算机,只能属于一个VLAN
接收处理方法:一般只接收“未打标签”的普通以太网MAC帧,通过PVID给帧“打标签”
发送处理方法:若帧中的VID和端口的PVID相同,则“去标签”后转发该帧
-
Trunk
一般用于交换机之间或者交换机和路由器之间的互连,可以属于多个VLAN
互连的Trunk端口的PVID需要相等,否则会产生转发错误
接收处理方法:接收“未打标签”的普通以太网MAC帧,通过PVID给帧“打标签”;接收已打标签的帧
发送处理方法:若帧中的VID和端口的PVID相同,则“去标签”后转发该帧;对帧中的VID不等于端口的PVID,直接转发
-
Hybrid
既可以连接交换机与交换机、交换机与路由器、也能连接交换机与用户主机
发送处理方法:查看帧的VID是否在去标签列表,如果存在,则去标签后转发;如果不存在,直接转发(如果发送给主机,主机不能识别802.1Q帧,因此会直接丢弃该帧)
接收处理方法:接收已打标签的帧;接收未打标签的帧,根据PVID进行打标签
-