1. 数据链路层的基本概念
数据链路层的基本任务是将源机器的网络层数据传送到目的机器的网络层数据;
使用点对点信道的数据链路层需要解决的问题:
- 封装成帧;
- 差错检测(检测数据在传输过程中是否造成丢失);
- 可靠传输:即使把数据丢弃了,发送方也能够知道并重新发送该数据;尽管误码不可避免,但是发送方发送什么,最终接收方也能都收到,即称为可靠传输
使用广播信道的数据链路层需要解决的问题:
- 主机的编址问题;
- 当有多台主机同时传送信息时,信号发生碰撞如何处理(CSMA/DA、CSMA/DA)(媒体接入控制)
2. 封装成帧
接收方的数据链路层如何从物理层交付的比特流中提取出一个一个的帧?-> 帧定界符
和其他层所添加的控制信息不同,数据链路层需要添加首部和尾部,是因为为了告诉接收端收到的比特流中从哪里开始到哪里结束是一帧(同时尾部有帧校验码,在读取完帧的全部内容后进行差错检验)
封装成帧的方法,还有字符计数法和违规编码法;
字符填充法
- 为了避免帧的数据部分中也出现了和帧定界符一样的内容,因此需要在交付数据中在和帧定界符相同内容的前面加上转义字符
ESC
(控制信息),告诉接收方这并不是一个真正的帧定界符,转义字符后面紧跟着的字节是数据,而不是控制信息; - 发送方进行转义字符填充,而接收方识别到转义字符后会自动删掉这个控制信息;
- 同样,若在帧的数据段中出现转义字符
ESC
,其是真正的数据信息,为了避免其被接收方识别为控制信息,因此需要在其前面再加上一个转义字符ESC
零比特填充法
- 零比特填充法使用
0111111
两个零中间六个1作为首尾帧定界符; - 发送方在帧的数据部分一旦扫描到五个连续的
1
,就在其后插入一个0
;而接收方则做逆操作,每接收到五个连续的1
时,就自动删除后面的紧跟着的0
;
3. 差错检测
除了比特差错还有其它类型的传输差错,本节只涉及到比特差错;同时,本节所使用的差错检测码属于检错编码;纠错编码(海明码较复杂没有涉及到)
奇偶校验
- 通过在待发送数据中添加一位奇偶校验位,使得整个数据中的
1
的个数达到奇数(奇校验)或偶数(偶校验); - 若传输过程中
1
数量的奇性(偶性)没有发生改变,则该方法认为没有发生错位 - 奇偶校验法可能存在漏检情况:如在有偶数个位发生误码情况下,数据的奇偶性不发生变化;只有在有奇数个位发生误差时,数据的奇偶性发生变化,才能检测出误码;
循环冗余校验CRC(Cyclic Redundancy Check)
- 基本原理:
- 除数:生成多项式中各项系数的比特串(存在写1,不存在写0,按顺序拼凑)
- 余数:余数就是冗余码,其长度和生成式中最高项次数一样,若余数长度不够则前面进行补零
- 手算过程中,注意商与被除数相应位数的对齐,避免漏位;若被除数中相应位数落下来后,位数够除(和除数的位数一样),则在对应位的商中标1,并做对应的异或运算;若不够除则标0,进行下一位被除数的运算;
- 实例
- 发送方传输的处理
- 接收方校验的处理
当被除数的位数都用完了之后,剩下的数就是最终余数了
- 总结
检错编码只能检测在传输过程中是否出现了差错,并不能定位错误以及纠正错误;
4. 可靠传输
当数据链路层检测到误码后,接下来会进行什么样的操作?具体看数据链路层向上层提供的服务;
可靠传输机制:
停止-等待协议SW(Stop-and-Wait)
确认与否认
理想条件下,发送方发送数据后停止发送下一个数据分组,等待接收方的确认收到或否认收到分组后,才能够继续发送数据分组;
发送方:收到确认分组后,继续发送下一个数据分组;若收到否认分组,则继续重传之前的数据分组(因此接收方只有在收到确认分组后,才能够在缓存中删除已发送的数据分组)
超时重传
为了避免发送方收不到确认分组或否认分组而一直处于等待状态,因此给发送方设置超时计时器,一旦等待时间超过超时计时器设置好的重传时间,那么发送方就重新发送原来的数据分组;
确认丢失(数据分组编号)
当接收方的确认分组丢失时,会导致发送方超时重传原来的分组,使得接收方重复接收相同分组,为了使得接收方能够分辨重复分组,因此需要给发送的分组加上序号;
当接收方收到相同编号的重复分组时,就会丢弃该重复分组,并发送相应确认分组。
确认重传(确认分组编号)
当发送方重复收到接收方的确认分组时,需要对确认分组进行编号,使得发送方知道该确认分组是对当前发送的分组确认还是对之前发送的分组确认;对于重复的确认分组,接收方会选择忽略。
- 因为数据链路层的点对点信道中往返时间较为固定,因此只在数据链路层实现停止等待协议,可以不用对确认分组编号
停止等待协议注意事项
停止等待协议的信道利用率
当往返时间较大时,信道利用率较低;
回退N帧协议GBN(Go-Back-N)
停止等待协议中发送方在接收到确认分组前只能发送一个数据分组,若发送方在接收到确认分组可以发送多个数据分组,将会大大提高信道利用率;
滑动窗口
- 发送方:发送方中序号落在滑动窗口中的分组会按序发送;当收到对应序号的确认分组时,就向前移动窗口,将该已接受的序号分组移出,同时将已接受的数据分组从缓存中删除;
- 接收方:接收窗口为1,只能按序接收数据分组;
- 滑动窗口的尺寸不可超过取值范围
若滑动窗口大于取值范围,则会接收窗口对于当前数据分组的序号移动到下一条数据分组的序号中去,导致接收方无法分辨新、旧分组;
累积确认
接收方可对按需到达的最后一个数据分组发送确认(也可以到达一个发送一个);而发送方只要收到相应序号就会向前移动多少(并不局限于一个确认分组移动一个序号);
这样即使确认分组丢失,发送方也可能不必要重传;
重复确认
当发送的数据分组在传输过程中,出现差错导致失序或丢失,使得最终达到的数据分组序号与当前的接收窗口序号不匹配,接收方丢弃当前收到的所有不匹配数据分组,并重复发送已接收的最后一个数据分组序号的确认分组给发送方(每丢弃一个数据分组,就发送一个确认分组);
发送方可能立即重传,也可能等待超时重传(具体看发送方的设定)
超时重传
发送方会对在发送窗口内已发送的数据分组设置超时计时器,当发送窗口内已发送的数据分组产生超时重传时,发送窗口内其它已发送的数据分组也必须全部重传.
总结
自动请求重传ARQ(Automatic Repeat reQuest):接收方重传的请求是自动进行的,不需要接收方显式的请求发送方重传某个分组;
习题
选择重传协议SR(Selective Request)
- 引入
回退N帧协议中,一个前序数组分组的误码就会使其后连续多个数据分组一起被丢弃,导致发送方对这些数据分组的重传,使得通信资源的浪费。
那可不可以,让发送方只重传误码的数据分组,其它正确的数据分组依旧可以被接收方接受呢?-> 这就是选择重传协议
滑动窗口
- 发送方:序号落在发送窗口内的数据分组都将会按序连续发送;发送方每收到一个按序发送的确认分组则向前移动一位,并从缓存中删除对应序号的数据分组;
若收到的确认分组不是按序的,那么就先在发送窗口内进行标记已收到,避免超时重复发送对应的数据分组,且不用向前滑动窗口;
- 接收方:对于序号落在接收窗口内且没有误码的数据分组,都可以进行接收(即使未按序到达),并发送相应序号的确认分组,但只有按序到达的数据分组才能够让接收窗口滑动前进;(为什么接收窗口尺寸要和发送窗口尺寸相同?就是因为接收方要缓存没有按序到达的数据分组,所以双方窗口尺寸必须一样)
发送方中,没有收到确认分组的数据分组,会自动超时重传它自己;
- 发送窗口的尺寸不能大于取值范围( > 2 n − 1 \gt2^{n-1} >2n−1)
和GNB同样的问题,若发送窗口尺寸大于取值范围,当前发送的序号就会和下一组数据的序号发生重叠;当出现确认分组出现差错时,就会导致接收方无法分辨新、旧分组;
总结
- 为了实现发送方仅发送出现差错的数据分组,接收方不能够进行累计确认
习题
- 在选择重传协议中,只有超时的帧才需要重传(而在回退N帧中只要发送窗口中有数据分组超时,则整个窗口中已发送的分组都要重传);
6. 点对点协议PPP
广域网在数据链路层使用的协议是PPP协议和HDLC协议,PPP目前使用得最广泛,而HDLC已很少使用;
PPP协议是使用串行线路通信的面向字节的协议;
PPP协议只支持全双工链路;
帧格式
帧的数据部分没有最小帧长,因为PPP是点对对,不会发生碰撞,不采用CSMA/CD协议;因此帧的数据部分为0 ~ 1500字节。
透明传输
- 面向字节的异步链路采用字节填充法
- 面向比特的同步链路采用零比特填充法
差错检测
PPP提供差错检测,但不提供纠错功能;只能保证无差错接收;
PPP协议是不可靠的传输协议,不使用序号和确认机制;
工作状态
7. 媒体接入控制
采用总线型主机拓扑结构时,存在单一资源竞争问题(共享信道),因此就需要协调主机之间对共享线路的占用问题;
- 分类
静态划分信道
- 基本概念:
静态划分信道就是通过在同一条物理线路上通过某种方法将其划分为多条通信信道;
在逻辑上划分几条互不干扰的子信道(实质就是把广播信道从逻辑上转换为点对点信道)
- 频分复用FDM
时分复用TDM
每一个用户在每一个时分复用TDM帧中占据固定时间片(用户轮流占用信道);
统计时分复用STDM:对时分复用TDM的改进,STMD帧中并不固定分配时隙,而是按需动态给用户分配时隙,提高了线路的利用率;
- 波分复用WDM
实质为光的频分复用
码分复用CDM
- 应用——码片序列
使用码分复用,给每个站点分配的码片序列必须都各不相同、相互正交;同时为了方便计算规格化内积,在比特序列相乘时,把码片序列中的0
写成-1
,1
写成+1
规格化内积:得到两个向量的内积后再除以向量的分量个数;
站S和其它站的码片序列相互正交,不管其它站点发送的是比特1或者0,规格化内积结果都是0,只不过其他站码片序列中正负号相反而已,结果还是一样的。
- 应用举例
每一站的码片序列只有与本站的码片序列进行规格化内积,才能够得到1
或0
,与其他站点的码片序列进行规格化内积只能够得到0,因此就可以从不同站点码片序列的相互叠加序列中分辨出是否有自己站点发送的比特信息(想要判断出某个站点是否有发送比特,只能用该站点的码片序列去判断);
- 习题
动态接入控制——随机接入
- 存在问题
载波监听多址接入 CSMA
- 1-坚持CSMA(1-persistent CSMA)
- 信道空闲时,立即发送数据;(空闲时发送概率为1)
- 信道忙时,继续坚持侦听,直到信道为止;(忙时坚持检测)
- 非坚持CSMA(Non-persistent CSMA)
- 信道空闲时,立即发送数据;
- 信道忙时,放弃监听,等待一段随机时间后再监听;(忙时不坚持检测)
- p-坚持CSMA(P-persistent CSMA)
- 信道空闲时,以概率
p
发送数据,概率p-1
推迟到下一空隙的概率计算;(空闲时发送概率为p) - 信道忙时,继续坚持监听,直到信道空闲;(忙时坚持检测)
(p-坚持可以看成1-坚持和非坚持的折中)
载波监听多址接入/碰撞检测 CSMA/CD(Carrier Semse Multiple Access/Collsion Detection)
- 基本概念
总线局域网使用的协议:CSMA/CD
无线局域网使用的协议:CSMA/CA
- 碰撞检测CD
边发送数据边检测数据碰撞情况;
争用期
主机检测到碰撞的最多时间称为争用期;
最小帧长
若主机发送的数据帧太短,就会导致数据帧还在总线上传输但主机因为发送完毕而不再检测该帧的碰撞;若该帧遭遇了碰撞,该主机并不知道而就不会再重新发送该帧了;
因此主机发送数据的时间不能小于争用期;端到端的往返时间(两倍传播时延)*数据传输速率 = 最小帧长;这样主机就可以在帧发送完成之前就检测到是否有发生碰撞了。
最大帧长
若主机发送的帧过大,会导致总线上其它主机等待发送帧的时间过长,以及造成接收端的缓存区溢出,因此对发送帧的最大长度也要作出相关约束;
退避时间计算——截断二进制指数退避算法
退避时间取争用期的倍数,具体倍数k
由截断二进制退避算法计算得出;
信道利用率
- 极限信道利用率
总流程总结
- 帧发送流程
- 帧接收流程
习题
载波接听多址接入/碰撞避免 CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance)
- 基本概念
为什么无线局域网只能使用CSMA/CA,而不能使用CSMA/CD?
-> 在无线局域网中,无法进行碰撞检测;
隐蔽站问题
- 因此,802.11无线局域网采用了碰撞避免CA的方法;
帧间间隔(InterFrame Space)
(其实还存在一种PIFS(点协调帧)用于点协调功能PCF中,这里没有涉及到PCF,主要讲的是DCF)
SIFS(短IFS):用于分隔一次对话中的各帧;
DIFS(分布式协调IFS):用于异步帧进行访问的时延;
工作原理
退避算法
- 在经过一个DIFS帧间间隔后,需要使用退避算法的情形:
- 退避算法原理(退避时间选取)
每个站点都会一个退避计时器(退避时间按退避次数随机变化);每当信道空闲且站点经过一个DIFS时间间隔后,退避计时器开始倒计时,只有倒计时为零时才能够开始发送帧;若信道中其它站点的退避倒计时更快结束减少到0,则信道处于忙状态,当前站点的退避倒计时冻结,等待下一轮的倒计时;
- 退避算法示例
时间轴上最后一个帧的发送还需要规避一段时间,是因为该站点发送成功后立即连续发送的下一帧,此种情况需要额外登上一顿退避时间(避免同一个站点长时间占用信道 );
802.11的预约信道机制
- 预约信道流程
RTS帧(Request to Send,请求发送)和CTS帧(Clear to Send,允许发送)
- RTS和CTS帧的使用情况:
802.11的虚拟载波监听机制
数据帧也能够携带通信所需要的时间;
习题
总结
发送帧检测到信道从忙态转为空闲时,都要执行退避算法(因为站点之前检测过信道为忙态,所以空闲经过DIFS后要继续退避)
8. MAC地址、IP地址以及ARP协议
- 三者联系
MAC地址
使用点对点信道的数据链路层不需要使用地址;使用广播信道的数据链路层必须使用地址来区分各级主机;
- 802局域网的MAC地址格式举例
字节发送顺序:第一字节到第六字节;
字节内比特发送顺序:b_0
到b_7
- 单播例子
- 广播例子
- 多播例子
如何判断MAC地址是多播地址?地址第一个字节不能够整除2,即为多播地址(因为多播地址的第一字节第一位为1,所以只要是多播地址第一字节肯定为奇数。)
IP地址
- 基本概念
- 转发过程中数据包中的IP地址和MAC地址变化:
ARP地址解析协议
当主机A想要传输数据包给另一个主机B时,A知道B的IP地址,但没有ARP高速缓存表中没有其IP地址对应的MAC地址,此时主机A就发送广播报文;
- 目标主机接收到ARP请求报文后,就发送对应的ARP响应报文(单播)
- ARP高速缓存表中记录的类型(动态和静态)
MAC地址、IP地址和ARP协议总结
9. 集线器和交换机的区别
集线器Hub
可以近似的看成一根总线,将多个主机结点连接成一个共享式以太网
- 使用集线器在物理层扩大以太网
将不同的碰撞域连成更大的碰撞领域(可以理解为扩大同一总线中主机的数量)
交换机
交换机能够通过帧交换表来过滤帧,从而隔离冲突域;
交换机本质为多端口的网桥;
可以将多个结点连接成交换式以太网,整个交换机的总带宽会随着结点数目的增加而增加(因为用户在通信时是独占带宽而不是共享带宽)
- 使用交换机扩展以太网
单播地址只有各自的碰撞域的目标主机才能够收到;广播地址和集线器一样,都扩大了广播域;
- 直通交换
采用直通交换,只需读取完帧的目的MAC地址即可转发,而不必先缓存再处理;而采用存储转发,需要将整个帧都读取完,才进行转发操作;
- 集线器和交换机的区别总结
以太网交换机自学习和转发帧的流程
刚通电的交换机其帧交换表为空,需要交换机通过自学习补充表项;
- 将进入交换机接口的帧中的源MAC地址以及其进入的接口,记录在帧交换表中(发送帧的时候会进行源MAC地址及其进入接口登记工作,只有该种情况会在帧交换表中增加记录);
- 帧交换表中记录的是帧目的MAC地址应该从哪一个接口转发出去(进行目的MAC地址的转发接口查找工作)
登记源MAC地址和其进入接口后,再查找当前交换机的帧交换表,若表中不存在对应目的MAC地址,则广播此帧(广播交换机内除发送接口外的所有接口);若表中存在对应MAC地址,则进行明确转发(单播);
(转发帧流程概括起来就是:登记、查表、转发);
- MAC地址与交换机接口的对应关系不是永久的,同样IP地址和MAC地址的对应关系也是有有效期的;
- 源MAC地址和目的MAC地址的接口一样时,交换机就会丢弃该帧;
- 习题
以太网交换机的生成树协议STP
增加冗余链路可以提高以太网的可靠性,但也有可能带来网络环路;使用生成树协议STP构造出树型的逻辑拓扑结构,使得在郑家冗余链路的同时又没有形成网络环路(通过在逻辑上阻塞链路,并没有改变物理结构)
10. 虚拟局域网VLAN
为什么要隔离广播域?(虚拟局域网的意义)
交换机会对广播帧进行转发,路由器不对广播帧进行转发,因此可以隔壁广播域;
但路由器的成本较高,因此使用虚拟局域网(对以太网的MAC帧格式进行扩展);
虚拟局域网通过在数据链路层对局域网进行逻辑划分,得到具有更小广播域的虚拟局域网;
虚拟局域网作用于交换机,对广播帧通过交换机的端口对其“打标签”,而后只有相同VID的端口才转发该帧,从而达到隔离广播域的效果;
802.1Q帧
通过在MAC帧中插入四字节的VLAN标记,以此来实现虚拟局域网的功能,插入4字节的VlAN标记的帧称为802.1Q;
802.1Q帧对用户主机来说是透明的;
交换机的端口有三种类型:
交换机各端口具有缺省VLAN ID;在华为交换机上称为Port VLAN ID,简称为PVID;
Access端口
Trunk端口
Hybrid端口
- 习题
- 总结
11. 以太网
执行DIX Ethernet V2(以太网标准V2)标准的局域网称为以太网;由于IEEE 802.3标准和DIX Ethernet V2标准相差很小,因此也可以将执行802.3标准的局域网称为以太网;
(DIX是三家一起制定以太网标准的公司的缩写:DEC、Intel、Xerox)
以太网的MAC帧
- 前导码
当帧在物理层传送时,以太网会在以太网的帧前部加上八字节的前导码;
前导码用于发送端和接收端的时钟同步。前7个字节是前同步码,用实现MAC帧的比特同步;最后一个字节是帧开始定界符;
(以太网的MAC帧不需要帧结束符,因为以太网传送帧时本身就有间隔,接收端识别到真开始定界符后,就其后连续到达的比特流都认为是同一个帧)
- 最小帧长
由于以太网采用CSMA/CD算法,因此最小帧长必须大于64B(数据内容就是46B,内容不够就填0补充,首部尾部占18B;最大数据内容为1500B)
- 以太网MAC帧的各个字段所占字节也要熟记;
高速以太网
速率大于等于100Mb/s的以太网都称为高速以太网;
- 100BASE-T以太网
传输速率达到100Mb/s,采用星形拓扑结构在双绞线上传输;支持全/半双工;全双工方式下工作不会产生冲突,因此全双工方式下不采用CSMA/CD协议。
- 吉比特以太网
传输速率达到1Gb/s,在光纤或双绞线上传输;支持全/半双工;
- 10吉比特以太网
传输速率达到10Gb/s,只在光纤上传输。且只工作在全双工方式;
12. IEEE 802.11 无线局域网
执行802.11系列协议标准的无线局域网称为IEEE 802.11无线局域网(也成为Wi-Fi)
有固定基础设施的无线局域网
预先建立的、能覆盖一定地理范围的固定基站(也可称为AP,接入点);
移动站之间的通信必须通过接入点AP进行;
无固定基础设施的移动自组织网络
由一些平等状态的移动站相互通信组成的临时网络;各结点之间地位平等
802.11无线局域网的MAC帧格式(数据帧)
802.11共有三种帧:数据帧、控制帧和管理帧;此处仅涉及数据帧格式;
数据帧有帧头、数据以及帧尾组成;
帧头最为复杂,帧头中的四个地址取决于去往DS和来自DS两个字段的值(王道书称为去往AP和来自AP),其它字段不是考试重点;
帧尾:FCS是帧检验序列;
- 802.11数据帧的地址字段
地址1看成接收端;地址2看成发送端;地址3根据去往AP或来自AP,选择源地址和目的地址;
- 具体示例
- 802.11无线局域网内的相互通信
- 802.11无线局域网和802.3以太网之间的通信
- 站点A向路由器接口R1发送数据
站点A生成802.11帧,AP接收后将其转化为802.3帧进行转发;
- 路由器接口R1向站点A发送数据
路由器在以太网中发送802.3帧,AP收到后将其转换为802.11帧;
(以太网帧不需要添加AP的MAC地址,因为AP对于路由器来说相当于透明网桥;而802.11无线局域网中帧必须携带AP的MAC地址;因为可能有多个AP共享同一个信道,所以需要在帧中指出使用哪个AP进行帧转发;)