uip协议栈下载

竭诚为您提供优质文档/双击可除

uip协议栈下载

篇一:uip之udp应用笔记

千兆网项目中,移植了uip到mcu中,采用udp通信方式,主要用来做一些控制协议的处理。刚开始接手的时候,并没有做过网络方面的应用,而且对tcp/ip及udp通信又不太熟悉。好在网上有一些文档,加上仔细阅读uip_process 代码,一边用抓包软件一边调试,总算把uip很好的应用了起来,而且还针对项目某些应用的特殊性,对uip源码进行了一些修改。本文前半部分对uip源码的一些重要函数进行介绍,后半部分将对修改的部分做个记录,以备往后查阅。

本次使用的是uip-1.0,抓包软件用的wireshark1.6.7,这个软件真的很不错,居然支持gigevision,这点真的很意外。

一、一个完整的udp数据报文格式

其实uip就是将你要发送到网络上的数据加上报头,好让它被成功发送到目的主机。所以我们要先搞清楚一个完整的数据报文,才能搞清楚uip到底在做些什么。

ethernetheader:由目标mac和本机mac及type组成,

共14byte,当目标mac全为ff时,表示是udp广播。

type=0x0800表示是ip。在uip中,ethernetheader结构体定义如下:

ipheader:0x45表示version=4,headerlength=20byte;0028表示ipheader+udpheader+userdata长度为40byte;

6c14为包的id,每发一个包,这个id会自加1。80的意义是timetolive,表示这个包的存活时间,路由每转发一次,就会对它自减1。17表示通信协议类型为udp,4a0a为ipheader的校验码。再后面就是源ip和目的ip地址了。

udpheader:0aaa表示srcport为2730;0f74表示dstprot为3956;14表示udpheader+userdata长度为20byte,c477表示udpheader的校验码,在一般的情况下,这个可以为0。

在uip中,ipheader和udpheader结构体定义如下:

userdata:再后面就是用户的数据了。

二、aRp数据报文格式

网络中是使用ip来标识主机的,而数据链路层的第一

道关卡是mac地址。因此ip和mac有一张动态映射表,而

这张表就是由aRp协议来建立并维护的。下面是一个aRp数据报文。

同样的,前面14byte是ethheader。hardwaretype对

于以太网来说为0001;0800表示是ipV4;06表示mac地址

的长度;04表示ip地址的长度;0001表示是arp请求,如果是0002那就是aRp应答了。后面就是发送方的mac地址,ip地址,接收方的mac地址,ip地址。

在ethheader中,目的mac全是ff,则表示这是一个广播,所有网络里的主机都能收到。但只有ip地址为

192.168.1.11的主机才会应答。实际上,这个aRp包的意义就是在获取ip为192.168.1.11主机的mac地址。

网络里,如果114要与11进行通讯,但又不知道它的mac地址,那么就发一个这样的报文,11收到后会向114发一个aRp应答,114收到应答后,会将11的mac保存在动态映射表中。当然这个表会动态的更新,也就是说11的mac 会有一个生成时间,当超时后,就要重新建立。

以上介绍的是一种情况,还有一种情况是ip冲突的检测,这个正好本项目中用到,后面会有介绍。

三、uip源码简介

主要介绍如下三个文件。

uip_arp.c:arp的实现;

uip.c:uip_process实现;

tapdev.c:网卡的底层读写调用。

四、建立一个连接

uip_udp_new是用来建立一个udp连接的,入口参数是远程的ip地址和远程的端口。uip_udp_new函数将远程ip

和端口写入到uip_udp_conns数组中的某一个位置,并返回它的地址。系统中支持的最大连接数量就是这个数组的大小,可通过uip_udp_conns宏来定义它的值。

当网卡收到数据时,uip_process会遍历uip_udp_conns 数组,如果当前包的目的端口与本机端口不匹配,或者远程端口与uip_udp_new中的端口不匹配,那么uip会直接丢弃这个包。

如下例,建立的是一个目的ip为255.255.255.255,目的端口为1234的连接,本地端口

号为5678。在本项目中,是用来向网络中广播设备信息。所有网络中的主机1234端口都能收到这个数据包。

五、uip主调函数

uip协议的处理都是通过主调函数来调用的,它应该被

放在主程序while循环中,而用户的数据接收处理,和数据发送则是在回调函数中。

