下面就是小编给大家整理的逻辑链路控制协议,本文共7篇,希望您能喜欢!本文原稿由网友“好吃看得见”提供。
篇1:逻辑链路控制协议
逻辑链路控制协议
1、IEEE802.2是描述LAN协议中逻辑链路 LLC子层的功能、特性和协议,描述LLC子层对网络层、MAC子层及LLC子层本身管理功能的界面服务规范,
2、LLC子层界面服务规范IEEE802.2定义了三个界面服务规范:(1)网络层/LLC子层界面服务规范;(2)LLC子层/MAC子层界面服务规范;(3)LLC子层/LLC子层管理功能的界面服务规范。
3、网络层/LLC子层界面服务规范
提供两处服务方式
不确认无连接的服务:不确认无连接数据传输服务提供没有数据链路级连接的建立而网络层实体能交换链路服务数据单元LSDU手段。数据的传输方式可为点到点方式、多点式或广播式。这是一种数据报服务
面向连接的服务:提供了建立、使用、复位以及终止数据链路层连接的手段。这些连接是LSAP之间点到点式的连接,它还提供数据链路层的定序、流控和错误恢复,这是一处虚电路服务。
4、LLC子层/MAC子层界面服务规范
本规范说明了LLC子层对MAC子层的服务要求,以便本地LLC子层实体间对等层LLC子层实体交换LLC数据单元。
(1)服务原语是:MA-DATA.request 、MA-DATA.indication、MA-DATA.confirm
(2)LLC协议数据单元结构LLC PDU:
目的服务访问点地址字段DSAP,一个字节,其中七位实际地址,一位为地址型标志,用来标识DSAP地址为单个地址或组地址,
源服务访问点地址字段SSAP,一个字节,其中七位实际地址,一位为命令/响应标志位用来识别LLC PDU是命令或响应。
控制字段、信息字段。
5、LLC协议的型和类
LLC为服务访问点间的数据通信定义了两种操作:Ⅰ型操作,LLC间交换PDU不需要建立数据链路连接,这些PDU不被确认,也没有流量控制和差错恢复。
Ⅱ型操作,两个LLC间交换带信息的PDU之间,必须先建立数据链路连接,正常的.通信包括,从源LLC到目的LLC发送带有信息的PDU,它由相反方向上的PDU所确认。
LLC的类型:第1类型,LLC只支持Ⅰ型操作;第2类型,LLC既支持Ⅰ型操作,也支持Ⅱ型操作。
6、LLC协议的元素
控制字段的三种格式:带编号的信息帧传输、带编号的监视帧传输、无编号控制传输、无编号信息传输。
带编号的信息帧传输和带编号的监视帧传输只能用于Ⅱ型操作。
无编号控制传输和无编号信息传输可用于Ⅰ型或Ⅱ型操作,但不能同时用。
信息帧用来发送数据,监视帧用来作回答响应和流控。
篇2:动态路由协议链路状态
如果说距离矢量路由协议像是公路上的路标,那么链路状态路由协议就像是一张地图----它拥有整个网络的情况,链路状态路由协议又叫做:shortest path first 或者 distributed database 协议。常见的包括OSPF和IS-I S。
###距离矢量路由协议分享其知道的所有信息,但只对其邻居分享;链路状态路由协议只分享与其直连的连接,但会将此信息共享给路由区域内的所有路由器。距离矢量路由协议容易产生环路和无限循环包,所以采用水平分割、路由毒化、保持时间来避免此类事件发生;链路状态路由协议更容易避免此类情况。更重要的是,距离矢量路由协议是发布路由,如果一条重要链路有所更改,意味着发布许多条路由;链路状态路由协议在遇到链路更改时,仅仅发布链路更改通知,而不是传播所有相关路由。一句话,两者的区别是是否自己独立计算路由。
链路状态路由协议有以下特点:
每个路由器与其邻居建立邻接关系;
每个路由器发送link state advertisement (LSA),一个LSA从路由器的每个接口发出,表明链路,链路的状态,路由器接口到这个链路的metric和所有可能与这条链路相连的邻居。每个接收到LSA的邻居又将这些LSA转发给他们自己的邻居。
每个路由器将其收到的所有LSA存放在其database中。如果一切正常,所有路由器的数据库应该是相同的。
完成了的topological database 或者叫 link state database,描述了从某个路由器出发到各个网络的一棵树,然后形成路由表。
形成邻居关系,以hello包维持。
使用Router ID表明路由器在网络内的唯一身份。
链路状态泛洪 Link state flooding:
邻接关系建立以后,路由器开始发送LSA泛洪。每一个收到的LSA会直接从其他出口发出给邻居,使得链路状态路由协议收敛非常快。而距离矢量路由协议,对收到的update需要先自己处理,然后在定期发送,所以收敛很慢。在泛洪过程中,最重要的两个过程是sequencing和aging。
Sequence Numbers. 路由器在其发出的LSA中包含顺序号,当路由器收到包含相同路由的LSA时,它会检查顺序号的大小,如果大于其topological database内路由的顺序号,就以大的为准,如果收到的LSA顺序号小于等于database内顺序号,则丢弃。这样防止LSA的无限循环扩散。
sequence number space,分为linear sequence number space (IS-IS), circular sequence number 和 Lollipop-shaped sequence number space (前两者的结合),
Aging。当LSA生成时,路由器设定aging为零,LSA发布出去过后,每个路由器都增加age。
MaxAgeDiff。当路由器收到多个拥有相同sequence number不同的aging的同一LSA时,如果aging的差别不超过MaxAgeDiff,则路由器认为这些差别是正常网络延迟产生的,将保留原来的LSA;如果aging超过MaxAgeDiff,则路由器选用最新的LSA,并且将这个LSA分发出去。一个典型的MaxAgeDiff是15分钟(OSPF)。
Maximum age。LSA的age在link state database中是持续增加的,当增加到Maximum age时,此LSA的age设定成Maximum age并分发出去,然后从database内删除。OSPF的maximum age为1小时。
Link state refresh time。必须有一种机制使得LSA在到达Maximum age之前重设,否则所有LSA终究会被删除掉。当Link state refresh time到达时,路由器会分发出新的LSA给所有邻居,使得邻居重设Maximum age。OSPF设定为30分钟。
Link state database 链路状态数据库:
Link state database又叫topological database,用于存储LSA。
sequence number 和 age主要用于管理LSA的分发;路由器ID、与其相连的网段和邻居则是用于最短路径计算。
LSA主要包含两种类型的信息:Router link information 和 Stub network information。 路由链路信息描述了一个路由器的邻居(Router ID,Neighbor ID, cost), 其中cost 是到邻居的链路的cost;末端网络信息描述了一个路由器连接的末端网络(不与邻居相连的网络)(Router ID,Network ID, cost)。
SPF算法先计算出到各个路由器的最短路径,然后再将末端网络添加到这些路由器上。
cost是以路由器出口方向的接口cost为准。
Area 区域:
区域是一组路由器组成的内部网络,使用区域主要基于以下考虑:
跟距离矢量协议比较,路由器需要更大内存;
复杂的算法需要更多CPU处理时间;
传播LSA需要更多带宽,特别是在不稳定网络里。
篇3:DTP(动态链路聚集协议)
DTP
DTP(dynamic trunking protocol)动态链路聚集协议
DTP是 Cisco私有点到点协议,用来动态协商端口类型为Access或者Trunk,要完成自动协商,2端口必须在同一个VTPdomain中。每30s发送一次DTP的frame. 该协议仅在交换机间协商。
端口DTP模式
wKiom1XZM92yY1_TAAOWUGlng3A983.jpg
配置DTP
Switch(config-if)#switchportmode ?
access Set trunking mode to ACCESS unconditionally
dynamic Settrunking mode to dynamically negotiate access or trunk mode
trunk Set trunking mode to TRUNKunconditionally
在动态模式下关闭协商
Switch(config-if)#switchport nonegotiate
Command rejected: Conflict between 'nonegotiate'and 'dynamic' status.
验证DTP
Switch#showinterface switchport
Name:Fa0/1
Switchport:Enabled
Administrative Mode: dynamic auto
OperationalMode: down
Administrative Trunking Encapsulation: dot1q
OperationalTrunking Encapsulation: native
Negotiationof Trunking: On
篇4:对邻近空间链路协议功能的研究
对邻近空间链路协议功能的研究
邻近空间链路协议是一项专门应用于邻近空间链路的`新型空间通信协议.为了能尽快地在国内实现该协议,丈中从以下几个方面对其进行了分析:邻近空问链路协议的功能层次模型、各层的功能.尤其对功能实现中的两个关键问题--MAC子层的持续行为程序和帧子层确定帧传输顺序的策略进行了深入的分析研究,并提出了相应的解决方案.
作 者:段小芳 安红章 DUAN Xiao-fang AN Hong-zhang 作者单位:现代通信国家重点实验室,四川,成都,610041 刊 名:通信技术 PKU英文刊名:COMMUNICATIONS TECHNOLOGY 年,卷(期): 42(1) 分类号:V557 关键词:邻近空间链路协议 持续行为 优先级策略篇5:PPP协议链路操作的软件实现网络知识
摘 要:PPP协议是广域网最常用的数据链路层协议之一,链路建立协商是PPP协议的重要组成部分,而 网络 协议的软件实现一直是计算机网络应用的一个重点,PPP协议的软件实现具有很大的应用价值。本文重点探讨LCP建立协商原理的软件实现,并给出了具体的实现方法
摘 要:PPP协议是广域网最常用的数据链路层协议之一,链路建立协商是PPP协议的重要组成部分。而网络协议的软件实现一直是计算机网络应用的一个重点,PPP协议的软件实现具有很大的应用价值。本文重点探讨LCP建立协商原理的软件实现,并给出了具体的实现方法和详细流程。
关键词:LCP;链路建立;有限状态机;PPP协议
1 PPP协议简介
PPP(Point-to-Point Protocol,点到点协议)是为在同等单元之间传输数据包这样的简单链路设计的链路层协议。这种链路提供全双工操作,并按照顺序传递数据包。设计目的主要是用来通过拨号或专线方式建立点对点连接发送数据,使其成为各种主机、网桥和路由器之间简单连接的一种共同的解决方案。
PPP协议分为3个组成部分:
(1)一个将IP数据报封装到串行链路的方法。
PPP封装提供了不同网络层协议同时通过统一链路的多路技术,使其保有对常用支持硬件的兼容性。
(2)一个用来建立、配置和测试数据链路连接的链路控制协议LCP(Link ControlProtocol)。通信的双方可通过LCP包协商一些选项。
(3)一套网络控制协议(Network ControlProtocol)。NCP是一族协议,负责解决物理连接上运行什么网络协议,以及解决上层网络协议发生的问题。他支持不同的网络层协议,如IP,OSI的网络层,DECCnet,以及AppleTalk等。
PPP帧封装格式如下:
PPP帧以标志字符01111110开始和结束,地址字段长度为1 B,内容为标准广播地址11111111,控制字段为00000011。协议字段长度为2 B,其值代表其后的数据字段所属的网络层协议。数据字段包含协议字段中指定的协议的数据报,长度为0~1 500 B。CRC字段为整个帧的循环冗余校验码,用来检测传输中可能出现的数据错误。
对应PPP协议的3个部分,PPP数据帧封装也分为:IP数据报封装、LCP控制数据封装、NCP控制数据封装。当PPP帧的协议字段为0x0021时,信息字段就是IP数据报;当协议字段为0xC021时,信息字段是LCP控制数据;当协议字段为0x8021,信息字段是NCP控制数据。
2 链路建立和状态机
2.1 PPP链路建立的概述
一次完整的PPP回话过程包括4个阶段:链路建立阶段、认证阶段、网络层控制协议阶段和链路终止阶段。本文讨论和实现的是链路建立阶段。
链路建立过程如下:请求建立链接的一端用LCP配置信息包(Configure packets)建立连接。对端收到配置信息包以后,如果认为收到的配置请求及协商选项可以接受,将发送配置成功信息包(Configure-Ack packet),当一个配置成功信息包被发送且被接收,就完成了链路建立。在LCP建立完成以后,如果收到LCP配置请求包(LCP Configure-Request)链路将从网络层协议阶段或者认证阶段返回到链路建立阶段。
通常线路两端要对如下的内容进行协商,这些内容包含在LCP配置请求包中:
(1)Maximum-Receive-Unit最大-接收-单元)
(2)Authentication-Protocol(鉴定-协议)
(3)Quality-Protocol(质量-协议)
(4)Magic-Number
(5)Protocol-Field-Compression(协议-域-压缩)
(6)Address-and-Control-Field-Compression(地址-和-控制域-压缩)
2.2 有限状态机模型
PPP协议的LCP层的连接及协商过程比较复杂,通常使用状态机模型来解释PPP状态的详细变迁情况。
状态机是一种记录下给定时刻状态的设备,并根据输入,对每个给定的改变,改变其状态或引发一个动作。有限态自动机由事件、动作和状态转换定义,通过状态机可以详细解释PPP协议中LCP链路建立的状态转换过程。LCP操作的状态机可以分为以下的要素:
状态 状态(当前状态和下一状态)以及状态转换,是状态机的基本概念,
他指明状态机当前时刻在做什么,处于什么情况。在LCP的链路连接状态机中,共有10种状态:Initial,Starting,Closed,Stopped,Closing,Stopping,Rdq-Sent,Ack-Received,Ack-Sent,Opened。
事件 自动机里的状态转换是由事件引起的。在链路连接协商时,本端从线路的对端发送过来的LCP包和自己的状态,判断将要发生的事件,并结合当前的状态判断系统的下一状态。在LCP的链路建立过程中,事件种类较多,大概可以分为以下几类:
①网络状态事件,表明LCP或者NCP的状态变化,包括Up,Down,Open,Close。
②超时计时器事件,与超时计时器有关的事件,包括TO+,TO-。
③S/T数据包事件,包括RCR+,RCR-,RCA,RCN,RTR。RTA,RUC,RXJ+,RXJ-,RXR。动作 自动机中的动作由事件引起,所以,每个
事件都对应了相应的动作。例如,有些动作表明了不同类型的LCP包的传输和(或)Restart timer的启动和停止。
状态跳转表 在PPP的链路操作中,每个状态,在经过特定的事件后,会转变成新的状态,并有可能有相应的事件。这些关系比较复杂,可以用状态跳转表[1]来表示。
3 软件实现
3.1 软件原理
PPP链路的建立、协商和握手的过程是需要建立连接的双方来完成的。每一方根据对端发送的LCP包的类型,做出相应的判断并响应。软件的原理就是用软件来模拟PPP链路中的一端,完全实现协议栈的功能。更重要的是,本文所讨论的实现方法可以实现检测、诊断的目的,这是一般的软件不能做到的。
在实现过程中,软件接收对端的LCP包,然后根据LCP的状态跳转表来决定自己下一步的状态,并产生相应的事件和动作,将响应包通过软件发向对端,达到软件实现链路连接的目的。
软件可以将链路活动的状况,接收和发送的数据包、链路的当前状态一一显示出来。用户可以通过软件详细了解到网络的活动情况和状态。
3.2 实现方法
软件实现的开发工具为BorlandC++Builder可视化开发环境,运行的环境是简体中文Windows98。软件具有信息回显界面,便于用户测试和分析。以下详细说明软件实现的方法。
3.2.1 总体流程
软件的实现部分用到2个子线程,这2个线程分别负责接收和处理数据,并对数据缓冲区进行操作。总体流程如图1所示。
3.2.2 线程结构
软件上采用多线程的技术实现。除了主线程,有2个子线程用于实现链路操作:一个作为数据包接收线程,一个作为数据包处理线程。
当程序开始时,主线程初始化,将自己的状态置为Initial,同时启动数据接收线程。因为这时PPP连接双方这时开始进行连接和协商,所以会收到对端设备的LCP包,接收线程接收LCP包,并交给处理线程处理。处理线程对接收的数据进行解包,解出LCP包的内容,结合当前的情况,得到产生的事件,并根据当前的状态和状态跳转表,决定要模拟的下一个状态,如果必要,将相应的响应发给对端。
处理线程是整个程序的重点,这个线程的流程如图2所示。
可以分为以下几步:
(1)得到接收线程交给的对端数据包。
(2)分析数据包中的内容,根据数据包的类型和当前本端的状态,查找状态跳转表,决定本端下一步的状态。
(3)通过状态-事件的对应,本端执行相应的事件。
(4)将产生的事件,系统的情况通过界面显示。
(5)根据状态跳转表确定是否应该给对端发送LCP包。如果需要,则按照LCP包标准封装数据并发送。
3.2.3 数据结构
在数据结构上,程序使用一个缓冲区,共有10个元素,每个元素有1 500 B左右大小,用来存储每次送 上来的数据以备分析。2个线程分别对缓冲区进行读写。设有一个头指针和一个尾指针以免访问冲突,接收线程从底层读上数据,简单判断后保存在头指针所指向的那个缓冲区元素中,设置其未用标志,头指针加1;处理线程从尾指针指向的缓冲区元素中读出数据,然后进行处理,设置其已用标志,尾指针加1。具体的数据结构如下:
3.2.4 链路情况回显
链路状况和状态转换的情况可以通过LCP包处理子线程来完成。处理子线程每处理一次对端发来的LCP包,就把状态的变化和链路的情况显示在界面上,同时对于超时异常、计时器重启这类事件也能显示出来。用户可以实时的监视线路连接的情况,这对于分析线路有着重要的作用。
3.3 软件实现的应用前景
PPP协议LCP操作的软件实现有重要的实际意义。用户可以通过实现软件的界面显示来判断线路的情况和定位故障的发生地点。一些厂家已经根据本文所说的原理和实现方法做出产品,现在正在推广应用中。
原文转自:www.ltesting.net
篇6:数据终端设备与无线通信模块之间串行通信链路复用协议TS27.010在嵌入
数据终端设备与无线通信模块之间串行通信链路复用协议(TS27.010)在嵌入式系统上的开发
摘要:介绍3GPP提出的一种终端设备和移动台串行通信的复用协议及嵌入式Linux系统下串行通信模块的结构和功能划分,在此基础上,提出一种实现这一复用协议的方案。目前,这一设计方案已经开发成功并广泛应用于所开发的车载移动终端产品中。关键词:TS27.010 串行链路复用 GPRS移动终端 嵌入式Linux
随着移动通信技术的迅速发展,具备无线通信功能的移动终端也迅速发展起来。这些移动终端支持普通的话音、短消息等业务,随着GPRS网络覆盖的迅速扩大,越来越多的手持/车载移动终端也开始支持GPRS上网业务。如何在一个终端设备上整合这些业务,这是许多移动终端设备开发者面对的问题。笔者在开发一款车载移动终端过程中,采用了3GPP的TS 27.010协议,成功地整合了这些业务。
图1 TS27.010协议栈组成与示意图
1 TS27.010协议介绍
在常用的GSM/GPRS通信模块中(如Siemens的MC35、WaveCom的Q2400等),只能通过一个普通9针的异步串口与终端设备TE(Terminal Equipment)进行通信。TE和MS?穴Mobile Station?雪需要通过这个串口交换各种类型的数据,例如:语音、传真、数据、SMS、CBS、电话号码本的维护、电池状态、GPRS、USSD等。如何在一个串口上同时支持这么多的业务?例如,在数据通信过程中,怎样发送或接收SMS?为了解决这些问题,3GPP提出了一个协议――TS27.010协议(Terminal Equipment to Mobile Station Multiplexer Protocol)。有了Multiplexer,即使在数据连接过程中,也可以发送SMS。其它业务组合也可以同时进行。例如,数字语音和SMS同时发送。Multiplexer的存在使得一个完整的系统能够根据需要进行划分。
3GPP 的Multiplexer设计非常灵活,并且独立于MS/TE平台,已有的应用程序不需要改动即可工作。在设计Multiplexer时,特别考虑到采用电池供电的设备的需求,所以包含了省电模式控制等很重要的功能,并且Multiplexer本身在运行时也尽量使用最小的功耗和内存。
Multiplexer基于ISO的HDLC标准设计,工作于有多种选项的单模式下。但是Basic Option并不遵从HDLC。在基本选项模式下,Multiplexer没有透明机制,也没有错误恢复功能。但是在高级选项(Advanced Option)模式下,使用HDLC的透明机制,且Multiplexer有一个方便的再同步机制,能够在DC1/DC3(XON/XOFF)流控打开的链路上工作,且包含了错误恢复功能。
3GPP的Multiplexer依赖于一个控制信道。在这个控制信道上,TE和MS交换控制信息,例如参数协商、节电控制信息、流控信息等。Multiplexer是一个可选项,如果支持这个功能,就应使用AT+CMUX命令激活它。
Multiplexer为TE和MS在一个起始/停止模式的、具有分帧功能的串行链路上传输数据流提供了一套机制。图1给出了不同的协议层及其功能示意。Multiplexer层负责将数据按字节流的方式传输,不再进行进一步的组帧;如果数据需要按一定结构传输,就需要增加一个会聚层来完成这些功能。
Multiplexer为TE上的进程和MS上相对应的进程提供了一条虚连接,这样TE和MS上的进程就可以通过这条虚连接通信。例如,TE上的SMS应用程序可以通过一条Multiplexer通道与MS上的SMS处理程序连接起来。
TS27.010规范使用8bit字符的start-stop传输模式,两个Mulitplexer实体间的通信使用了规定的帧格式。TE和MS之间的每个信道称为一条数据链路连接DLC(Data Link Connection),这些DLC被依次独立地建立起来。每个DLC都可以有自己的流控机制。
Multiplexer有三种工作模式:Basic、Advanced without error recovery和Advanced with error recovery。这三种模式特点如下:
・Basic:长度标识代替HDLC的透明机制;使用与HDLC不同的标志字;不能用于具有XON/XOFF流控的链路;从同步丢失状态中恢复需要更长的时间。
・Advanced without error recovery:遵从ISO/IEC13239的异步HDLC过程;可以用于具备XON/XOFF流控的链路上;可以更快地从失同步状态恢复。
・Advanced with error recovery:使用了HDLC的错误恢复过程。
2 Wavecom GSM/GPRS模块Multiplexing协议介绍
笔者选用了Wavecom的Q2403A,这是一款E-GSM/GPRS 900/1800的双频模块。这个模块支持大部分常用的AT命令,但不支持标准的TS27.010协议。为了能够数据/命令复用,Wavecom定义了自己的multiplex协议。
Wavecom的复用协议允许一条串行链路上同时进行两个会话(即虚连接):一个AT命令的会话和一个数据通信的会话。AT+WMUX=1将激活模块的复用模式。在这种模式下,AT命令和数据都被封装成数据包。通过包头,可以区分是数据包还是AT命令包。
2.1 AT命令包格式
AT命令包帧格式如图2所示。第一个字节(0xAA)用于标识这是一个命令包,第二个字节是AT命令长度的低八位。第三个字节由两部分组成:低3位是AT命令长度的高3位;高3位用于标识一个AT命令。AT命令的最大长度可以为2047字节。校验和?穴checksum?雪是包中所有字节(包括头和AT命令)之和对256取模。
图4 Linux下串行通信数据流和函数调用示意图
2.2 数据包格式
数据包各个字段(除packet type外)意义与AT命令包相同,其帧格式如图3所示。数据包有以下几种类型:
・Type=0――DATA 包:这个包是发送到无线链路上或者从无线链路上接收到的数据
・Type=1――STATUS包:这个包给出了SA、SB、X和中断条件编码的信息。
状态包的长度总为1字节。任何一个状态(除了break)改变时,所有的状态位都要发送出去。缺省情况下,所有的状态位都是关闭的(因此DTR、RTS都是关闭的),所以在打开复用开关准备传送数据之前,一定要发送一个状态包。
・Type=2――READY包:这个包表示发送READY包的一方可以接收数据了。包中没有数据,所以长度字段为0。
・Type=3――BUSY 包:这个包表示发送READY包的一方忙,无法接收数据。包中没有数据。
3 Linux下串口通信系统的组成
要在Linux系统上实现TS27.010协议,就必须了解Linux下串口驱动软件模块的结构。
图4不但给出了Linux kernel中串口通信模块的组成结构,还形象地表示出了数据是如何在用户和硬件接口之间流动的(笔者使用Linux 2.4.19的内核)。从图4可以看到串口通信模块可在逻辑上分为三层:TTY层、line discipline层和底层驱动层。TTY层是用户空间和内核空间的桥梁,用户程序和内核需要通过tty层交换数据;Low-level driver则负责硬件的交互,它对硬件进行控制和读写操作;line discipline层是整个串行通信模块中最灵活、设计最巧妙的一层,它要为一个串行口的使用定下数据交互的“规程”,在Linux内核中已经存在了许多line discipline,例如PPP、SLIP、TTY等。缺省使用TTY line discipline。可以根据需要将line discipline替换成Linux已经定义的line discipline结构,甚至替换为自己的line discipline结构。
在图4中,向硬件接口写数据的过程是显而易见的。但是,用户程序从硬件读取数据的过程却要复杂一些,这是因为硬件与用户空间之间没有直接的联系。解决的办法就是使用缓冲技术,硬件接收数据存储于kernel buffer中,等待用户程序请求这些数据;如果用户程序请求数据时,这个buffer是空的,那么用户程序就会被挂起,直到buffer中有数据时,它才被唤醒。实际上,TTY相关的缓冲是由两级构成的:一个“常规”buffer(数据等待着line discpline取走,缺省情况下传到用户空间)和一个“flip”buffer(硬件驱动函数将底层进来的数据尽可能快地存入这个缓冲,而不必考虑并发存取问题,因为这个buffer是每个硬件驱动专有的)。flip buffer由两个物理的缓冲实现,并被交替地写入,这样中断处理函数就会总有一个缓冲可用。
Linux下串口软件的这种分层结构虽然增加了复杂性,但是它带来的好处是多方面的。第一,串口模块更加灵活,在为新的串口硬件编写驱动程序时,只需修改和增加最底层的软件即可;第二,上层应用程序可以根据需要改变line discipline的处理软件,在使用PPP、SLIP等协议进行拨号连接时,都需要将原有的line discipline替换为PPP或者SLIP协议本身的line discipline?鸦第三,可以根据需要,在层与层之间加入一层自己的处理软件。事实上,笔者在实现Multiplex协议时正是这样做的。
图5 MUX系统组成
4 Multiplexing协议的实现
4.1 协议实现时的'考虑
在实现TS27.010协议时,基于以下考虑:第一,使用串口的上层应用程序不需要改动。这一点很重要,因为系统中有许多用户程序使用串口进行通信。如果需要对它们进行改动,那么由此付出的代价显然是不值得的。在这一点上,尤其需要特别考虑PPP软件,因为在Linux下通过GPRS上网必须使用PPP协议进行拨号。PPP存在于用户空间和内核空间两个地方,用户空间的pppd应用程序完成拨号连接的管
理功能;内核空间的ppp协议软件实现PPP包的组帧/分帧等核心功能。PPP定义了自己的line discipline模块,且到此为止,往下就不再有PPP相关的软件模块(参看图4的分层结构)。第二,尽可能多地实现TS27.010协议。虽然这个协议的内容很丰富,但是由于Wavecom通信模块只支持有限的几种格式,并且帧头部分还略有不同。这样实现起来就存在许多困难,只能在保证实现Wavecom复用协议并可靠工作的前提下,尽量实现TS27.010协议,以便于以后硬件和软件的升级。
4.2 mux driver的实现方案
正是基于以上两点考虑,决定将这个协议的实现放在Line discipline和Low-level driver两层之间,参看图5。这样,不需要对Linux的TCP/IP协议栈软件和PPP软件作任何修改,就可以在复用模式下实现原有的无线上网功能。
图5给出了MUX模块的函数调用和数据流程。TTY Layer、line discipline和serial driver是Linux tty设备文件系统在内核中已有的三层,在前一节已经介绍。
正如笔者在实现TS27.010协议时所考虑的,为了不影响上层应用程序,MUX必须支持标准的Linux系统调用,如write、read()、ioctl()等。write()如果成功,则返回发送的字节数;如果失败则返回-1,并将errno(Linux系统下一个全局变量,用户接口可以根据这个值判断错误类型)置为合适的值。正如图5所示,write?穴?雪并不是将数据直接发送出去,要发送的数据首先按照TS27.010协议的要求(笔者使用Wavecom模块,它有自己的协议要求)组成MUX帧?熏然后根据数据的优先级排队,优先级高的数据首先被发送。
同样,对设备/dev/muxN(0<N<M)的标准的Linux调用read()也不是由MUX直接支持的。MUX不会知道一个用户应用程序何时读设备/dev/muxN(0<N<M)。read()功能由MUX的上层(主要是TTY层)支持。MUX根据TS27.010协议(或者Wavecom协议)将物理链路上接收到的MUX包解封装,然后将纯数据发送到设备/dev/muxN(0<N<M)的读缓冲区中。如果设备/dev/muxN(0<N<M)没有足够的读缓冲空间,MUX就会将数据放到自己的接收缓冲区中。
4.3 Wavecom复用协议特殊情况的处理
在实现TS27.010协议时,考虑到Wavecom协议的特殊情况,在完全实现Wavecom复用功能的同时,尽可能多地实现TS27.010协议。由于Wavecom只能同时支持两个虚连接,所以这里的M=2。其中,/dev/mux0用于AT命令,作为控制信息通道;/dev/mux1用于PPP连接,作为数据通道。作为Wavecom复用协议的一个严重缺陷,从图2、图3的帧结构可以看到,从串行链路提交来的数据只能区分出是AT command数据还是DATA数据,而无法确定链路的信息,即无法确定数据是mux0接收,还是mux1接收。为了解决这个问题,笔者在实现时,将底层提交的数据同时送给mux0和mux1(如果这两个设备都已经打开)。但是考虑到软件的效率和数据的可靠性,在向上层提交数据时,有以下两点例外:第一,mux1是PPP专用的,在PPP没起来之前,mux1可以作为AT命令通道,但是PPP连接成功后(PPP的line discipline已经替换掉了缺省的TTY line discipline),它将不再接收AT命令,所以此时底层提交的AT命令帧不会送给mux1?鸦第二,mux0作为AT命令通道,将不接收PPP数据,所以在PPP连接成功后,不会把0x7E开始和0x7E结束(PPP的帧同步标志字节)的DATA帧发送到mux1。
GPRS网络作为一种过渡性质的2.5G网络,覆盖日益广泛。由于它的速率高、实时性好、费用低廉等诸多优势,日益被手持/车载等移动终端设备采用。在使用GPRS网络传输数据的同时,这些设备也必须能支持普通的无线业务,如语音、短消息等。TS 27.010协议很好地解决了这些业务的复用问题。笔者开发的这套Linux上的multiplexing软件实现了这些功能,使得移动终端能够在PPP连接不断开的情况下,可以打出/接听电话、发送/接收短消息。
篇7:数据终端设备与无线通信模块之间串行通信链路复用协议TS27.010在嵌入
数据终端设备与无线通信模块之间串行通信链路复用协议(TS27.010)在嵌入式系统上的开发
摘要:介绍3GPP提出的一种终端设备和移动台串行通信的复用协议及嵌入式Linux系统下串行通信模块的结构和功能划分,在此基础上,提出一种实现这一复用协议的方案。目前,这一设计方案已经开发成功并广泛应用于所开发的车载移动终端产品中。关键词:TS27.010 串行链路复用 GPRS移动终端 嵌入式Linux
随着移动通信技术的迅速发展,具备无线通信功能的移动终端也迅速发展起来。这些移动终端支持普通的话音、短消息等业务,随着GPRS网络覆盖的迅速扩大,越来越多的手持/车载移动终端也开始支持GPRS上网业务。如何在一个终端设备上整合这些业务,这是许多移动终端设备开发者面对的问题。笔者在开发一款车载移动终端过程中,采用了3GPP的TS 27.010协议,成功地整合了这些业务。
图1 TS27.010协议栈组成与示意图
1 TS27.010协议介绍
在常用的GSM/GPRS通信模块中(如Siemens的MC35、WaveCom的Q2400等),只能通过一个普通9针的异步串口与终端设备TE(Terminal Equipment)进行通信。TE和MS?穴Mobile Station?雪需要通过这个串口交换各种类型的数据,例如:语音、传真、数据、SMS、CBS、电话号码本的维护、电池状态、GPRS、USSD等。如何在一个串口上同时支持这么多的业务?例如,在数据通信过程中,怎样发送或接收SMS?为了解决这些问题,3GPP提出了一个协议――TS27.010协议(Terminal Equipment to Mobile Station Multiplexer Protocol)。有了Multiplexer,即使在数据连接过程中,也可以发送SMS。其它业务组合也可以同时进行。例如,数字语音和SMS同时发送。Multiplexer的'存在使得一个完整的系统能够根据需要进行划分。
3GPP 的Multiplexer设计非常灵活,并且独立于MS/TE平台,已有的应用程序不需要改动即可工作。在设计Multiplexer时,特别考虑到采用电池供电的设备的需求,所以包含了省电模式控制等很重要的功能,并且Multiplexer本身在运行时也尽量使用最小的功耗和内存。
Multiplexer基于ISO的HDLC标准设计,工作于有多种选项的单模式下。但是Basic Option并不遵从HDLC。在基本选项模式下,Multiplexer没有透明机制,也没有错误恢复功能。但是在高级选项(Advanced Option)模式下,使用HDLC的透明机制,且Multiplexer有一个方便的再同步机制,能够在DC1/DC3(XON/XOFF)流控打开的链路上工作,且包含了错误恢复功能。
3GPP的Multiplexer依赖于一个控制信道。在这个控制信道上,TE和MS交换控制信息,例如参数协商、节电控制信息、流控信息等。Multiplexer是一个可选项,如果支持这个功能,就应使用AT+CMUX命令激活它。
Multiplexer为TE和MS在一个起始/停止模式的、具有分帧功能的串行链路上传输数据流提供了一套机制。图1给出了不同的协议层及其功能示意。Multiplexer层负责将数据按字节流的方式传输,不再进行进一步的组帧;如果数据需要按一定结构传输,就需要增加一个会聚层来完成这些功能。
Multiplexer为TE上的进程和MS上相对应的进程提供了一条虚连接,这样TE和MS上的进程就可以通过这条虚连接通信。例如,TE上的SMS应用程序可以通过一条Multiplexer通道与MS上的SMS处理程序连接起来。
[1] [2] [3] [4] [5]
- 逻辑思维能力测试题2024-09-01
- 《金融的逻辑》读后感2024-02-06
- 逻辑联结词的教案2025-08-31
- 提高逻辑能力的题目2022-12-31
- 逻辑狗教学总结2024-01-19
- SONY逻辑笔试题2025-01-09
- 数学逻辑思维能力的培养2025-01-03
- 思维发散逻辑题2025-03-27
- 一阶逻辑的内涵语义2022-12-12
- 爱情经典语录:爱情不合乎逻辑2023-12-18