毕业设计(论文)嵌入式TCPIP协议研究_第1页
毕业设计(论文)嵌入式TCPIP协议研究_第2页
毕业设计(论文)嵌入式TCPIP协议研究_第3页
毕业设计(论文)嵌入式TCPIP协议研究_第4页
毕业设计(论文)嵌入式TCPIP协议研究_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、目 录 摘要.2 关键词.2 abstract.3 key words.3 1 绪 论.4 1.1 tcp/ip 概述.4 1.2 嵌入式 tcp/ip 的发展现状.4 1.3 课题研究的意义.5 2 tcp/ip 协议技术.6 2.1 网络分层结构.6 2.1.1 osi 七层参考模型.6 2.1.2 tcp/ip 参考模型.7 2.2 tcp/ip 网络协议.7 2.2.1 嵌入式 tcp/ip 协议.8 2.2.2 arp 协议.8 2.2.3 ip 协议.9 2.2.4 icmp 协议.10 2.2.5 udp/ tcp 协议.10 3 嵌入式 tcp/ip 总体框架设计.12 3.1

2、 嵌入式 tcp/ip 网络系统结构.12 3.2 总体数据流程.12 3.3 嵌入式 tcp/ip 协议实现.13 3.4 基本协议框架设计.14 3.4.1 网络接口层实现.14 3.4.2 arp 协议实现.14 3.4.3 ip 协议实现.15 3.4.4 icmp 协议实现.16 3.4.5 tcp 协议实现.17 3.4.6 udp 协议实现.18 4 嵌入式 tcp/ip 协议研究设计.20 4.1 地址解析协议 arp 详细设计.20 4.1.1 概述.20 4.1.2 函数详细设计.20 4.2 网际协议 ip 协议详细设计.24 4.2.1 概述.24 4.2.2 函数设计

3、实现.24 4.3 用户数据报协议 udp 详细设计.26 4.3.1 概述.26 4.3.2 函数详细设计.27 4.4 传输控制协议 tcp 详细设计.29 4.4.1 概述.29 4.4.2 函数详细设计.29 5 结 论.35 5.1 全文总结.35 5.2 研究展望.35 参考文献.36 嵌入式 tcp/ip 协议研究 摘要摘要:internet 的飞速发展和信息家电及后 pc 时代概念的提出,使得信息终端的多元化 已经成为不可抵挡的趋势。近年来,学术界己意识到互联网不能停留在信息管理的层面, 所以美国著名的网络公司 echelon(埃施朗公司)提出“bringing the int

4、ernet to life”,即 “把互联网带到生活中”的口号。在这种形势下,家用电器等嵌入式设备的 internet 网络 化就成了目前网络发展的一个重要方向和必然结果。为此,本文对嵌入式设备联网的 tcp/ip 协议进行了讨论研究。 本文首先对嵌入式 tcp/ip 的特点和发展动态进行了介绍,然后从嵌入式领域的角度对 tcp/ip 协议进行了较全面的分析,提出了一个 tcp/ip 网络组件的系统模型。 本文对 tcp/ip 协议族的一些基本协议如 arp, ip, icmp, tcp, udp 等协议都做了详细 分析,并且根据嵌入式领域的一些特殊要求,提出了这些协议的实时性实现算法,并在不

5、 违反协议标准的前提下,对传统实现算法做了某些取舍和修改。 关键词关键词:嵌入式系统;tcp/ip 协议栈;实时性 tcp/ip protocol from view of embedded field abstract:with the bursting of internet and the new concepts of information consumer electronics and post-pc era, the diversifying of information terminals has become inevitable. in recent years, aca

6、deme has realized that internet cant stay on information management level. so america famous network corporation echelon brings forward the slogan “bring the internet to life”. in this condition, adding internet networking capabilities to embedded devices such as appliances has become an important d

7、irection and inevitable trend of current network development. therefore, this paper discusses and researches the tcp/ip protocol for embedded internet connectivity. at first the paper introduces the characteristics and developing situation of embedded tcp/ip, then in detail analyzes tcp/ip protocol

8、from view of embedded field, and brings up a system model of embedded tcp/ip network component. in this paper, it also has a detail research on some basic protocol such as arp, ip, icmp, tcp, udp etc. then, it brings up some real-time implementing algorithms on the special requirement of embedded fi

9、eld, and improves traditional implement algorithms without going against protocol standard. key words: embedded system; tcp/ip; real-time 1 绪 论 1.1 tcp/ip 概述 tcp/ip ( transmission control protocol / internet protocol )是 70 年代中期美国国防部 (dod)为其 arpnet 广域网开发的网络体系结构和协议标准,它代表了一个协议栈。以它 为基础组建的 internet 是目前国际

10、上规模最大的计算机网间网。 伴随着 internet 的成功,tcp/ip 协议族已经成为通信的全球标准。在 internet 上进行 web 页面的传输,e-mail 传送,文件传输,实现点对点网络,tcp/ip 是最优先采用的协议。 对于嵌入式系统,能够自身运行 tcp/ip 协议,就可以把系统直接连接到 intranet 上,甚至 是世界范围的 internet 上。由于可以和网络上其它主机完全通信,有完整 tcp/ip 协议支持 的嵌入式设备将成为一等网络公民。 但是传统的 tcp/ip 协议实现在实时性方面做得不够好,而是把大量的精力花在保证数 据传送的可靠性以及数据流量的控制上。而

