新闻中心

EEPW首页 > 嵌入式系统 > DeltaOS 3.0 -简介(4)

DeltaOS 3.0 -简介(4)

——
作者: 时间:2007-03-01 来源:科银京成 收藏

DeltaOS的TCP/IP网络协议栈(以下简称网络协议栈)符合TCP/IP协议工业标准,支持多任务应用开发模型,利用DeltaOS的TCP/IP网络协议栈,开发人员可以为一个嵌入式设备增加和配置网络功能。

DeltaOS的网络协议栈是一套完整的嵌入式TCP/IP协议栈,在应用上,网络协议栈提供:

  • 网络应用编程界面(套接字,socket):网络的应用程序不是直接与TCP/IP核心、而是与网络应用编程界面(套接字)打交道,编程界面构成了核心协议的用户视图。网络协议栈支持流套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM)。
  • 对网络参数进行设置的接口:网络参数指IP地址、掩码、网关地址、PPP拨号参数等,网络协议栈提供对这些网络基本参数进行读取/设置的接口,应用程序中根据用户需求直接调用,使应用网络协议栈的终端或网络设备能够动态修改这些参数。
  • 扩展的应用功能:网络协议栈提供简单的ping功能调用接口,应用程序可利用该接口实现检测链路通断的功能。

应用程序与操作系统以及网络协议栈的关系如下图:

图:网络协议栈体系结构

新版本的网络协议栈包括如下特点:

  • 以太网和拨号网络可同时使用;
  • 基于DLL/HAL技术的多网络适配设备支持;
  • 支持大数据量的稳定通信;
  • 提供稳定、高效的多连接处理。

特性

应用特点

编程接口标准化

网络协议栈提供的网络编程接口(套接字)与Windows Socket版本1.1基本一致

可移植性 

  • 除网络设备驱动程序可能需要使用汇编语言外,其它代码全部使用ANSI C编写,具有良好的可移植性;
  • 网络协议栈虽然是DeltaOS的网络组件,但它与操作系统内核之间的接口仅为少量的系统调用,如任务管理、信号量管理、定时器管理、中断管理和内存管理,因此很容易移植到其它的系统平台上,比如:网络协议栈成功支持了RTXC和ITRON等操作系统。

配置灵活

网络协议栈提供系统配置表,用户既可以配置自己所需要的网络组件(如DNS、DHCP等)或硬件支持(如多网卡),也可以根据具体的需要配置一些相关的网络参数(如IP地址、网关、拨号串等)。既提供静态配置的方式,也提供部分调用接口,实现了参数的动态配置。

对多任务的支持

网络协议栈中使用信号量机制,实现任务间及任务与中断处理程序之间资源的互斥与共享,从而实现了对多任务环境的支持。

可扩充性

网络协议栈使用模块化设计模式,根据实际需要,可方便地添加新的协议模块到网络协议栈的TCP/IP协议栈软件包中,实现对新的网络协议的支持。

支持组播功能

基于网络协议栈开发的应用程序通过调用setsockopt函数设置组播选项,能够实现组播发送和接收。

性能特点

网络协议栈在实现上采取了一些措施以提高其性能,如下:

