转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd

作者联系方式:Li XianJing <xianjimli at hotmail dot com>

更新时间:2006-12-19

转载时请注明出处:http://blog.csdn.net/absurd

我们知道,彩信(MMS)和WAP浏览器是WAP协议的两大主要应用。WAP协议有点复杂,也算是SmartPhone中的核心技术之一吧,它包括WDP/WTP/WSP这一套传输协议,也包括WML/和SMIL这样的内容表示协议。去年花了一点时间去研究它,后来该任务取消了,所以没有搞得太透彻。今年要真正使用了,现在继续研究,主要侧重于它的实现。这里记录一些研究笔记,本文是关于WDP/WTP/WSP的。

在传统的WWW模型中,浏览器(即用户代理)直接访问原始服务器,获取URL指定的资源,这是标准的C/S模型。

考虑到移动设备及其无线网络的特殊性,WAP的模型与传统的WWW模型有些差别,首先是在浏览器(即用户代理)和原始服务器之间引入了一个WAP网关,其次是服务器可以主动推(push)数据到用户代理上。在网关与原始服务器之间仍然采用传统的TCP/IP/HTTP协议,而在浏览器(即用户代理)和网关之间采用了一套新的传输协议。

这套协议的协议栈结构如下:

最上层是WAE层,它描述了WML、Wscript、Wireless Telephony Application (WTA, WTAI)和一些数据格式(如WBMP图片格式、电话本记录和日程记录等等)。

其下层是WSP层,它把下面的无连接的WDP协议和面向连接的WTP协议封装起来,为WAE层提供一套统一的接口。另外它也提供了浏览器应用程序相关功能(WSP/B),如:HTTP/1.1协议及相应的二进制格式、长生命周期的会话(session)、会话的挂起(suspend)与恢复(resume)、可靠/不可靠的推服务和协议能力协商等。

WSP下面是WTP层,它提供了轻量级的面向事务的协议。它有三类事务服务:不可靠的单向请求(one-way)事务、可靠的单向请求(one-way)事务和可靠的双向请求-回应(two-way request- reply)事务。它也支持异步事务和为了提高带宽利用率的一些机制等。

WTP下面是WTLS层,它基于Transport Layer Security(TLS),保证数据的保密性、完整性以及防止DOS攻击等等。不过好像通常很少使用,我想可能一方面在于GSM网络本身的特殊性,另一方面在限于手机上的资源(CPU/ROM/RAM)限制。

WTLS下面是WDP层,它主要是对下面的承载层的做一个抽象,为上面的WTLS、WTP和WAE提供一套统一的接口。

最下层是承载层,WAP可以运行在很多不同的承载层之上,比如GSM、CDMA和PDC-P,甚至还可以在TCP/IP网络上运行,不过最常见的方式是运行在GSM的GPRS上。

WAP传输协议相对于TCP/IP协议来说,要简单不少。但是要重头实现也并非易事,即使只实现WDP/WTP/WSP,估计也少不了两三个月时间。所幸开源社区有很多可以重用的代码,kannel就是其中之一,它是一个WAP/SMS网关,它实现了完整的WAP传输协议。

Kannel的WAP传输协议代码在wap目录下。WAP传输协议并不是对等的,Kannel作为网关,其实它只需要实现服务器的代码即可,但kannel即实现了服务器的代码也实现了客户端的代码,所以这部分代码完全可以拿到手机中使用。

Kannel状态机和协议数据单元的实现很巧妙。里面有很多def文件,这些文件主要用于实现状态机和协议数据单元PDU的打包/解包,这种方法的巧妙之处在于:def文件里面的宏是根据上下文定义的,不同的上下文从def文件中抽取不同的数据,从而把重复(类似)的代码降到最低。

wsp_pdu.def定义了WSP协议层服务原语对应的协议数据单元(PDU),其中包括:

1.         Connect

2.         ConnectReply

3.         Redirect

4.         Disconnect

5.         Get

6.         Post

7.         Reply

8.         Push

9.         ConfirmedPush

10.     Suspend

11.     Resume

12.     sia

wtp_pdu.def定义了WTP协议层的服务原语对应的协议数据单元(PDU),其中包括:

1.         Invoke

2.         Result

3.         Ack

4.         Abort

5.         Segmented_invoke

6.         Segmented_result

Negative_ack

Kannel对于每层协议的实现也很巧妙。在初始化时,一般每个协议层都需要两个函数指针,这些函数用来衔接上下两个相邻的协议层: 一个函数接收来自上层的数据包并放到队列中,另一个函数接收来自下层的数据包并放到队列中。这样,上下两层是完全独立的,可以单独测试。每一层都有一个工作线程,它异步的处理来自上下两层的数据包,让各层的调用不会阻塞。

参考资料:

http://www.wapforum.org

http://www.kannel.org