11、在实时性要求比较高的嵌入式领域,传统的 tcp/ip 并不能满足其实时要求。另外传统 tcp/ip 的实现过于复杂,需占用大量系统资源, 而嵌入式应用的系统资源往往都很有限。因此,需要把传统 tcp/ip 在不违背协议标准的前 提下加以改进实现,使其实时性得到提高,占用的存储空间尽可能少,从而满足嵌入式应 用的要求。 这种用于嵌入式系统联网的 tcp/ip 就称为嵌入式 tcp/ip,其主要特点是实时性、简 单性和灵活性。 嵌入式系统首先是一个实时系统,它具有实时系统的根本特点,即能够确定地响应异 步事件。嵌入式实时性是指:系统响应外界不定事件不仅要快(系统响应时间一般要求在毫 秒或微妙级),

12、而且要确定,即系统响应时间要求是确定的和可预测的。作为嵌入式系统重 要组成部分的网络通讯软组件 tcp/ip 协议,如果不能达到实时性要求,在它管理控制下传 输的数据将是无用的甚至是有害的,有时可能导致整个系统工作的错误,它的实时性直接 决定整个系统的实时性。因此,嵌入式 tcp/ip 一般都具有很好的实时性。 嵌入式系统的主要特点是体积小、资源有限,特别是过去大量存在的 8 位和 16 位 mcu 的嵌入式设备,其运算速度和内存大小均难以支持传统的 tcp/ip 协议,或根本不可 能。为此,嵌入式 tcp/ip 都不同程度的对传统 tcp/ip 进行了简化和优化,尽可能地做到 代码精简、存储

13、开销小。 灵活性是指嵌入式 tcp/ip 结构十分灵活,能适应各种应用需要,并极易升级,它包括:可 移植性、可配置性和可剪裁性三个要求。嵌入式应用规模可大可小,网络硬件品种繁多, 底层协议也多种多样,这就要求嵌入式 tcp/ip 协议能够适应各种需求,提供灵活、高效的 网络通讯服务。为了达到灵活性的要求,嵌入式 tcp/ip 应具有开发环境独立性和目标环境 独立性:对底层协议无任何假设,通过网卡配置表动态地将其联入系统中;另外对应用规模应 无限制,通过配置技术,由用户填写配置参数,确定系统规模;采用软组件思想,不同功能 模块由用户选择使用,以最精练、高效的方式组成系统。 综上所述,为嵌入式系统

14、联网提供支持的 tcp/ip 协议,为满足嵌入式系统实时、资源 有限和规模可大可小的特点,应具有很好的实时性和一定的可剪裁性,并且代码要尽可能 精简。 1.2 嵌入式 tcp/ip 的发展现状 由嵌入式网络的应用环境决定了嵌入式 tcp/ip 协议通常应用于特殊的、专用的领域, 不可能像标准的 tcp/ip 协议一样提供完整的协议体系,往往是根据具体的应用提供不同的 协议模块。因此,嵌入式 tcp/ip 协议区别于标准的 tcp/ip 协议的最突出的特点就是: (1) 很好的可裁剪性。由于嵌入式应用的要求千差万别,各种嵌入式应用对系统的要 求不尽相同,并且在嵌入式应用中对产品的成本、价格比较敏

15、感,存储器的容量往往都是 比较有限的,因此必须根据嵌入式网络产品的具体功能,对完整的 tcp/ip 协议功能进行裁 剪,特别是对应用协议提供可裁剪性,以满足用户的需求。 (2) 很强的可移植性。由嵌入式应用的多样性决定了嵌入式应用平台也是变化多端的。 因此,在开发网络协议栈软件的过程中,保证软件的可移植性是非常重要的。这样,在对 嵌入式产品进行软、硬件升级的过程中除了与硬件直接相关的部分代码需要重新编写以外, 不必再对上层协议进行大的修改。 (3) 代码精简。嵌入式 tcp/ip 协议栈是标准 tcp/ip 协议栈的子集,只需要实现基本 的、必要的功能,使生成的二进制代码尽量精简,这对嵌入式网

16、络产品降低开发难度、提 高系统处理能力、节省有限的 rom 和 ram 空间是有着重要的意义的。嵌入式 tcp/ip 协 议栈的这些特点也将成为本课题研究工作的目标与要求。 当今国际上一些著名的嵌入式操作系统供应商,都在自己的嵌入式系统产品中集成了 tcp/ip 网络组件,以便自己的实时系统具备网络通讯功能。由于是面向嵌入式应用,因此 这些产品在实时性、占用存储空间、可移植性方面都做了各具特色的改进。 目前,家电等嵌入式设备直接联网存在的问题是:1.家电中的微控制器一般都是最简单 的控制器,它们的运算速度和系统资源根本无法运行复杂 internet 网络协议 tcp/ip; 2. tcp/ip

