链路管理,主要解决数据链路的建立维持和释放:信息的传输,主要解决如帧格式,帧大小,针同步,帧顺序同步以及判断是数据信息还是控制信息;
留量与差错的控制:流量控制问题实际上就是收发速率的同步问题,差错控制问题就是确保数据准确的·递交给目标高层。异常情况处理:对在出现问题,要解决如何检测和处理问题。
链路管理,主要解决数据链路的建立维持和释放:信息的传输,主要解决如帧格式,帧大小,针同步,帧顺序同步以及判断是数据信息还是控制信息;
留量与差错的控制:流量控制问题实际上就是收发速率的同步问题,差错控制问题就是确保数据准确的·递交给目标高层。异常情况处理:对在出现问题,要解决如何检测和处理问题。
转载于:https://www.cnblogs.com/liangyongxiang/p/10865165.html
前言
在TCP/IP体系结构中,数据链路层的三大基本功能:封装成帧、透明传输、差错控制。
看起来,这其中并不包含流量控制。但实际上,进行差错控制的方法其实已经和流量控制相结合起来了。所以,一般情况下,不会经常把流量控制单独拿出来说明。但是,流量控制这其中的原理,还是比较重要的。
流量控制是什么意思呢?
在实际的通信过程中,每台主机或者说每个节点,它们的性能都是存在着差异的,它们处理数据的能力也是存在差异的。比如说,A主机要给B主机发送数据,A主机的数据处理能力高,而B主机可能比较落后,处理速度慢。那么,如果A主机按照自己发送数据的速度去给B主机发送的话,B主机处理的慢,来不及接受,肯定是承受不了的,这就会造成大量的数据到达了B主机,但是因为B主机处理不过来了,而被迫把数据丢弃掉。
那么,我们的流量控制的作用,就是为了控制着发送方的发送速率,避免因为发送速率过快,导致接收方来不及接收和处理数据而造成被迫丢弃数据的情况。简单来说,就是限制发送方的发送速率不能超过接收方的处理速率。
数据链路层的流量控制,通常有两个基本方法,一个是停止等待,一个是滑动窗口。
停止等待
停止等待是最简单的一种流量控制的方法,只有两个步骤:发送完一帧数据就停止,然后等待接收方的确认之后,再发送下一帧。
发送方每发送出去一个数据帧,就必须要等待接收方返回对这个的确认,才能继续发送后面的帧。如果等不到接收方的确认,那么发送方就要一直等下去,这样就能保证发送方的发送速率绝不会超过接收方处理速率。
这种停止等待的方法,有一个好处就是实现起来很简单。但是,它的线路利用率是非常低的,发出数据帧之后,必须要等着接收方确认,此时的链路是空闲的。在任何时刻,线路上都是只有一个帧在传送。
看一下停止等待的示意图:
滑动窗口
首先,我们要明确一下,什么是窗口。
其实不管是发送方,还是接收方,都要维持一个数据的缓冲区,发送方把要发送的所有数据帧都要先放在这个缓冲区里,所有数据帧现在缓冲区里排队,然后发送出去;接收方也是一样,把接受过来的数据帧先存放在自己的缓冲区里,然后一个一个把数据帧取出来再去处理。这个缓冲区就称为窗口。
发送方的缓冲区叫做发送窗口,接收方缓冲区就叫做接收窗口。窗口的大小是有限的,也就是说缓冲区的容量是有限的。
在上面的停止等待方式中,发送出去一个数据帧,必须要等待确认的到来,才能继续发送。在这一段等待的时间内,链路是空闲的。那么我们能不能想一个办法,利用等待的这一段空闲时间,发送缓冲区里后面的数据帧呢。
基于这种思想,提出了滑动窗口的流量控制方式。
现在我们来模拟一下这个过程,看看滑动窗口到底是怎么让窗口进行滑动的。
假设发送窗口的大小WT=6。发送方在开始发送数据帧之前,要先对所有的帧进行模n编号,理论上n可以取任何整数,只要n的值能适合实际应用就可以,为了能够说清楚整个过程我们这里假定n的值为8,也就是所有数据帧在发送前要进行模8的编号。所以,帧的编号就是:0、1、2、3、4、5、6、7、0、1、2、3……,从0开始数8个数字,也就是0到7,然后再从0开始。
先来上一个图,之后咱们一边看图一边说明原理:
我们看上图的a,现在从0~5这6个帧都已经在发送窗口中排好队了,落在发送窗口中的帧都可以直接发送,而不必等待确认。上图中的b,就是正在发送的样子,0、1、2号帧已经发送出去了,3、4、5号帧要准备马上发送。
等到6个帧全部发送出去了,这时候就不能再发送了,就必须要等待接收方的确认了,就是上图中c的样子。
那么要等到什么时候才能发送后面的帧呢?就是上图中d的样子,等到接收方对于0、1号两个帧的发来的确认之后,窗口再开始向前滑动,滑动2个位置。如果接收方发来3个帧的确认,那窗口就向前滑动3个位置,如果发来4个确认,就向前滑动4个位置……
现在,我们总结一下,发送方滑动窗口的左侧是已经发送出去并且已经得到确认的帧,滑动窗口右侧是暂时还不发送的帧。落在滑动窗口中的帧,有两种情况,一是已经发送出去还没有收到确认,二是目前还没发送出去,但是马上可以发送的帧。
可以发现,收发两方的窗口通过这样规律的不断向前滑动,可以控制着数据的发送速率,实现了流量控制。
在博客上看到很多关于PPP协议的总结,写的都很官方,感觉都是从书上面抄来的,我今天就加入自己的理解:
我们都知道,数据链路层是两个网络节点之间的通信,实际上局域网内的通信也属于数据链路层。因为并没有通过路由器进入另一个网络,所以不属于网络层。
PPP协议特点:
1、简单
PPP协议简单,只是进行帧的发送和检错,并不进行纠错、序号和流量控制,它并不提供可靠的数据服务。
2、封装成帧
PPP协议规定特殊的字符作为定界符,并将其加到一个帧的开始和结束,并在接收端检测定界符来判断一个帧的结束和开始。
3、透明性
PPP协议还必须保证数据传输的透明性。这就是说,如果数据中碰巧出现了和帧定界符一样的彼特组合时,就要采取有效的措施来解决这个问题。
4、多种网络层协议
PPP协议必须能够在同一条物理链路上同时支持多种网络层协议,不如IP和IPX等的运行。当点对点链路所连接的是局域网或者路由器时,PPP协议必须支持所在的链路所连接的局域网或路由器上运行的各种网络层协议。
5、多种类型链路
除了要支持多种网络层的协议外,PPP还必须能够在多种类型的链路上运行。例如,串行的或并行的,同步的或者异步的,低速的或高速的,电的或光的,交换的或非交换的点对点链路。
6、差错检验
PPP协议必须能够对接收端收到的帧进行检测,并立即丢掉有差错的帧。若在数据链路层不进行差错检测,那么已出现的差错的无用帧就还要在网络中继续传送,因而会白白浪费许多宝贵的网络资源。
7、检测连接状态
PPP协议必须有一种机制能够及时自动检测出链路是否处于正常的状态。当出现故障的链路隔了一段时间后又重新恢复了正常工作时,就特别需要这种及时检测的功能。
8、最大传送单元
PPP协议必须对每一种类型的点对点链路设置最大的传送单元MTU的标准默认值。这样做的目的是为了促进各种实现之间的互操作性。如果高层协议发送的分组过长并超过了MTU的数值,PPP协议就要丢弃这样的帧,并且返回错误。需要强调的是,MTU是数据链路层的帧可以载荷的数据部分的最大长度,而不是帧的总长度。
9、网络层地址协商
PPP协议必须提供一种机制是通信的两个网络层的实体通过协商知道能够配置彼此的网络层地址。协商的算法应尽可能的简单,并且能够在所有的情况下得出协商的结果。这对拨号连接的链路特别的重要,因为仅仅在链路层建立了连接而并不知道对方网络层地址时,还不能保证网络层能够传递分组。
10、数据压缩协商
PPP协议必须提供一种方法来协商使用数据压缩的算法。但是PPP协议并不要求将数据压缩算法进行标准化。
PPP协议的组成
PPP协议的组成由三部分组成:
(1)一个将IP数据报封装到串行链路的方法。PPP协议既支持异步链路(无奇偶的8比特数据),也支持面向比特的同步链路。IP数据报在PPP帧中就是其信息部分,这个信息部分的长度受最大传送单元MTU的限制。(这一部分就是将网络层来的IP数据报,加上首部和尾部,在链路间传输)
(2)一个用来建立、配置和测试数据链路连接的链路控制协议LCP(Link Control Protocol),通信的双发可以协商一些选项。(建立物理链路,只有在建立物理链路的前提下,才能进行相应的配置)
(3)一套网络控制协议NCP,其中每一个协议支持不同的网络层协议(配置网络IP地址,之后便可以进行正常的通信了)
1、PPP协议的帧的格式
字段的意义
PPP帧的格式如图所示,PPP帧的首部和尾部分别有四个字段和两个字段。
首部的第一个字段和尾部的最后一个字段是标志字段F,规定为0x7E,标志字段表示一个帧的开始和结束,标志字段就是帧的定界符。连续两帧之间只需要一个标志字段。(我的理解就是如果我要发送两个连续的帧的话,我发送的第二个帧的尾部定界符是第二个帧的首部定界符)如果出现两个连续的标志字段,那么就表示这个帧是个空的帧,应当丢弃。首部中的地址字段A规定为0xFF,控制字段为0x03(不知道多加这两个字节有什么意义,完全没必要啊,不知道为什么出现这种情况)
PPP首部的第四个字段是2个字节的协议字段,当协议字段为0x0021时,PPP帧的信息字段就是IP数据报,当为0xC021时,则信息字段是PPP链路控制协议LCP的数据,而0x8021表示这个网络层的控制数据。(PPP协议的三个功能,后面的信息字段代表什么类型的信息,这个字段就填写什么,实际上,这种工作模式在单片机里面很常见)
信息字段的长度是可变的,但是不超过1500字节。
尾部的第一个字段是二字节,是使用CRC的帧检验序列FCS。
2.字节填充
当信息字段中出现和标志字段一样的比特(0x7E)组合时,即必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中。
当PPP使用异步传输时,它把转义符定义为0x7D,并使用字节填充,RFC1662规定的的填充方法:
(1)把信息字段中出现的么一个0x7E字节转变为2字节序列(0x7D,0x5E)。
(2)若信息中出现一个0x7D的字节,则把它转化为0x7D,0x5D
(3)若信息中出现了ASCII码中的控制字符,即数值小于0x20的字符,则在该字符前面要加入一个0x7D字节,同时将该字符的编码加以改变。例如,出现0x03,在控制字符中是传输结束ETX,需要将它转变为2字节序列0x7D,0x31
由于在发送端进行了字节的填充,因此在链路上传送的信息字节数就超过了原来的信息字节数,在接收端收到的数据后再进行与发送端字节填充相反的变换,就可以正确的恢复原来的信息了。
零比特填充
PPP协议用在SONET/SDH链路时,是使用同步传输(一连串的比特连续传送)而不是异步传输。在这种情况下,PPP协议采用零比特填充方法来实现透明传输。
零比特填充的具体做法是:在发送端,先扫描整个信息字段,通常使用硬件来实现,但也可应软件来实现,软件实现相对来说较慢些。只要发现有5个连续的1,就立即填充一个0,经过这种零比特填充后,就保证在信息字段中不会出现6个连续的1。接收端在收到一个帧时,先找到标志字段F以确定一帧的边界,接着再用硬件对其中的比特流进行扫描,每当发现五个连续的1时,就把这五个连续的1后面的0删除,以还原原来的信息比特流。这样就保证了透明传输,在所传送的数据比特流中可以传送任意组合的比特流,而不会引起对真边界错误判断。
以上两种填充都是为了保证PPP协议的透明性
4、PPP协议的工作状态
当用户PC机拨号接入ISP后,就建立了一条从用户PC机到ISP的物理连接,这时,用户PC机向ISP发送一序列的LCP分组,封装成PPP帧,以便建立LCP连接。这些分组及其响应选择了将要使用的一些PPP参数。接着还要进行网络层配置,NCP给新接入的用户PC机分配了一个临时的IP地址,这样,用户PC机就称为了因特网上的一个有IP地址的主机了。当用户通信完毕后,NCP释放网络层的连接,回收原来分配出去的IP地址,接着,LCP释放数据链路层连接,最后释放的是物理层的连接。
当用户通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址,接着LCP释放数据链路层连接,最后释放的物理层的连接。
PPP链路的起始和终止状态都是链路静止状态,这种状态下,用户PC机和ISP的路由器之间并不存在物理层的连接。
当用户的PC机通过调制解调器呼叫路由器时,路由器就能够检测到调制解调器发出的载波信号。在双方建立了物理层连接后,PPP就进入了链路建立的状态,其目的是建立链路层的LCP连接。
这时LCP开始协商一些配置选项,即对发送LCP的配置请求帧。这是个PPP帧,其协议字段置为LCP对应的代码,而信息字段包含特定的配置请求。链路的另一端可以发送以下的相应:
1.配置确认帧-所有选项都接收
2.配置否认帧-所有选项都理解但是不能接收。
3.配置拒绝帧-选项有的无法识别或不能接受,需要协商。
LCP配置选项包括链路上的最大帧长,所使用的鉴别协议的规约,以及不适用PPP帧中的地址和控制字段。协商结束后双方就建立了LCP链路,接着进入“鉴别“状态,在这一状态下,只允许传送LCP分组、鉴别协议的分组以及检测链路质量的分组。若使用口令鉴别协议,则需要发起通信的一方发送身份标识符和口令。系统允许用户重试多次。如果需要更好的安全性,则可使用复杂的口令握手鉴别协议,若身份鉴别失败,则转到链路终止状态,若鉴别成功,则进入到网络层协议状态。
在网络层协议状态,PPP链路的两端的网络控制协议NCP根据网络层的不同协议互相交换网络层特定的网络控制分组。这个步骤很重要,因为现在的路由器都能够同时支持多种的网络层协议。总之,PPP协议的两端可以运行不同的网络层协议,但仍然可以使用同一个PPP协议进行通信。如果在PPP链路上运行的是IP协议,则对PPP链路的每一段配置IP协议模块,IPCP分组也封装成PPP帧在PPP链路上传送。在低速链路上运行时,双方还可以协商使用压缩的TCP和IP首部,以减少在链路上发送的比特数。当网络层配置完毕后,链路就进入可进行数据通信的链路打开状态。链路的两个PPP端点可以彼此向对方发送分组。两个PPP端点还可以发送会送请求LCP分组和回送回答LCP分组,以检查链路的状态。数据传输结束后,可以由链路的一段发送终止请求LCP分组请求终止链路连接,在接收到对方发送来的终止确认LCP分组后,就转到链路终止状态。如果链路出现故障,则也会从链路打开到链路终止状态。当调制解调器的载波结束后,则回到链路静止状态。
其实以上过程看起来很复杂,但是如果和我们的生活联系起来,就会变得很简单,我们大家都有上网的经历,首先你要在你的电脑上插上网线,然后打开电脑上的登录软件,输入账号和密码,点击连接,等待连接。。。
当你点击了连接之后,实际上就是物理层建立连接的过程,首先电脑会确定你的网线是不是连接好的,物理连接没有问题,进行下一步
电脑开始向ISP发送LCP,ISP是否接受请求,并且验证你的身份,身份正确,接受你的请求,进入下一步
网络层根据实际情况,配置电脑IP地址,在Windows下,你也可以通过设置,来自己设置电脑的IP地址,不接受网络层的随机分配,而这些都是通过发送NCP来实现的
转载于:https://www.cnblogs.com/PIRATE-JFZHOU/p/7894671.html
第三章 数据链路层
数据链路层的功能
数据链路层在物理层的基础上向网络层提供服务,其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成无差错的数据链路,使之对网络层表现为一条无差错的链路。其详细功能如下
数据链路层之所以要把比特组合封装成帧传输,是为了在出错时只重发出错的帧,而不必重发全部数据,从而提高效率。封装成帧主要解决帧定界、帧同步、透明传输等问题。
封装成帧时既要添加首部也要添加尾部,这是为了使接收方能够从一串比特流中正确划分出帧。相反,网络层的分组是放在帧的数据部分,所以网络层的分组并不需要添加尾部来定界。
封装成帧主要有以下方法,目前较常用的组帧方法是比特填充法和违规编码法。
字符计数法是指在帧头部使用一个计数字段来表明帧内字符数。目的结点在收到字节计数值是,就知道后面跟随的字节数,从而可以确定帧结束的位置。
字符计数法最大的问题在于如果计数字段出错,就失去了帧边界划分的依据,那么接收方就无法划分出帧。
字符填充法使用一些特定的字符来定界一帧的开始(DLE STX)与结束(DTE ETX)。为了使数据部分出现的特殊字符不被误判为帧的首尾定界符,需要在特殊字符前填充一个转义字符,以实现透明传输。
零比特填充法允许数据帧数据以任意格式呈现,且使用01111110
标志一帧的开始与结束。为了实现透明传输,零比特填充会对数据部分进行0比特填充,即遇到5个连续的1时,自动在其后插入一个0。当接收方收到数据后,每遇到5个连续的1,就删去其后的1个0以恢复数据。
违规编码是不用来对比特编码的编码。因此违规编码可以用来标志帧的起始与结束。
差错控制主要采用两种方法,仅发现错误的检错编码,发现和纠正错误的纠错编码。
最常见的纠错编码是海明码。
流量控制的目的是为了限制链路上的帧的发送速率,以便使接收方有足够的缓冲空间来接收每个帧。流量控制的基本方法使由接收方控制发送方发送数据的速率。常见的方法有两种:停止-等待协议和滑动窗口协议。
发送方每发送一帧,都要收到接收方的确认信息后才可以发送下一帧;接收方每接收一帧后,都要反馈一个应答信号,表示可以接收下一帧。
在任意时刻,发送方都维持一组连续的允许发送的帧的序号,称为发送窗口;同时接收方也维持一组连续的允许接收帧的序号,称为接收窗口。发送端每收到一个确认帧,发送窗口就向前滑动一个帧的位置,未收到确认帧时发送窗口不可以移动,而是停止发送,等待接收方的确认信息。接收端收到数据帧后,将窗口向前移动一个位置,并发回确认帧,若收到的确认帧在窗口之外,则一律丢弃。
数据链路层的可靠传输通常使用确认和超时重传两种机制来完成。确认是一种控制帧,其使得接收方可以让发送方知道哪些数据帧已经被接收。超时重传是指发送方在发送数据帧后便启动超时计时器,在一定时间内如果没有得到发送的数据帧的确认帧,那么就重新发送该数据帧,直到发送成功为止。
自动重传请求通过接收方请求发送方重传出错的数据帧来恢复出错的帧。传统的自动重传请求有三种类型,停止-等待协议、GoBackN协议,和选择性重传协议。
停止等待协议也可以看作是发送窗口和接收窗口为1的滑动窗口协议。在该协议中,其主要出现两种错误:数据帧丢失或出错、确认帧丢失。
数据帧丢失或出错会使接收方不发送确认帧,从而引起发送方超时重传。
确认帧丢失时,发送方也会发生超时重传。但是此时接收窗口已经滑动,为了不发生数据帧序号重叠的情况,数据帧的需要至少要使用1位来表示,即有两个序号。
在后退N协议中,发送窗口的大小大于1,这就使得在发送窗口在未收到第一个数据帧的确认帧的前提下可以发送多个数据帧。当发送方接收到接收方的确认帧后发送窗口才可以滑动。接收方的确认帧通常表现为ack=n的类型,其含义是序号n以及n之前的数据帧已经收到。因此,接收方可以不用对每个数据帧都进行确认,而是可以延迟确认。
接收窗口的大小依然是1,这就导致了接收方只能按序接收数据帧。若发送方发送了n个数据帧,但是第一个数据帧丢失,引起超时重传,由于接收窗口的大小是1,这就导致了这n个数据帧都会被重传,即GoBackN。
若采用n比特对数据帧进行编号,则发送窗口的大小需满足
为了提高后退N协议的信道利用率,即不重传正确到达接收方的数据帧,选择重传协议加大了接收窗口,以便接收方接收哪些错序到达的数据帧,等待所缺序号的数据帧收到后在一并提交到主机。
每个发送缓冲区对应一个计时器,当计时器超时时,缓冲区的帧就会重传。此外,当接收方怀疑数据帧出错时,接收方可以向发送方发送NAK帧,要求发送方重传NAK所指明的帧。
若采用n比特对数据帧进行编号,且发送窗口的大小是,接收窗口的大小是,则需满足的条件是
注意到接收方不会收到大于发送窗口的数据帧,因此接收窗口和发送窗口的大小需满足
设发送周期是从开始发送数据到接收到第一个确认帧位置,称为一个发送周期。假设在发送周期内,发送方发送的数据是比特,发送方发送的传输速率是,则信道利用率的计算公式如下
信道吞吐率计算公式为
介质访问控制层是数据链路层的一个子层,Media Access Control,简称MAC。 其主要任务是为使用介质的每个结点隔离来自同一信道上其他结点所传送的信号,以协调活动结点的传输。常用的介质访问控制方法有信道划分介质访问控制、随机访问介质访问控制和轮询介质访问控制。信道划分介质访问控制属于静态方法,后两者属于动态方法。
信道划分介质访问控制将使用介质的每个设备与来自同一信道的其他设备的通信隔离开来,把时域和频域资源合理地分配给网络上的每个设备。
信道划分的实质就是通过分时、分频和分码等方法,将原来的一条广播信道划分为逻辑上互不干扰的子信道,信道的带宽被子信道共享。信道划分实际上是把广播信道转变为点对点信道。
信道划分主要分为如下几种类型。
频分多路复用是一种将多路基带信号调制到不同频率的载波上,再叠加形成一个复合信号的多路复用技术。物理信道的带宽被分割成若干与传输单个信号带宽相同的子信道,每个子信道传输一种信号。
频分多路复用的优点在于充分利用了传输介质的带宽,系统效率较高;由于技术比较成熟,实现也比较容易。
时分多路复用是将一条物理信道按时间分成若干时间片,轮流地分配给多个信号使用。每个时间片由复用的一个信号占用,利用时间的交叉再一个时间段内发送多个信号。
由于计算机发送数据的突发性,一个用户对已经分配到的子信道利用率一般不高。于是产生了统计时分复用(STDM)。STDM采用STDM帧,其不固定分配时隙,而是按需动态地分配时隙,当终端有数据需要传输时才会被分配到时间片。
波分多路复用实际上是光的频分多路复用。
码分多路复用是采用不同编码来区分各路原始信号的一种复用方式,它既共享频率,也共享时间。发送方的数据混合在一起发送,接收方通过码片向量来将发送方发送的信号恢复出来。
随机访问介质访问控制的核心思想是:胜利者通过争用获得信道,从而获得信息的发送权。共享信道的各个结点既不共享时间,也不共享空间。所以随机访问控制是一种将广播信道转化为点对点信道的一种方式。
ALOHA协议有两种,纯ALOHA协议和时隙ALOHA协议。
CSMA协议是在ALOHA协议的基础上添加了载波侦听装置,主要有三种类型。
载波侦听多路访问/碰撞检测是CSMA的改进方案,适用于总线形网络或半双工网络。其工作过程可概括为“先听后发,边听边发。冲突停发,随机重发”。随机重发的意思是随机等待一段时间后再进行发送。
CSMA/CD采用二进制指数退避算法来解决发生冲突后的随机重发问题。
为了确保发送站在发送数据的同时能检测到可能存在的冲突,需要在发送完帧之前就能收到因碰撞而返回数据,发送时间至少是2倍的总线传播时延。因此,发送的最短帧计算如下
当接收方接收到小于最短帧长的数据时,则判定为无效帧,丢弃之。特别地,当发送方需要发送小于最短帧长的数据时,需要加入一些填充字段以补齐最短帧长。
CSMA/CA是应用于无线网的介质访问控制协议。CA是碰撞避免,即尽量降低碰撞发生的概率。
在轮询访问中,用户不能随机地发送数据,而是要通过一个集中控制地监控站,以循环地方式轮询每个结点,再决定信道的分配。当某个结点获得使用信道的”资格“时,其他结点不能使用信道。典型的轮询访问控制协议是令牌传递协议。
轮询访问控制适合于负载很高的广播信道。