毕业设计(论文)基于数据链路层停等协议的实现.doc
摘要数据通信是20世纪50年代随着计算机技术和通信技术的迅速发展,以及两者之间的相互渗透与结合而兴起的一种新的通信方式,它是计算机和通信相结合的产物。随着计算机技术的广泛普及与计算机远程信息处理应用的发展,数据通信应运而生,它实现了计算机与计算机之间,计算机与终端之间的传递。由于不同业务需求的变化及通信技术的发展使得数据通信经过了不同的发展历程。数据链路层作为网络通信的基础,它所涉及到的数据通信技术是建立计算机网络的重要基础。基于实现数据链层的差错控制和流量控制,产生了一系列的协议。停等协议是数据链路层最基本的链路层协议但为克服信道噪声引起的帧传送错误,可在数据链路层采用面向连接的协议,以保证向上层用户提供可靠交付服务。其中采用停止等待ARQ协议是最简单的,它适用于许多特定场合。协议通过在收发双方之间对每帧的校验确认和出错重传机制,实现数据的可靠交付。协议通过在收发双方之间对每帧的校验确认和出错重传机制,实现数据的可靠交付。结果表明:传输可靠性HDLC中所有的帧(包括响应帧)都有FCS,在BSC的监控报文中只有字符校验能力而无块校验能力。HDLC中的帧按窗口序号顺序编号,BSC的数据块不编号。HDLC的传输可靠性比BSC高。关键词:数据链路层;停等协议;数据通信;帧AbstractData communication is the 1950s along with the computer technology and communicati on technology, and the rapid development of the mutual infiltration and between the rise of c ombining a new communication mode, it is combined with the computer and communication of the product. Along with the computer technology with the popularization of computer rem ote information processing applications development, data communication arises at the histor ic moment, it achieved between the computer and the computer, the computer and the termina ls of transfer between. Due to the different business demand changes and communication tech nology development allows data communication through the different development process. T he data link layer as network communication foundation, it involved in data communication te chnology is an important basis of setting up a computer network. Based on the data realization chain layer error-controlling and flow control, produced a series of agreements.Stop data link layer such agreement is the most fundamental link layer protocol but to ov ercome channel noise transmission error caused, can be in the frame of the data link layer usin g connectionless protocol, in order to assure the upper provide reliable delivery service. Use a mong them to stop waiting ARQ agreement is the most simple, it is used in many occasions. Agreement between the two sides in transceiver to through the confirmation and each frame c alibration error retransmission mechanism, realize the data reliable delivery. Agreement betw een the two sides in transceiver to through the confirmation and each frame calibration error r etransmission mechanism, realize the data reliable delivery.The results show that all the reliability in HDLC transmission frames (including response frame) have FCS, the monitoring of the BSC message only characters check-up ability withou t block check-up ability. According to the frame window in HDLC serial number sequence N umbers, BSC data block not Numbers. In HDLC transmission reliability high than BSC.Key words:Data link layer,Stop etc agreement,Data communication,frame目 录摘要IAbstractII1.绪论11.1编程模拟实现数据链路层协议中的停等协议的背景与意义11.2编程模拟实现数据链路层协议中的停等协议研究安排11.3编程模拟实现数据链路层协议中的停等协议的研究内容与目标22.数据链路层32.1数据链路层基础32.1.1数据链路层协议和设备42.1.2数据链路层的分层结构及各自作用42.2数据链路层的功能52.2.1帧同步功能62.2.2差错控制92.2.3流量控制功能102.2.4链路管理及其他功能102.3数据链路层协议113.数据链路层停等协议123.1停止等待协议123.2停止等待协议实例BSC133.3简化的停止等待协议154.数据链路层停等协议的原理及编程模拟实现174.1停止等待协议的算法17结论20致谢22参 考 文 献23附录A 程序源代码241. 绪论1.1 编程模拟实现数据链路层协议中的停等协议的背景与意义停止等待协议是工作在数据链路层,一种具有基本流量控制和差错检测校验的基本协议。是当今网络中常用的具有流量控制功能的数据链路层协议的基础,大部分的数据链路层协议,如ARQ,HDLC及PPP等协议都是在停等协议的基础上发展起来。停止等待协议是数据链路层的几个协议中最简单的协议,是数据链路层各种协议的基础。是基于winsock编程,在VC+6.0的MFC界面下和控制台下实现的。它采用客户机/服务器(C/S)模型,即发送数据的一端为客户端,接收数据的一端为服务器端。停止等待协议就是通过双方的收发数据而达到相互通信的目的。 当收方收到一个正确的数据帧后,便会向发方发送一个确认帧ACK,表示发送的数据正确接收。当发方收到确认帧后才能发送一个新的数据帧,这样就实现了接收方对发送方的流量控制。由于通信线路质量各方面的影响,数据帧从发送方到接收方传输的过程中可能会出现差错。为了保证数据的正确性和完整性,接收方在收到数据后,会用一定的方法对接收到的数据进行差错检验,所以接收方很容易检测出收到的数据帧是否出现差错。当接收方发现收到的数据出现差错时,就会向发送方发送一个否认帧NAK,表示对方发送的数据错误。发送方会根据接收方发来的信息做出相应的操作。采用这样的有效的检错机制,数据链路层可以对上面的网络层提供了可靠的传输的服务。也保证传输工作正常且有效的进行。1.2 编程模拟实现数据链路层协议中的停等协议研究安排为了合理安排本课题设计的时间和内容,现将前期工作过程简单安排如下:论文的选题,待导师确认后,搜集资料,可通过社会调查、大量阅读、查阅文献资料等;确立论点、选定材料;准备撰写初稿。对整个论文的安排:第一章绪论对初步论题背景的概述;第二章对数据链路层的介绍;第三章对停等协议的工作原理的介绍;第四章编程实现停等协议;结论以及文献资料。1.3 编程模拟实现数据链路层协议中的停等协议的研究内容与目标本研究的主要内容是数据帧的传输,根据停止等待协议的算法描述,选择自己熟悉的语言工具给予实现。按照数据帧传输实验初级层次,一个站点充当发送方,一个站点充当接收方。也可以采用模拟方式,用两个例程分别实现发送和接收。使用一个公共区代替传输链路,发送例程从发送缓存取出一数据帧送公共区,并等待来自接收例程的确认帧;接收例程从公共区取出数据,再根据是否正确发送确认帧或否认帧到公共区。如果通过创建fork进程独立运行发送和接收两个子进程,效果更佳。数据帧和确认帧基于不考虑捎带确认的简单格式。研究前提是学生需要具有相关的数学背景知识,熟悉基本的程序设计方法和技巧,以及对串行端口编程或者网络编程有所了解。已经学习了网络数据链路层及相关数据通信知识,尤其是停止等待流量与差错控制的协议。本设计主要是通过停等协议的工作机制与原理,达到实现停等协议算法的目的,并在此过程中通过对数据链路层的相关知识的剖析,了解数据链路层的协议,数据链路层的基本功能,达到深入理解停止等待协议的主要特点;深入理解停止等待协议的工作过程;进一步掌握串行口编程的方法。2. 数据链路层数据链路层在OSI参考模型中的位置与物理层一样,同样是属于基础的低层,是网络通信的基础。不过这里的数据链路与物理层的物理线路是有着本质区别的,物理线路仅是一条提供信号通过的路径,包括通信双方网卡接口之间的线路,是静态的;而这里的数据链路则是指包括了数据和通信规程的网络连接路径,是不断动态变化的。从路径上来说,它除了物理线路这一段外,还包括通信双方的计算机。 数据链路层是OSI参考模型中非常重要的一层,在局域网和广域网中,与数据链路层相关的协议非常多,如局域网中的IEEE 802.1 (基本局域网问题)、IEEE 802.1D(生成树标准)、IEEE 802.2(LLC子层)、IEEE 802.3(以太网标准)、IEEE 802.4(令牌总线网)、IEEE 802.5(令牌环网)、IEEE 802.11a/b/g等。2.1 数据链路层基础链路,是指一条无源的点到点的物理线路段,且中间没有任何其它的交换结点。数据链路,指的是除了具备一条物理线路外,还必须有一些必要的规程控制这些数据的传输。当需要在一条线路上传送数据时,除了必须有一条物理线路外,还必须有一些必要的规程(procedure)来控制这些数据的传输。把实现相关规程的硬件和软件加到链路上,就构成了数据链路。数据链路就象一条数字管道,可以在它上面进行数据通信。 数据链路层(Data Link Layer,DLL)是OSI (Open System Interconnection ,开放系统互联)七层参考模型的第二层,属于低三层中的中间一层。数据链路层是介于物理层和网络层之间的功能层次,其基本功能是将物理层提供的传输原始比特流的物理连接改造成逻辑上无差错的数据传输链路,以向网络层提供透明的可靠的数据传输服务,包括:成帧、差错控制和流量控制等。数据链路可以粗略地理解为数据通道。物理层要为终端设备间的数据通信提供传输媒体及连接。媒体是长期的,连接是有生存期的。在连接生存期内,收发两端可以进行一次或多次数据通信。数据链路层将本质上不可靠的传输媒体变成可靠的传输通路提供给网络层,每次通信都要经过建立通信联络和拆除通信联络两个过程,这种建立起来的数据收发关系就叫做数据链路。而在物理媒体上传输的数据难免受到各种不可靠因素的影响而产生差错,为了弥补物理层上的不足,为上层提供无差错的数据传输,就要能对数据进行检错和纠错。数据链路的建立、拆除,对数据的检错、纠错是数据链路层的基本任务。它的主要作用是用来建立、管理和维护网络通信中的数据链,为数据通信提供可靠的通信链路。2.1.1数据链路层协议和设备数据链路层协议是为收发对等实体间保持一致而制定的,也为了顺利完成对网络层的服务。数据链路层协议分为“面向字符”和“面向比特”两类。(1)面向字符的链路层协议 ISO的IS17471975:称为“数据通信系统的基本型控制规程”,利用10个控制字符完成链路的建立、拆除及数据交换。对帧的收发情况及差错恢复也是靠这些字符来完成的。如:基本型传输控制规程及其扩充部分(BM和XBM)协议;IBM的二进制同步通信规程(BSC);DEC的数字数据通信报文协议(DDCMP);PPP(点对点协议)。(2)面向比特的链路层协议 IBM的SNA网络使用的数据链路协议SDLC(Synchronous Data Link Control,同步数据链路控制协议);ANSI修改SDLC协议后,提出的ADCCP(Advanced Data Communication Control Procedure,高级数据通信控制规程);ISO修改SDLC协议后,提出的HDLC(High-level Data Link Control,高级数据链路控制);CITT修改HDLC协议后,提出的LAP(Link Access Procedure,链路访问规程)作为X.25网络接口标准的一部分,后来改为LAPB(链路访问过程平衡);ISO33091984:称为“HDLC帧结构”;I SO43371984:称为“HDLC规程要素”;ISO78091984:称为“HDLC 规程类型汇编”; ISO7776:称为“DTE数据链路层规程”,与CCITT X.25 LAPB相兼容;ISO1155、ISO1177、ISO2626、ISO2629等标准的配合使用可形成多种链路控制和数据传输方式。 独立的链路设备中最常见的当属网卡,网桥也是链路产品。集线器MODEM的某些功能有人认为属于链路层,对此还有些争议。除此之外,所有的交换机都需要工作在数据链路层,但仅工作在数据链路层的仅是二层交换机。其他像三层交换机、四层交换机和七层交换机虽然可对应工作在OSI的三层、四层和七层,但二层功能仍是它们基本的功能。2.1.2数据链路层的分层结构及各自作用在常见的IEEE 802系列标准中,将数据链路层分为两个部分:(1)逻辑链接控制(Logical Link Control,LLC)子层;(2)媒体访问控制(Medium Access Control,MAC)子层。其中MAC子层是制定如何使用传输媒体的通信协议,如IEEE 802.3以太网标准的CSMA/CD协议中,MAC子层规定如何在总线型网络结构下使用传输媒体;IEEE 802.4令牌总线(Token-Bus)标准中,MAC子层规定了如何在总线的网络结构下利用讯标(Token)控制传输媒体的使用;IEEE 802.5令牌环(Token-Ring)标准中,MAC子层规定了如何在环状网络结构下利用讯标来控制传输媒体的使用;IEEE 802.11无线局域网标准中,MAC子层规定如何在无线局域网络的结构下控制传输媒体的使用。 LLC子层的主要工作是控制信号交换、数据流量控制(Data Flow Control),解释上层通信协议传来的命令并且产生响应,以及克服数据在传送的过程中所可能发生的种种问题(如数据发生错误,重复收到相同的数据,接收数据的顺序与传送的顺序不符等)。在LLC子层方面,IEEE 802系列标准中只制定了一种标准,各种不同的MAC都使用相同的LLC子层通信标准,使更高层的通信协议可不依赖局域网络的实际架构。 不同工作站的网络层通信协议可通过LLC子层来沟通。由于网络层上可能有许多种通信协议同时存在,而且每一种通信协议又可能同时与多个对象沟通,因此当LLC子层从MAC子层收到一个数据包时必须能够判断要送给网络层的哪一个通信协议。为了达到这种功能,LLC子层提供了所谓的“服务点”(Service Access Point,SAP)服务,通过它可以简化数据转送的处理过程。为了能够辨认出LLC子层通信协议间传送的数据属于谁,每一个LLC数据单元(LLC Data Unit)上都有“目的地服务点”(Destination Service Access Point, DSAP) 和“原始服务点”(Source Service Access Point,SSAP)。一对DSAP与SSAP即可形成通信连接。由SSAP送出来的数据经过LLC子层的传送之后便送给DSAP,反之亦然。因此DSAP与SSAP成为独立的联机通信,彼此间所传送的数据不会与其他联机通信的数据交换。当然在传送的过程中所有联机通信的数据都必须经由惟一的MAC管道来传送。2.2 数据链路层的功能数据链路层最基本的服务是将源计算机网络层传来的数据可靠地传输到相邻节点的目标计算机的网络层。为达到这一目的,数据链路层必须具备一系列相应的功能,主要有:如何将数据组合成数据块(在数据链路层中将这种数据块称为帧,帧是数据链路层的传送单位);如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使之与接收方相匹配;在两个网络实体之间提供数据链路通路的建立、维持和释放管理。这些功能主要包括:成帧差错控制流量控制链路管理2.2.1帧同步功能为了使接收方能够检查传送数据,就必须能从物理层所收到的比特流中明确区分一个数据帧的开始和结束位置,这就是帧同步问题。为了向网络层提供服务,数据链路层必须使用物理层提供的服务。而物理层是以比特流进行传输的,这种比特流并不保证在数据传输过程中没有错误,接收到的位数量可能少于、等于或者多于发送的位数量。而且它们还可能有不同的值,这时数据链路层为了能实现数据有效的差错控制,就采用了一种"帧"的数据块进行传输。而要采帧格式传输,就必须有相应的帧同步技术,这就是数据链路层的"成帧"(也称为"帧同步")功能。 采用帧传输方式的好处是:在发现有数据传送错误时,只需将有差错的帧再次传送,而不需要将全部数据的比特流进行重传,这就在传送效率上将大大提高。但同时也带来了两方面的问题:(1)如何识别帧的开始与结束;(2)在夹杂着重传的数据帧中,接收方在接收到重传的数据帧时是识别成新的数据帧,还是识别成重传帧呢?这就要靠数据链路层的各种"帧同步"技术来识别了。"帧同步"技术既可使接收方能从并不是完全有序的比特流中准确地区分出每一帧的开始和结束,同时还可识别重传帧。 帧同步主要有四种方法:1.字节计数法这种帧同步方法是一种面向字节的同步规程,是利用帧头部中的一个域来指定该帧中的字符数,以一个特殊字符表征一帧的起始,并以一个专门字段来标明帧内的字符数。同步原理:接收方可以通过对该特殊字符的识别从比特流中区分出帧的起始,并从专门字段中获知该帧中随后跟随的数据字符数,从而可确定出帧的终止位置。这种方法最大的问题在于如果标识帧大小的字段出错,即失去了帧边界划分的依据,将造成灾难性的后果。如第二帧中的计数字符由“5”变为“7”,则接收方就会失去帧同步的可能,从而不可能再找到下一帧正确的起始位置。由于第二帧的校验和出现了错误,所以接收方虽然知道该帧已经被损坏,但仍然无法知道下一帧正确的起始位置。在这种情况下,给发送方请示重传都无济于事,因为接收方根本不知道应该跳过多少个字符才能到达重传的开始处。2.使用字符填充的首尾定界法 该同步方法是用一些特定的字符来定界一帧的起始与终止,充分解决了错误发生之后重新同步的问题。 同步原理:在这种帧同步方式中,为了不使数据信息位中与特定字符相同的字符被误判为帧的首尾定界符,可以在这种数据帧的帧头填充一个转义控制字符(Data Link Es cape -Start of Text, DLE STX),在帧的结尾则以DLE ETX(Data Link Escape-End of Text)结束,以示区别,从而达到数据的透明性。若帧的数据中出现DLE字符,发送方则插入一个“DLE”字符,接收方会删除这个DLE字符。如现在要发送一个如图2-1(a)所示的字符帧,在帧中间有一个“DLE”字符数据,所以发送时会在其前面插入一个“DLE”字符,如图2-1(b)所示。在接收方接收到数据后会自己删除这个插入的“DLE”字符,结果仍得到原来的数据,但帧头和帧尾仍在,予以区别,如图2-1(c)所示。插入的”DLE”字符(a)(c)(b)BADLEADLEDLESTXSTXBDLEDLEETXABETXDLEDLEDLE图2-1 字符填充的首尾定界原理在以前这种同步方式中,起始和结束字符是不同的(如起始字为DLE,而结束字符是DLE ETX),但是近几年,绝大多数协议倾向于使用相同的字符来标识起始和结束位置。按这样的做法,在接收方丢失了同步,则只需搜索一下标志符就能找到当前帧的结束位置。两个连接的标志符代表了当前帧的结束和下一帧的开始。但这种同步方式也不是完美的,也会发生严重的问题。当标志符的位模式出现在数据中时,这时不同步问题就可能发生了,这种位模式往往会干扰正常的帧分界。解决这一问题的办法是在发送方的数据链路层传输的数据中,在与分界标志符位模式一样的字符中插入一个转义字符(如ESC)。接收方的数据链路层在将数据送给网络层前删除这种转义字符。因此,成帧用的标志字符与数据中出现的相同位模式字符就可以分开了,只要看它前面有没有转义字符即可。如果转义字符出现在数据中间,同样需要用转义字符来填充。因此任何单个转义字符一定是转义序列的一部分,而两个转义字节则代表数据中的自然出现的一个转义字符,具体参见图2-1。3.使用比特填充的首尾标志法 在字符分界法中存在一个大的不足,那就是它仅依靠8位模式。而事实上,并不是所有的字符编码都使用8位模式,如UNICODE编码就使用了16位编码方式。而且随着网络技术的发展,在成帧机制中内含字符码长度的缺点越来越明显,所以有必要开发一种新的同步技术,以便允许任意长度的字符编码方式。比特填充的首尾界定符法就是这样一种新型的同步方式。 "比特填充的首尾界定符法"是以一组特定的比特模式(如01111110)来标志一帧的起始与终止,它允许任意长度的位码,也允许任意每个字符有任意长度的位。它的工作原理是在每一帧的开始和结束位置都加上一个特殊的位模式,如01111110。当发送方的数据链路层传到数据中5个"1" (因为特定模式中是有5个连续"1")时,自动在输出位流中填充一个"0"。在接收方,当收到连续5个"1",并且后面位是"0"时,自动删除该"0"位。就好像字节填充过程对于双方计算机中的网络层是完全透明的一样。如要传输的数据帧为"0110111111011111001",采用比特填充后,在网络中传送时表示为"011111100110111 1101011111000101111110"。 上述结果是在原信息(0110111111011111001)的基础上两端各加一个特定模式来标示数据帧的起始与终止,另外在原信息中,有一段比特流与特定模式类似,为了与用于标识帧头和帧尾的特定模式字符区别,在有5个连续"1"的比特位后面加插入一个"0"(斜体"0")。而接收方在收到上述最终数据后进行发送方的逆操作,首先去掉两端的特定模式字符,然后在每收到连续5个"1"的比特位后自动删去其后所跟的"0",以此恢复原始信息,实现数据传输的透明性。 比特填充帧同步方式很容易由硬件来实现,性能优于字符填充方式。所有面向比特的同步控制协议采用统一的帧格式,不论是数据,还是单独的控制信息均以帧为单位传送,其典型代表是ISO的HDLC协议。在此仅说明在HDLC的帧格式中也采用比特填充的帧同步方式,在它的首尾均有标志字段(Flag,8位,即01111110),如图2-2所示。1byte2Variable11-21Flag Control FCSAddressInformationnnnnnFlag图2.2 HDLC协议帧格式4.违规编码法 该法在物理层采用特定的比特编码方法时采用。例如,曼彻斯特编码方法,是将数据比特“1”编码成“高低”电平对,将数据比特“0”编码成“低高”电平对。而“高高”电平对和“低低”电平对在数据比特中是违法的。可以借用这些违法编码序列来界定帧的起始与终止。局域网IEEE 802标准中就采用了这种方法。违法编码法不需要任何填充技术,便能实现数据的透明性,但它只适于采用冗余编码的特殊编码环境。由于字节计数法中Count字段的脆弱性(其值若有差错将导致灾难性后果)及字符填充实现上的复杂性和不兼容性,目前较普遍使用的帧同步法是比特填充法和违法编码法。2.2.2差错控制通信系统必须具备发现差错的能力,并采取措施纠正之,将差错的出现控制在所能允许的尽可能小的范围内,这就是差错控制功能。 在数据通信过程中可能会因物理链路性能和网络通信环境等因素,难免会出现一些传送错误,但为了确保数据通信的准确,又必须使得这些错误发生的几率尽可能低。这一功能也是在数据链路层实现的,就是它的"差错控制"功能。 在数字或数据通信系统中,通常利用抗干扰编码进行差错控制。一般分为4类:前向纠错(FEC)、反馈检测(ARQ)、混合纠错(HEC)和信息反馈(IRQ)。FEC方式是在信息码序列中,以特定结构加入足够的冗余位-称为"监督元"(或"校验元")。接收端解码器可以按照双方约定的这种特定的监督规则,自动识别出少量差错,并能予以纠正。FEC最适合于实时的高速数据传输的情况。 在非实时数据传输中,常用ARQ差错控制方式。解码器对接收码组逐一按编码规则检测其错误。如果无误,向发送端反馈"确认"ACK信息;如果有错,则反馈回ANK信息,以表示请求发送端重复发送刚刚发送过的这一信息。ARQ方式的优点在于编码冗余位较少,可以有较强的检错能力,同时编解码简单。由于检错与信道特征关系不大,在非实时通信中具有普遍应用价值。 HEC方式是上述两种方式的有机结合,即在纠错能力内,实行自动纠错;而当超出纠错能力的错误位数时,可以通过检测而发现错码,不论错码多少都可以利用ARQ方式进行纠错。 IRQ方式是一种全回执式最简单差错控制方式。在该检错方式中,接收端将收到的信码原样转发回发送端,并与原发送信码相比较,若发现错误,则发送端再进行重发。只适于低速非实时数据通信,是一种较原始的做法。2.2.3流量控制功能流量控制处理的是发送方发送能力大于接收方接收能力的问题。流量控制实际上是限制发送方的数据流量,使其发送速率不要超过接收方所能处理的范围。 在双方的数据通信中,如何控制数据通信的流量同样非常重要。它既可以确保数据通信的有序进行,还可避免通信过程中不会出现因为接收方来不及接收而造成的数据丢失。这就是数据链路层的"流量控制"功能。数据的发送与接收必须遵循一定的传送速率规则,可以使得接收方能及时地接收发送方发送的数据。并且当接收方来不及接收时,就必须及时控制发送方数据的发送速率,使两方面的速率基本匹配。网络接口层中的流量控制是对一条通信线路上的数据流量进行控制,只涉及一对发送节点和接受节点,因此属于数据链路层控制协议的问题。流量控制关键是协调发送速度与接受速度,使得接受节点来得及接受发送节点发送的数据帧。2.2.4链路管理及其他功能数据链路层的"链路管理"功能包括数据链路的建立、维持和释放三个主要方面。当网络中的两个节点要进行通信时,数据的发送方必须确知接收方是否已处在准备接收的状态。为此通信双方必须先要交换一些必要的信息,以建立一条基本的数据链路。在传输数据时要维持数据链路,而在通信完毕时要释放数据链路。 MAC寻址,这是数据链路层中的MAC子层主要功能。这里所说的"寻址"与下一章将要介绍的"IP地址寻址"是完全不一样的,因为此处所寻找的地址是计算机网卡的MAC地址,也称"物理地址"、"硬件地址",而不是IP地址。在以太网中,采用媒体访问控制(Media Access Control, MAC)地址进行寻址,MAC地址被烧入每个以太网网卡中。这在多点连接的情况下非常必需,因为在这种多点连接的网络通信中,必须保证每一帧都能准确地送到正确的地址,接收方也应当知道发送方是哪一个站。区分数据与控制信息,由于数据和控制信息都是在同一信道中传输,在许多情况下,数据和控制信息处于同一帧中,因此一定要有相应的措施使接收方能够将它们区分开来,以便向上传送仅是真正需要的数据信息。"透明传输"是指可以让无论是哪种比特组合的数据,都可以在数据链路上进行有效传输。这就需要在所传数据中的比特组合恰巧与某一个控制信息完全一样时,能采取相应的技术措施,使接收方不会将这样的数据误认为是某种控制信息。只有这样,才能保证数据链路层的传输是透明的。2.3 数据链路层协议计算机网络的数据链路层协议运行在相邻节点连接的两个设备之间, 实现在不可靠的通信线路上无差错的传输,它的主要功能有:(1)将数据组织成一定大小的数据块帧。以帧为单位发送、接收数据。(2)正确识别一帧和下一帧,即帧同步。(3)对发送的数据的速率必须控制, 以免由于发送速度太快, 接收方来不及接收而丢失帧,即流量控制。(4)接收端对数据帧检验,如果发现差错,必须重传,保证数据的正确性,即差错控制。(5)具有链路的建立、维持、释放等功能,即链路管理。数据链路层协议是计算机各层协议中通信控制功能最典型的协议, 在这一层上主要有两种协议,一是种停止等待协议,另一种为连续ARQ 协议。3. 数据链路层停等协议停等协议的基本思想是:发送方每发送完一个数据帧,都要等待接收方的确认帧到来后,再发送下一帧;接收方每接收到一个数据帧后,都要向发送方发送一个正确接收到数据帧的确认帧。如果数据帧没有错误,则按照上述步骤循环执行,直至数据帧发送完毕。一旦接收方发现数据帧出现错误,则返回一个数据帧出错的信息帧;发送方则重发出错的帧。3.1 停止等待协议发送数据包1接收正确认ACK发送数据包2重发数据包2发送数据包3接收负确认NAK接收正确认ACK接收正确认ACK接收数据包1正确发送正确认ACK接收数据包2错误发送负确认NAK接收数据包2正确发送正确认ACK接收数据包3正确发送正确认ACK发送方接收方发送数据包0接收正确认ACK1发送数据包1超时重传数据包1超时重传数据包1接收正确认ACK0接收数据包0正确发送正确认ACK1接收数据包1正确发送正确认ACK0接收数据包1正确(抛弃)发送正确认ACK0发送方接收方发送数据包0超时超时图3-1 停止等待协议的基本工作过程 图3-2 数据包的丢失和确认信息的丢失示所谓停止等待就是在发送方发完数据报后,需要等待接收方应答信息的到来。如果发送方接收到正确认信息ACK,那么说明接收方已经正确接收到上一数据包,发送方就可以发送下一数据包;如果发送方接收到负责确认信息NAK,说明接收方收到的数据包是错误的,发送方应该重发,如图3-1所示。为了保证数据传输的可靠性,实际的停等协议并不像上述的那么简单。在实际应用环境中,还应该考虑以下两种情况。(1)数据包丢失数据包在传输过程中丢失,接收方未收到任何数据,如图3-2所示。由于接收方不知道数据已经发送,因此它不可能给出正确认(ACK)信息或负确认信息(NAK)信息。为了解决这个问题,发送方需要在发送一个数据包后启动一个定时器。一旦在规定时间内没有收到接收方的任何信息,则认为数据包丢失,需要重发该数据包。如果重传一个数据包的次数达到一定值,则认为数据通信信道存在严重问题,数据传输失败。(2)确认信息丢失或出错接收方正确接收到数据包,但确认信息在传输过程中丢失或出错,如图3-2所示。这时发送方也不能确定接收方是否收到了数据包。这个问题的解决也是采用定时器的方法,在定时器溢出后重发数据包。但是为了保证接收到的数据不重复,需要给数据包编号。当接收方再次收到同样编号的数据包时,将该包丢弃,并认为上次发送的确认信息丢失或出错,需要重传该确认信息。对于停等协议,至少需要两个编号(通常为0和1)。第一个包的编号为0,第二个包的编号为1,第三个包的编号再为0如果接收方连续收到了相同编号的数据包,则发生了重复,需要将其丢弃。同时确认信息也需要进行编号,通常用ACK1表示收到编号为0的数据包,并准备接收编号为1的数据包。同样的,ACK0则表示下一个准备接收到的数据包的编号为0。 数据在传输的过程中,不可能保证100%的正确传输,而错误的数据帧对于接收方来说是没有什么意义的。为了避免收到错误的数据帧,接收方在收到数据帧后,就会采用一定的机制对收到的数据帧进行校验,当校验数据正确时,会向高层传送该帧,反之,则丢弃该帧,从而对上面的网络层提供了传输的服务。 3.2 停止等待协议实例BSCBSC是一种典型的面向字符型停止等待协议,它使用了ASCII码中的10个控制字符完成通信控制功能,并规定了数据报文、控制报文的格式以及协议的操作过程。由于规程简单、容易实现,比较适宜在中低速网络(如电话网)中使用。控制字符:BSC协议中使用的控制字符的符号、名称、ASCII编码及功能说明如表3-1所示。表3-1 BSC协议中使用的控制字符与功能符号名称ASCII编码功能说明SOH序始01H数据报文终中报头的开始STX文始02H数据报文中正文的结束ETX文终03H传输结束EOT送毕04H询问对方并请求对方予以响应ENQ询问05H接受方正确接受报文后的响应ACK正确认06H修改紧随其后的字符的语义NAK负确认15H接收方接收数据报文错误的响应DLE转义10H修改紧随其后的字符的语义SYN同步16H收发双方的字符同步ETB组终