嘀嘀嘀~~~  页面这在飞快的跑来 . . .

数据链路层


数据链路层是OSI参考模型中的第二层,介乎于物理层网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源机网络层来的数据可靠地传输到相邻节点的目标机网络层。为达到这一目的,数据链路必须具备一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;如何控制帧物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。

数据链路层服务和功能

数据链路层为网络层提供服务在相邻结点间传递网络层报文

网络层要为IP数据报选路,确定IP数据报传递的下一站。下一站确定后,IP数据报要从一个站点到下一个站点,这时需要使用下一层的服务。数据链路层为网络层提供这样的服务,在相邻结点间传递IP数据报。所谓相邻节点是指两个节点在同一个物理网络或者两者间有直接的链路,数据可以从一个站点直接到达另一站点,不需要经过转发。

数据链路层是OSI/RM模型的第二层,为网络层提供数据传输服务。网络层将IP数据报交给数据链路层,数据链路层添加自己的首部H2和尾部T2,封装成帧,将帧发送给相邻结点。帧到达接收方数据链路层后,去掉首部H2和尾部T2,将IP数据报上传,完成数据的传递。

如果IP数据报的源结点和目的结点是相邻的,只需要封装一次就可以把IP数据报送到目的地。如果IP数据报的源结点和目的结点不是相邻结点,之间相隔有其他网络,就需要将IP数据报一段一段的发送,每一段都封装成一个新的帧。IP数据报经过三段链路才到达目的地,每经过一段链路,就要被封装一次,这三段链路中可能采用了不同的链路层协议,因此封装时首部和尾部可能各不相同,但IP数据报在传递过程中保持不变。

对于主机而言,通常只有一个网络接口,所以只有一个数据链路层协议。而路由器有多个网络接口,不同的接口连接不同的网络,所以路由器的不同接口会运行不同的数据链路层协议。

链路和数据链路

链路:一条无源的点对点的物理线路,中间没有任何结点,链路也称为数据电路、物理链路。

数据链路:物理链路和他上面运行的链路层协议一起组成了数据链路。

两类链路

点对点的链路:由两个结点之间相连的链路,是这两个结点之间的唯一的一条通路,多用于远程网上。

共享链路:共享链路指多个结点共用一条链路,多用于局域网。

链路层的主要功能

1.成帧

数据链路层需要把数据组成一定大小的数据块——帧,以帧为单位发送、接收和校验。

2.差错控制

在数据传输过程可能会因物理链路性能和网络通信环境等因素,难免会出现一些传送错误,数据链路层上需要有差错控制的功能,能够检测到这些错误,并采取措施进行纠正。

3.流量控制

在数据传输中,流量控制同样非常重要,数据的发送与接收必须遵循一定的传送速率,可以使得接收方能及时的接收发送发送方的数据。当接收方来不及接收时,就必须及时控制发送方数据的发送速率,使两方面的速率匹配。

4.链路管理

当网络中的两个结点要进行通信时,数据的发送方需要知道接收方是否已处在准备接受的状态。为此通信双方必须先交换一些必要的信息,以建立一条基本的数据链路,在传输数据时要维持数据链路,而在通信完毕时要释放数据链路。数据链路的建立、维持和释放称为链路管理。

5.MAC寻址

在数据链路层的帧中,通常要包含目的地的地址,这个地址称为MAC地址。数据链路层要能够根据帧中的MAC地址,保证每一帧都能送到正确的目的地,特别是在共享式的链路中。

6.区分数据与控制信息

在许多情况下,数据和控制信息处于同一帧中,因此一定要有相应的措施使接收方能够将它们区分开来,以便向上层传送的是真正需要的数据信息。

透明传输

透明传输是指无论网络层交给数据链路层是什么样比特组合的数据,都可以在数据链路上进行有效传输。有的时候,网络层交给数据链路层的数据中恰好包含了链路层的控制信息,这时需要采取相应的技术措施,使接收方不将这样的数据误认为是某种控制信息。

成帧

数据链路层要在网络层报文前面添加首部和尾部,封装成帧,帧是数据链路层的传输单位。

数据链路层使用帧同步技术来区分每一帧的开始和结束

1.字节计数法

2.含字节填充的分界符法

使用特殊字符标记帧的开始和结束

数据中如出现标记字符,需要使用转义字符ESC

