computer networksTanenbaum第3章 数据链路层doc.docx
- 文档编号:12187875
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:46
- 大小:4.33MB
computer networksTanenbaum第3章 数据链路层doc.docx
《computer networksTanenbaum第3章 数据链路层doc.docx》由会员分享,可在线阅读,更多相关《computer networksTanenbaum第3章 数据链路层doc.docx(46页珍藏版)》请在冰豆网上搜索。
computernetworksTanenbaum第3章数据链路层doc
第三章数据链路层
一、概述
提供点对点的可靠传输,保证两节点之间数据的传输一定正确,它借助于物理层为网络层提供服务
⏹为网络层提供一个较好的服务接口
⏹定义一个合适的传输差错率:
差错控制
⏹对传输的数据流进行管理,一面快速的发送淹没慢速的接收端:
流量控制
⏹物理层传输的数据单元是bit,数据链路层传输的数据单元(PDU:
协议数据单元)是帧
数据链路层的功能:
把网络城的数据组合成帧,并加上一定的效验,然后交给物理层,物理层用某种信号表示二进制的位,并把它送到目的主机,
数据链路层与物理层最大的不同在于:
它提供了端到端的可靠的传输,在两点之间提供了一条可靠的链路。
相连、物理链路和数据链路
⏹相连:
就是两台计算机之间有一条物理的媒体,但不一定能够传递信息。
可以理解为硬件设备相连,但当采用多路复用
技术是也可以是信道的连接,其特征为:
所传输的数据是顺序的
⏹物理链路:
一段无源的点到点的物理的连接,中间没有任何交换设备,能够实现比特流的传输,但没有正确性、可靠性保
证的链路
⏹数据链路:
包括一条物理连接和为实现数据传输而在两端配置的硬件及其相关的通讯协议。
是有正确性、可靠性保证的链
路
数据链路层的服务
根据有无连接(不是指与通讯目标有没有一条通路,是指在与对方的数据链路层通讯之前,有没有和对方打过一个招呼,也就是对方的数据链路层的协议是不是已经启动了)、有无确认(是指我发过去一个数据帧,对方会不会回信告诉我这个信息收到还是没有收到)可以分为:
⏹无确认无连接
⏹有确认无连接
⏹有确认有连接
面向连接
发送方和接收方在传输数据之前必须建立一条数据链路,传输结束后必须师范该链路。
无确认的面向无连接的服务
这种服务通常用在传输距离很短,信道可靠的情况下,如:
局域网。
无确认是指接收方在收到数据帧后,不需发回一个确认,无确认并不意味着不可靠,其可靠性由上层负责。
无连接服务是指在数据传输钱不需建立数据链路,物理线路的链接并不意味着提供有连接的服务。
如:
局域网
⏹共享信道不需要,也不容许建立连接
⏹信道较为理想,数据传输的误码率很低
⏹即使出错或丢失由上层负责恢复
有确认的面向无连接的服务
这种服务用在信号传输延时较大、线路状态不一定可靠的情况。
如:
无线通讯、卫星通讯
⏹如果建立连接,则信道的使用率很低
⏹传输的误码率相对较高,所以确认是必须的。
有确认的面向连接的服务
数据传输前,先建立数据链路,并且每帧的传输必须得到确认,数据传输结束后,释放连接。
如:
电话。
二、数据的可靠传输(以下三点也即数据链路层要解决的三个主要问题)
⏹将传输的信息组合成帧,设计计算方法,对帧的数据进行计算,并把计算结果和帧一起发送
⏹效验和重发,接收端对接受的帧进行相同的计算,把计算的结果和传递过来的结果比较,相同,就认为帧是正确的,否则,
就认为是错误的,并要发送方重发。
⏹流量控制,接收方对到达的帧来不及接受,只能扔掉,这通过协调发送方和接收方的速率来解决。
1、数据帧的组成(数据链路层如何来组织一个帧)
数据帧其实就是我和对方的一个约定,约定什么样的是一个帧。
帧的组成必须保证能识别一个完整的帧,并保证一旦出现传输差错而导致前一个帧丢失时,也能识别后一个帧,即具有再同步功能,帧的组成方法有:
1)字符计数法
在发送每一个帧时,先在每个帧的前面加上字节,说明这个帧有多长
2)带字符填充的首尾界符法:
常用在计算机同步终端和计算机系统之间
一种面向字符的帧格式,所传输的数据都是ASCII的可显示字符,在帧的前后都加上特殊的字符,作为帧头和帧尾界符。
在这种帧格式中不容许帧中出现帧界符,在面向字符的串行通讯中常使用这种格式(PPP)。
接收方一旦丢失了一个Flag,
只要继续搜索下一个Flag,就可重新确定帧边界,即具有再同步能力。
帧格式如下:
对于帧头、帧尾界符,要选取在ASCII中很少出现的字符,如:
7EH,作为帧头和帧尾的标志(通常Flag=7EH)。
面向字
符的帧格式不适合传输数据中包含二进制数的帧,因为在包含二进制数的帧中很可能出现与Flag相同的字符,这种情况下,
可在二进制数中偶然出现的Flag前面再插入一个ESC(1BH),称为字符填充法(用flag作为帧头、帧尾的标志,通常
Flag=7EH,当传输的帧中也出现“7E“字符时,在这个“7E“字符前面填插一个特殊字符”1B“,表示这是帧中的数据
字符,不是帧的界符字符,若帧的数据部分同时相邻出现字符串“1B7E“,则改写为“1B1B1B7E“。
接收方在收到这段
字符串后,会丢弃第一个1B,接受第二个1B,丢弃第三个1B,接受7E,因此接收方处理后得到的字符串为“1B7E“)。
3)带位填充的首尾标志法:
即透明传输法
在计算机网络传输的数据很少是字符型,大多数都是二进制的bit串,二进制的bit串的组帧方法就是带位填充的首尾标
志法,在面向二进制位的同步串行通讯中常使用,如:
HDLC。
这种格式的帧把所有需要传输的数据一字排开,并以特殊
的位模式01111110作为帧标志,即一个帧的开始(同时标志前一个帧的结束)。
如果由于干扰,一个帧标志没有被正确接
受,则继续扫描接受串,一旦扫描到01111110,则新的一帧从此开始,因此具有再同步能力。
位插入法(透明传输):
当帧中出现一个与帧标志相同的位串01111110时,则在第5个1之后自动插入一个0,变成011111010,
接受方将自动删除连续第5个1之后的0。
4)物理层编码违例法。
彻底解决帧的识别问题,在物理层的数字信号的曼彻斯特编码中,比如:
数据0:
编码为低-高电平
数据1:
编码为高-低电平
高-高电平对和低-低电平对没有使用,如在二进制编码中出现则称为编码违例,但这两种违例编码可以用作帧界符。
因此
这样的用连续的高电平或连续的低电平作为帧界符的组帧格式就是物理层编码违例法。
如:
在令牌网中就使用它。
2、差错控制
避免帧错误:
帧的效验
避免帧的丢失:
超时、重发
避免帧的重复:
帧有序号(据此,接收方来判断帧有无重复)
如何保证数据帧的正常传输,将通过三种手段处理可能出现的情况:
(差错控制的三个步骤)
⏹确认:
接收方在收到一个正确的帧后,要向发送方发送一个肯定性的确认信息。
当接受方收到一个错误的帧,接收方可以只是
简单的把错误帧丢掉,或者还向发送方发送一条信息,告诉发送方发送的数据出错,这就是一个否定性的确认。
发送方
将重发此帧。
确认的前提是必须经过差错检测。
1)差错检测和校正
超时只是传输出错的一种情况,更多的传输处所是数据中的一位会几位因噪声干扰而出错,噪声分为两种:
信道固有的、持续的热噪声;外界突发的原因而造成的随机的冲击噪声。
通常接收方应能检错(通过检错码,如:
校验和、快校验码、循环冗余校验码),甚至纠错(通过纠错码,如:
海明码)。
纠错码是除m个数据位外增加r个冗余位作为纠错位,传输的总长度为n=m+r。
在计算机网络中,通常只是检错,不进行纠错。
A.校验和
校验和简单、实现容易、但检错强度较弱。
它是将发送的数据看成是二进制的整数序列,并根据校验和的位数分为一段一段规定的长度(如:
8位、16位、32位),然后计算它们的和,如计算和时有进位(计算结果超过16位了),则将进位加到最后的效验和中,并将效验和与数据一起发送;在接收端,重新计算效验和,并与接收到的原效验和比较,如:
传输“helloworld”:
在使用效验和时,要定义一个效验和的长度,如:
8位、16位、32位。
效验和在IP协议等上层协议中用到
B.块校验码(BCC)
校验效果也比较弱,简单常用,若在同一列上有偶数位错,将不能检测出。
常用在计算机同步终端和计算机系统之间。
如传输的数据都是ASCII字符(即面向字符,这在应用中很多),以字符为单位,对每个字符进行奇偶效验,然后把所有字符(连同奇偶位)进行异或运算(把每一个字符的内码之间做异或运算,把异或的结果作为校验码附在后面,和效验和的校验强度差不多,如果有某一列上有两个位出错了,就不能检查到),运算结果即为该块效验码,通常在发完数据区的结束标志后发送BCC,接受端一边接收数据一边计算BCC,最后与接收到的BCC比较,以确认所接受到的数据正确与否
C.循环冗余校验码(CRC)
这是数据链路层用的最多的效验方法,如:
以太网用的就是循环冗余校验码。
可以比效验和检验出更多的错误,且可以
用硬件来实现。
任何一个k位的帧看成是一个k-1次的多项式M(x),每一个bit看成是多项式的系数,如:
1011001看成为X6+X4+X3+X0
通信双方设定一个生成多项式G(x),G(x)为r阶,k>r(生成多项式的长度要小于帧的长度),循环冗余校验码检测错误
的能力决定于该生成多项式有关。
如XrM(X)/G(X)=Q(X)+R(X)/G(X),其中r为生成多项式G(x)的阶,Q(X)为商、R(X)为余数,R(X)即为M(X)的CRC码
将CRC码接在帧后一起发送,即发送数据为XrM(X)+R(X)
在计算循环冗余校验码的除法运算中,其涉及的被除数与商数和除数乘积的二进制减法运算中,减法和加法都做异或
运算:
0+1=1,1+1=0,0-1=1(前面一位不受影响),1-1=0
因为(XrM(X)-R(X))(在模2的除法当中加法和减法是一样,这样该表达式与XrM(X)+R(X)等价)一定能被G(X)整除,
即余数为0,则接收方只要计算CRC,并所得余数为0即为正确。
在接收方计算CSC时,它并不去区分帧内哪些是原始数据部分,哪些是效验码CRC部分,它只要将收到的数据XrM(X)+R(X)与生成多项式相除,如果余数为0,则帧中的数据是正确的,否则是错误的。
如果收到的是XrM(X)+R(X)+E(X),除非E(X)是G(X)的整数倍,否则别的错误都能被检测出来。
CRC码计算举例
有一帧为:
1101011011,则对应的M(x)为:
M(x)=X9+X8+X6+X4+X3+X+1
通讯双方约定的生成多项式为:
G(x)=X4+X+1
被除数:
T(x)=X4M(x)=X4(X9+X8+X6+X4+X3+X+1)=X13+X12+X10+X8+X7+X5+X4
则,T(x)/G(x)如下:
三个生成多项式国际标准
CRC-12、CRC-16、CRC-CCITT(P142)
⏹数据帧丢失
通过发送方定时器(超时)解决。
超时:
在传输过程中,所发送的帧丢失,接受方根本没有收到,不可能发送确认帧(包括否定性确认),当然发送方也不可能等到确认,所以,发送方每发送一个帧,就启动一个定时器,在规定的时间内,若收不到确认,就在定时器溢出后,再重发此帧。
(重发机制)
⏹重复帧
接收方收到帧后向发送者发回确认,但该确认在网络上丢掉了,于是发送方在定时器超时后,就会重发该帧,这样在接收方就会收到两个完全相同的帧,接收方通过帧的编号来发现重复的帧。
对于网络上发送的每一个帧都会设定一个编号。
⏹帧的格式
基于以上的讨论,一个数据链路层的帧至少应该包括以下内容:
3、流量控制:
窗口协议()
协调发送方的发送速度和接收方的接受速度,避免产生帧的丢失。
如过接收方的处理能力低于发送方,即使传输中没有出
错,也可能被“淹没”,所以通常在接收方的缓冲区到达一定量时,应及时通知发送方,暂停发送,等候通知,这就是流量
控制。
流量控制机制体现在发送方和接受方数据链路层的两个进程的处理当中。
三、数据链路层协议
数据链路层的协议要处理帧的封装、差错控制、流量控制等一系列的问题,归根结蒂,数据链路层协议是通过一个进程
对数据传输的处理来实现。
1、基本的数据链路层协议(单工的通讯:
A发送数据,B接受数据)
可以这样来理解:
在一台主机中,物理层、数据链路层、网络层等,都有各自的进程在运行,并假设:
A、B两台主机要求可靠的、有确认的、面向连接的数据传输服务,在接收方的数据链路层,目前正运行的是函数
wait_for_event(&event),即等待某个事件的发生。
每个数据链路层的协议(进程)就是一个服务员,将网络层来的数据封装成帧交给物理层,或激昂物理层来的数据解封装后传给网络层。
函数wait_for_event(&event)通过参数event来决定进行什么样的服务。
单工通讯使用两条独立的信道,一条为A到B的,传输数据帧;一条B到A,传输的是确认帧。
函数wait_for_event(&event)说明:
⏹如果发生了某个事件,此过程将返回参数event
⏹event有两个取值:
checksum_err(CRC错)、frame_arrival(正确收到)
⏹如even=checksum_err,则表示所接受的帧的效验和错,应考虑不发送确认帧,或发送否定性帧NAK
⏹如event=frame_arrival,则表示帧已到达并效验和正确,应该调用from_physical_layer,从物理层取得帧,并检查帧头
的控制信息,如果一切正常,则仅把其中的分组交给网络层
⏹一系列过程和数据结构的定义:
TnbmP202Fig.3-9
1)无限制的单工协议(协议1TnbmP205Fig.3-10)
适用条件:
⏹主机A、B之间的信道是理想的信道,信息传输不会出错,也不会丢失,因此不提供差错控制以及重发机制
⏹接受方的接受能力是无限的,因此不提供流量控制
⏹协议1只做帧的封装,以及处理与上下两层的关系
协议1的发送方:
SENDER
voidsender1(void)
{
frames;//数据链路层的帧,数据类型是一种结构体
packetbuffer;//网络层传递过来的分组
while(true)
{
from_network_layer(&buffer);//网络层与数据链路层的接口,
s.info=buffer;//将网络层的分组分装在帧的数据信息部分,从而完成数据的封装
to_physical_layer(&s)//数据链路层与物理层的接口
}
}
协议1的接受方:
RECEIVER
voidreceiver1(void)
{
framer;
event_typeevent;
while(true)
{
wait_for_event(&event);//event始终取值为frame_arrival,当事件frame_arrival一发生,就从物理层取一个帧到r中
from_physical_layer(&r);//从物理层取一个帧到r中,接收方数据链路层与物理层接口
to_network_layer(&r.info);//对帧r解封装,取出分组,传递给网络层,接收方数据链路层与网络层接口
}
}
2)单工的停-等协议(协议2TnbmP207Fig.3-11)
适用条件:
⏹信道是理想的信道,不会出错,也不会丢失,因此不需要差错控制
⏹接受方的接受能力有限,需要流量控制。
发送方需要收到接收方的相关信号,才能进行数据发送;发送方发了一个消息后就停下来,接收方收到发送方发来的消息,处理该消息,处理完后,给发送方发一个确定,发送方在收到该确认后,再发送第二个帧。
。
。
。
协议2的发送方:
SENDER
voidsender2(void)
{
frames;//数据链路层的帧,数据类型是一种结构体
packetbuffer;//网络层传递过来的分组
event_typeevent;
while(true)
{
from_network_layer(&buffer);
s.info=buffer;
to_physical_layer(&s)
wait_for_event(&event);//等待接收方的确认信息
}
}
协议2的接受方:
RECEIVER
voidreceiver2(void)
{
framer,s;
event_typeevent;
while(true)
{
wait_for_event(&event);//event始终取值为frame_arrival,当事件frame_arrival一发生,就从物理层取一个帧到r中
from_physical_layer(&r);//从物理层取一个帧到r中,接收方数据链路层与物理层接口
to_network_layer(&r.info);//对帧r解封装,取出分组,传递给网络层,接收方数据链路层与网络层接口
to_physical_layer(&s);//给发送方发一个确认帧
}
}
协议2说明:
⏹协议2是单工协议,接收方和发送方使用同一个信道,发送方发送数据帧和接收方发送确认帧的过程是严格交替的
⏹发送方发送的数据帧和接收方发送的确认帧采用相同的帧格式,接收方发送的确认帧的数据为空,仅为一个信号
3)噪声信道的单工协议(协议3TnbmP210Fig.3-12)
TnbmP210Fig.3-12一个肯定性确认和超时重发的协议,同时具有差错和流量控制
⏹噪声信道的差错控制
在有噪声的信道上传输数据会产生传输错误,如果错误发生在帧头、帧尾会造成帧的丢失(帧的再同步),如果错误发
生在帧的数据部分,通常CRC都能检测出来;如果发送方有重发机制,但接受方发出的ACK丢失,接收方将受到重发
的重复帧
⏹采用定时器实现差错控制
增加一个定时器,当发送方发送完一个帧后启动一个定时器并等待确认
无论是由于接收方收到一个错误帧而不发ACK(无否定性确认机制),还是由于帧标志错而导致帧的丢失,接收方不
发ACK,或接收方所发的ACK丢失,发送方的定时器都将超时,一旦超时则立即重发,以实现差错控制
⏹简单的重发机制存在问题
效率较低:
如接受方收到的帧出错或整个数据帧丢失,则不发ACK,发送方必须在定时器超时后重发,直到正确(效
率很低)
重复帧:
如果接收方在正确收到正确帧并发送了ACK,但此ACK丢失,发送方在超时后重发此帧,则网络层将收到
两个完全相同的分组(这是不能容许的),由于有重复帧,所以必须在帧中给定帧的序号,以区别重复的帧。
⏹较为适用的噪声信道单工协议
发送方必须记住它下一个要发送的帧的序号;接收方也必须记住它下一个要接受的帧的序号。
另外发送、接受方之间
应该有一个约定,开始数据传输时,应该从哪个序号的帧开始发送,如:
双方约定从0号帧开始发送,则起始数据
发送时,发送方把下一个要发送的数据帧的序号设置为0,接收方把下一个要接受的帧的序号也设置为0
由于接受和发送数据是在单工信道上完成的,因此数据的发送和接受是交替进行的,这样帧的的序号只需采用0、1
两个号码就可以(发送方必须在收到接收方的确认或超时的情况下才会发送一个帧)。
在协议3中,帧的格式用到了帧的Info部分、帧的序号、帧的应答号(应答号是接受方期待接受的下一个帧的序号),帧的类型字段不用做区分,因为发送方发送的肯定是数据帧,接受方发送的肯定是确认帧。
帧的序号、应答号用一个bit就可以了。
协议3只定义了肯定性确认帧ACK,而没有定义否定性确认帧NAK。
接收方收到了一个正确的帧,即便不是所期待的(即重复帧),都必须发送一个确认帧ACK。
该协议也称为ARQ协议:
AutomaticRepeatreQueat
协议3:
SENDER
voidsender3(void)
{
next_frame_to_send=0;//发送方发送的初始帧的序号
from_network_layer(&buffer);
while(true)
{
s.info=buffer;
s.seq=next_frame_to_send;//这两个语句是帧的封装
to_physical_layer(&s);
start_timer(s.seq);//启动计时器
wait_for_event(&event);//等待接收方的应答或计时器超时,如果到来的事件是应答帧到达,则执行以下的代码;如果到达的事件是计时器超时。
则回到该循环的开始,重发刚才的帧。
if(event==frame_arrival)
{
{from_physical_layer(&s);
if(s.ack==next_frame_to_send)//查看应答帧的应答号和我发出去的帧的序号是否一样。
条件成立,则帧接受正确,若不成立,则是重复帧,则重发当前刚发送了的帧
{
stop_timer(s,seq);//计时器停止计时
from_network_layer(&buffer);
inc(next_frame_to_send);//帧的序号加一,0加1为1;1加1为0
}
}
}
}
协议3:
RECEIVER
voidreceiver(void)
{
frame_expected=0;//初始化接收方等待接受的第一个帧
while(true)
{
wait_for_event(&event);
if(event==frame_arrival)
{
from_physical_layer(&r);
if(r.seq==frame_expected)
{
to_network_layer(&r.info);
inc(frame_expected);
}
s.ack=1-frame_expected;
to_physical_layer(&s);
}
}
}
⏹协议3存在的问题
单工信道不能双向传输,效率较低
如果发送方的定时器设置的初始值比较小,可能出现系统死锁。
2、双向传输解决方案
用四条信道:
两条数据的,两条应答的,存在信道利用率低的问题
用两条信道:
一条A到B(包括A到B的数据帧和确认帧);一条B到A(包括B到A的数据帧和确认帧),如何区分一条信道上到来的帧是数据帧还是确认帧,方法有两个:
●接收方采用捎带确认(piggybacking),在数据帧中附带确认信息,若确认信息说第3个帧受到了,则表示第1、2两帧也收到了(发送一批帧,确认一批帧)
●数据帧和确认帧采用不同的帧格式,通过帧的类型来区分(type)
3、滑动窗口协议
收发使用两条信道,发送方可以连续的发送多个帧,接收方接收到一帧后就从另外一个信道发回一个ACK,为提高信道的使用率,接收方可以使用捎带确认。
帧是有序号的,即使过早超时而重发也可会根据帧的序号来避免帧的重复
1)滑动窗口原理
在滑动窗口中,要考虑差错控制和流量控制,使用两条信道,数据是双向传输,每一方既是发送方又是接收方。
滑动窗口指定了接受窗口和发送窗口的大小(即:
一次可以连续不间断的发送的帧的最大数量和接收方在发回一个什么
什么号帧已正确收到的信息之前,接收窗口能够接受帧的数量【接受窗口一次能接受的帧的最大数量】)。
发送和接受窗口大小的和就规定了帧的可能的合法的编号,如:
WT=5;WR=3,则帧的编号有8个,分别为:
0、1、2、3、
4、5、6、7,用3个bit表示。
接受窗口和发送窗口的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- computer networksTanenbaum第3章 数据链路层doc networksTanenbaum 数据链 doc