17、 协议在实时性方面不能满足家电等嵌入式应用的实时要求;3.每一个上网的家电都要 申请一个 ip 地址,而 ip 地址资源是有限的,而且使用还要付费,成本较高。 随着 internet 的发展,ipv6 将取代 ipv4 , ipv6 有比 ipv4 更长的地址,每个地址有 16 字节长,它提供了一个有效的无限因特网地址空间,影响家电直接上网的 ip 地址资源问题 将随着 ipv6 取代 ipv4 而得到有效解决。因此,目前家电直接上网需解决的关键技术是 tcp/ip 协议的简化和实时性改进。 1.3 课题研究的意义 家电上网和实现远程操作,其意义不在于这种网络的出现所产生的经济价值,而在于 把

18、家电从一种过去像“小农经济”式的存在方式,进入一种开放、互联的“社会化”的存 在方式,也就是从个体进入网络。 我国社会发展和经济进步已进入了城市化的阶段,家用电器高度普及,信息交流的频 繁对家庭的生活方式有着极大的影响,数字化和网络化己是家庭发展的明显趋势。而信息 化城市和信息化社会是目前人们主攻的目标。家居网络是信息化城市和信息化社会的最重 要标志,也是其最基本的单元。家庭的信息化才能形成社会的信息化,可以说,社会的信 息化鼻终基于家庭的信息化。家居网络对社会发展、科技进步、经济繁荣都有极重要的意 义。 本课题社会效益有很深远的意义,一方面为社会信息化解决最基本单位的信息化问题, 另一方面为

19、信息技术提供了一种新型的方法和领域。再有,就是促进了家庭电器、仪器、 设备和网络相连的技术发展。 2 tcp/ip 协议技术 2.1 网络分层结构 为了减少协议设计的复杂性,大多数网络都按层(layer)或级(level)的方式来组织, 每一层都建立在它的下层之上。不同的网络,其层的数量、各层的名字、内容和功能都不 尽相同。但在所有的网络中,每一层的目的都是向它的上一层提供一定的服务,而把如何 实现这一服务的细节对上一层加以屏蔽。 关于协议分层,有两个思想占据了该领域的主导地位。第一个思路基于国际标准化组 织 iso 早期所做的工作,称为 iso 的 osi 开放系统互联参考模型(open s

20、ystem interconnection reference model );第二个就是 tcp/ip 参考模型。 2.1.1 osi 七层参考模型 开放系统 开放系统 图 2 -1 osi 七层网络模型结构 osi 参考模型是关于如何把开放式系统(即为了与其他系统通信而相互开放的系统)连接 起来的。模型共有 7 层,现将其各自主要功能分述如下: 物理层(physical layer ):涉及到通信在信道上传输的原始比特流,主要处理机械的、电 气的和过程的接口,以及物理层下的物理传输介质等问题。 数据链路层(data link layer):主要任务是加强物理层传输原始比特的功能,使之对网络

21、 层显现为一条无错线路。传输以帧的格式实现。其中还有一个特殊的子层介质访问子 层,它主要控制对共享信道的访问。 网络层(network layer):关键问题是确定分组从源端到目的端如何选择路由。 传输层(transport layer):基本功能是从会话层接收数据,并且在必要时把它分成较小的 单元,传递给网络层,并确保到达对方的各段信息正确无误。通常会话层每请求建立一个 传输连接,传输层就为其创建一个独立的网络连接。 会话层(session layer ):允许不同机器上的用户建立会话关系。其服务有管理对话、令牌 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 物理媒体 应用层

22、表示层 会话层 传输层 网络层 数据链路层 物理层 物理媒体 网络层 数据链路层 物理层 管理、同步等。 表示层(presentation layer ):完成某些特定的功能,如用一种大家一致同意的标准方法对 数据编码。 应用层(application layer ):包含大量人们普遍需要的协议,如文件传输。 2.1.2 tcp/ip 参考模型 广泛地讲,tcp/ip 软件分成五个概念层次,建立在第五层(即硬件层)上四个软件层, 图 2.2 给出了这些概念性层次结构以及在这些层次之间传输的数据形式。 tcp/ip 协议并不完全符合 osi 的七层参考模型。传统的开放式系统互连参考模型,是 一种

23、通信协议的 7 层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各 种硬件在相同的层次上相互通信。这 7 层是:物理层、数据链路层、网路层、传输层、话路 层、表示层和应用层。而 tcp/ip 通讯协议采用了 4 层的层级结构,每一层都呼叫它的下一 层所提供的网络来完成自己的需求。这 4 层分别为: 应用层(application layer):在这个最高层,用户调用应用程序通过 tcp/ip 互联网来访 问可用的服务。与各个运输层协议交互的应用程序负责接收和发送数据。 传输层(transport layer):基本任务是提供应用程序之间的通信服务。这种通信又叫端到 端通信。不但要

24、系统地管理信息的流动,还要提供可靠的传输服务,以确保数据到达无差 错、无乱序。 网络层(internet layer):用来处理机器之间的通信问题。其传输格式表现为 ip 数据报。 还要根据需要发出和接收 icmp (internet 控制报文协议)差错和控制报文。 网络接口层(network interface layer ):又称数据链路层,负责接收 ip 数据报并把数据报 通过选定的网络发送出去。它包括一个设备驱动程序,也可能包括一个复杂的子系统,使 用自己的数据链路协议,如以太网协议。 概念性层次 通过层次间的对象 报文和数据流 传输协议分组 ip 数据报 特定于网络的帧 图 2 -2

