(计算机软件与理论专业论文)嵌入式tcpip协议栈设计方法的研究.pdf_第1页
(计算机软件与理论专业论文)嵌入式tcpip协议栈设计方法的研究.pdf_第2页
(计算机软件与理论专业论文)嵌入式tcpip协议栈设计方法的研究.pdf_第3页
(计算机软件与理论专业论文)嵌入式tcpip协议栈设计方法的研究.pdf_第4页
(计算机软件与理论专业论文)嵌入式tcpip协议栈设计方法的研究.pdf_第5页
已阅读5页,还剩78页未读 继续免费阅读

(计算机软件与理论专业论文)嵌入式tcpip协议栈设计方法的研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

太原理工大学硕士研究生学位论文y 6 2 0 3 1 8 嵌入式t c p i p 协议栈设计方法的研究 摘要 i n t e m e t 的应用已经深入到生活的方方面面。接入i n t e r n e t 的主体也开始发生变化,除了计算机之外,大量的电器设备也 开始尝试着接入i n t e r n e t 。嵌入式i n t e m e t ( e l ,e m b e d d e di n t e m e t ) 技术就是为小型设备接入i n t e m e t 而提出来的,其主要目的就是 解决小型设备的上网问题。 因为诸如传感器等小型设备,常常要求体积小,而且成本 低廉,一个i n t e m e t 协议的实现要考虑到有限的计算资源和内存 容量。尽管实际上已经有很多嵌入式和小型系统的t c p i p 实现, 但在这方面的研究还很有限。实现一个小型化的t c p i p 协议栈 通常被认为是一个工程问题,因此,没有受到研究重视。在一 个匮乏计算和内存资源的小型设备上,如何减少资源需求,实 现t c p i p 协议栈,将是本课题研究的重点。 首先,本文在分析嵌入式t c p i p 协议与标准t c p i p 协议 的区别的前提下,提出了嵌入式t c p i p 协议的特点和实现要求。 太原理工大学硕士研究生学位论文 接下来,论文对t c p i p 协议标准进行了详尽的分析,提出嵌入式 t c p i p 协议的设计思想,并在此基础上给出了一个较为简化的 嵌入式t c p i p 协议设计方案。最后,在给出设计方案的基础上, 对设计方案进行了实现,并对其进行测试。可以看出,本文针 对一个嵌入式协议开发过程进行了较为完整的描述。 关键词:e i ( e m b e d d e di n t e r n e t ) ,t c p i p ,嵌入式系统,实时系统 太原理工大学硕士研究生学位论文 d e s i g nm e t h o dr e s e a r c h0 ft h e e m b e d d e dt c p i ps t a c k a b s t r a c t t h ea p p l i c a t i o no fi n t e r n e th a sc o m ei n t o e v e r y w h e r e f o r p e o p l e sd a i l yl i f e w i t ht h er a p i dd e v e l o p m e n t o fi n t e m e t ,b e s i d e s c o m p u t e r ,ag r e a tn u m b e ro fe l e c t r i c i n s t r u m e n t sb e g i nt oa c c e s s i n t e m e t ,w h i c hl e a d s t ot h e d e v e l o p m e n to fe m b e d d e di n t e m e t t e c h n o l o g y ( e i ) s i n c es m a l ld e v i c e ss u c ha ss e n s o r sa r eo f t e nr e q u i r e dt ob e p h y s i c a l l ys m a l la n di n e x p e n s i v e ,a ni m p l e m e n t a t i o n o ft h ei n t e r n e t p r o t o c o l s w i l lh a v et od e a lw i t h h a v i n g l i m i t e dc o m p u t i n gr e s o u r c e s a n dm e m o r y t h i sp a p e rd e s c r i b e st h ed e s i g na n di m p l e m e n t a t i o n o ft c p i ps t a c kt h a ti ss m a l le n o u g ht ob eu s e di nm i n i m a l s y s t e m s f i r s t ,t h ep a p e rp r o p o s e sc h a r a c t e ra n dr e q u i r e m e n to ft h e e m b e d d e dt c p i pp r o t o c o lu n d e ra n a l y s i n gt h ed i f f e r e n c eb e t w e e n 太原理工夹学硕士研究生学位论文 t h ee m b e d d e dt c p f i pp r o t o c o la n dt h es t a n d a r dt c p d p p r o t o c o l s e c o n d ,t h ep a p e ra n a l y s e st h et c p i pp r o t o c o ls t a n d a r d ,p r o p o s e s d e s i g nc o n c e p t i o no ft h ee m b e d d e dt c p i pp r o t o c o l ,a n dg i v e sa s i m p l i f i e ds c h e m eo f t h ee m b e d d e dt c p f i pp r o t o c 0 1 a tl a s t ,t h e p a p e rc a l t yo u tt h ee m b e d d e dt c p f i pp r o t o c o lw i t ht h es i m p l i f i e d s c h e m e ,a n d t e s t si t i tc a nb e s e e n ,t h ep a p e r d e s c r i b e sa d e v e l o p m e n tp r o c e s s o ft h ee m b e d d e dt c p a p p r o t o c o lc o m p l e t e l y k e y w o r d s :e l ( e m b e d d e di n t e m e t ) ,t c p i ge m b e d d e ds y s t e m , r e a l - t i m e s y s t e m 太原理工大学硕士研究生学位论文 第一章绪论 1 1 嵌入式t c p i p 协议概述 伴随着i n t e m e t 的成功,t c p i p 协议族已经成为通信的全球标准。在 i n t e m e t 上进行w e b 页面的传输,e - m a i l 传送,文件传输,实现点对点网络, t c p i p 是最优先采用的协议。对于嵌入式系统,能够自身运行t c p p 协 议,就可以把系统直接连接到i n t r a n e t 上,甚至是世界范围的i n t e m e t 上。 由于可以和网络上其它主机完全通信,有完整t c p i p 协议支持的嵌入式 设备将成为一等网络公民。 从代码大小和内存使用上考虑,传统t c p i p 实现要求很多的资源, 而这些资源对于小一些的8 位或者1 6 位系统来说是非常珍贵的。代码大 小在数百k b ,内存要求几百k b ,使得完整的t c p i p 协议栈不可能放入 只有几十k b 内存,代码空间不超过1 0 0 k b 的系统中。 嵌入式t c p i p 协议的实现被设计成只具备完整t c p i p 协议栈所需功 能的最小集合。它只能处理单一网络接口,包含基本的u d p 实现,但重 点是1 t , i c m p 和t c p 协议。为了提高协议的可移植性,整个协议全部使 用纯c 语言编写。 很多嵌入式系统t c m p 协议的实现假设嵌入式设备将始终是和运行 在工作站级别的完整规模的t c p i p 实现通信。在这种假设下,去掉这种 环境里很少使用的t c p p 机制是非常可能的。但是,如果嵌入式设备是 和另外的对等限制设备通信,例如,运行分布式对等网络服务和协议时, 这些被去掉的协议机制有很多是必需的。嵌入式协议应该被设计成与r f c 相适应,使嵌入式设备成为一等网络公民。嵌入式协议的设计不应该为了 特殊的应用而裁剪。 太原理丁大学硕士研究生学位论文 1 2 嵌入式t c p i p 协议的特点 由单片机系统、嵌入式网络的应用环境决定了嵌入式t c p i p 协议栈 通常应用于特殊的、专用的领域,不可能像标准的t c p i p 协议栈一样提 供完整的协议体系,往往是根据具体的应用提供不同的协议模块【2 0 l 。因此, 嵌入式t c p i p 协议栈区别于标准的t c p i p 协议栈的最突出的特点t 2 2 1 就是: ( 1 ) 很好的可裁剪性。由于嵌入式应用的要求千差万别,各种嵌入式 应用对系统的要求不尽相同,并且在嵌入式应用中对产品的成本、价格比 较敏感,存储器的容量往往都是比较有限的,因此必须根据嵌入式网络产 品的具体功能,对完整的t c p i p 协议栈功能进行裁剪,特别是对应用协 议提供可裁剪性,以满足用户的需求。 ( 2 ) 很强的可移植性。由嵌入式应用的多样性决定了嵌入式应用平台 也是变化多端的。因此,在我们开发网络协议栈软件的过程中,保证软件 的可移植性是非常重要的。这样,在对嵌入式产品进行软、硬件升级的过 程中除了与硬件直接相关的部分代码需要重新编写以外,不必再对上层协 议进行大的修改。 ( 3 ) 代码精简。嵌入式t c p i p 协议栈是标准t c p i p 协议栈的子集, 只需要实现基本的、必要的功能,使生成的二进制代码尽量精简,这对嵌 入式网络产品降低开发难度、提高系统处理能力、节省有限的r o m 和 r a m 空间是有着重要的意义的。嵌入式t c m p 协议栈的这些特点也将成 为本课题研究工作的目标与要求。 1 3 嵌入式t c p i p 协议与标准t c p i p 协议的区别 由于嵌入式系统和普通操作系统的差别很大,所以嵌入式t c p i p 与 传统t c p t 的实现有很大的不同。在普通操作系统上t c p i p 协议的实现, 你可以不关心代码的大小,而在嵌入式系统下的嵌入式t c p i p 协议却是 2 太原理工大学硕士研究生学位论文 至关重要的问题,否则一个实现很好的嵌入式t c p i p 协议只是因为代码 太大而装不入目标嵌入式系统中。综合来说,嵌入式系统t c p i p 实现与 传统t c p 口实现有如下区别: 操作系统支持:不论是w i n d o w s ,u n i x ,还是l i n u x ,它们都有一个 多任务操作系统,这使得代码编写简单化,而在嵌入式t c p ,p 协议运行 的嵌入式系统环境中操作系统可能没有,或者即使有也不是如w i n d o w s 和u n i x 一样的多任务操作系统。这使得嵌入式t c p 坤协议的实现与传 统的t c p i p 协议有很大的不同。嵌入式系统直接面对硬件,没有一个多 任务操作系统平台,其中的程序结构一般是顺序执行和硬件中断相配合的 方式,与高级操作系统中的多线程并发执行的方式截然不同。在高级操作 系统中,对网卡的驱动采用中断方式、中断与软中断、消息机制等相结合, 运行时以分时为基础,进行动态优先级调度,同时由于相对极快的运算速 度,使调用的处理时间很短,从而能对网络通信作出及时响应,网卡的接 收缓冲区几乎不可能出现溢出的情况,同时操作系统还能对其它任务线程 的作出响应。而嵌入式处理器的时钟频率低,地址、数据总线窄,对一个 包的处理要花更多的处理机时间,势必影响其他中断和任务的执行。比如: 当系统中有实时数据采集、串口通信中断、键盘中断等实时任务,则造成 很大冲突。故设计时通过合理划分中断处理程序,使中断处理程序尽可能 短,从而使这些任务执行时间较短,而将无实时要求和费时的处理移到主 程序中执行。把处理放在主程序顺序循环中,对网络接口控制芯片的控制 采用查询式,在其他中断任务的执行间隙处理协议,以牺牲响应时间来换 取系统可靠性。由于处理不及时,响应满,溢出、丢包等,依靠协议本身 机制来保证可靠传输。 内存分配:w i n d o w s 和u n i x 系统的内存分配是动态分配,根据需要 随时分配,随时撤销。在l i n u x 、u n i x 操作系统中,它们都是m b u f 的存 储结构,m b u f 是一个存储链,这个链可以动态地增加和减少,比如在数据 包很少的情况下,u n i x 分配一个2 k 字节的缓冲可能就够用了,但如果 数据包很多,就有可能要分配一个6 4 k 甚至更多的缓冲区,可分配的内存 3 太原理工大学硕士研究生学位论文 要根据c p u 的可用内存来调整。但是在嵌入式系统中却不能够这样做, 一个最大的以太网数据包有1 5 0 0 个字节,分配一个包的缓冲区就要1 5 k 字节,而单板机只外接了5 1 2 k 字节的s r a m 。而这5 1 2 k 字节的r a m 要 被各个协议所使用,而不仅仅是存放收到的数据包。一般的做法是分配一 个2 5 6 x6 = 1 5 3 6 字节的r a m 来存放收到的以太网数据包,收到一个包就 处理一个包。而u n i x 却可用收到很多包才处理。在嵌入式t c p p 协议 中象m b u f 结构以及所有的内存管理、内存分配机制不能被采用。 协议支持:t c p i p 包含从应用层、传输层、网络层到物理层的一系列 协议。而每层可采用的协议又有好几种。在u n i x 里可用支持比较完整的 t c p p 协议,但在嵌入式系统里却无法做到。这是因为嵌入式系统应用针 对性非常强,只需要实现与需求相关的部分协议,而不使用的协议则一概 不支持。例如文件共享s m b 协议,u n i x 、w i n d o w s 都支持,但在嵌入式 系统中却没有必要。 硬件接口:在网络接口程序的设计中,电脑中配置的网卡上的网络接 口控制芯片采用即插即用方式来驱动,从而使其有良好的兼容性。而在嵌 入式系统中为了节省代码和m c u 的i o 接口资源,网络接口控制芯片一 般使用跳线方式,有时数据总线也采用8 位d m a 方式,而不用1 6 位d m a 方式。 1 4 课题目的和意义 在最近的几年间,把嵌入式设各( 诸如小型传感器,信息家电等) 接 入i n t e m e t 网络的兴趣正在逐渐增加。为了能够使嵌入式设备可以在 i n t e m e t 上通信,一个嵌入式t c p f l p 协议栈是必需的。因此,国际上一些 著名的嵌入式操作系统提供商,都在自己的嵌入式系统产品中集成了 t c p i p 网络组件。由于是面向嵌入式应用,因此这些产品在实时性、占用 存储空间、可移植性方面部做了各具特色的改进。但这些网络组件都是以 自己开发的实时操作系统为平台的,很难在其它嵌入式环境下采用。因此, 4 太原理工大学硕士研究生学位论文 在提出设计方案的基础上,开发平台无关的嵌入式t c p i p 协议栈,有非 常积极的研究应用价值。 5 太原理工大学硕士研究生学位论文 第二章t c p i p 协议的分析 2 1t c p i p 协议概述 t c p i p 在o s i 模型之前就已经开发了。因此t c p m 协议族的层次无 法准确地和o s i 模型对应起来。t c p 口协议族由五层组成:物理层、数据 链路层、网络层、传输层和应用层。前四层与o s i 模型的前四层对应,提 供物理标准、网络接口、网际互连、以及传输功能。而o s i 的最高三层在 t c p 口中则用一个叫做应用层的来表示。见图2 ,1 。 图2 - 1t c p d p 和o s i 模型 f i g u r e2 - 1t c p ,i pa n do s im o d e l 6 太原理工大学硕士研究生学位论文 t c p i p 是由一些交互性的模块组成的分层次的协议,其中每个模块都 提供特定的功能。o s i 模型指明了哪个功能是属于它的哪一层,但t c p i p 协议族中的层则包含了一些相对独立的协议,可以根据对系统的需要把这 些协议混合和配套使用。术语“分层次的”表示每一个上层协议被一个或 多个下层协议所支持。 物理层和数据链路层 在物理层和数据链路层,t c p i p 并没有定义任何特定的协议,它支持 所有标准的和专用的协议。在t c p i p 互联网中的网络可以是局域网 ( l a n ) 、城域网( m a n ) 或广域网( w a n ) 。 网络层 在网络层( 或更加准确些,在互联网层) t c p i p 支持网际协议( m ) 。 而d 又由四个协议组成:a r p 、r a r p 、i c m p 和i g m p 。 网际协议( m ) 是t c p i p 协议使用的传输机制。这是一个不可靠的、 无连接的数据报协议个尽最大努力的服务。“尽最大努力”表示p 不提供差错检测或跟踪,口假定了下面几层是不可靠的,并按“尽最大努 力”的方式将数据报传送到目的地,但不做出保证。 i p 所运输的以分组为单位的数据叫做数据报,每一个数据报都是独立 运输的。不同的数据报可以走不同的路由,也可能不按序或重复地到达。 i p 不记录使用过的路由,并且一旦当数据报到达目的地后,p 就没有办法 将数据报重新排序。 然而理的这些有限的功能不应当看成是一个弱点。p 提供了最基本 的传输功能,使用户能够增加对某种应用所需的功能,这样就可以获得最 大的效率。 地址解析协议( a r p ) 用来将口地址与其物理地址联系起来。在具体 7 太原理工大学硕士研究生学位论文 的网络中,例如在局域网中,在一条链路上的每一个设备都是用物理地址 或站地址标识的,这通常是写在网络接口卡( n i c ) 中。当节点的p 地址 已知时,a r p 可用来找出其物理地址。a r p 协议将在下面详细讨论。 逆地址解析协议( r a p , p ) 允许主机在仅知道其物理地址时可发现其 i p 地址。当计算机第一次连接到网络上时,或当无盘计算机在启动时,就 要用到r a r p 。 因特网控制报文协议( i c m p ) 是主机和网关使用的一个机制,用来 数据报出现的问题以发送通知的方式反馈给发送器。 因特网组管理协议( i g m p ) 用来将一份报文同时传送给一组接收者。 传输层 在传输层有两个传输层协议:t c p 和u d p 。i p 是主机到主机协议, 即将分组从一个物理设备交付到另一个物理设备。u d p 和t c p 是传输级 协议,负责将报文从一个进程( 运行着的程序) 交付到另一个进程。 用户数据报( u d p ) 是两个标准的t c p m 传输协议中较为简单的一 个,它是进程到进程协议,并在从上层来的数据上只增加端口地址、校验 和差错控制以及长度信息。 传输控制协议( t c p ) 向应用层提供全部的传输层服务。t c p 是一个 可靠的流式传输协议。术语“流”在这里表示面向连接,即在传输数据之 前,传输的两端之间必须先建立连接。 在发送端的每一次传输,t c p 将数据流划分为较小的单元,称为报文 段。每一个报文段有一个序号( 用来在收到后进行重新排序) 以及一个确 认号( 用来对收到的报文段进行确认) ,报文段放在坤数据报中在互联网 中传送。t c p 将到达的数据报收集起来,并根据序号将它们按传输时的顺 序重新排序。 8 太原理工大学硕十研究生学位论文 应用层 t c p , q p 中的应用层相当于o s i 模型中的会话层、表示层和应用层的组 合。在这一层中定义了许多协议,如:s m t p 、f t p 、t e l n e t 、s n 】岫、 h t t p 等。这些不同的应用协议对应了不同的应用服务。 2 2 a r p 协议分析 在任何时候,当主机或路由器有数据要发送给另一台主机或路由时, 它必须有接收站的逻辑( 口) 地址。但是p 数据报必须封装成帧才能通过 物理网络。这就表示,发送站必须有接收站的物理地址。因此需要有一个 从逻辑地址到物理地址的映射 4 1 。 逻辑地址到物理地址的映射有两种解决方案。使用静态映射,即设立 一个静态表用来存储逻辑地址到物理地址的映射。或者使用动态映射,即 发送站在需要时可以请求接收站宣布其物理地址。a r p 就是为此目的设计 的。任何时候当主机或路由器需要找出另一台主机或路由的物理地址时, 它就发送一个a r p 查询分组。这个分组包括发送站的物理地址和逻辑地 址,以及接收站的逻辑( i p ) 地址。因为发送站不知道接收站的物理地址, 查询就在网络上广播。每一个在网络上的主机或路由器都接收和处理这个 a r p 查询分组,但只有意图中的接收者才识别其p 地址,并发回a r p 响 应分组。这个分组直接使用单播发送给查询者,并使用接收到的查询分组 中用到的物理地址。 2 2 1a r p 分组格式 硬件类型( h t y p e ) 。这是一个1 6 比特字段,用来定义a r p 的网络的类 型。每个局域网基于其类型被指派一个整数。例如,以太网是类型1 。 a r p 可以使用在任何网络上。 协议类型( p t y p e ) 。这是一个1 6 比特字段,用来定义协议的类型。例如, 9 太原理工大学硕士研究生学位论文 对于i p v 4 协议,这个字段的值是0 8 0 0 ma r p 可以用于任何高层协议。 硬件类型( 1 6 b )协议类型( 1 6 b ) 硬件长度( 8 b )协议长度( 8 b )撵作( 1 6 b ) 请求l ,匣l 答2 发送站硬件地址( 可变长字段例如对以太网是6 1 3 ) 发送站协议地址( 可变长字段例如对j p 是4 b ) 目标硬件地址( 可变长字段,例如对以太网是6 b ) 目标协议地址( 可交长字段。例如对i p 是4 b ) 图2 - 2a r p 分组格式 f i g u r e2 - 2a r pp a c k e tf o r m a t 硬件长度( h l e n ) 。这是一个8 比特字段,用来定义以字节为单位的物理 地址长度。例如,对以太网这个值是6 。 协议长度( p l e n ) 。这是一个8 比特字段,用来定义以字节为单位的逻辑 地址长度。例如,对i p v 4 协议这个值是4 。 操作( o i e r ) 。这是一个1 6 比特字段。用来定义分组的类型。已定义了 两种类型:a r p 请求( 1 ) 、a r p 回答( 2 ) 。 发送站硬件地址( s h a ) 。这是一个可变长字段,用来定义发送站的物理 地址长度。例如,对以太网这个字段是6 字节长。 发送站协议地址( s p a ) 。这是一个可变长字段用来定义发送站的逻辑( 例 如,d ) 地址的长度。对于p 协议,这个字段是4 字节长。 目标硬件地址( t h a ) 。这是一个可变长字段,用来定义目标的物理地址 长度。例如,对以太网这个字段是6 字节长。对于a r p 请求报文,这个 字段是全0 ,因为发送站不知道目标的物理地址。 1 0 太原理工大学硕士研究生学位论文 目标协议地址( t p a ) 。这是一个可变长字段,用来定义目标的逻辑( 例 如,i p ) 地址的长度。对于口协议,这个字段是4 字节长。 注意:发送站和目标站硬件地址长度因其各自a r p 协议所在的物理网 络的不同而有所不同,例如对于以太网来说是6 字节长,发送站和目标站 的协议地址长度也会因其各自a r p 协议所服务的协议族的不同而有所不 同。在本课题范围内讨论的是物理网络为以太网的m v 4 协议,以下分析, 设计如非特别注明,则均在此前提下考虑。 2 2 2a r p 协议的封装 a r p 分组是直接封装在数据链路帧中。如图2 - 3 所示。 图2 - 3a r p 协议的封装 f i g u r e2 3p a e h g eo f a r p p m t o c o l 以太网地址数据结构定义: s t r u c te t ha d d r u s i n t a d d s 6 ; ) ; 数据链路层帧头数据结构定义: s t n i c te t h _ h d r s t r u c te t h h d rd e s t : s t m c te t h _ a d d rs r c : u l u n tt y p e ; ; 太原理工大学硕士研究生学位论文 个a r p 请求报文实例( 图2 4 ) : 图2 - 4a r p 请求报文实例 f i g u r e2 - 4e x a m p l eo f a r pr e q u e s t 封装在以太网帧中的a r p 分组数据结构定义: s t r u c ta r p _ h d r s t r u c te t h i l l l d r ;产以太网帧头_ h d r e t u 1 6i n t h w t y p e ;,4 硬件类型+ u 1 6 _ i n tp r o t o c o l ; 协议类型+ u 8 _ i n th w l e n ; 硬件长度+ u s _ i n tp r o t o l e n ; 严协议长度 u 1 6 _ i n to p c o d e ; + 操作+ 1 2 太原理工大学硕十研究生学位论文 s t m c te t h _ a d d rs h w a d d r ; s t r u e ti p _ a d d r s i p a d d r ; s t r u c te t h _ a d d rd h w a d d r ; s t r u c ti p _ a d d r d i p a d d r ; 一个a r p 应答报文实例( 图2 - 5 ) : 奉源硬件地址 严源i p 地址+ 产目的硬件地址叫 产目的i p 地址吖 图2 _ 5a r p 应答报文实例 f i g u r e2 - 5e x a m p l eo f a r pr e p l y 1 3 太原理工大学硕士研究生学位论文 2 2 3a r p 协议高速缓存表 发送站往往有一个以上的口数据报要发送到同一个目的地。对发送到 同一个目的站的每一个数据报都使用a r p 协议是低效率的。解决这个问 题就是使用高速缓存表。当主机或路由器收到一个p 数据报相应的物理地 址时,就可将此物理地址存储到高速缓存表中。对于发往同一个接收站的 数据报,这个地址在几分钟之内还能够使用。但是,由于高速缓存表的空 间有限,映射p 地址到物理地址的映射内容只能维持有限的时间。只有那 些经常使用的口地址对应的表项会在缓存表内常时间保留,其余的表项会 在定的时间后被设置为超时,该表项对应的空间可以被将要加入的新表 项使用。 a r p 高速缓存表数据结构定义; s t r u c ta r pe n t r y s t r u c ti p _ a d d r i p _ a d d r ; s t r u c te t h _ a d d r e t h a d d r ; u 8i n t t i m e ; 2 3 i p 协议分析 在p 层的分组叫做数据报。数据报是一个变长的分组格式,它由两部 分组成:首部和数据。首都可以从2 0 至6 0 字节包含有对路由选择有关 的重要信息 4 】。 2 3 1 口数据报首部格式 版本( v e r ) 。这个4 比特字段定义协议的版本。目前的版本是4 。但 是在几年之内版本6 ( 或i p n g ) 将要取代版本4 。这个字段向处理机所运行的 i p 软件指出该p 数据报版本4 的格式。所有的字段都要按照版本4 的执 1 4 太原理工大学硕士研究生学位论文 议所指明的来解释。如果机器使用其他版本的口,则应该该数据报而不是 错误地进行解释。 首部长度( h l e n ) 。这个4 比特的字段定义数据报以4 字节计算的首部总 长度。这个字段是必需的,因为首部的长度是可变的( 在2 0 至6 0 字节之 间) 。当没有选项时,首部长度是2 0 字节,而这个字段的值是5 ( 5 x 4 - - - - 2 0 ) 。当选项字段为最大值时,这个字段的值是1 5 ( 1 5 x 4 = 6 0 ) 。 图2 - 6i p 数据报首部格式 f i g m e 2 6f o r m a to f l pp a c k e th e a d e r 服务类型( t 0 s ) 。这个8 比特字段定义了路由器应如何处理此数据报。 这个字段分为两个子字段:优先( 3 比特) 和服务类型( 4 比特) 。剩下的 一个比特未使用。 总长度( l e n ) 。这个字段定义一个数据报以字节计的总长度( 首部加上 数据) 。要找出从上层来的数据长度,可以将总长度减去首部长度。将h l e n 字段的值乘以4 就可得出首部长度。 数据长度= 总长度一首部长度 因为这个字段是1 6 位长,因此i p 数据报的长度限制是6 5 5 3 5 ( 即2 1 6 一1 ) 字节,其中首部占2 0 至6 0 字节,剩下的是从上层来的数据。 1 5 太原理工大学硕士研究生学位论文 标识。这个1 6 比特字段标识一个从源站发出的数据报。当数据报离开源 站时,这个标识与源p 地址必须唯一地定义这个数据报。为了保证唯一性, i p 协议使用一个计数器来标识数据报。当i p 协议发送一个数据报时,就 将该计数器当前值复制到标识字段中,并将此计数器的值加1 。只要此计 数器保存在主存储器中,唯一性就得到了保证。当数据报被分片时,标识 字段的值就被复制到所有的分片中。换言之,所有的分片具有相同的标识 数,这也就是原始数据报的标识数。这个字段在目的站重装数据报时很有 用。目的站就知道所有具有相同标识值的分片必须组装成一个数据报。 标志。这是一个3 比特字段。第一个比特保留为今后使用。第二个比特是 不分片比特。若此值为1 时,则机器就不能将该数据报进行分片。若此值 为0 时,则在需要时可将此数据报进行分片。第三个比特是还有分片比特。 若此值为l ,则表示此数据报不是最后的分片;在此分片后面还有更多的 分片。若此值为0 ,则表示返已是最后的或者唯一的分片。 片偏移。这个1 3 比特字段表示这个分片在整个数据报中的相对位置。它 是在原始数据报中的偏移量,以8 个字节为度量单位。因此,将数据报分 片的机器必须这样选择每一个分片的长度,即使每一个分片的第一个字节 数应当能够被8 除尽。 生存时间( t t l ) 。一个数据报在它通过互联网时必须具有受限的寿命。 这个字段在最初设计时是打算保持一个时间戳,由每一个经过的路由器将 此数减1 。当时间戳的值变为0 即丢弃此数据报。但要做到这一点,所有 的机器必须是同步的,而且还必须知道一个数据报从一个机器到另一个机 器所花费的时间。现在,这个字段基本上是用来控制一个数据报所通过路 由器的最大跳数。数据报每通过一个路由器此字段减1 ,当路由器接到此字 段为0 的数据报时,则丢弃该数据报。 协议。这个8 比特字段定义使用此d 层服务的高层协议。有许多高层协 议( 诸如t c p , u d p , i c m p 和i g m p 等) 的数据能够封装到1 p 数据报中。 这个字段指明口数据报必须交付到的最终目的协议。换言之,口协议对 1 6 太原理工大学硕士研究生学位论文 不同高层协议来的数据进行复用和分用,因此当数据报到达最终的目的地 时,这个字段的值对于分用过程很有帮助。 校验和。校验和是在分组上的附加的信息,能够防止分组在传输时所受到 的损伤。 源i p 地址。这个3 2 比特字段定义源站的p 地址。在p 数据报从源站发 送到目的站的时间内,这个字段必须保持不变。 目的i p 地址。这个3 2 比特字段定义目的站的口地址。在p 数据报从源 站发送到目的站的时间内,这个字段必须保持不变。 2 3 2i p 协议的封装 i p 地址数据结构定义: s t r u c ti p _ a d d r u 8 _ i n t a d d 4 ; ) ; p 数据报首部数据结构定义: s t r u c ti p _ h d r u 8 j t a t v l e n ; u8 - i n t t o s ; u 1 n tl e n ; u l t i n l i d ; u 1 6 j n t o f f ; _ i n t m ; u 8 j n tp r o ; u l j j n tc h s u m ; s t r e e ti p _ a d d ri p _ s r c ; s t l u c ti p _ a d d ri p _ d s t ; * 2 0 字节吖 严版本和首部长度吖 产服务类型宰, 包总长度吖 ,l 标志4 ,1 分片片偏移,该字段的前3 位是分片标志吖 p 生存时间吖 产协议类型吖 ,+ 首都校验和, ,源i p 地址+ 产目的i p 地址i 太原理工大学硕士研究生学位论文 i c m p 报文包头数据结构定义 s t r u c ti c m p _ h d r u si n t t y p e ; 一i n t i c o d e ; u 1 6 一i n t i c m p c h k s u m ; u 1 6 j n l i d ; u 16 - i n t s e q n o ; ) ; d 数据报实例( 图2 7 ) 图2 7i p 数据报实例 f i g u r e2 - 7e x a m p l eo f i p p a c k e t 1 8 太原理工大学硕士研究生学位论文 2 4 t c p 协议分析 2 4 1t c p 数据报首部格式 图2 - 8t c p 数据报首部格式 f i g u r e2 - 8f o r m a to f t c pp a c k e th e a d e r 源端口地址。这是一个1 6 位字段,它定义了在主机中发送该报文段的应 用程序的端口号。 目的端口地址。这是一个1 6 位字段,它定义了在主机中接收该报文段的 应用程序的端口号。 序号。这个3 2 位字段定义了一个数,它指派给本报文段数据的第一个字 节。t c p 是流式运输协议。为了保证连通性,要发送的每一个字节都要编 上号。序号告诉目的地,这个序列中的哪一个字节是报文段中的第一个字 节。 确认号。这个3 2 位字段定义了源进程期望从对方接收的报文段的序号。 如果报文段的接收端成功地接收了对方发来的序号x ,它就将确认号定义 1 9 太原理工大学硕士研究生学位论文 为x + l 。确认可捎带和数据一起发送。 首部长度。这个4 位字段指出t c p 首部共有多个4 字节字。首部长度可以 在2 0 至6 0 个字节之间。因此,这个字段的值可以在5 ( 5 x 4 = 2 0 ) 至1 5 ( 1 5 4 = 6 0 ) 之间。 保留。这是一个6 位字段,保留为今后使用。 控制。这个字段定义了6 种不同的控制位或标志,在同一时间可以设置一 位或多位。 窗口大小。这个字段定义对方必须维持的窗口大小( 以字节为单位) 。注 意到这个字段是1 6 位长,因此窗口大小的最大长度是6 5 5 3 5 字节。 紧急指针。只有当紧急标志置位时,这个1 6 位字段才有效,这时的报文 段中包括紧急数据。它定义了一个数,将此数加到序号上就得出报文段数 据部分中最后一个紧急字节。 选项。在t c p 首部中可以有多达4 0 字节的可选信息。 m s s 选项。最大报文段长度,这个选项定义可以被目的站接收的t c p 报 文段的最长数据块。虽然它的名字是这样,但它定义了数据的最大长度, 而不是报文段的最大长度。因为这个字段是1 6 位长,因此这个值在0 和 6 5 5 3 5 之间。默认值是5 3 6 。 最大数据长度是在连接建立阶段确定的,这个大小是由报文段的目的 站而不是由源站确定的。因此甲方定义乙方应发送的m s s ,乙方定义甲方 应发送的m s s 。若双方都不定义这个大小,则选用默认值。 这个选项仅能在进行连接的报文段中使用。 2 0 太原理c 大学硕士研究生学位论文 2 4 2t c p 协议的封装 t c p 协议s y n 报文实例( 图2 9 ) 图2 - 9t c p 协议s y n 报文实例 f i g u r e2 - 9e x a m p l eo f t c pp r o t o c o ls y nm e s s a g e t c p 报文首部数据结构定义 s t r t l c tt c p _ h d r u 16 _ i n t s r c p o r l ; u 1 6 n td c s t p o r t ; u 8 _ i n ts e q n o 4 , u 8 _ i n ta c k n o 4 ; + 源端口地址吖 产目的端口地址+ * t c p 报文序号+ * t c p 报文确认序号章 z 1 太原理工大学硕士研究生学位论文 u 8i n t u 8i n t u 8i n t u 1 6i n t u 1 6i n t * t c p 首部长度吖 * t c p 控制和标志位吖 幸窗口大小+ * t c p 报文校验 1 1 * t c p 紧紧指针, t c p 协议s y n + a c k 报文实例( 图2 - 1 0 ) 图2 1 0 t c p 协议s y n + a c k 报文实例 f i g u r e2 - 1 0e x a m p l eo f t c pp r o t o c o ls y n + a c km e s s a g e 一崦一一岍 太原理工大学硕士研究生学位论文 t c p 协议a c k 报文实例( 图2 1 1 ) 图2 - 1 1t c p 协议a c k 报文实例 f i g u r e2 - 1 1e x a m p l eo f t c p p r o c o c o l a c k m e s s a g e 2 3 太原理工大学硕士研究生学位论文 第三章嵌入式t c p i p 协议的设计 3 tt c p i p 协议的通信 完整的t c p p 协议栈包括众多协议,范围从底层协议,如翻译口地 址到m a c 地址的a r p 协议,到应用层协议,如被用来转发e m a i l 的s m t p 。 嵌入式协议主要关心的是t c p 和口协议,高层协议被作为应用程序对待。 底层协议则经常在硬件和固件上实现,被作为受网络驱动程序控制的网络 设备对待。 t c p 给上层协议提供一个可靠的字节流。它把字节流分割成适当大小 的段,把每个段放入各自的d 包中传递。这些p 包被网络驱动程序发送 到网络上。如果目的地址不是物理连接的本地网络,则这些婵包被位于两 个网络间的路由器传送到另一个网络上。如果另一个网络的最大包长度小 于这些口包,这些婵包将被路由器分片。如果可能,应该选择一个适当 的t c p 报文长度来降低分片处理。这些包的最终接收者在把这些包传到更 高协议层之前,必须重组那些被分片的p 包。 t c p i p 协议栈对协议的正式要求在l e t f ( i n t e m e te n g i n e e r i n gt a s k f o r c e ) 出版的许多r f c 文档中有详细说明。协议栈的每个协议都在一个或 多个r f c 文档中定义,r f c l l 2 2 集中了这些要求,并且更新了早先的r f c 。 r f c l l 2 2 的要求可以被分为两类:被用来处理主机对主机通信的协议, 和处理应用程序和网络协议栈通信的协议。第一类的一个例子是:“t c p 必 须能够接收任何段中的t c p 选项。”,第二类的例子是:“必须有一种报告 t c p 错误给应用程序的机制。”违反第一类要求的嵌入式协议可能不能和 其它的t c p ,i p 实现通信,也可能导致网络错误。违反第二类要求的嵌入 式协议将只影响系统内部的通信,不会影响主机对主机的通信。 太原理工大学硕士研究生学位论文 在嵌入式协议中,所有影响主机对主机通信的r f c 要求都实现了。但 是,为了缩小代码长度,在应用程序和协议栈间接口的些特有机制被去 掉了,诸如:软错误报告机制,t c p 连接服务类型位的动态配置。既然只 有很少的应用程序用到那些特征,它们在不失一般性的前提下可以被去 掉。 3 2 嵌入式t c p i p 各协议模块设计 3 2 1a r p 协议模块设计 a r p 软件包维持了一组队列( 每一个队列对应一个目的地) ,用来在 a r p 试图解析硬件地址时保留分组。输出模块将未解析的分组发送到 相应的队列。输入模块从一个队列中拿走一个分组,并连同解析出的物理 地址一起发送给数据链路层来传输【3 】 4 1 。 输出模块 输出模块从m 软件等待分组。输出模块检查高速缓存表,寻找有无一 个项目对应于这个分组的目的p 地址。这个坤分组的目的p 地址必须与 这个项目的协议地址相匹配。 若找到这样的项i f l ,则将该分组连同目的硬件地址一起发送到数据链 路层来传输。 若找到了这样的项目,而项目状态是p e n d i n g ,则该分组必须等待, 直到找出了目的硬件地址。因为状态为p e n d i n g ,因此为这一目的地已 经创建了一个队列。这个模块将该分组发送到相应的队列中。 输入模块 输入模块一直等待,直到a r p 分组( 请求或应答) 到达。输入模块先 太原理工大学硕士研究生擎位论文 验证接收到的a r p 分组是否合法( 包长度不能小于a r p 分组头部长度, 目的坤地址必须为本机d 地址) 。输入模块根据a r p 分组类型韵不同做 不同的处理。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论