3.含位填充的分界标志法

使用特殊的比特组合表示帧的开始和结束,例如01111110,称为F

为避免数据部分出现01111110,造成接收方错误判断帧结束,数据部分使用零比特填充法

4.物理层编码违例法

将数据比特“1”编码成“高-低”电平对,将数据比特“0”编码成“低-高”电平对。

“高-高”电平对和“低-低”电平对在数据比特中是违法的,可以借用这些违法编码序列来界定帧的起始与终止。

流量控制

在数据链路层中另外一个需要解决的问题是,如果发送方发送帧的速度超过了接收方能够接收这些帧的速度,该怎么去处理?这种情况是经常出现的,因为无法保证发送方和接收方所使用的计算机速度是相同或相近的。当发送方持续的以很高的速度向接收方发送帧,但接收方不能及时处理时,会造成接收方数据“溢出”,前面来不及接收的帧会被后面发送来的帧“淹没”,从而造成数据帧出错或丢失。要解决这个问题,就需要对发送方发送数据帧的速度进行限制,在数据链路层一般是使用基于反馈的流控制机制来进行控制,接收方给发送方送回信息,允许它发送更多的数据,或者告诉发送方它的情况是怎么样的。

停止等待

停止等待是最简单的流量控制方法。发送方每发完一帧后要等待接收方的确认,收到确认后才能发下一帧。如果没有收到确认,发送方必须一直等待,这样可以保证发送速率不会超过接收方处理数据的速率。

考虑情况

  • 数据帧出错,接收方如何向发送方反馈
  • 数据帧丢失,接收方没有收到数据帧,因此不会发送确认,而发送方会一直等待确认,双方死锁。
  • 确认帧丢失,发送方没有收到确认,会一直等待确认,而接收方已经发出确认,会一直等待新的数据帧,双发死锁。

使用的停等协议(针对数据传输中的出错和丢失情况)

  • 如果数据帧出错,就发送否定帧NAK,通知对方重传
  • 发送方发送数据帧后,启动一个定时器,定时器时间到了,如果没有收到确认,就重传该数据,这样可以避免因数据帧丢失或确认帧丢失而造成的死锁。
  • 当确认帧丢失后,发送方会重传对方已经收到的帧,因此接收方必须要能够区分每个帧,所以需要对帧进行编号,因为每次只发送一个帧,只有区分前一帧和后一帧就可以了,所以对数据帧0、1交替编号即可。

停止等待的方法很简单,但是效率低。在发出数据帧后的一段时间内,发送方必须等待接收方确认,而此时链路一直空闲。在任何时刻,线路上只有一个帧,线路利用率不高,通信链路越长,等待的时间就会越长。

滑动窗口

数据链路层常用的是滑动窗口协议来控制数据帧的连续发送,滑动窗口协议在发送方保持一个连续的序号表,表示允许发送的数据帧的序号,称为发送窗口,在接收方也保持一个连续的序号表,对应于允许接收的帧的序号,称为接收窗口。

只有落在发送窗口的帧才允许发送,窗口左侧是已发送并收到确认的帧,窗口右侧是暂时还不能发送的帧。在窗口内的帧可以分为两种情况:一是已经发送但是还没有收到确认的帧;二是还没有发送的帧,但马上可以发送。

接收窗口的帧是接收方当前期望接收到的帧。如果收到帧的编号落入接收窗口内,就接收到这个帧,否则将其丢弃。

窗口的最大值

发送窗口

如果帧中编号所占的比特位数为n,那么发送窗口Wt<=2∧n-1

接收窗口

Wr<=Wt

当帧中编号所占的比特位数为n时,接收窗口Wr<=2∧n-1

等待停止是特殊滑动窗口发送窗口和接收窗口大小都是1

差错控制

在数据链路层中,除了要解决成帧问题,流量控制,还需要解决数据传输中的差错问题,在物理传输线路上存在着各种噪声和干扰,传输数据信号可能有差错。如何能保证数据完整性和正确的顺序,这是差错控制的问题。差错控制包括两个方面,一是要检测差错,二是要对差错进行处理。

检测差错

数据的传输过程中,会出现两种情况的错误,一种是帧损坏,一种是帧丢失。

帧损坏

帧传输过程中,可能会受到干扰,造成接收到数据帧同发送时的数据帧不一样,这种情况称为帧损坏,使用CRC冗余校验检测帧损坏。

