数据链路层
功能
- 为网络层提供服务:无确认无连接服务,有确认无连接服务,有确认面向连接服务
- 链路管理:连接的建立、维持、释放
- 组帧
- 流量控制
- 差错控制
封装成帧和透明传输
封装成帧
定义:在一段数据的前后添加首尾,组成帧。接收端通过首尾的标记识别帧的开始和结束
帧同步:接收方识别比特流并区分起始和终止的过程
组帧方法
- 字符计数法
用帧首部的一个字节来表明帧内字符数
缺点:一步错步步错
- 字符填充法
用比特组合代表开始和结束。但是代表开始和结束的字节串有可能出现在帧的内部,造成帧的分割错误。因此字符填充法在非开始和结束但与开始和结束拥有相同的字节序列的字节串前添加转义字符,使其不被判断为开始或结束
操作过程:在发送的时候添加转义字符,在接受端将转义字符去掉
- 零比特填充法
首部和尾部拥有相同的字段,“01111110”,有6个连续的1。为了防止帧数据里面出现开始结束符,零比特填充法对原始数据进行处理,当识别到5个1连续时,无论后面是什么,在其后面加多一个0。接收端收到数据后对数据进行处理,遇到5个1就去掉后面的0。
- 违规编码法
在物理层做手脚,用物理层编码中不会出现的电平去标记起始和终止。
透明传输
指不管所传输的数据是什么比特组合,都应当能在链路上传输。
差错控制
差错
由噪声引起,分为全局性和局部性噪声
全局性噪声是由线路电气特性产生的,信道固有的
局部性噪声是由短暂原因造成的冲击噪声
错误类型
位错:比特位出错
帧错:丢失、重复、失序
检错编码
奇偶校验码
在数据前添加一个比特使得1的个数为奇数或者偶数。1个数为奇数为奇校验码,1个数为偶数为偶校验码。以奇校验码为例,只能检测50%的错误,因为发生2的倍数个比特错误的话,1的个数仍为奇数,无法判断是否出错
CRC循环冗余码
发送端和接收端都有一个相同的多项式。发送端将要发送的数据除以多项式,将所得的余数与要发送的数据相加后传输给接收端。接收端收到数据后将数据除以多项式,如果余数为0那么就能判断没有出现差错,如果余数不为0那么就发生了错误。
纠错编码
海明码
发现双比特错误,纠正单比特错误
确定校验码个数
海明不等式 2^r >= k + r + 1
校验码和数据位置
校验码放2^n的位置
确定海明码的值
偶校验
纠错
方法一:求新的校验码,从后数起,组成的数就是错误的位置
方法二:新校验码与原校验码异或。
流量控制和可靠传输机制
流量控制
较高的发送速度和较低的接收能力不匹配会导致传输出错,因此需要流量控制。数据链路层的流量控制是点对点的,也就是两个相邻节点之间的流量控制,而传输层也存在的流量控制是针对主机和主机之间的(端对端)。
数据链路层控制流量的手段:接收方收不下就不回复确认,也就是如果能继续接收的话就会给发送端发送一个确认信息
传输层控制流量的手段:接收端发送给发送端一个窗口公告
停止-等待协议
目的:解决丢包问题,实现流量控制
内容:每发送一帧后停止发送,等待对方的确认,收到确认后发送下一帧,效率低
只需要用一个比特来标记当前发送帧的序号,0和1不断切换
出现错误的各种情况
- 发送帧丢失:超时未接到确认发送端重新发送。
- ACK丢失:发送端未接收到确认,超时再次传输上一次发送的帧,接收端再次返回已经接受到该帧的信息。
- ACK迟到:跟2差不多,都是重复接受相同的帧丢弃最新来的那个,再次返回ACK。这里不同的是发送端会接收到多个ACK,会将之后到来的ACK丢掉。
滑动窗口协议
后退N帧协议GBN
发送窗口:发送方维持的一组连续的允许发送的帧的序号
接收窗口:接收方维持的一组连续的允许接收的帧的序号
发送方响应的三件事
- 上层的调用
上层发送数据时先判断发送窗口是否已满,如果满了就返回信息让上层等待,实际实现中发送方会接受这些数据然后放到缓存区里面。
- 收到ACK确认
对n号帧确认采用累积确认的方式,表明已经接收到n号帧与之前的所有帧
- 超时事件
当某一帧丢失时,接收方会拒绝该帧后面的所有帧,并且不发ACK。发送方在超时后重新发送丢失的帧以及其后面所有的帧,这也是GBN的实现内容
接收方要做的事
- 收到序号正确的帧则返回ACK给发送端并且将数据传输给上层
- 收到错误的帧为最近接收的帧发送ACK,丢弃其他后来的帧,只需要维护预期正确的帧的信号即可
滑动窗口的长度
采用n个比特对帧进行变好,那么滑动窗口的尺寸应满足:
1 <= W <= 2^n-1
如果窗口长度太大,那么接收方无法区别具有相同编号的新旧的帧。
性能分析
提高了信道利用率,但是重传时还需要把原来正确传输的帧重新传一次,传输效率低。
选择重传协议SR
发送方响应的三件事
- 上层的调用
跟GBN一样
- 收到ACK
将相应序号的帧标记为已确认,将窗口下界移动到最小序号的未被确认的帧处,窗口移动后发送新进来的未发送的帧
- 超时事件
每个帧有自己的超时事件,超时后重新传一次
接收方要做的事
对于窗口内预接收的帧来者不拒,全部存起来,发送相应的ACK给发送端,移动窗口
滑动窗口的长度
发送窗口与接收窗口一样(大了溢出,小了接收窗口无意义)
满足W = 2^(n-1),W为发送窗口和接收窗口最大的大小
信道划分介质访问控制
数据传输链路
- 点对点链路
多用于广域网
- 广播式链路
多用于局域网
典型拓扑结构:总线型、星型
介质访问控制
静态划分信道
信道划分介质访问控制:将使用介质的每个设备与来自同一信道上的其他设备的通信隔开,把时域和频域资源合理分配。
- 频分多路复用FDM
同一时间不同用户占用不同的频段,效率高,实现容易
- 时分多路复用TDM
将时间划分一个个等长的复用帧,每一个用户占据固定序号的时间。
进阶:STDM统计时分复用,按需动态分配
- 波分多路复用WDM
在光纤内根据光的波长来分配,跟FDM差不多
- 码分多路复用CDM
讲一个比特分为多个码片,每一个站点(也可以说是值)对应唯一的序列,发送1时发送1对应的码片序列,发送0时发码片序列的反码。
为了防止冲突,要求各站点芯片序列相互正交(1的码片序列对应位相乘,相加为0则正交)
合并:对应位置线性相加
分离:合并数据和原码片序列对应位置相乘后所有的值求和再除以序列长度,得到的结果就是要传输的值
动态分配信道
- 轮询访问介质访问控制
不会发生冲突
轮询协议:主接到轮流邀请从属节点发送数据
令牌传递协议:令牌是一个特殊格式的MAC控制帧,不含任何信息。持有令牌的才能传输数据。常用于负载较重,通信量较大的网络。
- 随机访问介质访问控制
- ALOHA协议
纯ALOHA协议:不监听信道,不按时间槽发送,随机重发。
时隙ALOHA协议:把时间分为若干时间片,所有用户在时间片开始时接入信道,如果发生冲突,则在下一个时间片才能重传。- CSMA协议
发送帧之前监听信道,如果信道空闲那么发送完整帧,如果信道忙就推迟发送。
1-坚持CSMA
空闲直接传输,如果信道忙就一直监听,直到空闲马上传输。如果发生冲突(一段时间内未收到回复),等待随机时长后再次监听。信道利用率高,但是如果同时有两个以上的监听就会造成冲突
非坚持CSMA
信道忙之后不继续监听,等待随机时间后再监听。减少冲突的发生,但媒体使用率低
p-坚持CSMA
监听,如果空闲的话有p的概率直接传输,有1-p的概率等待到下一个时间槽再传输。如果信道忙的话等待一个随机时间之后再监听。能有效减少冲突并且增加效率,但是发生冲突后仍然会把数据帧发送完,造成浪费- CSMA/CD协议
比CSMA多一个碰撞检测,边发送数据边监听,一旦检测到碰撞就停止
重传算法:截断二进制指数规避算法
最小帧长问题:帧的传送时延至少要两倍于信号在总线中的传播时延。以太网规定最短帧长为64B,凡是小于64B的都是由于冲突而异常终止的无效帧。- CSMA/CA协议
比CSMA多一个碰撞避免。在无线局域网中使用。
发送数据前检测信道是否空闲,如果空闲发出RTS,包括发射端地址、接收端地址、持续发送时间。接收端收到RTS后相应CTS。发射端收到CTS后开始发送数据帧。接收端收到数据后返回ACK。
局域网
特点
- 覆盖的地理范围小
- 使用专门铺设的传输介质
- 通信延时短,可靠性强
- 各站为平等关系,共享传输信道
- 多采用分布式和广播式通信
主要要素
网络拓扑
- 星型
所有节点跟一个中心节点相连,传输速率快,结构简单。但是网络可靠性低,共享能力差(中间节点去世的话所有其他节点都不能互联了)
- 总线型
可靠性高,节点间响应速度快,资源共享能力强,成本低等。局域网的主要拓扑结构。
- 环形
节省设备和线路,但是可靠性差、不易于拓展、速度慢。
- 树形
易于拓展和隔离,容易有单点故障。
传输介质
- 有限局域网:
双绞线、同轴电缆、光纤
- 无线局域网
电磁波
介质访问控制方法
- CSMA/CD:总线型、树型
- 令牌总线
总线型、树型。把总线上的节点按照一定顺序排成逻辑环,只有令牌持有者才能控制总线
- 令牌环:环形
局域网分类
- 以太网
- 令牌环网
- FDDI网
- ATM网
- 无线局域网(WLAN)
IEEE 802
该标准对OSI参考模型的数据链路层和物理层进行了描述,将数据链路层划分为逻辑链路层LLC子层和介质访问控制层MAC子层
- LLC子层
负责识别网络协议并对其进行封装,为网络层服务 - MAC子层
对数据帧进行封装/卸装,帧的寻址和识别、发送和接受,链路管理,差错控制等,连接物理层
以太网
基带总线局域网规范,使用CSMA/CD
优势
造价低廉,满足网速要求10M-10G
标准
DIX Ethernet V2
IEEE 802.3
两个的区别在于帧格式不同
无连接,不可靠
无握手过程,不发送帧的编号,不发送确认