第二章 uIP协议栈分析
- 格式:pdf
- 大小:95.00 KB
- 文档页数:6
竭诚为您提供优质文档/双击可除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。
MF009001 GPRS原理ISSUE1.0目录课程说明 (1)课程介绍 (1)课程目标 (1)相关资料 (1)第1章 GPRS概述 (1)1.1 GPRS的产生 (1)1.2 GPRS的发展 (1)1.3 GPRS与HSCSD业务的比较 (2)1.4 CSD与GPRS的比较 (3)1.4.1 电路交换的通信方式 (3)1.4.2 分组交换的通信方式 (4)第2章 GPRS基本功能和业务 (6)2.1 GPRS业务种类 (6)第3章 GPRS基本体系结构和传输机制 (8)3.1 GPRS接入接口和参考点 (8)3.2 网络互通 (8)3.3 逻辑体系结构 (8)3.3.2 主要网络实体 (10)3.3.3 主要网络接口 (12)3.4 高层功能 (14)3.4.1 网络接入控制功能 (14)3.4.2 分组路由和转发功能 (15)3.4.3 移动性管理功能 (17)3.4.4 逻辑链路管理功能 (17)3.4.5 无线资源管理功能 (18)3.4.6 网络管理功能 (18)3.5 功能分配 (19)3.6 GPRS数据传输平面 (20)3.7 GPRS信令平面 (21)3.7.1 MS与SGSN间信令平面 (21)3.7.2 SGSN与HLR间信令平面 (22)3.7.3 SGSN与MSC/VLR间信令平面 (22)3.7.4 SGSN与EIR间信令平面 (23)3.7.5 SGSN与SMS-GMSC、SMS-IWMSC间信令平面 (23)3.7.6 GPRS支持节点间信令平面 (24)3.7.7 GGSN与HLR间信令平面 (24)第4章移动性管理 (25)4.1 MM状态 (25)4.1.1 IDLE状态 (25)4.1.2 STANDBY状态 (25)4.1.3 READY状态 (26)4.2 MM状态功能 (26)4.2.1 MM状态迁移 (26)4.2.2 就绪定时器功能 (27)4.2.3 周期性路由区更新定时器功能 (28)4.2.4 用户可及定时器功能 (28)4.3 SGSN与MSC/VLR的交互 (29)4.3.1 SGSN-MSC/VLR关联的管理 (29)4.3.2组合RA/LA更新 (29)4.3.3 CS寻呼协调及网络操作模式 (30)4.4 MM规程 (31)4.4.1 GPRS附着功能 (31)4.4.2 GPRS分离规程 (33)4.4.3 清除功能 (36)4.5 安全性功能 (36)4.5.1 用户鉴权 (36)4.5.2 用户身份机密性 (37)4.5.3 用户数据和GMM/SM信令机密性 (37)4.5.4 用户身份检查 (38)4.6 位置管理功能 (38)4.6.1 小区更新规程 (39)4.6.2 路由区更新规程 (39)4.6.3组合RA/LA更新规程 (42)4.6.4 周期性路由区更新和位置区更新 (43)4.7 用户数据管理功能 (44)4.7.1 插入用户数据规程 (44)4.7.2 删除用户数据规程 (44)4.8 MS类标处理功能 (45)第5章无线资源管理功能 (46)第6章分组路由与传输功能 (48)6.1 PDP状态和状态转换 (48)6.2 会话管理规程 (49)6.2.1 静态地址与动态地址 (49)6.2.2 PDP上下文的激活规程 (50)6.2.3 PDP上下文的修改 (52)6.2.4 PDP上下文的去激活 (53)6.3 业务流程举例 (54)6.3.1 MS发起分组数据业务 (54)6.3.2 网络发起分组数据业务 (55)第7章用户数据传输 (57)7.1 传输模式 (57)7.1.1 GTP传输模式 (57)7.1.2 LLC传输模式 (57)7.1.3 RLC传输模式 (57)7.2 LLC功能 (57)7.2.1寻址 (58)7.2.2服务 (58)7.2.3功能 (58)7.3 SNDCP功能 (58)7.4 PPP功能 (60)7.5 Gb接口 (60)7.5.1物理层 (60)7.5.2 FR子层 (60)7.5.3 NS子层 (61)7.5.4 BSSGP层 (61)7.6 Abis接口 (62)7.6.1结构A (63)7.6.2结构B (64)7.6.3结构C (64)第8章信息存储 (66)8.1 HLR (66)8.2 SGSN (67)8.3 GGSN (69)8.4 MS (69)8.5 MSC/VLR (70)第9章编号 (71)9.1 IMSI (71)9.2 P-TMSI (72)9.3 NSAPI/TLLI (72)9.3.1 NSAPI (72)9.3.2 临时逻辑链路标志(TLLI) (72)9.4 PDP地址和类型 (73)9.5 TID (73)9.6 路由区识别 (73)9.7 小区标识 (74)9.8 GSN地址 (74)9.9 接入点名字 (74)第10章运营方面的问题 (75)10.1 计费信息 (75)10.2 计费功能 (75)10.2.1 分组型业务计费方式和电路型业务计费方式的区别 (75)10.2.2 计费基本功能 (76)10.2.3 话单类型 (76)10.2.4 话单传送接口 (77)10.3 网络服务质量(QoS) (77)10.3.1 优先级别 (78)10.3.2 延时级别 (78)10.3.3 可靠性级别 (78)10.3.4 峰值吞吐量级别 (78)10.3.5 平均吞吐量级别 (79)10.4 消息过滤功能 (80)10.5 兼容性问题 (80)第11章与GSM其它业务的交互 (81)11.1 与点对点短消息业务关系 (81)11.2 与电路交换业务的关系 (81)11.3 与补充业务的关系 (82)第12章 IP相关的基础知识 (83)12.1 NAT (83)12.2 FIREWALL (83)12.3 GRE (83)12.4 DNS (84)12.5 RADIUS (84)MF009001 GPRS原理ISSUE1.0 课程说明课程说明课程介绍本课程为华为传送网网络级网管T2100的一个整体介绍,主要阐述了网络级网管T2100兴起和发展的客观需求,华为传送网管的一体化解决方案。
1. void uip_init(void)此函数用于在启动时初始化uIP的TCP/IP栈。
应用示例:example-mainloop-with-arp.c, and example-mainloop-without-arp.c.定义于uip.c的379行。
2. void uip_setipid(u16_t id)此函数用于启动时设置初始的ip_id.此函数定义于uip.c的181行。
1. void uip_init(void)代码分析1.void2.uip_init(void)3.{4.for(c = 0; c < UIP_LISTENPORTS; ++c) {5.uip_listenports[c] = 0;6.} //将uip_listenports数组全部清零7.for(c = 0; c < UIP_CONNS; ++c) {8.uip_conns[c].tcpstateflags = UIP_CLOSED;9.} //将所有连接的tcpstateflags状态标志设为关闭,表示此连接为关闭状态。
10.#if UIP_ACTIVE_OPENstport = 1024;12.#endif /* UIP_ACTIVE_OPEN */13.//上面的段不知什么意思。
14.#if UIP_UDP15.for(c = 0; c < UIP_UDP_CONNS; ++c) {16.uip_udp_conns[c].lport = 0;17.}18.#endif /* UIP_UDP *///如果定义了UIP_UDP则将uip_udp_conns的lport清零。
19.20.21./* IPv4 initialization. */22.#if UIP_FIXEDADDR == 023./* uip_hostaddr[0] = uip_hostaddr[1] = 0;*/24.#endif /* UIP_FIXEDADDR *///如果主机地址要为固定的,在上面这里赋值。
uip协议栈源码详解UIP协议栈源码详解一、双方的基本信息本协议由以下双方达成:甲方:地址:联系人:电话:电子邮箱:乙方:地址:联系人:电话:电子邮箱:二、各方身份、权利、义务、履行方式、期限、违约责任甲方的身份为软件开发公司,提供UIP协议栈源码。
乙方的身份为客户,接受并使用UIP协议栈源码。
甲方的权利:1.拥有UIP协议栈源码的知识产权,并保留其一切权利。
2.未经乙方授权,不得向第三方提供UIP协议栈源码。
3.有权定期或不定期进行软件升级、修补、优化等操作。
甲方的义务:1.提供UIP协议栈源码,并确保其真实、准确、完整。
2.保证UIP协议栈源码的质量和稳定性。
3.协助乙方解决UIP协议栈源码相关的技术问题。
乙方的权利:1.使用UIP协议栈源码进行相关开发和生产。
2.在UIP协议栈源码使用期限内,享有后续升级、修补、优化等服务。
乙方的义务:1.支付相应的授权费用,并按照甲方的要求使用UIP协议栈源码。
2.在未获得甲方授权之前,不得将UIP协议栈源码提供给第三方。
3.遵守中国相关的法律法规,不得将UIP协议栈源码应用于违法、不良等活动。
期限:本协议的期限为一年,自签署之日起生效。
期满后,如有需要,可协商双方续签。
违约责任:1.如任何一方未能履行本协议的义务或条件,则视为违约,违约方需承担相应的违约责任。
2.如甲方未能提供UIP协议栈源码或提供的UIP协议栈源码存在严重质量问题,则乙方有权要求返还全部授权费用,并要求赔偿相关损失。
3.如乙方将UIP协议栈源码提供给第三方,或将UIP协议栈源码应用于违法、不良等活动,则视为违约,乙方需承担相应的违约责任。
三、需遵守中国的相关法律法规本协议各项条款均符合中国相关法律法规。
四、明确各方的权力和义务本协议明确了甲、乙双方在UIP协议栈源码授权使用方面的权力和义务。
五、明确法律效力和可执行性本协议是双方人民法院具有司法管辖权的有法律效力的法律文件,是双方在UIP协议栈源码授权使用方面的合法依据。
uIP协议栈分析uIP特性uIP协议栈往掉了完整的TCP/IP中不常用的功能,简化了通讯流程,但保存了网络通讯必须使用的协议,设计重点放在了IP/TCP/ICMP/UDP/ARP这些网络层和传输层协议上,保证了其代码的通用性和结构的稳定性。
由于uIP协议栈专门为嵌进式系统而设计,因此还具有如下优越功能:(1)代码非常少,其协议栈代码不到6K,很方便阅读和移植。
(2)占用的内存数非常少,RAM占用仅几百字节。
(3)其硬件处理层、协议栈层和应用层共用一个全局缓存区,不存在数据的拷贝,且发送和接收都是依靠这个缓存区,极大的节省空间和时间。
(4)支持多个主动连接和被动连接并发。
(5)其源代码中提供一套实例程序:web服务器,web客户端,电子邮件发送程序(SMTP 客户端),Telnet服务器,DNS主机名解析程序等。
通用性强,移植起来基本不用修改就可以通过。
(6)对数据的处理采用轮循机制,不需要操纵系统的支持。
由于uIP对资源的需求少和移植轻易,大部分的8位微控制器都使用过uIP协议栈, 而且很多的著名的嵌进式产品和项目(如卫星,Cisco路由器,无线传感器网络)中都在使用uIP协议栈。
uIP架构uIP相当于一个代码库,通过一系列的函数实现与底层硬件和高层应用程序的通讯,对于整个系统来说它内部的协议组是透明的,从而增加了协议的通用性。
uIP协议栈与系统底层和高层应用之间的关系如图2-1所示。
从上图可以看出,uIP协议栈主要提供了三个函数供系统底层调用。
即uip_init(), uip_input() 和uip_periodic()。
其与应用程序的主要接口是UIP_APPCALL( )。
uip_init()是系统初始化时调用的,主要初始化协议栈的侦听端口和默认所有连接是封闭的。
当网卡驱动收到一个输进包时,将放进全局缓冲区uip_buf中,包的大小由全局变量uip_len约束。
同时将调用uip_input()函数,这个函数将会根据包首部的协议处理这个包和需要时调用应用程序。
正文第一章SIP协议SIP协议是用于发起、控制和终结多媒体会话的信令协议。
它被IETF( )以rfc2543发表。
SIP是IETF致力于将电话服务带入IP网络众多协议的一个组成部分(它与SDP、RTP、RTCP、RTSP、RSVP、TRIP等众多协议构成SIP系统协议栈)。
其将要变成正在发展的IP电话——这个朝气蓬勃的电信工业——的标准之一。
正如同电子邮件协议一样,SIP将会变得越来越普及和大众化… …SIP独立与媒体传统电话使用一种媒体编码个师通讯(正如被我所熟知的时隙和PCM概念)。
现在,这种方式将被终结。
我们的电话可以以不同的质量保证和不同的编码方法连接电视、连接摄像机、连接其他电话进行通信。
SIP具有媒体协商等功能。
任何多媒体应用(例如:游戏、远程教学)都可以使用SIP来建立会话。
SIP独立于传输层SIP并不和任何的传输层紧密结合。
这一构思将使得SIP在第三代网络中受到最小的互操作影响。
无线电话的要求(例如漫游功能)同样被关心。
SIP完美的构思,使得其适合作为新蜂窝电话时代的信令协议。
SIP有很好的扩展性在rfc2543中定义了6种类型的事务(INVITE,BYE,CANCEL… …)。
这些事务被用于媒体协商、创建、修改和终结呼叫。
许多其它的服务已经提供这些方式(例如H.323系统),但SIP以其为扩展性为目的设计和事务模型重用(对于服务器是透明的,被用于使用新类型事务创建辅助服务)。
下面是可能的服务列表,其中的一些已经被实现。
短信,用于实时信息预定或通告,用于会议管理委托,用于呼叫转移等管理SIP和最终用户服务“SIP透明支持名字映射和重定向服务,提供ISDN和智能网络电话服务同样的一些功能。
这些特性也使得个人移动成为可能。
”参考阅读:rfc2543.txt(章节1.1)SIP服务器被用于定位用户和分发请求的用户定位信息。
这些途径,使得最终用户代理发起很少的请求,并能获得多种多样的服务。
一直没空仔细研究下oSIP,最近看到其版本已经到了3.x版本,看到网上的许多帮助说明手册都过于陈旧,且很多文档内容有点误人子弟的嫌疑~~Linux下oSIP的编译使用应该是很简单的,其Install说明文档里也介绍的比较清楚,本文主要就oSIP在Windows平台下VC6.0开发环境下的使用作出描述。
虽然oSIP的开发人员也说明了,oSIP只使用了标准C开发库,但许多人在Windows下使用oSIP时,第一步就被卡住了,得不到oSIP的LIB库和DLL库,也就没有办法将oSIP使用到自己的程序中去,所以第一步,我们将学习如何得到oSIP的静态和动态链接库,以便我们自己的程序能够使用它们来成功编译和执行我们的程序。
第一阶段:------------------------------------------------------先创建新工程,网上许多文档都介绍创建一个Win32动态链接库工程,我们这里也一样,创建一个空白的工程保存。
同样,将oSIP2版本3.0.1 src目录下的Osipparser2目录下的所有文件都拷到我们刚创建的工程的根目录下,在VC6上操作:Project-AddToProject-Files将所有的源程序和头文件都加入到工程内,保存工程。
这时,我们可以尝试编译一下工程,你会得到许多错误提示信息,其内容无非是找不到osipparser2/xxxxx.h头文件之类。
处理:在Linux下,我们一般是将头文件,lib库都拷到/usr/inclue;/usr/lib之类的目录下,c源程序里直接写#include <xxx.h>时,能直接去找到它们,在VC里,同样的,最简单的方法就是将oSIP2源码包中的Include目录下的 osipparser2目录直接拷到我们的Windows下默认包含目录即可,这个目录在VC6的Tool-Options-Directories里设置,(当然,如果你知道这一步,也可以不用拷贝文件,直接在这里把oSIP源码包所在目录加进来就可以了),默认如果装在C盘,目录则为 C:/Program Files/Microsoft Visual Studio/VC98/Include。