TCP/IPv6

本文分析了IPv6协议在嵌入式系统中的应用前景,提出了一种针对资源受限环境的TCP/IPv6协议栈精简方案,并详细介绍了其在网络接口层的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  20世纪90年代初,IETF就开始探讨下一代网络协议,提出过多个替代IPv4的协议,最终IPv6协议得到广泛的认 同,被IETF选为下一代互联网络协议。

  IPv6是“Internet Protocol Version 6”的缩写,也被称作下一代互联网协议。IPv6是为了解决IPv4所存在的 一些问题和不足而提出的,同时它还在许多方面做了改进,例如路由方面和自动配置方面。经过一个较长的IPv4 和IPv6共存的时期,IPv6最终会完全取代IPv4,并在互联网上占据统治地位。对比IPv4和IPv6,IPv6有如下的特 点:简化的报头和灵活的扩展;层次化的地址结构;即插即用的联网方式;网络层的认证与加密;服务质量的满 足;对移动通信更好的支持,这些特点也可以称作是IPv6的优点。

  (1)简化的报头和灵活的扩展

  IPv6对数据报头作了简化,以减少处理器开销并节省网络带宽,如图1所示为IPv6的数据报头。IPv6的报头由一 个基本报头和多个扩展报头(extenslonheader)构成,基本报头IPV6头结构具有固定的长度(40字节),放置所有路由器都 需要处理的信息。由于Interi;et上的绝大部分包都只是被路由器简单的转发,因此固定的报头长度有助于加快 路由速度。IPv4的报头有15个域,而IPv6的只有8个域;IPv4的报头长度是由IHL域来指定的,而IPv6的报头长度 是固定的(40个字节)。这就使得路由器在处理IPv6报头时显得更为轻松,与此同时,IPv6还定义了多种扩展报 头,这使得IPv6变得极其灵活,能提供对多种应用的强力支持,同时又为以后支持新的应用提供了可能。这些报 头被放置在IPv6报头和上层报头之间,每一个可以通过独特的“下一报头”的值来确认◇除了逐个路程段选项报 头(它携带了在传输路径上每一个节点都必须进行处理的信息)外,扩展报头只有在它到达了IPv6报头中所指定 的目标节点时才会得到处理(当多点播送时,则是所规定的每一个目标节点)。在那里,用IPv6的下一报头域中 所使用的标准解码方法调用相应的模块去处理第一个扩展报头(如果没有扩展报头,则处理上层报头),每一个 扩展报头的内容和语义决定了是否去处理下一个报头。因此,扩展报头必须按照它们在包中出现的次序依次处理 。一个完整的IPv6的实现包括下面这些扩展报头的实现:逐个路程段选项报头、目的选项报头、路由报头、分段 报头、身份认证报头、有效载荷安全封装报头、最终目的报头。

  (2)层次化的地址结构

  IPv6将现有的IP地址长度扩大4倍,由当前IPv4的Oh位扩充到128位,以支持大规模数量的网络节点。这样IPv6的 地址总数大约有3.4×10E38个。平均到地球表面上来说,每平方米将获得6.5×1OE23个地址。IPv6支持更多级别 的地址层次,IPv6的设计者把IPv6的地址空间按照不同的地址前缀来划分,并采用了层次化的地址结构,以利于 骨干网路由器对数据包的怏速转发。

  IPv6定义了三种不同的地址类型:单点传送地址(unlcast address)、多点传送地址(multicast address)和 任意点传送地址(anycast address)。所有类型的IPv6地址都是属于接口(interface)而不是节点(n。de)。 一个IPv6单点传送地址被赋给某一个接口,而一个接口又只能属于某一个特定的节点,因此一个节点的任意一个 接口的单点传送地址都可以用来表示该节点。

  IPv6中的单点传送地址是连续的,以位为单位的掩码地址与带有CiDR(classless Inter domain router)的 IPv4地址很类似,一个标识符仅标识一个接口的情况。在IPv6中有多种单点传送地址形式,包括基于全局提供者 的单点传送地址、基于地理位置的单点传送地址、NSAP地址、IPX地址、节点本地地址、链路本地地址和兼容IPv4 的主机地址等。

  多点传送地址是一个地址标识符对应多个接口的情况(通常属于不同节点),IPv6多点传送地址用于表示一组节 点,一个节点可能会属于几个多点传送地址。在Internet上进行多播是在1988年随着D类IPv4地址的出现而发展起 来的,这个功能被多媒体应用程序所广泛使用,它们需要一个节点到多个节点的传输。RFC 2373对于多点传送地 址进行了更为详细的说明,并给出了一系列预先定义的多点传送地址。

  任意点传送地址也是一个标识符对应多个接口的情况,如果一个报文要求被传送到一个任意点传送地址,则它将 被传送到由该地址标识的一组接口中最近的一个(根据路由选择协议距离度量方式决定)。任意点传送地址是从 单点传送地址空间中划分出来的,因此它可以使用表示单点传送地址的任何形式。从语法上来看,它与单点传送 地址是没有差别的。当一个单点传送地址被指向多于一个接口时,该地址就成为任意点传送地址,并且被明确指 明。当用户发送一个数据包到这个任意点传送地址时,离用户最近的一个服务器将响应用户,这对于一个经常移 动和变更的网络用户大有益处。

  (3)即插即用的联网方式

  IPv6把自动将IP地址分配给用户的功能作为标准功能。只要机器连接上网络便可自动设定地址。它有两个优点: 一是最终用户用不着花精力进行地址设定;二是可以大大减轻网络管理者的负担。IPv6有两种自动设定功能:一 种是和IPv4自动设定功能一样的名为“全状态自动设定”功能;另一种是“无状态自动设定”功能。

  在IPv4中,动态主机配置协议(dynamic hostconfiguration protocol,DHCP)实现了主机IP地址及其相关配 置的自动设置。一个DHCP服务器拥有一个IP地址池,主机从DHCP服务器租借IP地址并获得有关的配置信息(如缺 省网关、DNS服务器等),由此达到自动设置主机IP地址的目的。IPv6继承了IPv4的这种自动配置服务,并将其称 为全状态自动配置(stateful autoconfiguration)。

  在无状态自动配置(stateless auto configuration)过程中,主机首先通过将它的网卡MAC地址附加在链接本 地地址前缀1111111010之后,产生一个链路本地单点传送地址。接着主机向该地址发出一个被称为邻居发现 (neighbor discovery)的请求,以验证地址的唯一性。如果请求没有得到响应,则表明主机自我设置的链路本 地单点传送地址是唯一的。否则,主机将使用一个随机产生的接口ID组成一个新的链路本地单点传送地址。然后 ,以该地址为源地址,主机向本地链路中所有路由器多点传送一个被称为路由器请求(r。uter solicitati。n) 的配置信息。路由器以一个包含一个可聚集全球单点传送地址前缀和其他相关配置信息的路由器公告响应该请求 。主机用它从路由器得到的全球地址前缀加上自己的接口ID,自动配置全球地址,然后就可以与Internet中的其 他主机通信了。使用无状态自动配置,无需手动干预就能够改变网络中所有主机的IP地址。例如,当企业更换了 联人Internet的TSP时,将从新ISP处得到一个新的可聚集全球地址前缀,ISP把这个地址前缀从它的路由器上传送 到企业路由器上。由于企业路由器将周期性地向本地链路中的所有主机多点传送路由器公告,因此企业网络中所 有主机都将通过路由器公告收到新的地址前缀,此后它们就会自动产生新的IP地址并覆盖旧的IP地址。

  (4)网络层的认证与加密

  安全问题始终是与Internet相关的一个重要话题。由于在IP协议设计之初没有考虑安全性,因而在早期的 Internet上时常发生诸如企业或机构网络遭到攻击、机密数据被窃取等事情。为了加强Internet的安全性,从 1995年开始,IETF着手研究制定了一套用于保护IP通信的IP安全(IPSec)协议。IPSec是IPv4的一个可选扩展协 议,是IPv6的一个必须组成部分。

  IPSec的主要功能是在网络层对数据分组、提供加密和鉴别等安全服务。它提供了两种安全机制:认证和加密。 认证机制使IP通信的数据接收方能够确认数据发送方的真实身份以及数据在传输过程中是否遭到改动;加密机制 通过对数据进行编码来保证数据的机密性,以防数据在传输过程中被他人截获而失密。IPSec的认证报头 (authentication header,AH)协议定义了认证的应用方法,安全负载封装(encapsulating secunty payload ,ESP)协议定义了加密和可选认证的应用方法。在实际进行IP通信时,可以根据安全需求同时使用这两种协议或 选择使用其中的一种。AH和ESP都可以提供认证服务,不过AH提供的认证服务要强于ESP。

  IPSec定义了两种类型的安全认证(SA):传输模式SA和隧道模式SA。传输模式SA是在IP报头(以及任何可选的 扩展报头)之后和任何高层协议(如TOP或UDP)报头之前插入AH或ESP报头;隧道模式SA是将整个原始的IP数据包 放人一个新的IP数据包中。在采用隧道模式SA时,每一个IP数据包都有两个IP报头:外部IP报头和内部IP报头。 外部IP报头指定将对IP数据包进行IPSec处理的目的地址,内部IP报头指定原始IP数据包最终的目的地址。传输模 式SA只能用于两个主机之间的IP通信,而隧道模式SA既可以用于两个主机之间的IP通信,还可以用于两个安全网 关之间或一个主机与一个安全网关之间的IP通信,安全网关可以是路由器、防火墙或VPN设备。

  作为IPv6的一个组成部分,IPSec是一个网络层协议。它只负责其下层的网络安全,并不负责其上层应用的安全 ,如Web、电子邮件和文件传输等。也就是说,验证一个Web会话,依然需要使用SSL协议。不过,TCP/IPv6协议簇 中的协议可以从IPSec中受益,例如,用于IPv6的OSPFv6路由协议就去掉了用于IPv4的OSPF中的认证机制。作为 IPSec的一项重要应用,IPv6集成了虚拟专用网(VPN)的功能,使用IPv6可以更容易地、实现更为安全可靠的虚 拟专用网。

  (5)服务质量的满足

  基于IP涩的Internet在设计之初,只有一种简单的服务质量,即采用“尽最大努力”(best effort)传输,从 原理上讲服务质量QoS是无保证的。文本传输,静态图像等传输对QoS并无要求。随着IP网上多媒体业务增加,如 IP电话、VoD、电视会议等实时应用,对传输延时和延时抖动均有严格的要求。

  IPv6数据包的格式包含一个8位的业务流类别(class)和一个新的20位的流标签(flow label)。最早在RFC  1883中定义了4位的优先级字段,可以区分16个不同的优先级,后来在RFC 2460里改为8位的类别字段,其数值及 如何使用还没有定义,其目的是允许发送业务流的源节点和转发业务流的路由器在数据包上加上标记,并进行除 默认处理之外的不同处理。一般来说,在所选择的链路上,可以根据开销、带宽、延时或其他特性对数据包进行 特殊的处理。

  一个流是以某种方式相关的一系列信息包,IP层必须以相关的方式对待它们。决定信息包属于同一流的参数包 括:源地址、目的地址、QoS、身份认证及安全性。IPv6中流的概念的引入仍然是在无连接协议的基础上的,一个 流可以包含几个TCP连接,一个流的目的地址可以是单个节点也可以是一组节点。IPv6的中间节点接收到一个信息 包时,通过验证它的流标签,就可以判断它属于哪个流,然后就可以知道信息包的QoS需求,进行快速的转发。

  (6)对移动通信更好的支持

  未来移动通信与互联网的结合将是网络发展的趋势之一,移动互联网将成为我们日常生活的一部分,改变我们生活的方方面面。移动互联网不仅仅是移动接人互联网9它还提供一系列以移动性为核心的多种增值业务,如查询本地化设计信息、远程控制工具、无限互动游戏、购物付款等。移动IPv6的设计汲取了移动IPv4的设计经验,并且利用了iPv6的许多新特征,所以提供了比移动IPv4更多的、更好的特点。移动IPv6成为IPv6协议不可分割的一部分。

  欢迎转载,信息来源维库电子市场网(www.dzsc.com



  来源:ks99

136423:

  摘要: 随着网络的发展,新的IPv6协议可以更好地满足嵌入式系统对联网功能的需求,在嵌入式系统中实现IPv6协议有着良好的应用前景,因此着重研究了如何对复杂的TCP/IPv6 协议栈进行精简,并提出了一套可行的方案,此方案能够适应嵌入式系统的需要,然后用软件实现嵌入式系统中的精简的TCP/IPv6 协议栈,模块之间能够互相通信。

  引言

  随着嵌入式系统应用的快速发展,为实现对其他设备的控制、监视或管理等功能,需要将嵌入式设备连入互联网,以便于远程控制和监测。为将嵌入式设备连入互联网,需要有通信模块实现通信协议。目前嵌入式设备能够通过主流的TCP/IP 协议可直接与外网连接。然而随着网络规模的日益扩大、上网设备和人数的激增,目前采用的IPv4逐渐接近其自身发展的极限,其中比较显著的问题是IP 地址资源的不足。IPv6[1] 采用长度为128 位的地址,地址空间几乎可以视为无限,IPv6不仅完全地解决了地址短缺问题,还对在IPv4 中解决不好的其他问题(如,端到端IP连接、服务质量、安全性、移动性等方面)进行了改进。IPv6成为嵌入式设备进行网络互连的首选。

  1 嵌入式系统中TCP/IPv6 协议栈的特点与设计

  1.1 嵌入式系统中TCP/IPv6 协议栈的特点

  嵌入式系统不同于普通系统,它在硬件资源的占有量以及处理器的处理能力等方面受到限制,因此TCP/IP 协议栈在嵌入式系统与其在通用操作系统中的实现有很大不同。对于嵌入式系统而言,考虑到TCP/IP协议的复杂性以及嵌入式系统自身资源的有限,对TCP/IP 的实现并不是一件容易的事情[2]。因此就需要对原本复杂的TCP/IPv6 协议栈的实现进行精简。嵌入式IPv6 协议栈独立于嵌入式设备的操作,代码空间小、移植性好,可以在无法承载操作系统的小存储空间的嵌入式设备上实施,以实现这些设备间的基本网络功能。

  1.2 嵌入式系统中TCP/IPv6 协议栈的设计

  芯片采用挪威Chipcon 公司推出的符合2.4GHz IEEE802.15.4 标准的射频收发器CC2420[3] 。该协议栈要实现TCP/IPv6 协议栈的基本功能,运行于无线网环境下。底层协议采用IEEE 802.15 工作组制定的802.15.4 协议,802.15.4 协议是一个短距离的无线通信标准。网络层支持TCP、ICMPv6 协议,不实现UDP 协议。

  1.2.1 网络接口层

  网络接口层是TCP/IPv6 协议栈与以太网设备的驱动程序之间的接口。一方面,它将从网卡接收到的数据提交给上层网络层协议软件处理;另一方面,它将从网络层接收来的数据传送给网卡驱动。接口函数介绍如下:

  (1)初始化函数

  初始化函数InitNi()负责实现网络接口层以及下层的物理设备驱动程序的初始化。主要包括以太网控制器的上电复位、MAC 地址的配置、收发缓冲环首尾地址的配置以及DMA 的初始化和收发数据格式的定义等。

  (2)发送函数

  在发送数据时,网络接口层发送函数Send_Ethernet_Frame()负责接收IP协议产生的数据,将其封装成以太网数据帧后,调用下层的Send_ Packet()函数实现发送。Send_Packet()函数实现的是把以太网数据帧通过远程DMA 通道送到RTL8019AS 中的发送缓存区,然后再启动本地DMA,将数据发送网上。

  (3)接收函数

  在接收数据时,网络接口层接收函数Rec_Ethernet_Packed( )被下层以太网驱动程序的数据接收函数Rec_Packet()调用。Rec_Ethernet_Packed()的作用根据以太类型值,调用不同的函数,同时去除以太帧的头部,将正确的IPv6 数据从NIC 的数据缓冲区内发送到ARM 的接收缓冲区内。Rec_Packet()函数通过读取RTL8019AS的当前寄存器CURR(写寄存器)和边界寄存器BNRY(读寄存器)的值来确定是否有新数据的到来,若有新数据到来,则设置数据地址和数据长度,然后启动远程DMA 将接收缓冲环中的以太网帧送交给上层。

  2 嵌入式TCP/IPv6 协议栈的实现

  2.1 嵌入式TCP/IPv6 协议栈处理流程

  如图1 所示,嵌入式TCP/IPv6 协议接收数据包的过程就是解析数据包的过程。首先由底层处理函数解析数据包,根据类型,将去掉帧首部的数据包分配到缓冲区BUF 中,接着由IP 协议处理程序继续解析。IP 协议处理程序对数据包解析后,将数据交给TCP 或ICMPv6 协议处理程序。嵌入式TCP/IPv6 协议栈发送数据包的过程是封装数据包的过程,数据经过某层协议的处理,就会在数据包首部增加某种格式的首部。

 

  2.2 软件实现

  首先做如下类型定义:

  #define PROTO_ICMP 58 #define PROTO_TCP 6 #define ICMP_ECHO_REPLY 129 #define ICMP_ECHO 128 芯片接收到数据包后,放入缓冲区BUF 中交由上层协议处理。然后对数据包进行判断。过程下:for(c=0;c<8;c++)

  if(BUF->destipaddr[c] != hostaddr[c])

  {  STAT(++stat.ip.drop);

  goto drop; } 接收数据包后,检查下一个报头中的协议类型,如果是TCP 或ICMP 协议,则分别转向其处理程序,否则丢弃。

  if(BUF->proto == PROTO_TCP) /* Check for TCP packet.If so,jump to the tcp_input label.*/

  goto tcp_input;

  if(BUF->proto = PROTO_ICMP) /*Check for ICMP packet.If so,jump to the icmp_input label.*/ goto icmp_input; goto drop;

  3 IPv6 在ARM 中的移植

  IPv6协议栈在设计时就考虑到了移植问题,已把所有与硬件、OS、编译器相关的部分独立出来[4]。因此,IPv6 在本文研究的系统中的移植就是针对LPC2210 硬件平台、uC/OS-II 操作系统和ADS1.2 的编译器对其进行相应的修改。

  1 数据类型定义

  IPv6 的数据定义应该与uC/OS-II 定义的数据长度类型是一致的。

  typedef unsigned char uint8;/* 无符号8 位整型变量*/

  typedef signed char int8;/* 有符号8 位整型变量*/

  typedef unsigned short uintl6;/* 无符号16 位整型变量*/

  typedef signed short int16;/* 有符号16 位整型变量*/

  typedef unsigned int uint32;/* 无符号32 位整型变量*/

  typedef signed int int32;/*有符号32位整型变量*/

  typedef float fp32;/* 单精度浮点数(32 位长度)*/

  typedef double fp64;/* 双精度浮点数(64 位长度)*/

  2 操作系统相关部分

  (1)信号量

  IPv6 中需要使用信号量进行同步。信号量实际上是一种约定机制,在多任务内核中普遍使用。信号像是一把钥匙,任务要运行下去,得先拿到这把钥匙。如果信号已被别的任务占用,该任务被挂起,直到信号被当前使用者释放。一般地说,对信号量只能实施三种操作:初始化(也可称作建立)、等信号(也可称作挂起)、给信号或发信号。信号量初始化时要给信号量赋初值,等待信号量的任务表应清为空。想要得到信号量的任务执行等待操作。如果该信号量有效(即信号量值大于0),则信号量值减1,任务得以继续运行。如果信号量的值为0,等待信号量的任务就被列入等待信号量任务表。多数内核允许用户定义等待超时,如果等待时间超过了某一设定值时,该信号量还是无效,则等待信号量的任务进入就绪态准备运行,并返回出错代码(指出发生了等待超时错误)。任务以发信号操作释放信号量。如果没有任务在等待信号量,信号量的值仅仅是简单地加1。如果有任务在等待该信号量,那么就会有一个任务进入就绪态,信号量的值也就不加1。于是,钥匙给了等待信号量的诸任务中的等待信号量任务中优先级最高的任务、信号量处理函数:

  OSSemCreate / * 创建一个信号量* /

  OSSemDel()/* 删除信号量*/

  OSSemPend()/* 等待信号量*/

  OSSemPost()/* 发送信号量*/

  (2) 消息队列

  消息队列用于给任务发消息。通过内核提供的服务、任务或中断服务子程序可以将一条消息(该消息的指针)放入消息队列。同样,一个或多个任务可以通过内核服务从消息队列中得到消息。发送和接收消息的任务约定,传递的消息实际上是传递的指针指向的内容。通常,先进入消息队列的消息先传给任务[5],也就是说,任务先得到的是最先进入消息队列的消息,即先进先出原则(FIFO)。然而,uC/OS-II也允许使用后进先出方式(LIFO)。当一个以上的任务要从消息队列接收消息时,每个消息队列有一张等待消息任务的等待列表。如果消息队列中没有消息,即消息队列是空,等待消息的任务就被挂起并放入等待消息任务列表中,直到有消息到来。通常,内核允许等待消息的任务定义等待超时的时间。如果限定时间内,任务没有收到消息,该任务就进入就绪态并开始运行,同时返回出错代码,指出出现等待超时错误。一旦一则消息放入消息队列,该消息将传给等待消息的任务中优先级最高的那个任务,或是最先进入等待消息任务列表的任务。

  2.3 库函数的实现

  IPv6 协议栈中用到了6 个外部函数,这些函数通常与用户使用的系统或编译器有关。返回字符串长度、字符串比较、内存数据块之间的互相拷贝和内存中指定长度的数据块清零,4 个函数已由ADS1.2 中的运行时库提供,不需要再编写。因为网络数据采用的是大端数据存储[6] , 而LPC2210 是工作在小端,所以,在存取网络数据时要进行字节的交换。下面两个简单的函数需要实现: uintl6 swapw( uintl6 n); //16位数据高低字节交换

  { return(((n<<8)&0xff00)}((n>>8)&0x00ff)); } uint32 swapl(uint32 n);//32 位数据大小头对调{ return(((n << 24 & 0xff000000L) ) ((n +8) & 0x00ff0000L) ( ( n >> 8 ) & 0x0000ff00L) ( ( n >> 2 4 )&0x000000ffL)); }

  3 结束语

  该文详细描述了在嵌入式系统中如何实现IPv6 协议栈,使得在资源有限的嵌入式系统中实现IPv6 协议栈具有可能, 随着IPv6 技术及嵌入式技术的不断发展,可以用微型网关、微型路由器实现嵌入式网与互联网的通信,并最终使IPv6 技术应用于工业控制、家庭网络等各个领域.

  本文作者创新点: 通过分析IEEE 802.15.4 和IPv6 协议,在保证实现网络基本功能的前提下,着重研究了如何对复杂的TCP/IPv6 协议栈进行精简,并提出了一套可行的方案,此方案能够适应嵌入式系统的需要,然后用软件实现嵌入式系统中的精简的TCP/IPv6 协议栈,模块之间能够互相通信。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值