采用零拷贝技术(Zero Copy

用户数据在通过TCP/IP协议从本地主机传输到远地主机的过程中,需要不断地拆包和打包。如果在拆包和打包时,各协议层之间均采用数据拷贝进行数据传递,则将大大增加系统开销,从而降低系统性能。网络协议栈采用零拷贝技术以解决该问题。

所谓“零拷贝”技术,是指TCP/IP协议栈没有用于各层间数据传递的缓冲区,协议栈各层间传递的都是数据指针,只有当数据最终要被驱动程序发送出去或是被用户应用程序取走时,才进行真正的数据搬移。

采用静态分配技术

如果在网络发送或接收的过程中,某一次传送的数据超过了在一个物理网络上能够传输的最大数据量(MTU),则该数据处理任务往往会阻塞等待,直到上层重新调整需要处理的数据量的大小,才会继续执行下去。{{分页}}

网络协议栈采用静态分配技术,在网络初始化时就静态分配通信缓冲区,设置了专门的发送和接收缓冲(一般是小于或等于物理网络上的MTU值),从而确保了每次发送或接收时处理的数据不会超过MTU值,也就避免了数据处理任务的阻塞等待。

通信采用非暂停方式

通信采用非暂停方式是指通信双方中的接收方在等待接收的过程中,创建一个接收任务,该任务首先发出一个接收信号,然后进入休眠状态,当有新的报文到达时才被唤醒,并对接收到的新的报文进行处理;暂停方式则是指接收方在新的报文到来之前一直等待,直到有报文到达后进行相应的处理。

网络协议栈中的通信采用非暂停方式。与暂停方式比较,非暂停方式既可以提高计算机和网络通信的并行性,又能保证接收时响应的及时性。

协议特点

网络协议栈遵从TCP/IP的四层协议体系结构,如下图所示:

图:网络协议栈协议的体系结构

在不同的层次上,网络协议栈在支持协议上有如下特点:

链路层

网络协议栈支持以太网链路层和RS232串口链路层(PPP)。
数据链路层的实现主要表现为网络驱动程序。网络协议栈提供网络驱动程序模板,用户可根据模板编写自己的驱动程序。

  • 以太网
    网络协议栈支持以太网传输,并且有以下特点:
    1. 支持10M/100M以太口、ISA/PCI接口;
    2. 提供多种以太网驱动供用户选择,也提供以太网驱动的模板,允许用户添加自己的驱动;
    3. 支持多网卡。
  • PPP
    网络协议栈支持完整的PPP协议(包括LCP、IPCP、PAP和CHAP),既可以应用到传统的有线拨号网络、也可以应用到通过GPRS/CDMA无线上网的终端设备上,对物理链路的适应性强。

网络层

  1. ARP/RARP
    ARP是几乎每种TCP/IP实现中的基本协议,但它通常在应用程序或系统管理员并未意识到的情况下完成工作。ARP缓冲是其操作的基础,网络协议栈将缓冲中每个表目绑定一定时器,用于管理过时的表目。

    许多无盘系统用RARP在启动时获得其IP地址。RARP数据包格式与ARP几乎相同。RARP请求是广播的,标识发送者的硬件地址,要求别人回答发送者的IP地址;其应答通常是单目的。
  2. IP
    IP协议是网络协议栈网络层的主要组成部分,其主要功能包括:
    1. 提供一种无连接的、不可靠的、尽最大努力进行数据报传递的服务。
    2. 提供简单的IP数据报的选路。IP选路基于IP选路表,该表存储有关可能的目的网点及怎样到达目的网点的信息,主机或路由器软件需要传送数据报时,它就查询选路表来决定把数据报发往何处。网络协议栈中的IP选路表为增加RIP及OSPF等动态路由协议提供了接口,进一步体现了网络协议栈的可扩充性。
    3. 实现IP数据报的分片、重组
  3. ICMP
    网络协议栈的ICMP协议实现了所有标准ICMP协议的功能,包括差错报告和控制。其中最常用的是ICMP回送请求和应答功能,并在此基础上提供ping的简单应用接口供应用程序调用,用于检查链路的通断。

传输层

网络协议栈传输层提供两种协议——UDP和TCP。

  1. UDP
    网络协议栈支持组播功能。组播(multicast)是一到多或者多到多的多方通信形式,远程会议、交互式仿真、分布式内容系统、多方游戏等应用都对组播业务(multicast service)提出了需求。由于TCP是有连接的,决定了TCP之上的应用程序不能够实现组播。基于UDP的应用程序能够通过组播发送和接收大大提高网络性能,合理利用网络带宽。
  2. TCP
    网络协议栈提供面向流的传输协议—TCP协议,它提供可靠的传输服务以确保数据无差错、无乱码的到达。为了这个目的,TCP协议软件要进行协商,让接收方回送确认信息及让发送方重发丢失的分组。

应用层

网络协议栈为应用层的开发提供了一套Socket编程接口,用户可以基于这套Socket编程接口来完成适合自己的网络应用。{{分页}}

网络协议栈也实现了应用层上一些常见的标准协议,如Telnet Client(远程登录客户端)、FTP Client(文件传输客户端)等。

  • DNS
    网络协议栈提供对DNS Client的支持,上层应用通过域名请求TCP打开一个连接或使用UDP发送一个数据报之前,必须调用网络协议栈提供的系统调用将一个主机名转换为一个IP地址。
  • DHCP
    网络协议栈协议栈支持DHCP Client,基于网络协议栈的应用程序能够调用相关接口发送DHCP请求,动态获得IP地址。
  • TELNET
    网络协议栈支持TELNET Server功能,允许任何Telnet客户终端通过TELNET命令进行远程登录,并提供菜单方式的界面,实现远程配置和管理。
  • FTP
  • 网络协议栈支持FTP Client功能,具有以下特点:
  • 支持FTP通用命令;
  • 提供独有的FTP IO操作,用户无需过多了解FTP协议就可完成远程文件操作;
  • 无需文件系统支持,体积较小。
  • HTTP
    HTTP Server功能是网络协议栈的可选组件,又名DeltaHTTPD。详细说明请参见《DeltaHTTPD技术白皮书》。

基本规格

标准

网络协议栈提供的Socket调用与Windows Socket 1.1调用基本一致。网络协议栈支持标准TCP/IP模型中的多种协议,主要包括(每个协议对应的RFC编号,只是该协议早期版本的编号):

支持的应用协议如下:

  • 网络应用层

DHCP Client[RFC 1541]、[RFC 2131]、[RFC 3396]
DNS Client[RFC 1035]
TELNET Server[RFC 854]
FTP Client[RFC 765]
HTTP[RFC 2068]、[RFC 2616]

  • 网络传输层
    UDP[RFC 768]、TCP[RFC 793]
  • 网络层
    IP[RFC 791]、ICMP[RFC 792]
  • 数据链路层
    PPP[RFC 1661]、ARP[RFC 826]、RARP[RFC 903]

资源占用情况

以DeltaCORE为例来介绍网络协议栈所占用的操作系统内核资源。

任务数

>=4 (如果启动Telnet Server功能则要求>=9)

信号量数

>=14

中断栈空间

>=10K

任务额外堆栈空间

>=30K

网络协议栈占用内存情况(注:不包括以选件方式提供的应用层协议)

静态内存空间

下表列出了网络协议栈在ARM7-4510B、x86平台上运行Pinghost演示程序时,网络协议栈占用内存资源的实际情况:

网络协议栈的静态内存需求(单位:字节)

 

arm7-4510B

x86

CODE

0x33b9b

0x24cb4

BSS

0x2968c

0x29694

DATA

0x6c7

0x717

注意:

  • 网络协议栈在编译时未使用“优化”选项;
  • 以上数据表示均采用十六进制方式。

动态内存空间

网络协议栈在初始化时需要CRTL动态分配的空间为110776字节。这部分空间是为接收和发送缓冲、还有控制结构预留的,不会释放。

网络协议栈的七个DEMO在运行过程中也需要动态分配一部分空间,但是这部分空间在程序运行过程中会释放掉的,不会产生内存泄漏等情况。各个DEMO需要分配的空间如下表所示:

网络协议栈的动态内存需求(单位:字节)

DEMO

PingHost

TcpClnt

TcpServ

UdpClnt

UdpServ

FtpIoAPI

TelServer

动态分配空间

384

1968

3888

1752

1752

4136

14496(含任务堆栈空间)

注意:

  • 创建demo任务时会分配一些空间,删除此任务后,分配的空间将会被释放。
  • PingHost、TcpClnt、TcpServ、UdpClnt、UdpServ、FtpIoAPI任务创建需要分配11056字节空间。另外,TelServer在初始化时为任务的创建分配了11056字节空间。

在为每个DEMO进行内存配置时,CRTL堆的大小不能小于网络协议栈初始化及DEMO任务创建、DEMO运行过程中动态分配的内存之和。

典型性能指标

测试环境:

CPU:Pentium 628MHZ CPU

内存:128M

测试内容

测试结果(ms)

TCP连接数据吞吐量(发送,32字节)

0.026

TCP连接数据吞吐量(接收,32字节)

0.031

TCP连接数据吞吐量(发送,1430字节)

0.061

TCP连接数据吞吐量(接收,1430字节)

0.080

UDP连接数据吞吐量(发送,32字节)

0.018

UDP连接数据吞吐量(接收,32字节)

0.032

UDP连接数据吞吐量(发送,1430字节)

0.023

UDP连接数据吞吐量(接收,1430字节)

0.080

 

tcp/ip相关文章:tcp/ip是什么




评论


相关推荐

技术专区

关闭