TI C6000DSP 上TCP IP 协议栈的实现-最新资料
- 格式:doc
- 大小:18.50 KB
- 文档页数:4
计算机⽹络:TCPIP协议栈概述⽬录参考模型在⽹络刚刚被搞出来的年代,通常只有同⼀个⼚家⽣产的设备才能彼此通信,不同的⼚家的设备不能兼容。
这是因为没有统⼀的标准去要求不同的⼚家按照相同的⽅式进⾏通信,所以不同的⼚家都闭门造车。
为了解决这个问题,后来就产⽣出参考模型的概念。
参考模型是描述如何完成通信的概念模型,它指出了完成⾼效通信所需要的全部步骤,并将这些步骤划分为称之为“层”的逻辑组。
分层最⼤的优点是为上层隐藏下层的细节,即对于开发者来说,如果他们要开发或实现某⼀层的协议,则他们只需要考虑这⼀层的功能即可。
其它层都⽆需考虑,因为其它层的功能有其它层的协议来完成,上层只需要调⽤下层的接⼝即可。
参考模型的优点如下:1. 将⽹络通信过程划分为更⼩、更简单的组件,使得组件的开发、设计和排错更为⽅便;2. 通过标准化⽹络组件,让不同的⼚商能够协作开发;3. 定义了模型每层执⾏的功能,从⽽⿎励了⾏业标准化;4. 让不同类型的⽹络硬件和软件能够彼此通信;5. 避免让对⼀层的修改影响其它层,从⽽避免妨碍开发⼯作。
协议计算机⽹络中的数据交换必须遵守事先约定好的规则,这些规则明确规定了所交换的数据的格式以及有关的同步问题,⽹络协议 (network protocol)是为进⾏⽹络中的数据交换⽽建⽴的规则、标准或约定。
⽹络协议有 3 个要素:1. 语法:数据与控制信息的结构或格式;2. 语义:需要发出何种控制信息,完成何种动作以及做出何种响应;3. 同步:事件实现顺序的详细说明。
OSI 模型OSI 模型旨在以协议的形式帮助⼚商⽣产兼容的⽹络设备和软件,让不同⼚商的⽹络能够协同⼯作。
同时对于⽤户⽽⾔,OSI 能帮助不同的主机之间传输数据。
OSI 并⾮是具体的模型,⽽是⼀组指导原则,开发者以此为依据开发⽹络应⽤。
同时它也提供了框架,指导如何制定和实施⽹络标准、制造设备,以及制定⽹络互联的⽅案。
OSI 模型包含 7 层,上三层指定了终端中应⽤程序如何彼此通信,以及如何与⽤户交互,下四层指定了如何进⾏端到端数据传输。
TCP/IP 协议栈与数据包封装已有 126 次阅读 2022-6-6 23:19 |个人分类:网络|关键词:TCP 协议数据封装TCP/IP 网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层。
如下图所示(该图出自[TCPIP])。
两台计算机通过 TCP/IP 协议通讯的过程如下所示(该图出自[TCPIP])。
传输层及其以下的机制由内核提供,应用层由用户进程提供 (后面将介绍如何使用 socket API 编写应用程序),应用程序对通讯数据的含义进行解释,而传输层及其以下处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。
应用层数据通过协议栈发到网络上时,每层协议都要加之一个数据首部 (header),称为封装(Encapsulation),如下图所示(该图出自 [TCPIP])。
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。
上图对应两台计算机在同一网段中的情况,如果两台计算机在不同的网段中,那么数据从一台计算机到另一台计算机传输过程中要经过一个或者多个路由器,如下图所示(该图出自 [TCPIP])。
其实在链路层之下还有物理层,指的是电信号的传递方式,比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤等都属于物理层的概念。
物理层的能力决定了最大传输速率、传输距离、抗干扰性等。
集线器(Hub)是工作在物理层的网络设备,用于双绞线的连接和信号中继(将已衰减的信号再次放大使之传得更远)。
链路层有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步 (就是说从网线上检测到什么信号算作新帧的开始) 、冲突检测 (如果检测到冲突就自动重发) 、数据差错校验等工作。
协议栈是什么协议栈(Protocol Stack)是指一组按照特定顺序排列的通信协议的集合,它们按照层次结构组织,每一层负责特定的功能,从而实现数据在网络中的传输和交换。
在计算机网络中,协议栈是网络通信的基础,它定义了数据在网络中的传输格式、传输方式、错误检测和纠正等规则。
首先,协议栈通常由多个层次组成,每一层都有特定的功能和责任。
最常见的协议栈是TCP/IP协议栈,它由四个层次组成,应用层、传输层、网络层和数据链路层。
每一层都有自己的协议和规范,负责特定的功能。
应用层负责定义应用程序之间的通信规则,传输层负责端到端的数据传输,网络层负责数据在网络中的路由和转发,数据链路层负责数据在物理介质上传输。
其次,协议栈的设计遵循分层的原则,每一层的功能相对独立,各层之间通过接口进行通信,上层向下层提供服务,下层向上层提供支持。
这种设计使得协议栈具有良好的可扩展性和灵活性,可以根据实际需求对每一层进行修改和升级,而不会对整个系统造成影响。
另外,协议栈的工作方式是自底向上的。
当数据从应用程序发送出去时,经过每一层的处理和封装,最终在物理介质上传输;而当数据到达目的地后,经过每一层的解封装和处理,最终交给目标应用程序。
这种逐层处理的方式使得协议栈的工作更加清晰和有序,方便对每一层进行调试和排错。
最后,协议栈的作用是实现网络通信的可靠性和高效性。
通过协议栈的分层设计和逐层处理,可以保证数据在网络中的正确传输和交换,同时也能够提高网络的吞吐量和响应速度。
协议栈的标准化和普及,也为不同厂商的设备和系统之间的互联互通提供了基础。
总的来说,协议栈是网络通信的基础,它通过分层设计和逐层处理实现数据在网络中的传输和交换。
协议栈的设计遵循分层原则,具有良好的可扩展性和灵活性,工作方式是自底向上的,作用是实现网络通信的可靠性和高效性。
对于理解和应用计算机网络技术,掌握协议栈的原理和工作方式非常重要。
摘要数据采集系统广泛地应用于工业控制等诸多领域,随着精细化、智能化、多路采集的待测设备和场景越来越多,对采集传输系统的能力提出了越来越高的要求。
传统的货架数据采集系统很难满足特定的需求,而非标准产品的采集系统有很强的针对性,且价格昂贵、结构复杂,难以适用于普遍的采集应用场景。
因此,实现一个具备高性能、高灵活性和低成本的数据采集系统,是当前社会、工业发展的迫切需求。
随着集成电路与信息科学技术的快速发展,为数据采集系统的高性能、集成化设计提供了新思路。
借助网络卸载引擎思想,基于FPGA实现TCP/IP协议栈的逻辑设计,实现一种具备高传输速率、高可靠性、灵活性和低成本的以太网传输链路。
旨在研究基于硬件可编程器件实现软件协议硬件化的实施方案,为分布式数据采集领域的高速数据卸载和传输链路加速提供一种可行性方案。
本文首先结合数据采集系统和TCP/IP协议的功能特点,提出TCP/IP协议族裁剪方案,只保留保证数据高速传输和可靠性的必要协议。
采用分层处理、模块化的设计方法,按照“接收解析-数据处理-组帧发送”的顺序,实现了以太网TCP/IP协议通信的基本功能。
在此基础上,深入研究TCP关键技术,在FPGA中采用标准算法实现超时与重传;基于RAM设计TCP发送窗口;基于拥塞窗口包计数改进拥塞控制算法,让其在硬件逻辑处理和批量数据高速传输的过程中具备更高的调控效率。
除此之外,提出请求应答队列管理机制、校验和预计算算法、CRC32超前计算算法,提高网络数据的卸载和封装速率。
其次,基于真实的以太网通信数据编写测试激励源,建立全面的仿真。
结合仿真波形详细分析了TCP/IP协议栈的设计细节和功能实现,保证设计在逻辑上的正确性,为实际的测试和应用提供了大量的实例。
最后,搭建千兆以太网实物平台,测试结果表明,TCP/IP硬件协议栈的ARP 应答,ICMP回显应答,UDP数据接收与发送,TCP服务器的连接建立、数据通信、连接终止、超时重传与恢复等功能均正确实现。
二、TI公司三大系列内部结构的简介 1、C2000系列的内部结构1,C2000系列基于改进的哈佛结构,支持分开的程序空间和数据空间。
还有第三个空间,即I/O空间,用于片外总线接口。
外设总线映射到数据空间,因此,运行在数据空间的所有指令,都可以运行于所有的外设寄存器。
C2000系列的CPU包括:一个32位的中心算术逻辑单元(CALU)、一个32位的累加器(ACC)、CALU具有输入和输出数据定标移位器、一个16x16位乘法器、一个乘积定标移位器、数据地址产生逻辑:包括8个辅助寄存器和1个辅助寄存器算术单元(ARAU)、程序地址产生单元C2000系列采用2xLPASIC核,其内部设有6组16位的数据与程序总线。
这6组总线是:PAB(ProgramAddr.Bus)程序地址总线DRAB(Data-ReadAddr.Bus)数据读地址总线; DWAB(Data-WriteAddr.Bus)数据写地址总线; PRDB(ProgramReadBus)程序读总线;DRDB(DataReadBus)数据读总线;DWEB(DataWriteBus)数据写总线。
将数据读地址总线(DRAB)和数据写地址总线(DWAB)分开,CPU就可以在同一个机器周期内读和写数据。
C2000系列具有以下类型的片内存储器:双访问RAM(DARAM),即一个机器周期内可以访问两次的存器;FlashEEPROM或工厂掩模的ROM。
C2000系列的存储器分为单独可选择的4个空间,总共的地址范围为224K字:程序存储器(64K字);局部数据存储器(32K字);全局数据存储器(64K字);输入/输出(64K字)。
2、C5000系列的内部结构C5000系列中央处理单元CPU包括算术逻辑单元、乘法器、累加器、移位寄存器、各种专门用途的寄存器、地址发生器、比较选择单元、指数编码器。
具体内容如下①先进的多总线结构,具有1条程序存储器数据总线、3条数据存储器数据总线和4条地址总线;②40位算术逻辑单元(ALU),包括40位的桶形移位寄存器和2个独立的40位的累加器;③17位乘17位的并行乘法器与一个40位的专用加法器结合在一起,用于单周期乘/累加操作;④比较、选择和存储单元(CSSU),用于Viterbi操作(一种通信的编码方式)中的加/比较选择;⑤指数编码器用于在单周期内计算40位累加器的指数值;⑥2个地址生成器,包括8个辅助寄存器和2个辅助寄存器算术单元[6]。
⼏个主流TCPIP协议栈介绍我们知道协议栈内包括了诸多协议。
那么对于这当中的协议的功能以及作⽤,我们来具体了解⼀下吧。
现在让我们做⼀个盘点,帮助⼤家总结⼀下,还望对⼤家能够有所帮助。
1、BSD TCP IP协议栈BSD栈历史上是其他商业栈的起点,⼤多数专业TCP/IP栈(VxWorks内嵌的TCP/IP栈)是BSD栈派⽣的.这是因为BSD栈在BSD许可协议下提供了这些专业栈的雏形,BSD许⽤证允许BSD栈以修改或未修改的形式结合这些专业栈的代码⽽⽆须向创建者付版税.同时,BSD也是许多TCP/IP协议中的创新(如⼴域⽹中饿拥塞控制和避免)的开始点.2、uC/IPuC/IP是由Guy Lancaster编写的⼀套基于uC/OS且开放源码的TCP IP协议栈,亦可移植到其它操作系统,是⼀套完全免费的、可供研究的TCP IP协议栈,uC/IP⼤部分源码是从公开源码BSD发布站点和KA9Q(⼀个基于DOS单任务环境运⾏的TCP IP协议栈)移植过来.uC/IP具有如下⼀些特点:带⾝份验证和报头压缩⽀持的PPP协议,优化的单⼀请求/回复交互过程,⽀持IP/TCP/UDP协议,可实现的⽹络功能较为强⼤,并可裁减.UCIP协议栈被设计为⼀个带最⼩化⽤户接⼝及可应⽤串⾏链路⽹络模块.根据采⽤CPU、编译器和系统所需实现协议的多少,协议栈需要的代码容量空间在30-60KB之间.3、LwIPLwIP是瑞⼠计算机科学院(Swedish Institute of Computer Science)的Adam Dunkels等开发的⼀套⽤于嵌⼊式系统的开放源代码TCP IP协议栈.LwIP的含义是Light Weight(轻型)IP协议,相对于uip.LwIP可以移植到操作系统上,也可以在⽆操作系统的情况下独⽴运⾏.LwIP TCP/IP实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占⽤,⼀般它只需要⼏⼗K的RAM和40K左右的ROM就可以运⾏,这使LwIP协议栈适合在低端嵌⼊式系统中使⽤.LwIP的特性如下:⽀持多⽹络接⼝下的IP转发,⽀持ICMP协议 ,包括实验性扩展的的UDP(⽤户数据报协议),包括阻塞控制,RTT估算和快速恢复和快速转发的TCP(传输控制协议),提供专门的内部回调接⼝(Raw API)⽤于提⾼应⽤程序性能,并提供了可选择的Berkeley接⼝API。
《LwIP协议栈源码详解——TCPIP协议的实现》⽹络接⼝结构我只是不想,将这份⼼动付诸⾔语。
前⾯还有⼀句:信任他⼈,并不意味着软弱。
我只是假装对万物⼀⽆所知,好借此获得你所有的温柔。
谢谢你所做的⼀切,现在⼀切⼜将重新开始。
我只有将这份⽆法忘怀的思念送给你。
⼈们总说”⿊夜会过去”,但那只是善意的谎⾔。
我想就算⼀个⼈,应该也能⽣存下去,因为你的笑容已经永远铭刻在我⼼中,还有那应该已经被我舍弃的信任别⼈的⼼。
以上内容系剽窃于某某美⼥的歌词。
(ps:真的是歌词,与⼼情真⽆关,啊啊啊)今天我们来讨论LWIP是怎样来处理与底层硬件,即⽹卡芯⽚间的关系的。
为什么要⾸先讨论这个问题呢?与许多其他的TCP/IP实现⼀样,LWIP也是以分层的协议为参照来设计实现TCP/IP的。
LWIP从逻辑上看分为四层:链路层、⽹络层、传输层和应⽤层。
注意,虽然LWIP也采⽤了分层机制,但它没有在各层之间进⾏严格的划分,各层协议之间可以进⾏或多或少的交叉存取,即上层可以意识到下层协议所使⽤的缓存处理机制。
因此各层可以更有效地重⽤缓冲区。
⽽且,应⽤进程和协议栈代码可以使⽤相同的内存,应⽤可以直接读写内部缓存,因此节省了执⾏拷贝的开销。
我们将从LWIP的最底层链路层起步,开始整个LWIP内部协议之旅。
在LWIP中,是通过⼀个叫做netif的⽹络结构体来描述⼀个硬件⽹络接⼝的。
这个接⼝结构⽐较简单,下⾯我们从源代码结构来分析分析这个结构:struct netif {struct netif *next; // 指向下⼀个netif结构的指针struct ip_addr ip_addr; // IP地址相关配置struct ip_addr netmask;struct ip_addr gw;err_t (* input)(struct pbuf *p, struct netif *inp); //调⽤这个函数可以从⽹卡上取得⼀个// 数据包err_t (* output)(struct netif *netif, struct pbuf *p, // IP层调⽤这个函数可以向⽹卡发送struct ip_addr *ipaddr); // ⼀个数据包err_t (* linkoutput)(struct netif *netif, struct pbuf *p); // ARP模块调⽤这个函数向⽹// 卡发送⼀个数据包void *state; // ⽤户可以独⽴发挥该指针,⽤于指向⽤户关⼼的⽹卡信息u8_t hwaddr_len; // 硬件地址长度,对于以太⽹就是MAC地址长度,为6各字节u8_t hwaddr[NETIF_MAX_HWADDR_LEN]; //MAC地址u16_t mtu; // ⼀次可以传送的最⼤字节数,对于以太⽹⼀般设为1500u8_t flags; // ⽹卡状态信息标志位char name[2]; // ⽹络接⼝使⽤的设备驱动类型的种类u8_t num; // ⽤来标⽰使⽤同种驱动类型的不同⽹络接⼝};next字段是指向下⼀个netif结构的指针。
TI C6000DSP 上TCP IP 协议栈的实现
1、 NDK 的结构
TI公司依据C6000芯片推出了TCP/IP NDK(Network Developer's Kit)开发套件,其主要构成包括:(1)支持TCP/IP 协议栈程序库。
其中主要含有的库:支持TCP/IP网络工具的库,支持TCP/IP 协议栈与DSP/BIOS平台的库,网络控制以及线程调度的库。
(2)示范程序。
其中主要包括DHCP/Telnet 客户端, HTTP 数据服务器示范。
(3)支持文档。
包含用户手册、程序员手册和平台适应手册。
NDK 采用紧凑的设计方法,实现了用少量的资源耗费来支持TCP/IP。
从实用效果来看, NDK 仅用200-250K程序空间和95K 数据空间即可完成常规的TCP/IP 服务。
NDK相对于操作系统和底层硬件是透明的,因为这是由OS。
LIB 提供操作系统DSP/BIOS的接口和HAL。
LIB 提供对硬件的支持来实现的。
在NDK的TCP/IP协议栈中STACK。
LIB 包括了顶层套接字到底层链路层的所有功能, NETCTRL。
LIB在整个协议栈中起关键作用,协调操作系统和底层硬件驱动,管理所有网络事件, NETTOOL。
LIB 提供配置网络各种服务。
2、NDK 在DSP/BIOS 下的使用
DSP/BIOS 是TI 开发的实时微型操作系统,支持线程管理、实时分析、周期函数、调度软件中断以及外部硬件中断与各种外
设的管理。
使用DSP/BIOS 所有与硬件有关的操作都必须借助操作系统本身提供的函数完成,应避免直接控制硬件资源。
基于DSP/BIOS 的程序与传统开发过程是不同的,用户编写的程序由DSP/BIOS 调度,不再按标写的次序顺序执行。
同样开发基于DSP/BIOS的网络应用程序也必须要遵循一些原则。
在DSP/BIOS 下使用NDK 必须注意以下几点:(1)为了保证使用NDK 的工程项目能正确编译,在CCS 的Link Order 要按一定的顺序添加库文件,推荐的顺序是: NETCTRL。
LIB、HAL_xxxLIB、STACK。
LIB、OS。
LIB;(2)在使用NDK 的过程当中, OS和HAL 会创建三个内存段,分别是PACKETMEM、MMBUFFER、OBJMEM,必须在CMD 文件中为这三个段在内存中分配存储空间;(3)至少要使用32K 的cache,否则应用程序会产生不可预料的错误;(4)必须在CDB文件中为HAL 创建一个周期为100ms 的PRD 函数,用来驱动llTimerTick()系统函数;(5) OS 需要钩子函数为TCP/IP 堆栈加载和保存私人变量指针,所以必须在CDB 文件中创建两个钩子函数
NDK_hookInit()和NDK_hookCreate();(6)必须把工程项目的IncludeSearching Path 指向NDK 安装目录下的inc 文件夹。
3、NDK 性能测试
测试NDK性能既有主观性又有客观性。
主观性适应为实际测试要受到很多环境因素的影响。
客观性是因为使用标准的工具,
并且结果可重现。
所以只能是性能的估计性测试。
影响NDK性能的主要因素有:
socket API: NDK既支持非拷贝的数据包socket,也支持基于缓冲区的典型socket,甚至非拷贝的直接接收的TCP数据流。
性能随所采用的策略变化而变化。
socket 缓冲区: socket缓冲区影响TCP发送和接收的窗口大小,并且决定每次发送数据流大小,这对网络性能有很大的影响。
CPU速度:在cache大小一定的情况下,网络性能与CPU速度成正比。
CPU cache: cache的大小对网络性能有巨大的影响。
网络硬件设备:以太网硬件设计的好坏直接影响DSP和网络接口的速度。
外部存储器(EMIF)接口:对于和DSP外部存储器接口相连的以太网设备, EMIF的速度对外部解码逻辑有额外的影响。
下面的测试由TI提供,测试不仅兼顾最佳的性能而且考虑到应用的实际情况,比如socket缓冲区大小为8K,而不是32K 或64K,因为这在嵌入式设备中是不切实际的。
测试的过程是DSP 执行低优先级的网络任务,PC机执行客户基准测试程序,然后与DSP不执行网络任务时CPU的负载情况做对比。
4 、结论
TI推出的NDK网络开发工具不仅可以使技术人员快速开发基于DSP的网络应用程序,而且具有十分可靠的性能,这使得
C6000系列芯片完全可以胜任大数据量的视频网络传输的要求,是开发嵌入式网络视频设备的首选。