25、 tcp/ip 网络层次模型及各层之间传输数据形式 如图 2-3 所示当最初的用户数据到来时,数据被送入协议栈中,由上到下每通过一层 都要添加一些首部信息(链路层还要添加尾部信息),直到数据被当成一串比特流送入网络。 数据在不同的层添加了不同的信息,有不同的称呼,如 tcp 传递给 ip 的数据单元称作 tcp 报文段或 tcp 段(tcp segment ), ip 传递给网络接口层的叫 ip 数据报(ip datagram ),通 过以太网传输的比特流称作帧( frame )。因此数据入协议栈发送到网络就是一个按照协议 不断加首部(尾部)信息的过程,同样的道理,从网络上接收数据就是一个逆过

26、程,即不断 的解包,直到获取有用的数据。 2.2 tcp/ip 网络协议 tcp/ip 网络以一种自治和对等的方式操作,互联的计算机都可以作为主机出现,任一 计算机上的应用都可以动态地与对等计算机上的另一个应用建立一个连接,而不需要中心 应 用 传 输 internet 网络接口 硬 件 控制服务器。对等网络的主要优点是允许网络范围内的系统资源得到最大限度的共享。 tcp/ip 是一个网络协议族,协议按上面所述不同的网络层次进行开发,每一层分别负 责不同的通信功能,相应的有不同的协议。tcp/ip 协议的核心是 tcp、udp 和 ip 协议。 这三种协议一般都存在于网络操作系统所带的协议栈中

27、,用户接触到的是许多 tcp/ip 的应 用程序,如电子邮件程序、ftp、telnet 程序等。 tcp 段 ip 数据报 14 20 20 4 以太网 以太网帧 图 2 -3 数据进入协议栈时的封装过程 2.2.1 嵌入式 tcp/ip 协议 嵌入式系统与 tcp/ip 网络的互联,这一技术在许多领域得以广泛的应用。但由于网络 协议的复杂性与嵌入式系统的 mcu 相对简单之间的矛盾,极大的制约了嵌入式系统实现 网络化的进程。要解决这对矛盾可以从两方面进行考虑,一是应用更高性能的 mcu,或者 简化 tcp/ip 协议族。考虑现有芯片水平和价格,系统 mcu 的性能提高的受制因素比较明 显,那

28、么解决矛盾的重点,也是本文的重点就应放在对 internet 协议tcp/ip 协议的研 究上。传统的 tcp/ip 协议是以 pc 机、服务器为应用平台的,协议复杂,功能强大,面面 俱到,而且没有实时的概念,这种情况与嵌入式系统的要求是格格不入的。嵌入式系统要 求应用简单,以满足应用为目的,并不要求功能十分齐全。 嵌入式 tcp/ip 协议即是从以满足嵌入式系统的实际需求为目的这一指导思想出发,建 立在嵌入式 internet 理论的基础上,通过对庞大、功能齐全的 tcp/ip 协议的仔细研究,对 标准的 tcp/ip 协议进行了一定的取舍,从而制定出了一套简单的、适用于嵌入式系统的并 且能

29、完成相应网络功能的协议,称为嵌入式 tcp/ip 协议。 2.2.2 arp 协议 arp 地址解析协议,它是一个隐藏底层网络物理编址、允许给每台机器分配一个任意 ip 地址的底层协议。arp 提供的是一种把 ip 地址映射到物理地址的机制。对此我们先要 了解 ip 和物理地址两种编址形式: ip 地址:互联网上的每个接口必须有一个唯一的 internet 地址(也称 ip 地址),ip 地址长 32bit。internet 地址并不采用平面形式的地址空间,如 1, 2, 3 等,它具有一定的结构。 物理地址:该地址用来指明计算机所安装的网卡的地址,网卡地址是由 ieee 统一分配 给网卡制造

30、商的,每个网卡的地址在世界范围内是唯一的。所有的物理地址的 msb 位的 值为零,即 48 位网卡地址的最高位为 0。以太网中所说的目的地址和源地址都是指物理地 址。 用户数据 用户数据 应用数据 通信 应用数据 以太网尾部 arp 首部 tcp 首部 tcp 首部ip 首部 应用数据tcp 首部ip 首部以太网首部 应用程序 tcp ip 以太网驱 动程序 arp 是在源主机不知目的物理地址的前提下才需要的。协议的实现可以从两个方面来 考虑:一是发送方,在以太网帧的传输中是以物理地址为目的地址的,但在应用层是以网络 的 ip 地址来操作的,当给定一个目的站的 ip 地址时,发送方软件会查询它

31、的 arp 缓存, 看是否有从该 ip 地址到物理地址的映射,若有,则软件提取该物理地址,把数据放到使用 该地址的帧中,并发送该帧;若没有则软件必须广播一个 arp 请求并等待应答。从接收方 考虑,如果网络上过来的是 arp 请求帧,则查看自己是否是请求的目标(是否与自己的 ip 地址相符),如果符合则发送 arp 应答帧。 0 8 16 24 31 图 2 -4 arp 的报文格式 硬件类型字段表示硬件地址的类型,它的值为 1 即表示以太网地址;协议类型字段表 示要映射的协议地址类型,如 0 x0800 即表示 ip 地址;硬件地址长度和协议地址长度以字 节为单位,对于以太网上的 ip 地址