~~end~~

WAP协议研究笔记—WAP传输协议相关推荐

  1. ndi协议_NDI是什么协议,NDI传输协议技术原理方法

    NDI是什么协议,NDI传输协议技术原理方法 NDI是什么协议 NDI就是一种接口传输协议. NDI就是通过IP网络进行超低延时.无损传输.交互控制的标准协议: NDI协议最大的不同是:NDI视频传输 ...

  2. 互联网协议 — FTP 文件传输协议

    目录 文章目录 目录 FTP vsftpd 自动模式和被动模式 PORT 主动模式 PASV 被动模式 访问控制方式 部署配置 FTP Server Global config Anonymous U ...

  3. linux虚拟化桌面协议,桌面虚拟化传输协议之android spice

    背景 云计算是目前计算机领域的一个热门领域,桌面虚拟化是其中的一个重要应用,即把桌面系统在服务器端虚拟化,然后通过传输协议传输数据到客户端来实现桌面虚拟化,这样的好处就在于不管用什么设备,只要通过客户 ...

  4. FTP协议(文件传输协议)

    FTP是FileTransferProtocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Appl ...

  5. p2p服务器的协议,P2P文件传输协议之BitTorrent协议

    BitTorrent协议是支持网络当中数据的上下传输的一个P2P文件传输协议.那么基于这个协议的BT软件大家肯定更不会陌生.但是它却有着更为广泛的使用,尤其是在一些大型网络数据交换平台中,也常常会使用 ...

  6. 教你写一个ftp协议(文件传输协议)

    一.FTP协议简介 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制文件的双向传输.同时,它 ...

  7. 《计算机网络》——文件传输协议FTP、简单邮件传送协议SMTP、邮局协议POP3、网际报文存取协议IMAP、万维网和HTTP协议、超文本传输协议HTTP

    文章目录 文件传输协议FTP FTP服务器和用户端 FTP工作原理 简单邮件传送协议SMTP 邮局协议POP3 网际报文存取协议IMAP 万维网和HTTP协议 超文本传输协议HTTP HTTP协议的特 ...

  8. 服务器电子邮件传输是靠什么协议,电子邮件(e-mail)传输协议和接收协议

    一.电子邮件传输协议 SMTP:SMTP是Simple Mail Transfer Protocol的缩写,意思就是简单邮件传输协议,SMTP是一种提供可靠且有的电子邮件传输协议.SMTP是一种建模在 ...

  9. cip协议服务器,CIP 传输协议

    CIP 传输协议 摘要 本文主要说明用于传输CIP请求/响应,索引对象,实现它们在TCP,邮件和HTTP上传输的三个协议.相关的资料请在其它资料中查询. 1. 协议 本节说明用于传输CIP索引对象和维 ...

最新文章

  1. golang 不定参 可变参 使用 传递
  2. php测试宽带速度慢,宽带速度慢怎么办?
  3. 网络服务器有保存文件,将收到的图片保存到网络服务器上的文件夹
  4. 实现Linux select IO复用C/S服务器代码
  5. python sendto(右键发送文件到执行的bat)功能的实现
  6. 超链接一般有两种表现形式_外链的三种常见表现形式
  7. 医学图像分类 神经网络,神经网络图像识别技术
  8. 笔记本电脑蓝牙怎么用来连接耳机
  9. 集合例题3.:现在有一个map集合如下:Map<Integer,String> map = new HashMap<Integer, String>();map.put(1, “张三丰“);map.
  10. 6.Postman之批量执行
  11. ABP入门系列之1——ABP总体介绍
  12. python uniform 函数
  13. 有趣且重要的JS知识合集(18)浏览器实现前端录音功能
  14. 浪潮云海超融合一体机提升存储性能 支撑关键业务高效运行
  15. 网易考拉涉假疑案最新进展:雅诗兰黛中国承认没有鉴定真假的仪器
  16. Gurobi 解运输问题 python
  17. 我是如何从程序员一步一步走向产品经理(转自人人都是产品经理)
  18. hyperMILL自动程序单后处理刀库模板制作视频教程
  19. 计量经济学及Stata应用 第三章习题
  20. react16.3官方文档

热门文章

  1. iconv命令的使用方法
  2. 第四次作业 个人学习总结 霍兰德- 职业兴趣测评
  3. Word如何取消打印前自动更新域
  4. 标签管理--操作标签
  5. mysql:列类型之时间日期
  6. 快速搭建自己的直播服务器,完成属于你的直播服务。(以windows 下虚拟机centos为例,对安装步骤进行详细说明)
  7. 字节数组与字节流、缓冲字节流、字符流、缓冲字符流、对象流
  8. 大学生当裁缝专做西服 一年收入100万
  9. xmind-8 安装以及 如何激活
  10. C语言矩阵运算库大起底