CRC冗余校验

CRC校验

使用位数足够的G(x),能够使检测不到的差错概率非常小,目前CRC校验中常用的生成多项式有CRC-16,CRC-CCITT和CRC-32。

CRC校验值通常作为帧的尾部添加在数据后面,在数据后面添加上的冗余码称为帧检验序列(Frame,Check Sequence,FCS)。CRC校验值是最常用的FCS。

帧丢失

在传输中一个帧被噪声破坏了,造成接收方不将其视为一个帧,就发生了帧丢失。使用帧编号、确认帧和定时器检测帧丢失。

检测帧丢失

  • 发送方要对帧进行编号,而接收方每收到一个帧,就向发送方发送一个确认帧。
  • 发送方每发送一个帧,就启动一个定时器,如果定时器时间到了,确认帧仍未收到,就认为该帧丢失了。

差错处理

当检测到错误,不论是帧损坏或帧丢失,数据链路层通常不去修正错误,而是简单的重新传输对应的帧,这个过程称为自动重复请求(Automatic Repeat reQuest,ARQ)

差错控制和流量控制是结合在一起的。因此停止等待常以停等ARQ来实现,而滑动窗口常以连续ARQ和选择重传ARQ来实现。

ARQ

停等ARQ

停等ARQ在每发一帧后就等待确认的返回,收到确认后才发送下一帧,为了区分重复帧,在帧的首部设有序号字段。因为是停止等待,所以只要能区分前后两帧即可,因此采用一个比特编号,帧的序号依次未0,1,0,1,0,1……..。收到正确的帧要发送确认帧,对于0号帧的确认为ACK1,表示0号帧已收到,期望接收的下一帧是1号帧;对于1号帧的确认为ACK0,表示1号帧已收到,期望接收的下一帧是0号帧。通常不发送否认帧NAK。

连续ARQ

连续ARQ基于滑动窗口技术,对数据帧模n进行编号。发送窗口大于1.所以在发送完一帧后,不是停下来等确认信息的到来,而是可以连续发送若干帧,整个通信的吞吐量和信道利用率得到提高。连续ARQ中,接收方窗口大小固定为1,因此接收方只按顺序接收数据帧。连续ARQ协议一方面利用滑动窗口连续发送数据帧而提高了效率;另一方面,又会重传那些已经正确送到过的帧(帧出错),这种做法又降低了传送效率。连续ARQ协议比较简单,实现起来比较容易。

选择重传ARQ

发送窗口大于1,一次可以发送多个帧;

接收窗口大于1,可以非顺序接收帧;

n比特进行编号:0,1,2….2∧n-1,0,1,2;

不必回退N帧重传,可以只重传出错的帧但算法很复杂需要大的缓冲区;

数据链路层协议

异步协议

异步协议中以一个字符为一个传输单位,每个字符的开始和结尾都有特殊的标记,字符和字符之间的间隔是不确定的,所以字符之间是异步的。

同步协议

同步协议以一个数据块为一个传输单位,在整个数据块内部都是同步的。

  • 面向字符的协议

每个数据帧都是由若干个字符组成的,每个字符通常用一个字节(8比特)表示。在协议中定义一些特殊的字符表示特殊含义(帧开始结束、数据开始结束)。最著名的是IBM公司的二进制同步通信协议(Binary Synchronous Communication,BSC)。面向字符的协议由一个很大的缺陷就是强烈的依赖字符集,使用不同的字符集的机器不能利用字符协议进行通信,扩展性差。

  • 面向比特的协议

每一个帧由若干个比特组成,不依赖特定的字符集。一个帧分为若干个字段,每个字段在帧中都有固定的位置,都有特殊的功能和含义,同时使用一些特殊的比特组合来代表特殊的含义(帧的开始和结束)。代码性的是高级数据链路控制协议(High-level Data Link Control,HDLC)和点对点协议(Point-Point Protocol,PPP)。目前数据链路层协议主要是面向比特的协议。

HDLC协议

HDLC(High-level Data Link Control)协议是面向比特协议中最具代表性的一个协议。HDLC协议起源于1974年IBM公司推出的SDLC协议。1979年在SDLC协议的基础上提出高级数据链路控制协议——HDLC协议。后来基于HDLC协议,又提出一系列链路层协议,如LAP系协议、PPP协议、帧中继协议等。局域网协议也是基于HDLC协议发展起来的。