32、的 arp 请求或应答来说,它们的值分别为 6 和 4;操 作字段指出四种操作类型,它们是 arp 请求(值为 1)arp 应答(值为 2 )、rarp 请求(值为 3 )、rarp 应答(值为 4),这个字段是必需的,因为 arp 请求和应答的帧类型字段是相同 的。 2.2.3 ip 协议 ip 协议位于网络层,是 tcp/ip 协议族中最为核心的协议,所有的 tcp,udp,icmp 及 igmp 数据都以 ip 数据包格式传输。 ip 是一个无连接的协议,主要就是负责在主机间寻址并为数据包设定路由,在交换 数据前它并不建立会话。因为它不保证正确传递,另一方面,数据在被收到时,ip 不需要

33、 收到确认,所以它是不可靠的。 根据我们前面提到关于 arp 的知识,如果 ip 地址目标为本地地址时,ip 将数据包直 接传给那个主机;如果目标地址为远程地址的话,ip 在本地的路由表中查找远程主机的路 由。如果找到一个路由,ip 用它传送数据包。如果没找到呢,就会将数据包发送到源主机 的缺省网关,也称之为路由器。 这样当路由器收到一个包后,该包向上传给 ip: (1)如果交通阻塞,包在路由器中停滞,ttl 至少减 1 或更多。要是它降到 0 的话,包 就会被抛弃。 (2)如果对于下一网络来说包太大的话,ip 会将它分割成若干个小包。 (3)如果包被分解,ip 为每个新包制造一个新头,其中包

34、括:一个标志,用来显示其它 小包在其后;一个小包 id,用来确定所有小包是一起的;一个小包偏移,用来告诉接收主 机怎么重新组合它们。 (4)ip 计算一个新的检验和。 (5)ip 获取一个路由的目标硬件地址。 硬件类型协议类型 硬件地址长度操作 发送方硬件地址(八位组 0-3) 发送方硬件地址(4-5)发送方 ip 地址(八位组 0-1) 发送方 ip 地址(2-3)目标硬件地址(八位组 0-1) 目标硬件地址(八位组 2-5) 目标 ip 地址 (八位组 0-3) 协议长度 (6)ip 转发包。 在下一主机,包被发送到 tcp 或 udp。每个路由器都要重复该过程。直到包到达最 终目的地。当

35、包到达最终目的地后,ip 将小包组装成原来的包。图 2-5 给出的是 ip 包的头 标结构: 0 15 31 图 2 -5 ip 头标结构 其中,头长度是指首部占 32 位字的数目,包括任何选项;数据包长度是指整个 ip 数 据报的长度,以字节为单位;标识字段唯一地标识主机发送的每一份数据报,通常每发送 一份报文它的值就会加 l; ttl(time-to-live)生存期字段设置了数据报可以经过的最多路由 器数,它的初始值由源主机设置,一旦经过一个处理它的路由器,它的值就减去 1,当它 为 0 时,数据包被丢失;协议类型表示 ip 上面的层所采用的协议类型,如 ip 上面是 udp 协议,则取

36、值为 17h,类似于网络帧中的类型字段;为了计算校验和,首先把校验和字段 置为 0,然后对首部中每个 16 位进行二进制反码求和(整个首部看成是由一串 16 位的字组 成),结果存在校验和字段中;选项和填充是可变长度的,它是要保证数据报首部的长度是 32 比特的整数倍,通过设置填充字段添“0”补齐。 2.2.4 icmp 协议 最初设计的 icmp 仅仅为了路由器向主机报告传送出错原因,但发展到现在 icmp 在 两台主机上的协议软件之间能提供了通信,因此产生了多种 icmp 报文。尽管每个 icmp 报文有自己的格式,但它们都以相同的三个字段开始:一个 8 比特整数的报文类型(typ)字 段

37、用来标识报文,一个 8 比特的代码字段提供有关报文类型的进一步信息,以及一个 16 比特校验和(checksum)字段。icmp 报文格式如图 2-6 所示。 0 8 16 31 图 2 -6 icmp 的报文格式 2.2.5 udp/ tcp 协议 udp 是一个简单的面向数据报的运输层协议,rfc 768 postel 1980是 udp 的正式规 范文件。udp 和 tcp 都属于 ip 上层的传输层协议。二者都使用端口号作为送往主机的解 码地址。udp 为维护数据包的整体性应尽最大可能地选用校验和。udp 数据包的可靠性是 与 ip 相当的,udp 客户机向指定的远端主机发送数据包时,

38、并未事先确知对方是做好了 接收数据的准备的,所以,远端主机收到的数据包未能保证其正确的顺序。但是由于 tcp 4 位版本 版本 4 位头长度 长度 服务类型数据包类型 标识 标 识 dfmf片偏移 生存期协议类型头检验之和 发送 ip 地址 目的 ip 地址 选项和填充位 类型(8 或 0)码(0)校验和 标识符序号 任选数据 所传数据流应用了顺序号和应答措施,可以发现数据的丢失、段的失序和对传输错误的排 除,所以 tcp 协议提供的是数据流的可靠传输。udp 首部的各字段如图 2-7 所示: 源端口目的端口 报文长度校验和 数 据 图 2 -7 udp 数据报的字段格式 端口号表示发送进程和

