wsp 数据单元的结构与编码。

来源:互联网 发布:怎么还原数据库 编辑:程序博客网 时间:2024/04/30 17:11
1. 简单数据类型.
        ____________________________
        dataType | defination
       -----------   |-----------------
        bit            |    一位数据
        octer        |    八位opaque数据
        unit8        |    八位unsinged整数
        unit16      |   16位unsinged整数
        unit32      |   32位unsinged整数
        unitvar     |   可变长度的unsinged整数

2. 协议数据单元的结构

      2.1

        下面的协议结构适合于大部分的PDU.
              ________________________________________
              | TID  | TYPE | Type-Specific Contents |
              ----------------------------------------
        PDU数据都以一个"事务标识"和一个" 类型标识"作为开头的.
               名称     类型    描述
               -----------------------------------------------------------
               TID      unit8   S-Unit-MethodInvoke.req::Transaction Id or
                                     S-Unit-MethodResult.req::Transaction Id or
                                     S-Unit-Push.req::Push Id  
               ---------------------------------------------------
               TYPE    unit8   PDU type
               ------------------------------------------------------
        TID  是用来在面向无连接的会话服务中把请求与响应联系起来. TID这一项是否需要存在是有
             条件 的. 它必须包含在面向无连接的 wsp pdu 中, 但是不能包含在面向连接的 pdu中.
             在面向无连接的 wsp中, TID 将作为 "Transaction Id"或者"push ID" 参数出现.
        TYPE 是用来定义PDU的类型和功能的,其值在"表34"中定义.

        2.2.1

           Connect : Connect PDU 在会话开始的时候发送

             Name                  Type                    Source
             Version               uint8                    WSP protocol version
             CapabilitiesLen   uintvar                 Length of the Capabilities field
             HeadersLen        uintvar                 Length of the Headers field
             Capabilities         CapabilitiesLen    S-Connect.req::Requested Capabilities
                                        octets    
             Headers              HeadersLen         S-Connect.req::Client Headers
                                        octets
          version  属性表明了wsp协议的版本, 它决定了这以后所有pdu单元的格式. 本协版本使用的
                   是1.0版本, 0x10 .
          capabilities 属性包含了发送者请求的属性设置, 每一个属性都有一个属性参数与之对应.
                   更多的信息请参照 8.3中的属性编码.
          headers  属性包含了从客户端发送到服务器来申请整个会话的头文件

       2.2.2

          ConnectReply: ConnectReply PDU 用来响应Connect PDU.
        
              Name                     Type                   Source
              ServerSessionId    Uintvar               Session_ID variable
              CapabilitiesLen      Uintvar               Length of Capabilities field
              HeadersLen           Uintvar               Length of the Headers field
              Capabilities            CapabilitiesLen  S-Connect.res::Negotiated Capabilities
                                            octets
              Headers                 HeadersLen       S-Connect.res::Server Headers
                                            octets
          
          ServerSessionId 包含了服务会话标识符,他用来鉴别紧接而来的用来管理会话的pdu单元.   
                  简单的说,如果客户机想要通过底层协议继续这个会话,就必须用到serverSessionID

 2.2.3

         Redirect: 当连接被拒绝,返回的响应是Redirect PDU. 当服务器地址改变时,它会被用到.
        
             Name         Type                   Source
             Flags          uint8                   S-Disconnect.req::Redirect Security
                                                          and S-Disconnect.req::Reason Code
             Redirect      multiple octets   S-Disconnect.req::Redirect Addresses
             Addresses
         flags:最高位置一时,客户机应该使用redirect Address与服务器建立和继续所有的会话,否则
               在当前会话成功建立之前,不使用redirectAddress建立会话.如果第四位置一,客户机可
               以在向新的服务器地址发送会话请求的同时使用当前的安全会话.
         RedirectAddresses: 包含了一个或者多个新的服务器地址.后继的connectPDUs应该被送往这些
               地址.以取代发送RedirectPDU的服务器. 重定向地址的长度由底层协议发送的SDU报告来
               确定.每一个重定向地址包含如下的编码格式

             Name                Type          Purpose
             Bearer Type    1 bit             Flag indicating inclusion of Bearer Type field
             Included             
             PortNumber    1 bit              Flag indicating inclusion of PortNumber field
             Included
             Address Len   6 bits            Length of the Address field
             BearerType     uint8            Type of bearer network to use
             PortNumber    uint16           Port number to use
             Address          AddressLen  Bearer address to use
                                    octets
         BearerTypeIncluded 和 PortNumberIncluded 分别指示BearerType和PortNumber域是否存在.
             若会话使用了相同的BearerType和PortNumber,则BearerType和PortNumber域可以省略.
         BearerType:指明了传输使用的bearer类型,其编码值在W**协议中定义.
         *ortNumber:包含了目的地的端口号.如果重定向的端口号与ConnectPDU使用的端口号不同,则
             必须使用网络动态或者静态的端口号(49152-65535).客户机不能改变由重定向引起的协议
             层的配置(例如:客户机不能停止使用由重定向引发的安全层).如果端口号改变,Redire-
             ct::Flages的最高位必须置0.
         Address:包含了使用的bearer地址. bearerType也暗示了address域中的地址编码格式.编码应
             该使用合适的bearer规范中定义的本地地址传送格式.如果这种格式使用的时bit数.而不
             是八位二进制编码的组合,则这个地址应该是big-endian multi-octet整数.
             (the necessary number of zero fill bits shall be included in the most signif-
             ican octet so that the fill bits occupy the most significant bits. The used
             bearer address formats are defined in [WDP] together with the bearer type
             codes)由于不确定翻译的是否准确,故写出原文,在我的学习笔记中,这种 情况还会出现
             并且不再进行说明.以下是此文翻译:
             零作为必要的填充位,应该被包含在大多数重要的八位数组中,因此,填充位占用了大多数的
             重要位. 使用的bearer地址格式在WDP中与bearerType一起被定义.
   
    2.2.4
   
       Disconnect:用来结束一个会话.

               Name                     Type              Source
               ServerSessionId    uintvar           Session_ID variable 

          ServerSessionId:包含了结束会话的服务器标识.
    2.2.5
     
       Reply:The Reply PDU is used by the session creation facility, and it is defined in
             section 2.3.3, “Reply”, below.
             ReplyPDU 在会话建立中使用并且在下面的2.3.3中定义.
 2.3 Method Invocation Facility

         有两个PDU单元用于服务器的方法调用, Get 和 Post, 取决于所需的参数
         http/1.1中定义的方法被指派给特殊的PDU类型编号. 没有在http/1.1中定义的PDU类型编号
     在性能交流会期间被确立下来. 使用Get方法或是Post方法取决于这个方法是否包含请求的内容.
     Get方法使用的PDU编码范围是0x40-0x5F,Post方法使用的PDU编码范围是0x60-0x7F.

  2.3.1  Get
        
         Get 方法类似于http/1.1中的 1.1 GET, OPTIONS, HEAD, DELETE and TRACE 方法, 是一种不包
     含请求内容的一种扩展方法.
 
            Name             Type             Source
            URILen           uintvar          Length of the URI field
            URI                 URILen         S-MethodInvoke.req::Request URI or
                                  octets           S-Unit-MethodInvoke.req::Request URI
            Headers         multiple        S-MethodInvoke.req::Request Headers or
                                  octets           S-Unit-MethodInvoke.req::Request Headers

         url域包含了URL, 若url是普通的以空字符作为结束符的字符串,则执行时须去掉空字符.
         headers域包含了所有的请求的头信息. headers的长度取决于作为底层传输提供或者报告的 
                SDU size. Headers域紧随着URL域并且结束于SDU的末尾.
 
  2.3.2  Post  
        
         Post 方法类似于http/1.1中的POST和PUT方法,是一种包含请求内容的扩展方法.

            Name               Type         Source
            UriLen              uintvar      Length of the URI field
            HeadersLen     uintvar      Length of the ContentType and Headers fields
                                                     combined
            Uri                    UriLen       S-MethodInvoke.req::Request URI or
                                    octets       S-Unit-MethodInvoke.req::Request URI
            ContentType    multiple    S-MethodInvoke.req::Request Headers or
                                    octets       S-Unit-MethodInvoke.req::Request Headers
            Headers           octets      S-MethodInvoke.req::Request Headers or
                                                    S-Unit-MethodInvoke.req::Request Headers
            Data                multiple    S-MethodInvoke.req::Request Body or
                                   octets       S-Unit-MethodInvoke.req::Request Body

        ContentType:包含了内容的数据类型,其值与下面章节中4.2.2中的定义一致.
        Data:包含了请求的数据.数据的长度取决于SDU size.  Data紧随在herders之后并结束于SDU的
             末尾.
 
  2.3.3  Reply

         Reply 是一种从服务器返回的请求响应, 用在S-Connect中指明会话中出现的错误.
  
     

      Staus:包含了尝试和满足需求的结果代码. staus编码已经由http/1.1中定义并且在表36中描述.
      其他域含义同其他.
        
原创粉丝点击