HDLC具有透明性,数据和控制信息完全独立,不受任何位式样和字符宽度的限制:能适应多种应用、多种网络配置,可用于点到点链路,也可用于多点链路;可采用交换线路,也可采用非交换线路;控制信息所占比例小,传输效率高;可靠性高;吞吐率高等优点。因此HDLC已经成为广受欢迎的数据链路控制规程。

HDLC涉及三种类型的站:主站、从站、复合站

主站:主要功能是发送命令(包括数据信息)帧、接收响应帧、并负责对整个链路的控制系统的初启、流程的控制、差错检测或恢复等。

从站:主要控制接收由主站发来的命令帧,向主站发送响应帧,并且配合主站参与差错恢复链路控制。

复合站:主要功能是既能发送又能接收命令帧和响应帧,并且负责整个链路的控制。

根据通信双方的链路结构和传输响应类型,HDLC提供了三种操作方式:正常响应(NRM)、异步响应(ARM)、异步平衡(ABM)。

HDLC帧格式

  • 标志字段F(Flag)为01111110,共8bit。在接收端只有找到标志字段就可以确定一个帧的位置。
  • 地址字段表示链路上站的地址。
  • 信息字段内包含了用户的数据信息和来自上层的各种控制信息,使用零比特填充法避免信息字段内出现标志F(01111110)
  • 帧校验序列FCS占16比特,采用CRC校验,它生成多项式G(x)=X^16+X^12+X^5+1

  • 信息帧用于信息发送,信息(Info)部分存放高层协议报文,N(S)表示所发送帧的编号, N(R)表示希望收到的下一帧编号。
  • 监督帧用于监视和控制数据链路,完成信息帧的接收确认、重新请求、暂停发送请求等功能,监督帧不具有信息字段。

  • 无编号帧用于数据链路的控制,用5个比特位(即M1、M2)的组合来表示不同功能的无编号帧。

HDLC协议工作过程

多点链路的建立和释放

复合站的链路建立和释放

PPP

点对点协议(Point-to-Point Protocol,PPP)是因特网上广泛使用的数据链路层协议,用于点对点的链路,所谓点对点链路是指一条链路直接连接两个结点,每端各有一个结点。PPP协议在RC1661中定义和描述。PPP能够控制数据链路的建立、配置和测试,PPP支持身份认证,PPP能够对网络层地址和数据进行协商。

PPP帧格式

标志字段表示帧的开始和结束,为了防止在帧的内部出现0111110,同样也要采取零比特填充的方法,在接收端再将多余的0去掉。

由于PPP协议用于点对点通信,不存在寻址的问题。所以地址字段的值固定为11111111.

控制字段采用HDLC的无编号帧格式,值固定为11000000,没有序列号和确认号,所以协议不提供数据传输的可靠性,同时也没有流量控制和差错控制的功能。

PPP帧内可以封装多个协议的数据包,每个协议都有一个编号,当封装某个协议的数据包时,协议字段就填写这个协议的编号。这样,接收方可以根据协议的编号将数据交给正确的协议去处理。

  • LCP协议完成数据链路的建立、配置、维护和终止
  • PAP和CHAP协议都可以用来完成用户的身份认证
  • IPCP协议用来协商网络层配置,为用户分配IP地址
  • IP协议用来发送和接收用户的数据
  • FCS是帧校验字段,PPP采用CRC校验,当CRC校验错误时,PPP就丢弃数据帧

LCP

数据链路层的建立、配置、维护和终止都是由链路控制协议(Link Control Protocol,LCP)来完成的。

编码字段占一个字节,用来说明LCP包类型。标识字段相当于LCP包的编号,用来匹配请求和应答的LCP包。长度字段给出LCP包的长度。LCP数据部分通常包含LCP协议的一些选项,如最大接受单元、所采用的认证协议等。在发送数据前,通信双方要建立链路,建立链路时无论哪一方都需要发送Config-request报文并携带每一端自己所希望协商的配置参数选项

LCP包类型和编码

认证协议

PPP中使用身份认证协议

  • 口令认证协议(Password Authentication Protocol,PAP)