39、接收进程。需要指出,由于 ip 层己经把 ip 数据报分配给 tcp 或 udp(根据 ip 首部中协议字节段值),因此 tcp 端口号由 tcp 来查看,而 udp 端口号由 udp 来查看,tcp 和 udp 的端口号是相互独立的。 udp 长度字段指的是 udp 首部和 udp 数据的字节长度,该字段的最小值为 8 字节 (发送一份 0 字节的 udp 数据是允许的)。这个 udp 长度是有冗余的,ip 数据报长度指的 是数据报全长,因此 udp 数据报长度是全长减去 ip 首部的长度。udp 的校验和覆盖它们 的首部以及数据部分,回顾 ip 的校验和只覆盖首部。它是一个端到端的校验和,

40、由发送端 计算,然后由接收端验证。目的是为了发现 udp 首部和数据在发送端和接收端之间发生的 任何改动。 3 嵌入式 tcp/ip 总体框架设计 3.1 嵌入式 tcp/ip 网络系统结构 其中,tcp/ip 协议是本课题的主要任务,socket apis 是一组 c 语言调用接口函数, 应用程序通过它使用 tcp/ip 协议栈的功能。tcp/ip 协议栈与 socket apis 一起以系统软组 件的形式提供给用户,用户使用 sockets apis 编写应用代码,然后与该系统组件的代码库 链接在一起。操作系统内核为嵌入式 tcp/ip 组件和应用程序提供任务管理、存储分配等系 统支持。

41、图 3 -1 嵌入式 tcp/ip 网络系统的体系结构 3.2 总体数据流程 嵌入式 tcp/ip 的总体数据流图如图 3-2 所示: 应用程序通过 socket 应用编程接口使用 tcp/ip 协议栈提供的数据通讯功能。发送数据 时,如果选择的是面向连接的 tcp 协议,则应用程序将用户数据交给 tcp 协议模块处理, tcp 模块将其首部和数据封装成 tcp 报文段;如果选择的是无连接的 udp 协议,则将用 户数据交给 udp 协议模块处理,udp 模块将其首部和数据封装成 udp 数据报。然后将封 装好的 tcp 报文段或 udp 数据报交给 ip 协议模块,ip 模块在 tcp 报文

42、段或 udp 数据报 上添加 ip 首部,并封装成 ip 数据包,然后根据路由表为 ip 数据包确定路由,如果找不到 相应路由,则向 icmp 协议发送出错报文,由 icmp 协议模块进行处理;找到了路由则将 数据包发送到网络接口层,网络接口层判断发送的数据是从以太网接口还是从异步串口发 出,如果是从以太网接口发出,则要利用 arp 协议找到目的 ip 地址对应的物理地址,然 后封装成以太网帧,由网卡驱动程序将以太网帧发送出去;如果是从串口发出,则直接利 用下层的 ppp 协议将数据包封装成 ppp 帧,然后由异步串口驱动程序将 ppp 帧发送出去。 接收数据时,由网卡驱动程序和异步串口驱动程

43、序负责接收数据,然后由中断处理程 序唤醒数据接收任务,由数据接收任务将接收到的数据帧交给网络接口层:网络接口层取出 帧头,判断接收数据的类型,如果是 arp 报文,则将 arp 报文交给 arp 协议模块处理; 如果是 ip 数据包,则将 ip 数据包交给 ip 协议模块处理,tp 协议模块取出 ip 首部信息, 然后根据数据包的类型,将报文交给相应的协议模块(tcp 模块、udp 模块或 icmp 模块) 处理;tcp 模块和 udp 模块收到报文后,取出首部进行处理,并将用户数据交给应用程 序。 应 用 程 序 socket apis tcp/ip 协议栈 驱动程序 实时操作系统 硬 件

44、用户发送任务用户接收任务 用户数据 用户数据 面向连接 无连接 tcp 报文段 udp 数据报 icmp 报文 ip 数据包 arp 报文 经过路由地址 解析的数据 由中断处理程序激活 以太网帧 ppp 帧 图 3 -2 tcp/ip 的总体数据流图 3.3 嵌入式 tcp/ip 协议实现 数据链路层选择用以太网协议,那么在上层网络协议栈的选择上为什么要用 tcp/ip 而 不是其它协议栈(比如 ipx/spx)呢?这是因为 tcp/ip 是 internet 网络环境中“既成事实”的 开放系统平台,要想使一个内部网络或网络设备对外部世界来讲是可视的,则必须用 tcp/ip 进行通信。通过 t

45、cp/ip 能够使内部网络或网络设备与整个 internet 联网,在全世界 范围内进行通信与信息交流。一个可互联的设备本质上就比一个不可互联的设备更有价值。 假如你在某一区域安装了很多监控产品,但数据中心却不在该区域,而是设在其它地方, 这时就需要通过 tcp/ip 协议来传输控制信息、状态信息以及数据信息。另外,在嵌入式产 品中实现 tcp/ip 协议的好处是可以统一平台,使不同厂家生产的产品兼容。比如一个大型 的智能社区可能由多家设备供应商来进行建设,其中一些厂商做平台、做软件,另外一些 厂商做硬件。 tcp/ip 最先是在 unix 系统里实现的,后来的 linux, dos, win