主调函数分成三个部分,第一个是检查网卡上有没有接收到数据,第二个是检查有没有用户数据需要发送,最后一个是用来维护aRp映射表的。

这里不得不提到两个时间基准:

timer_set(

timer_set(

一个是periodic_timer,这个为20ms,用来周期性的

检查有没有用户数据需要发送。另一个是arp_timer,用来更新aRp表,每十秒表更新一次,旧的条目会被丢弃,默认的aRp表条目生存时间是20分钟。

voidprocess_net_data(void)

{

inti;

uip_len=tapdev_read();

if(uip_len>0)//从网络上收到数据

{

if(buF->type==htons(uip_ethtype_ip))

{

uip_arp_ipin();

uip_input();//接收数据处理

/*iftheabovefunctioninvocationresultedindatathat shouldbesentoutonthenetwork,theglobalvariable

uip_lenissettoavalue>0.*/

if(uip_len>0)//如果有数据需要返回给主机

{

uip_arp_out();

篇二:协议栈简介

协议栈简介

在网络中,为了完成通信,必须使用多层上的多种协议。这些协议按照层次顺序组合在一起,构成了协议栈(protocolstack),也称为协议族(protocolsuite)。

协议栈形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议。使用最广泛的是英特网协议栈,由上到下的协议分别是:应用层(http,telnet,dns,email等),运输层(tcp,udp),网络层(ip),链路层(wi-Fi,以太网,令牌环,Fddi等),物理层。主要的协议栈:

osi协议栈osi协议栈是由国际标准化组织(iso),为提倡世界范围的互操作性而定义的。它通常被用于其它协议栈进行比较的标准。

netwarespx/ipx协议netware串行分组交换/网间分组交换(spx/ipx)协议,是由novellnetware使用的一种本质性协议(nativeprotocol)。它源于xerox网络系统(xns)协议栈。

tcp/ip协议组传输控制协议/因特网协议(tcp/ip)是最早的网络协议栈之一。它最初是由美国国防部为将多厂商网络产品连接在一起而实现的。其中ip部分提供了一种对互联网络连接的最好定义,并且被许多厂商用于在局域或广域互联产品。

ibm/microsoft协议组ibm和microsoft进行互联的产

品通常是结合在一起的,这是因为这两个公司联合起来开发使用他们的产品,例如,l管理器和os/2。

appletalk协议appletalk协议是由applecomputer为互联applemacintosh系统而定义的。

协议栈构建

1:函数调用。协议栈各层之间通过函数调用来传递数据包和相关的数据结构。linux和bsd等开源系统采用这种方法。

2:消息传递。也就是基于流消息的协议栈构建方法。各层直接通过传递事件或消息来传递数据包和相关的数据

结构。据说solaris和windows等商业操作系统采用这种方法。

3:包队列。各层直接通过包队列(queue)来连接,各层都实现为独立的进程或线程,通过轮询来收发数据包。线程主动去收发包,而不是通过事件来通知。有些系统的某些模块会采用这种方法。

数据进入协议栈时的封装过程

uip协议栈分析

uip特性

uip协议栈去掉了完整的tcp/ip中不常用的功能,简化了通讯流程,但保留了网络通信必须使用的协议,设计重点放在了ip/tcp/icmp/udp/aRp这些网络层和传输层协议上,

保证了其代码的通用性和结构的稳定性。

由于uip协议栈专门为嵌入式系统而设计,因此还具有如下优越功能:

(1)代码非常少,其协议栈代码不到6k,很方便阅读和移植。

(2)占用的内存数非常少,Ram占用仅几百字节。

(3)其硬件处理层、协议栈层和应用层共用一个全局缓存区,不存在数据的拷贝,且发送和接收都是依靠这个缓存区,极大的节省空间和时间。

(4)支持多个主动连接和被动连接并发。

(5)其源代码中提供一套实例程序:web服务器,web 客户端,电子邮件发送程序(smtp客户端),telnet服务器,(6)对数据的处理采用轮循机制,不需要操作系统的支持。

由于uip对资源的需求少和移植容易,大部分的8位微控制器都使用过uip协议栈,而且很多的著名的嵌入式产品和项目(如卫星,cisco路由器,无线传感器网络)中都在使用uip协议栈。

uip架构

uip相当于一个代码库,通过一系列的函数实现与底层硬件和高层应用程序的通讯,对于整个系统来说它内部的协议组是透明的,从而增加了协议的通用性。uip协议栈与系

相关文档
最新文档