1、数据链路层
功能:
- 为网络层提供服务
- 帧界定(定义帧的格式)
- 帧同步/透明传输(帧同步指发送方和接收方接受到的帧一致)
- 流量控制(防止发送过快来不及接收,两个节点之间)
- 差错控制(检测或者纠正传输中产生的差错)
- 介质访问控制(采取一定的措施,使两个节点之间发送数据不会产生干扰或者冲突)
- 通讯范围(局域网、广域网)
- 设备(网桥和交换机(具有MAC地址自学习功能))
2、帧界定
就是将传输层的ip数据报加上首部和尾部,通过首部和尾部识别一帧数据局的起始和结束为止。
常用的组帧方法由:
- 字符计数法
- 字符填充法
- 零比特填充法
- 违规编码法
2.1 字符计数法
使用帧的第一个字节来说明帧的长度。
缺点:某一个帧的第一个字节出现问题,影响其后面的所有帧
2.2 字符填充法
在帧的首部和尾部填充特殊字符,当读到首部的特殊字符表示这一帧的开始,当读到尾部的特殊字符表示这一帧的结束。
注: 要在数据部分传输和帧首部或者尾部相同的字符,就需要使用转义字符,否则会造成帧的解析混乱。
2.3 零比特填充法
一种特殊的字符填充法,首部和尾部一样,都死01111110 (6个1)。这样在数据部分遇到5个连续1时,在其后补充0,以防止连续6个1造成停止。
2.4 违规编码法
根据曼彻斯特编码,0和1都是有一段高电平和一段低电平组成,所以我们可以使用“高高” (全高) “低低” (全低)这样的电平来表示帧的起始和结束。
小结:实际中,常使用比特填充法和违规编码法来组装帧。
3、差错控制
数据在传输中由于受到噪声的干扰可能会出错,需要差错控制。
差错可以分为位错和帧错
- 位错:
比特位出错,0变成1,1变成0; - 帧错:
帧丢失,帧重复,帧乱序
针对位错误(比特位错误),差错控制分为检错编码和纠错编码。
- 检错编码:
只检测编码的错误,不修改。常用的有奇偶检验码和CRC循环冗余码。 - 纠错编码:
不仅能发现错误,还能修正错误位。常用的事海明码。
3.1 检测编码
3.1.1 奇偶检验码
- 奇校验
在信息源前面在加一位校验元后(加的是1),使得编码中1的个数为基数个。 - 偶校验
在信息源前面在加一位校验元后(加的是1),使得编码中1的个数为偶数个。
缺点:只能检测50%的错误,比如有2位发生变化(一个0变成1,1变成0),相当于没有变化,则检测不出来。
3.1.2 循环冗余码CRC
要发送的数据a 除以 一个多项式b,得到余数c (冗余码); 根据CRC校验,要发送的数据为 a+c;
接受端使用接受到的数据a+c, 除以多项式b ,如果 (a+c)/b = 0;则表明没有发生错误。
3.2 纠错编码
海明码
1)根据海明不等式求出满足不等式的最小冗余位数r,海明码的位数是数据位+冗余码长度
2)冗余码只能放在2的0 ,1, 2, 3次方这样的位置(1,2,4,8),剩下的位置放数据位。
3)求出冗余码(校验码的值)
每个校验码的位置(0001, 0010, 0100, 1000)用二进制表示,只有1位为1。则每个校验码校验和他相同位置上的值为1的那个数据。
比如P1的最低位为1,则P1校验D1,D2,D4,D5,应为这些数对应的位置的最低位也是1。
通过各个数据位的真实值亦或为0,可以求出该校验码:
P1⊕D1⊕D2⊕D4⊕D5 =0 即:
P1⊕1⊕0⊕1⊕0 = 0 => P1=0
4)纠错
在接受端,让每一个校验位和他要校验的为亦或,将所有有亦或的值组成一个10位数,这个位数就是出错的位数。
4、流量控制
发送方的速度过快,接受方来不及接受,就需要流量控制。在链路层和网络层都有流量控制。
链路层的流量控制是接受方接受不了就不回复确认。
网络层的流量控制是接收端给发送端一个窗口大小,告诉发送端我还能接受多少字节的数据。
链路层控制流量的方法:
- 停止等待协议
- 后退N帧协议(GBN) (滑动窗口的一种)
- 选择重传协议(SR) (滑动窗口的一种)
4.1 停止等待协议
没发送完一帧数据就停止,等待对方的确认,收到确认后再发送下一帧的数据。如果在一个RTT内还没有收到确认消息,就重传一次。通过超时和确认重传机制,保证了数据的相对可靠性。
RTT:往返一次的传播时延。
停止等待的几种出错情况:
- 数据帧丢失或者检测到帧出错
等待超过一个RTT的时间接受不到确认就重传。
- ACK缺失
等待超过一个RTT的时间接受不到确认就重传。并丢弃重传的帧(因为上次已经收到)
- ACK迟到
对来晚的确认帧不做处理
停止等待时间的缺点:发送完一个就要等待确认,大部分时间都是在等待,信道利用率太低。
4.2 后退N帧协议
针对停止等待协议的只能一个帧一个帧的发送的缺点,后退N帧协议规定了发送方和接受方分别有一个滑动窗口。
发送方:发送方的滑动窗口大小是N,表示可以连续发送N帧数据,发送发要为么一个帧编号,应为要连续发送多个帧,好区分。
接收方:接受方法的滑动窗口大小是1,表示同一时刻只能接收一个数据。
接收方采用累积确认的方式,也就是接收方可以接受几个连续的帧后一次返回一个ACK n确认帧。表示确认接受了连续的前n个帧。并将数据交给网络层。
帧丢失的情况:比如接收到1,2,3号帧,没有接受到3号帧,则会发送ACK 2,表示只接受到了1,2号帧。
发送方:此时会一直等待接收方的3号确认帧,直到超时,重发3,4,5号帧。在超时之前会继续发滑动窗口内的其他帧(比如4,5号帧)
接收方:会一直等待3号帧的到来,如果4,5号帧到来,接收端会直接丢弃。应为接收端的滑动窗口大小是1,此时滑动窗口的序号是3,只接受3号帧。
特点:
1)累积确认
2)按序接受,不按序的抛弃
3)发送窗口最大为2^n - 1(n个比特对帧编号),接受窗口为1
优点: 因连续发送数据帧而提高了信道利用率
缺点: 在重传时必须把原来已经正确传送的数据帧重传,使传送效率降低。
4.3 选择重传协议
针对后退N帧协议的缺点,出现问题,批量重传的问题。选择重选协议就是解决该问题的。
具体方法是:设置单个确认,加大接收窗口,设置接受缓存,川村乱序到达的帧。这样可以保存多个传来的帧,如果某个帧丢失或者出错,只需要重传出错的帧。
特点:
1)逐帧确认,接受一个确认一个
2)只重传出错的帧
3)接收方有缓存
4)发送方和接受方窗口最大值为2^(n-1)次方。(n为为帧长度编码的比特位)
5、介质访问控制
采取一定措施,使得两对节点之间的通讯不会发生相互干扰。
介质访问控制常用的方法如下:
5.1 信道划分介质访问控制
将使用介质的每个设备与来自同一信道上的其他设备的通讯隔离开来,吧信道上的时域频域合理的划分给不同设备。
信道划分依赖采用了复用技术,最大限度的利用信道。复用技术就是吧多个信号组合在一条信道上传输,使得多个设备共享信道。
5.1.1 频分多路复用FDM
每个用户占一个频段
5.1.2 时分多路复用TDM
将时间化为一段段等长的时分复用帧,每个用户轮流占用信道。
5.1.3 波分多路复用WDM
5.1.4 码分多路复用CDM
略
5.2 动态分配信道
分为轮询访问介质控制和随机访问介质控制。
5.2.1 轮询访问介质控制
令牌传递协议:获得令牌传送数据,否则等待。确保同一时刻只有一个节点独占信道。常用于令牌环网。
令牌:一个特殊的MAC帧,不包含任何信息。
5.2.2 随机访问介质控制
所有用户随机发送信息,发送时占用全部带宽。如果用户同时发送信息,会产生冲突,所以需要一些协议来解决冲突问题。随机访问介质控制相关协议的核心思想就是监听信道,如果被占用,则延迟发送数据。否则就发送数据。
-
纯Aloha协议:
不监听信道,不按时间槽发送,随机重发。
重发是没有接受到确认帧才重发,如何检测冲突?
如果发生冲突,发送的帧会融合发生错误,接受方接受到错误的帧,经过帧校验发现错误,不予确认。
发送方在一定时间内接受不到确认帧,就判断发生了冲突,然后等待超时后,随机等待一段时间再重发。 -
时隙Aloha协议:
把时间分成若干片,一个站点只能在一个时间片内发送信息。如果发生冲突,需要等到下一个时间片。 -
CSMA(载波监听多路访问协议)
CS:载波侦听。么一个站点在发送数据前检测一下总线上是否有其他站点发送的信号。如何检测?
当几个站点同时在总线上发送数据时,总线上的信号电压摆动值将会增大。当一个站点检测到电压摆动值超过一定的阈值,就认为总线上至少有两个站点在同时发送数据,即发生了冲突。MA:多点接入,多个站点接入到同一根总线上。
CSMA思想:在发送数据前,检测一下总线上是否发生通途。信号闲,发送一帧数据,信号忙,推迟发送。
1)1-坚持CSMA
信道闲,发送数据。信道忙,一直监听信道,一旦监听到信道闲,就发送数据。如果发生冲突(一段时间内没有收到确认),则等待一个随机长的时间再监听,重复上述过程。
优点:信道闲,就发送数据,信道利用率高
缺点:如有2个以上的站点发送数据,冲突不可避免。2)非坚持CMSA
信道闲,发送数据。信道忙,则随机等待一个时间再监听信道。
优点:采用随机的重发延迟时间,减少冲突发生的可能性
缺点:存在信道空闲的情况,利用率低3)P-坚持
对于空闲信道的处理。如果监听到信道空闲,则以P概率发送数据,1-P概率等待到下一个时间槽在传输。忙则等待一个随机时长在监听。
优点:技能向非坚持算法一样减少冲突,又能像1-坚持一样减少空闲时间。
缺点:可能已经由站点在传输数据量,所以可能产生冲突。 -
CSMA/CD(载波侦听多点接入/碰撞检测)
CD:(碰撞检测),边发送边检测,适配器百年发送数据,边检测信道上信号电压的变化情况,以便判断自己在发送数据时其他站点是否也在发送数据。(用于半双工网络,不能允许双发同时发送数据)常用于总线型以太网。问: 为什么先监听后发送,还会产生冲突。
这是应为电磁波在介质上总是以有限的速度传播,如果电磁波还没到达一个站点的站头(只能检测站头附近的电压变化),是检测不到的。如果两个站点都没有检测到信号,但是实际信号已经在介质中传播,这时两个站点同时发数据,就会产生冲突。当发生碰撞后,站点会终止发送数据,并等待一个时间后重传。等待的时间是采用截断二进制指数算法 x 2τ,重传次数为16次。16次以后就认为网络拥堵,抛弃此帧,并向高层报错。
-
CSMA/CA(载波侦听多点接入/碰撞避免)
长用于无线局域网。
发送前先检信道是否空闲,如果空闲,则发出RTS(Request to send)信号请求,接收端接受到RTS后,如果没有和其他站点建立连接,则回给发送端CTS(Clear to send)。发送端接受到CTS后,开始发送数据帧(同时预约信道:发送方告知其他站点自己要传多久的数据)
接收端接受数据后,通过发送CRC来校验数据是否正确,同时给发送方响应ACK帧,发送方接受到ACK帧,才发送下一帧数据。如果发送方在超时时间内没有接收到ACK确认帧,则通过二进制指数算法计算一个时间,等待该时间后重传。最大重传次数16次。
6、以太网
以太网是极大公司联合开发的基带总线局域网规范,是当今最通用的局域网协议规范,采用CSMA/CD技术。
IEEE802.3:第一个以太网规范。
6.1 提供的服务:
-
无连接:发送方和接受方之间无握手
-
不可靠:发送方不对帧进行编号,接受方不发送确认帧,差错帧直接丢弃。
所以以太网是进最大可能的传输数据,只能保证数据帧无差错,不能保证可靠传输。
7、链路层设备
网桥和交换机
-
网桥:根据MAC地址的目的地址对网桥进行转发或者过滤。当网桥接受到一帧数据时,先检查MAC地址,然后在确定将该帧数据转发到哪一个端口。
-
交换机:有多个端口,每个端口独占带宽。每个端口缓存了它所连接的设备的所有MAC地址。