46、dows 也实现了 tcp/ip,随后 tcp/ip 协议也被移植到其它嵌入式的处理器上,例如 8 位的 mcs51 单片机、 avr 单片机,16 位的 arm, c166 以及 32 位的 mips,arm 等芯片上。tcp/ip 协议的最底 层 ip 层,很多定义都是 16 位或 32 位的,例如源 ip 地址(32 位)、目的 ip 地址(32 位)、校 验值(16 位),特别是校验值,是以 16 位为单位进行计算的,这样使得能够处理 16 位、32 位运算的 cpu,比如 80286、80386、arm、 mips、dsp,就有很大的速度上的优势。 由于智能仪器的资源有限,所以在仪器

47、中嵌入的 tcp/ip 协议栈和我们平常用的计算机 中的 tcp/ip 协议栈有很大的不同。嵌入式 tcp/ip 不追求协议的完备性,一般以“够用即 可”为原则,所以需要根据实际需求来对协议栈进行裁剪。再加上本设计方案没有采用操 作系统,所以不能够直接移植 unix 上实现的 tcp/ip 协议源代码。 由于嵌入式系统与电脑的差别很大,所以嵌入式 tcp/ip 与常规 tcp/ip 的实现有很大 的不同。在电脑里编写 tcp/ip 程序,你可以不考虑代码大小、代码速度,但在嵌入式系统 上这些都是要考虑的问题。 socket 应用编程接口 tcp 协议模块udp 协议模块 ip 协议模块icmp

48、 协议模块 arp 协议模块网络接口层 驱动程序 物理链路异步串口 数据任务接收 收 tcp/ip 包含从应用层、传输层、网络层到物理层的一系列协议,且每层可采用的协议 又有好几种。嵌入式系统应用针对性非常强,只需要实现与需求相关的部分协议。例如文 件共享 smb 协议,unix,windows 操作系统都支持,但在嵌入式系统中却没有必要。 所以只需实现最精简的 tcp/ip 协议。 3.4 基本协议框架设计 3.4.1 网络接口层实现 功能概述 该层是 tcp/ip 协议栈与下层物理设备的驱动程序之间的接口。 发送普通数据时,本 层的网络接口层发送函数 ni_send()负责

49、接收上层协议产生的数据,然后判断发送的数据是 从以太网接口发出还是从异步串口发出。如果是从以太网接口发出,则 ni_send()以待发 ip 数据报的目的 ip 地址为索引查找 arp 地址映射表,如果查到对应的目的物理地址,则以 此封装成以太网帧,在调用下层的 ne_transmit()数实现发送;如果没有相应的目的物理地 址,则调用 arp 协议实现中的 arp_req()函数发 arp 请求;如果是从串口发出,则直接调 用下层 ppp 协议中的 ppp_send()函数发送。 接收数据时,本层的网络接口层接收函数 ni_recv()被下层以太网驱动程序和 ppp 协议 中的数据接收任务调

50、用。ni_recv()首先判断接收数据类型,如果是 ip 数据报,则调用上层 ip 协议中的 ip_recv()函数;如果是 arp 数据报,则调用 arp 报文处理函数 arp_proc()。 初始化函数 ni_init()负责实现网络接口层、arp 协议以及下层的物理设备驱动程序的 初始化,包括任务的创建、数据结构的初始化。该函数被上层的 ip 协议初始化函数 ni_init()调用。 函数关系图 网络接口层的函数关系如图 3.3 所示,其中虚线框内为网络接口层实现。 arp 报文 ip 报文 ip 报文 接收数据 驱动程序 图 3 -3 网络接口层函数关系 3.4.2 a

51、rp 协议实现 功能概述 arp 协议实现对 arp 报文的解释、处理,同时管理 arp 映射表。 arp 协议是某些网络接口(如以太网和令牌环网)使用的特殊协议,arp 的地址解析功 能是为 ip 地址和数据链路层使用的硬件地址提供动态地址映射。通用计算机系统中,arp 高速缓存一般设计成双向数据链的形式,这样整个缓存可以方便地动态增减。但是这种非线 性存储的链表式缓存结构,在进行表项匹配查找时比较费时,不适用于嵌入式系统。因此 arp 的地址缓存采用了线性数组形式的结构。它在内存中是连续线性存储的,查找速度快。 嵌入式应用中节点不是很多,即 arp 缓存容量不需要很大,因此

52、将 arp 高速缓存设计成固定 大小。被动的嵌入式服务器主要是接收来自客户的服务请求,为客户提供服务,即嵌入式服务 器不会主动向某一主机发数据帧。既然如此始终处于被动状态的服务器完全不需要向任何 主机发送 arp 请求,设备只要能处理 arp 请求并返回 arp 应答即可。鉴于这种情况,arp 调用 arp_proc() 接收函数 ni_recv()发送函数 ni_send() 协议中选择对 arp 应答部分进行实现。 arp 报文分为 arp 请求报文和 arp 应答报文。当进行以太网帧封装时,如果不知 道目的物理地址,则调用 arp_req()函数发出 arp 请求报文;arp 报文处理函

53、数 arp_proc() 负责对输入 arp 报文进行处理,如果收到 arp 请求报文,且请求解析的物理地址正是自己 的物理地址,则调用函数 arp_reply()发出 arp 应答报文;如果收到 arp 应答报文,则调 用函数 arp_send()把等候地址解析的 ip 数据报发出。 管理 arp 映射表的工作主要包括:arp 表的查找,arp 表项的添加、删除以及 arp 表 项的更新。其中,有一个定时器任务 timer_task()负责对 arp 表项的更新工作。arp 映射 表的每个表项有一个生存时间域(time to live, ttl)以表明该项是否己过时,ttl 域在表项建立 时

