3.1数据链路层概述
链路(Link):就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。
数据链路(Data Link):是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。
在分层的网络结构体系中数据从一个主机传输到另外一个主机是通过逐层解封和封装完成的,但是如果只研究数据链路层,则可以看成数据沿直线从最左边的数据链路层传播到最右边,如下图所示:数据链路层以帧为单位传输和处理数据。
数据链路层的三个重要问题
- 封装成帧:第一章讲了,在网络层像数据链路层传播的时候,数据链路层会添加一个帧头和帧尾,这个过程叫封装成帧
- 差错检测,在两个主机之间的数据链路层进行传递的时候,帧在传输过程中会出现误码,发送方在发送之前,将检错码放到帧尾,接收方可以通过检测码和检测算法判断 是否出现差错检测
- 可靠传输:在发生误码的时候,不会将误码丢弃掉直接发送到接收方,而是发送方重新发送,这样叫做可靠传输,也就是说,尽管误码是不能完全避免的,但若能实现发送方发送什么,接收方就能收到什么,就称为可靠传输
使用广播信道的数据链路层(共享式局域网)
碰撞问题、编制问题
3.2 封装成帧
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
帧头和帧尾中包含有重要的控制信息。
接收方的数据链路层如何从物理层交付的比特流中提取出一个个的帧?
- 帧定界
- 前导码
- 帧定界
透明传输
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
这句话什么意思呢?帧头和帧尾也是数值,如果传输的数据中正好有数据与帧头帧尾相同,如下图:
接收方接收到第一个flag(帧定界标志)的时候,认为是帧的开始,当接收到下一个flag(帧定界标志)的时候,会误以为结束了,那么传输的数据就出错了,这就是数据链路层对上层交付的传输数据有限制,也就是不能和帧定界符一样,这样不满足透明传输。
那怎么解决呢?
- 面向字节的物理链路使用字节填充(或称字符填充)
的方法实现透明传输。 - 面向比特的物理链路使用比特填充的方法实现透明传输。
- 所谓字节填充,也就是转义字符,转义字符和程序语言中的转义符使用方法大同小异,也就是在帧定界前加转义字符,如图
- 比特填充:
每五个连续的比特1后边就插入一个比特0,因为帧定界是01111110,这样就不会出现连续5个1了,所以就不会与帧定界撞。接收方在进行数据处理时,将每五个1之后插入的比特0剔除即可
例题:
为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些。
考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(Maximum Transfer Unit)
3.3 差错检测
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1。这称为比特差错。
在一段时间内,传输错误的l比特占所传输比特总数的l比率称为误码率BER(Bit Error Rate)。
奇偶校验:在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中“1”的个数为奇数(奇校验)或偶数(偶校验)
一般不采用这种方法循环冗余校验CRC(Cyclic Redundancy Check):收发双方约定好一个生成多项式G():
发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输:接收方通过生成多项式来计算收到的数据是否产生了误码;
生成多项式举例:
例题:
注:
- 检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
- 要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销
比较大,在计算机网络中较少使用。 - 循环冗余校验CC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于
用硬件实现,因此被广泛应用于数据链路层。
3.4 可靠传输
3.4.1可靠传输的基本概念
使用差错检测技术会检测到传输过程中是否出现误码,在检测出现误码后:
- 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做:
- 可靠传输服务:想办法实现发送端发送什么,接收端就收到什么。例如接收方给发送发发送一个通知帧,来让发送发重发
一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
比特差错只是传输差错中的一种,传输差错还包括分组丢失、分组失序、分组重复
分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层。
可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输。
可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求。
3.4.2 可靠传输的实现机制——停止-等待协议
- 发送方每发送一个分组,就停止发送,等待接收方确认分组,如果接收方返回一个确认,才继续发下一个分组,否则重发。
- 如果发送方发送的分组丢失了,如图所示:
- 如果接收方的确认分组丢失了,这种情况会造成分组重复,解决方法如图所示
- 接收方的确认分组迟到了,会造成发送失序。解决方法就是给确认分组也编号,如图所示
停止-等待协议的信道利用率
例题
3.4.3 可靠传输的实现机制——回退N帧协议GBN
停止-等待协议的信道利用率很低,若出现超时重传,则信道利用率更低
采用流水线传输可提高信道利用率:
- 采用3个比特给分组编序号,即序号0~7:
- 发送窗口的尺寸Wt的取值:1<WT≤2^3-1,本例取WT=5
- 接收窗口的尺寸WR的取值:WR=1:
如图,发送方每次发送一个发送窗口的发送分组(本例中为5),接收窗口每次接受一个确认分组,就向下滑动一个位置,当接受的数量达到发送窗口的数量,该例中为5,就将针对该发送分组的确认分组返回给发送方,然后发送方就向下滑动5个位置,并且可以将前面5个单位的缓存删除,接收方可以将接受的分组交给上层处理
累计确认
接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后(由具体实现决定)对按序到达的最后一个数据分组发送确认。ACK表示序号为及以前的所有数据分组都已正确接收
例如本例中,接受窗口每接受两个,就发送一个ACK1,然后向下滑动到4的时候,又发送一个ACK4,这里的ACK4就包含了0到4,这样,就算ACK1丢失了,也不会影响。因为ACK4就包含了ACK1。
差错情况
如图,发送方发送的5 6 7 0 1 2序列,其中5出现了误码,那么5就会被销毁,就只剩下6 7 0 1,这剩下的四个序列,接收方也不会接受,那么就会将这四个也进行丢弃,并对之前按序接收的最后一个数据纷组进行确认,丢弃了几个分组,就发送几个,本例中,上一个接受的数据是4,丢弃了4个,那就是发送4个ACK4,当发送方接收到重复的ACK4时,知道发生了错误,这个时候不会等超时计时器,会立即进行重传。
在本例中,尽管序号为6,7,0,1的数据分组正确到达接收方,但由于5号数据分组误码不被接受,它们也“受到牵连”而不被接受,发送方还要重传这些数据分组,这就是所谓的Go-back=N(回退N帧),也就是一个老鼠屎坏了整锅汤,或者说,hs混检。
总结
练习
3.4.4 可靠传输的实现机制——选择重传协议
回退N帧协议的接收窗口尺寸W只能等于1,因此接收方只能按序接收正确到达的数据分组
为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸W不应再
等于1(而应大于1),以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些
数据分组,等到所缺分组收齐后再一并送交上层。这就是选择重传协议。
流程:
发送方发送0 1 2 3 这四个分组,假设2出现误码,
接收方先接收0 1 ,然后返回ACK0和ACK1,2出现错误,略过2,然后将ACK3返回,但是3不是按序到达的,所以滑动窗口不滑动。
确认分组0 1回到发送方,窗口滑动两个位置,然后将0 1 分组从分组缓存中删除(意味着0 1 已经传输完毕,接收方也会将0 1交给上层处理),接着接收3号确认分组,但是窗口不移动。因为3不是按序到达的,前面还有个2没到,然后发送方将分组4,5发送出去,发送到接收方,然后接收方接收并返回确认分组,但是窗口不移动。
此时发送方针对2号分组的重传计时器超时了,重新发送2,4和5确认分组陆续到达发送方,发送方接收并标记确认接收,但发送窗口不移动,
接收方接收到2号分组,并返回确认分组,同时窗口向右滑动4个位置。然后发送方确认2号的确认分组,窗口向右滑动4个位置,并且可以发送6 7 0 1 四个分组。
关于窗口尺寸:
小结:
习题
3.5点对点协议PPP
用户与ISP之间的连接用的就是PPP协议,还有广域网之间的连接
差错检测
工作状态
3.6媒体接入控制
基本概念
共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占
用,即媒体接入控制MAC(Medium Access Control)。
随机接入
总线局域网使用的协议:CSMA/CD协议(载波监听多址接入/碰撞检测)
- 多址接入/碰撞检测的概念
碰撞检测过程:
争用期(碰撞窗口)
每一个主机在自己发送帧之后的一小段时间内,存在着遭遇碰撞的可能性。这一小段时间是不确定的。它取决于另一个发送帧的
主机到本主机的距离,但不会超过总线的端到端往返传播时延,即一个争用期时间
显然在以太网中发送帧的主机越多,端到端往返传播时延越大,发生碰撞的概率就越大。因此,共享式以太网不能连接太多的主机,使用的总线也不能太长。
10Mb/s以太网把争用期定为512比特发送时间,即51.2μs,因此其总线长度不能超过5120m,但考虑到其他一些因素,如信号衰减等,以太网规定总线长度不能超过2500m。最小帧长:当发送的帧太短,因为碰撞检测是边发送边检测,所以,帧太短,发送会太快,还没来及到达目的地后边就不检测了,会发生碰撞
最大帧长:
截断二进制指数退避算法
信道利用率
帧发送流程:
帧发送流程:
习题:
总结:
无线局域网使用的协议:CSMA/CA(载波监听多址接入/碰撞避免)
在无线局域网中,不能使用碰撞检测CD,原因如下:
由于无线信道的传输条件特殊,其信号强度的动态范围非常大,无线网卡上接收到的信号
强度往往会远远小于发送信号的强度(可能相差百万倍)。如果要在无线网卡上实现碰撞
检测CD,对硬件的要求非常高。即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性(存在
隐蔽站问题),进行碰撞检测的意义也不大。
隐蔽站问题:帧间间隔IFS
工作原理
当站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧,则不使用退避算法。
以下情况必须使用退避算法:- 在发送数据帧之前检测到信道处于忙状态时:
- 在每一次重传一个数据帧时:
- 在每一次成功发送后要连续发送下一个帧时(这是为了避免一个站点长时间占用信道)。
退避算法:
信道预约和虚拟载波监听
习题
3.7 MAC地址、IP地址以及ARP协议
MAC地址是以太网的MAC子层所使用的地址(数据链路层):
IP地址是TCP/八P体系结构网际层所使用的地址(网际层):
ARP协议属于TCP/IP体系结构的网际层,其作
用是已知设备所分配到的1P地址,使用ARP协议
可以通过该P地址获取到设备的MAC地址(网际层);MAC地址
MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM中,因此MAC地址也
被称为硬件地址;但这并不意味着MAC属于物理层一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡)。每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址。综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
IEEE802局域网的MAC地址格式
IEEE802局域网的MAC地址格式的发送顺序
单播MAC地址
广播MAC地址
多播MAC地址
判断多播地址:
给主机配置多播组列表进行私有应用
时,不得使用公有的标准多播地址,
具体可在以下网址查询
http://standards.ieee.org/develop/regauth/grpmac/public.html随机MAC地址:防止美国安全局跟踪
IP地址
IP地址是因特网(Internet)上的主机和路由器所使用的地址,用于标识两部分信息:
- 网络编号:标识因特网上数以百万计的网络
- 主机编号:标识同一网络上不同主机(或路由器各接口)
从网络体系结构看IP地址和MAC地址 - 数据包转发过程中,IP地址和MAC地址的变化情况
源IP地址和目的IP地址始终不变,而源MAC地址和目的MAC地址随着网络改变 - 习题
ARP协议
小结
3.8 拓展的以太网
集线器和交换机
- 交换机工作在数据链路层,集线器工作在物理层
- 交换机是点对点的,而集线器是广播的,在发送广播帧时,交换机会将帧缓存起来,分别发给各个主机,这样就避免了碰撞,而集线器不会。
以太网交换机自学习和转发帧的流程
- 以太网交换机工作在数据链路层(也包括物理层)
- 以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
- 以太网交换机是一种即插即用设备,刚上电启动时其内部的帧交换表是空的。随着网络中各主机间的通信,以太网交换机通过自学习算法自动逐渐建立起帧交换表。
流程
首先各个主机通过ARP过程获得其他主机的MAC地址。
如下图:
假设A要给B发送帧
- 首先A从接口1进入交换机1,然后将自己的MAC地址和接口登记在帧交换表中,该过程称为交换机的自学习。
- 该帧的目的MAC地址为B,但在帧交换表中没有找到,所以进行盲目转发(泛洪),
- 盲目转发就是除该帧所进入接口以外的所有接口都转发一遍,可以看到,主机C检测到不是自己的MAC地址,所以丢弃该帧,而主机B接收该帧,
- 同时该帧也会从接口4进入交换机2中,同样进行自学习登记,在记录表中也没找到目的帧,同样进行泛洪,主机D、E、F会接受到并检测不是自己的MAC地址然后将其丢弃。
同理,B给A发送帧
B进入交换机1后先进行登记,然后在帧交换表中发现主机A的接口,会进行明确转发,只有接口1会接收到主机B转发的帧。
- 注:每条记录都有自己的有效时间到期自动删除!这是因为MAC地址与交换机接口的对应关系并不是永久性的!
习题
小结
以太网交换机的生成树协议STP
问题背景:如何提高以太网的可靠性?
如图所示:
发生链路故障时,会导致无法通信。
可以增加冗余链路:在BC之间加一条链路。
但是这样又会带来新的问题:
- 广播风暴
- 主机H1发送广播帧,交换机B接受到帧后从其他的接口发送该帧,该帧到达交换机A和C。
- 交换机A收到B发送来的广播帧后从其他接口转发该帧,同时交换机C收到该帧后也从其他接口转发该帧。
- 交换机C又收到了来自交换机A的广播帧,从其他接口转发该帧,交换机A收到来自交换机C的广播帧,同样进行转发。
也就是无限循环了。
- 主机收到重复分广播帧,大量消耗主机资源。
- 交换机的帧交换表震荡(漂移),由于广播风暴,一个交换帧会多次进入同个交换机,交换机进行多次记录操作,发生错误。
STP协议
3.9虚拟局域网VLAN
概述
问题背景:
而路由器可以分割广播域
但是成本较高
这个背景下,就诞生了虚拟局域网技术(VLAN)
概念
VLAN1和VLAN2之间不能进行广播
虚拟局域网VLAN的实现机制
虚拟局域网VLAN技术是在交换机上实现的,需要交换机能够实现以下两大功能。
- 可以处理带有VLAN标记的帧,也就是IEEE802.1Q帧
- 另一个是交换机的各端口可以支持不同的端口类型
IEEE802.1Q帧
交换机的端口类型
access端口
Trunk端口:
习题
Hybrid端口: