WTP协议的实现
前面给出了一个WSP/WTP/WDP层次结构示意图,采用该协议实现的任何会话都必须通过WTP层,与WSP层不同,WTP没有连接——传输数据——断开连接的过程,它是实现数据的完整正确传输的这样一套协议。WTP有着一整套的完善的分包、丢包检测、重传,数据重组机制。而WSP并不实现这些的功能。其它的话不多说,让我们来看看WTP PUD的结构。
WTP协议只是在WSP PDU的前面加一个Header,WSP PDU作为WTP的Data域,WTP PDU可以没有Data域。WTP Header包括3~4个字节个固定域和一个不固定的可变域。WTP协议在WAP-224-WTP-20010710-a.pdf里有详细的描述,固定域有下表列出的7种类型PDU:
表3 WTP PDU类型及其编码
Note 2 所示的是WTP可选的支持功能,但也是比较重要的几种PDU,它们用于分组传输。由于无线网络的特殊性,为了对传输的数据进行精确的控制,WTP允许对每个PDU进行单独而复杂的控制(如包的大小,允许传输延迟时间等),这通过在每个WTP Header的第一个字节置位,然后在Header可变域填充一节或多节称之为TPI的结构进行控制,每个TPI的长度为2~8Byte,同样,TPI是可选的。
5.1 WTP 协议数据单元结构和编码
通用Header域
Continue 标志(CON)
在每个WTP Header的最开始一个固定的1bit,Continue 标志指出了后面是否接有TPI。如果该标准置位,表示后面有一个或多个TPI,如果清零,则表示WTP Header的可变域是空的,即没有TPI结构。这个标志同样用于每个TPI,用于指定该TPI后面是否还有TPI。置位则表示有,清零表示没有。
Group Trailer (GTR) and Transmission Trailer (TTR) Flag
翻译成中文就是组尾标记和传输尾标记,这两个标记用于分组传送控制。GTR表明这个WTP PDU包是这组最后一个PDU,TTR表明这个WTP PDU是整个消息的最后一个PDU,一个消息里面可包括多个组,一组里面可以最多有255个PDU。通常GTR和TTR标记组合起来使用,它们的编码如表4所示:
表4 GTR/TTR标志组合
一般的,应该置GTR和TTR位为1,即分组和重传功能无效。在分组传送和重传过程中,如果TTR置位,则GTR标志将被忽略。
Packet Sequence Number(PSN)
包的顺序号,在分组传送中,这个值用于指定分割包在整个消息中的位置。注意的是该值用一个字节来表示,并且这个域的值不能循环打卷,即如果PSN到了255以后,下一个包不能重新从0开始,所以一个组中最多只能有255个包。
PDU类型
该域用来指定前面列出来的PDU Type(Invoke,Ack等等)。