54、根据刷新频率置初值,定时器任务每隔一段时间就把各表项的 ttl 域减一,如果该域为负 值,则把该表项删除。每当收到一个 arp 报文后,首先以该报文中的有用信息更新 arp 映射表中的表项。 函数 arp_init()负责 arp 协议的初始化,包括任务的创建、数据结构的初始化等工作。 arp_init()被网络接口层的初始化函数 ni_init()调用。 函数关系图 arp 协议的函数关系如图 3 -4 所示,其中虚线框内为 arp 协议实现。 图 3-4 arp 协议函数关系图 3.4.3 ip 协议实现 功能概述 ip 协议实现对无连接的 ip 数据包的寻

55、径、传送。其中,数据报的寻径采用静态路由表 的方式实现。 ip 协议是 tcp/ip 的基础,为不同网络的主机之间发送数据报的操作序列提供无连接 服务。通过在数据报前添加 ip 协议头,使每个数据报具有寻址能力。嵌入式系统只把 ip 作为传输工具,进行简化以完成主要的操作。得到 ip 包后,检验 ip 头部的版本、目的地 址、校验和正确否,解析出协议类型字段,由此交给相应的高层协议处理。发送 ip 包时, 将缓冲区内的源地址与目的地址互换,设置校验和,然后交给下层协议处理。不符合要求, 则将此包丢弃。ip 包最大可以为 65kb,可以分段传输,而在嵌入式系统里根本无法容纳 如此大的数据包,因此

56、一般不支持分段传输。所以限制 mcu 发送和接收数据包的方式以 避免分段传输,从而减少程序复杂度。 一般情况下,数据包要经过不同的物理网络,则 ip 层必须支持数据包的分片和重装。但 ip 的分片和重组所需的开销比较大,而现有的网络一般都支持以太网,并且在此次应用的 8/16 位嵌入式系统中,传输的数据都是一些数据量比较小的状态信息或者控制信息。因此数 据报都不会超过协议所限制的 1500 字节。如果极少数数据实在比较大,可以在程序中进行 处理,分批次进行传输。因此可以裁减掉 ip 的分片和重组功能。而 ip 数据包的路由功能则 交给默认网关执行。 发送数据时,上层的 tcp 发送函数 tcp

57、_send(),udp 发送函数 udp_send()以及同层的 icmp 协议中的 icmp_send()函数把所发数据交给 ip_send()函数。在 ip_send()函数中,调用 ip_route()函数,查找静态路由表,如果找到相应的路由,则调用网络接口层发送函数 ni_send()实现发送;如果没有找到相应的路由,则调用 icmp 协议实现中的函数 icmp_send()发送 icmp 出错报文。 接收数据时,函数 ip_recv()被下层的网络接口层接收函 数 ni_recv()调用以接收 ip 数据报。在 ip_recv()中,检查数据报的目的 ip 地址,如果不是 自己的 i

58、p 地址,则调用 ip_route(),为其路由;如果为自己的 ip 地址,则再检查该数据报 的类型,如果是 tcp 报文,则调用上层的 tcp 数据接收函数 tcp recv();如果是 udp 报文, 则调用上层的 udp 数据接收函数 udp_recv();如果是 icmp 报文,则调用 icmp 协议实现 中的接收处理函数 icmp_proc()。 初始化函数 ip_init()负责 ip 协议以及 icmp 协议的初始化,完成如静态路由表的安装 等工作,该函数在应用初始化时被函数 net_init()调用。 3.4.4 icmp 协议实现 功能概述 icmp 协议是

59、ip 网络内为控制、测试、管理功能而设计的协议。icmp 的报文类型很多, 不同类型的报文由类型和代码字段共同决定。为了了解设备是否可达, simplified tcp/ip 协 议栈中主要实现了回显请求和应答报文的功能。该程序发送 icmp 回显请求报文给目的主 机,并等待 icmp 回显应答。对于处于被动状态设备而言,不需要主动发送回显请求,只要能 够识别来自其他客户的回显请求并发送回显应答就可以了。为了能够使用户了解设备是否 可达,应当能够对 ping 的回显请求给予应答。icmp 协议位于 ip 层,负责接收、解释、发 送 icmp 报文。icmp 报文主要有两种功能:报告出错信息、传

60、送控制信息。尽管与 ip 协议 处于同一层次,但 icmp 报文却是封装在 ip 数据包的数据段部分进行传送的,具体如图 3 -6 所示。 、 icmp 报文 ip 数据包 图 3 -6 icmp 报文的封装 icmp 协议实现比较单一,由两个函数组成:icmp_proc()函数、icmp_send()函数。其中, icmp_proc()函数负责解释、处理收到的 icmp 报文;icmp_send()函数负责构成 icmp 报文 并发送该报文。 icmp 报文格式如下: 1 byte 1 byte 2 byte 2 byte 其中类型字段用来标识报文;代码字段提供有关报文类型的进一步信息。 3

温馨提示

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

评论

0/150

提交评论