PAP协议非常简单,用户向系统发送用户名和口令,系统验证用户名和口令,如果正确就接受连接,否则就拒绝连接。PAP直接发送用户名和口令,是不安全的。

PAP包类型和编码

PAP工作过程

  1. 用户首先向系统发送PAP包,编码字段置为1,代表Authenticate-request,数据部分存放用户名和口令。
  2. 系统对收到的用户名和口令进行验证,并向用户返回PAP包。如果用户名和口令正确,PAP包中的编码值置为2,表示Authenticate-ack,通过认证;否则编码的值置为3,表示Authenticate-nak ,拒绝用户接入。
  • 挑战握手协议(Challenge-Handshake Authentication Protocol,CHAP)

CHAP协议对PAP协议作了改进,不直接发送用户的密码,提高了安全性。

CHAP包类型和编码

CHAP工作过程

  1. 系统首先向用户发送一个CHAP包,包中编码字段值为1,表示Challenge,数据部分包含一个随机数,这个随机数称为查问值。
  2. 用户收到后,使用事先定义号的函数作用域查问值和自己的口令,生成一个值,将这个值和用户名放入CHAP包发给系统。在这个CHAP包中,编码字段值为2.表示Response。
  3. 系统收到用户的Response后,根据其中的用户名查到对应的口令,用一个函数对查到的口令和查问值进行运算。如果计算结果域用户Response包中的值相同,说明是合法用户,并且口令正确,那么就给用户发送CHAP包,编码值设为3,表示Success,通过认证;否则发送的CHAP包的编码值设为4,表示Failure,未通过认证。

网络控制协议

用户认证通过后,PPP使用网络控制协议(NCP)来建立两端网络层的连接,协商网络层的选项和传递网络层数据。NCP不是一个协议,而是一组谢谢,包括IPCP,IP,IPX等。互联网协议控制协议(Internet Protocol Control,IPCP)主要用来协商网络层选项,设置用户的IP地址,IPCP报文在PPP帧中封装。

编码字段有七个值,分别定义七种IPCP包

PPP协议的工作过程

拨号上网的例子来描述PPP协议的工作过程(采用PAP认证)

  1. 建立物理连接。用户家中的计算机通过调制解调器呼叫ISP(例如电信)的路由器,路由器的调制解调器给予应答,双方建立物理连接。
  2. 建立数据链路。进入数据链路创建阶段,此时用到的协议是LCP,用户首先向ISP发出PPP帧,帧中封装LCP配置请求包(Configure-request),协商数据链路选项(最大传输单元,所采用的认证协议等),JSP端如果接受选项,就给用户发送LCP配置确认包(Configure-ack)。数据链路创建完毕。
  3. 用户认证阶段。进入用户认证阶段,用户向JSP发出PAP协议的Authenticate-request,请求认证,如果通过,ISP回应Authenticate-ack。认证的方式是在建立数据链路阶段协商确定的。
  4. 进入网络层配置阶段,此时用到的协议是IPCP。用户向ISP发出IPCP协议的Configure-request,协商网络层参数,ISP如果接受选项,回应Configure-ack。用户分配到了IP地址,网络层配置完毕,用户接入因特网。
  5. 数据传输阶段,此时用到的协议是IP。用户将自己的数据封装在IP报文中,通过PPP链路发送出去,同时通过PPP链路接收因特网中的数据。
  6. 数据传输完毕,用户断开网络连接,用户端向JSP发送IPCP的Terminate-request,请求断开网络层连接;JSP端回应Terminate-ack,同意断开并收回IP地址。
  7. 断开数据链路。用户端向JSP发送LCP的Terminate-request,请求断开数据链路;ISP端回应Terminate-ack,链路断开。

总结


文章作者: HaiLin Zhou
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 HaiLin Zhou !
评论
 上一篇
运输层 运输层
运输层负责端到端的通信,既是七层模型中负责数据通信的最高层,又是面向网络通信的低三层和面向信息处理的最高三层之间的中间层。运输层位于网络层之上、会话层之下,它利用网络层子系统提供给它的服务去开发本层的功能,并实现本层对会话层的服务。
下一篇 
应用层 应用层
位于计算机网络体系结构的最上层,前面四层做的所有事情就是为了他服务,他也是设计和建立计算机网络的最终目的,通俗的讲,就是我们开发的应用软件,就处于这一层,
  目录