tests/auto/qnetworkreply/bigfile
changeset 0 1918ee327afb
equal deleted inserted replaced
-1:000000000000 0:1918ee327afb
       
     1 
       
     2 
       
     3 
       
     4 
       
     5 
       
     6 
       
     7 Network Working Group                                         H. Kennedy
       
     8 Request for Comments: 3252                                      Mimezine
       
     9 Category: Informational                                     1 April 2002
       
    10 
       
    11 
       
    12                  Binary Lexical Octet Ad-hoc Transport
       
    13 
       
    14 Status of this Memo
       
    15 
       
    16    This memo provides information for the Internet community.  It does
       
    17    not specify an Internet standard of any kind.  Distribution of this
       
    18    memo is unlimited.
       
    19 
       
    20 Copyright Notice
       
    21 
       
    22    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
    23 
       
    24 Abstract
       
    25 
       
    26    This document defines a reformulation of IP and two transport layer
       
    27    protocols (TCP and UDP) as XML applications.
       
    28 
       
    29 1.   Introduction
       
    30 
       
    31 1.1. Overview
       
    32 
       
    33    This document describes the Binary Lexical Octet Ad-hoc Transport
       
    34    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
    35    (IP [RFC791]), and two associated transport layer protocols (TCP
       
    36    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
    37    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
    38    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
    39    across the public Internet.
       
    40 
       
    41 1.2. Motivation
       
    42 
       
    43    The wild popularity of XML as a basis for application-level protocols
       
    44    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
    45    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
    46    investigation into the possibility of extending the use of XML in the
       
    47    protocol stack.  Using XML at both the transport and network layer in
       
    48    addition to the application layer would provide for an amazing amount
       
    49    of power and flexibility while removing dependencies on proprietary
       
    50    and hard-to-understand binary protocols.  This protocol unification
       
    51    would also allow applications to use a single XML parser for all
       
    52    aspects of their operation, eliminating developer time spent figuring
       
    53    out the intricacies of each new protocol, and moving the hard work of
       
    54 
       
    55 
       
    56 
       
    57 
       
    58 Kennedy                      Informational                      [Page 1]
       
    59 
       
    60 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
    61 
       
    62 
       
    63    parsing to the XML toolset.  The use of XML also mitigates concerns
       
    64    over "network vs. host" byte ordering which is at the root of many
       
    65    network application bugs.
       
    66 
       
    67 1.3. Relation to Existing Protocols
       
    68 
       
    69    The reformulations specified in this RFC follow as closely as
       
    70    possible the spirit of the RFCs on which they are based, and so MAY
       
    71    contain elements or attributes that would not be needed in a pure
       
    72    reworking (e.g. length attributes, which are implicit in XML.)
       
    73 
       
    74    The layering of network and transport protocols are maintained in
       
    75    this RFC despite the optimizations that could be made if the line
       
    76    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
    77    element in the DTD) in order to foster future use of this protocol as
       
    78    a basis for reformulating other protocols (such as ICMP.)
       
    79 
       
    80    Other than the encoding, the behavioral aspects of each of the
       
    81    existing protocols remain unchanged.  Routing, address spaces, TCP
       
    82    congestion control, etc. behave as specified in the extant standards.
       
    83    Adapting to new standards and experimental algorithm heuristics for
       
    84    improving performance will become much easier once the move to BLOAT
       
    85    has been completed.
       
    86 
       
    87 1.4. Requirement Levels
       
    88 
       
    89    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
    90    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
    91    document are to be interpreted as described in BCP 14, RFC 2119
       
    92    [RFC2119].
       
    93 
       
    94 2.   IPoXML
       
    95 
       
    96    This protocol MUST be implemented to be compliant with this RFC.
       
    97    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
    98    (section 3.) and higher-level application protocols.
       
    99 
       
   100    The DTD for this document type can be found in section 7.1.
       
   101 
       
   102    The routing of IPoXML can be easily implemented on hosts with an XML
       
   103    parser, as the regular structure lends itself handily to parsing and
       
   104    validation of the document/datagram and then processing the
       
   105    destination address, TTL, and checksum before sending it on to its
       
   106    next-hop.
       
   107 
       
   108    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
   109    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
   110    would have exceeded the 1500 byte Ethernet MTU.
       
   111 
       
   112 
       
   113 
       
   114 Kennedy                      Informational                      [Page 2]
       
   115 
       
   116 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
   117 
       
   118 
       
   119    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
   120    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
   121    formed and include the XMLDecl.
       
   122 
       
   123 2.1. IP Description
       
   124 
       
   125    A number of items have changed (for the better) from the original IP
       
   126    specification.  Bit-masks, where present have been converted into
       
   127    human-readable values.  IP addresses are listed in their dotted-
       
   128    decimal notation [RFC1123].  Length and checksum values are present
       
   129    as decimal integers.
       
   130 
       
   131    To calculate the length and checksum fields of the IP element, a
       
   132    canonicalized form of the element MUST be used.  The canonical form
       
   133    SHALL have no whitespace (including newline characters) between
       
   134    elements and only one space character between attributes.  There
       
   135    SHALL NOT be a space following the last attribute in an element.
       
   136 
       
   137    An iterative method SHOULD be used to calculate checksums, as the
       
   138    length field will vary based on the size of the checksum.
       
   139 
       
   140    The payload element bears special attention.  Due to the character
       
   141    set restrictions of XML, the payload of IP datagrams (which MAY
       
   142    contain arbitrary data) MUST be encoded for transport. This RFC
       
   143    REQUIRES the contents of the payload to be encoded in the base-64
       
   144    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
   145    encoded output MUST be wrapped on 76-character lines.
       
   146 
       
   147 
       
   148 
       
   149 
       
   150 
       
   151 
       
   152 
       
   153 
       
   154 
       
   155 
       
   156 
       
   157 
       
   158 
       
   159 
       
   160 
       
   161 
       
   162 
       
   163 
       
   164 
       
   165 
       
   166 
       
   167 
       
   168 
       
   169 
       
   170 Kennedy                      Informational                      [Page 3]
       
   171 
       
   172 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
   173 
       
   174 
       
   175 2.2. Example Datagram
       
   176 
       
   177    The following is an example IPoXML datagram with an empty payload:
       
   178 
       
   179    <?xml version="1.0" encoding="UTF-8"?>
       
   180    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
   181    <ip>
       
   182    <header length="474">
       
   183    <version value="4"/>
       
   184    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
   185         relibility="Normal" reserved="0"/>
       
   186    <total.length value="461"/>
       
   187    <id value="1"/>
       
   188    <flags reserved="0" df="dont" mf="last"/>
       
   189    <offset value="0"/>
       
   190    <ttl value="255"/>
       
   191    <protocol value="6"/>
       
   192    <checksum value="8707"/>
       
   193    <source address="10.0.0.22"/>
       
   194    <destination address="10.0.0.1"/>
       
   195    <options>
       
   196    <end copied="0" class="0" number="0"/>
       
   197    </options>
       
   198    <padding pad="0"/>
       
   199    </header>
       
   200    <payload>
       
   201    </payload>
       
   202    </ip>
       
   203 
       
   204 3.   TCPoXML
       
   205 
       
   206    This protocol MUST be implemented to be compliant with this RFC.  The
       
   207    DTD for this document type can be found in section 7.2.
       
   208 
       
   209 3.1. TCP Description
       
   210 
       
   211    A number of items have changed from the original TCP specification.
       
   212    Bit-masks, where present have been converted into human-readable
       
   213    values.  Length and checksum and port values are present as decimal
       
   214    integers.
       
   215 
       
   216    To calculate the length and checksum fields of the TCP element, a
       
   217    canonicalized form of the element MUST be used as in section 2.1.
       
   218 
       
   219    An iterative method SHOULD be used to calculate checksums as in
       
   220    section 2.1.
       
   221 
       
   222    The payload element MUST be encoded as in section 2.1.
       
   223 
       
   224 
       
   225 
       
   226 Kennedy                      Informational                      [Page 4]
       
   227 
       
   228 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
   229 
       
   230 
       
   231    The TCP offset element was expanded to a maximum of 255 from 16 to
       
   232    allow for the increased size of the header in XML.
       
   233 
       
   234    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
   235    as well as the <!DOCTYPE> declaration.
       
   236 
       
   237 3.2. Example Datagram
       
   238 
       
   239    The following is an example TCPoXML datagram with an empty payload:
       
   240 
       
   241    <?xml version="1.0" encoding="UTF-8"?>
       
   242    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
   243    <tcp>
       
   244    <tcp.header>
       
   245    <src port="31415"/>
       
   246    <dest port="42424"/>
       
   247    <sequence number="322622954"/>
       
   248    <acknowledgement number="689715995"/>
       
   249    <offset number=""/>
       
   250    <reserved value="0"/>
       
   251    <control syn="1" ack="1"/>
       
   252    <window size="1"/>
       
   253    <urgent pointer="0"/>
       
   254    <checksum value="2988"/>
       
   255    <tcp.options>
       
   256    <tcp.end kind="0"/>
       
   257    </tcp.options>
       
   258    <padding pad="0"/>
       
   259    </tcp.header>
       
   260    <payload>
       
   261    </payload>
       
   262    </tcp>
       
   263 
       
   264 4.   UDPoXML
       
   265 
       
   266    This protocol MUST be implemented to be compliant with this RFC.  The
       
   267    DTD for this document type can be found in section 7.3.
       
   268 
       
   269 4.1. UDP Description
       
   270 
       
   271    A number of items have changed from the original UDP specification.
       
   272    Bit-masks, where present have been converted into human-readable
       
   273    values.  Length and checksum and port values are present as decimal
       
   274    integers.
       
   275 
       
   276 
       
   277 
       
   278 
       
   279 
       
   280 
       
   281 
       
   282 Kennedy                      Informational                      [Page 5]
       
   283 
       
   284 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
   285 
       
   286 
       
   287    To calculate the length and checksum fields of the UDP element, a
       
   288    canonicalized form of the element MUST be used as in section 2.1.  An
       
   289    iterative method SHOULD be used to calculate checksums as in section
       
   290    2.1.
       
   291 
       
   292    The payload element MUST be encoded as in section 2.1.
       
   293 
       
   294    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
   295    as well as the <!DOCTYPE> declaration.
       
   296 
       
   297 4.2. Example Datagram
       
   298 
       
   299    The following is an example UDPoXML datagram with an empty payload:
       
   300 
       
   301    <?xml version="1.0" encoding="UTF-8"?>
       
   302    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
   303    <udp>
       
   304    <udp.header>
       
   305    <src port="31415"/>
       
   306    <dest port="42424"/>
       
   307    <udp.length value="143"/>
       
   308    <checksum value="2988"/>
       
   309    </udp.header>
       
   310    <payload>
       
   311    </payload>
       
   312    </udp>
       
   313 
       
   314 5.   Network Transport
       
   315 
       
   316    This document provides for the transmission of BLOAT datagrams over
       
   317    two common families of physical layer transport.  Future RFCs will
       
   318    address additional transports as routing vendors catch up to the
       
   319    specification, and we begin to see BLOAT routed across the Internet
       
   320    backbone.
       
   321 
       
   322 5.1. Ethernet
       
   323 
       
   324    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
   325    exception that the type field of the Ethernet frame MUST contain the
       
   326    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
   327    be 0x3c 3f 78 6d 6c ("<?xml".)
       
   328 
       
   329 5.2. IEEE 802
       
   330 
       
   331    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
   332    that the protocol type code for IPoXML is 0xBEEF.
       
   333 
       
   334 
       
   335 
       
   336 
       
   337 
       
   338 Kennedy                      Informational                      [Page 6]
       
   339 
       
   340 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
   341 
       
   342 
       
   343 6. Gatewaying over IP
       
   344 
       
   345    In order to facilitate the gradual introduction of BLOAT into the
       
   346    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
   347    gateway between networks that run BLOAT natively on their LANs.
       
   348 
       
   349 7. DTDs
       
   350 
       
   351    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
   352    Network DTD (7.1.)
       
   353 
       
   354    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
   355    [XML]) although it is understood that most IPoXML implementations
       
   356    will not need to pull down the DTD, as it will normally be embedded
       
   357    in the implementation, and presents something of a catch-22 if you
       
   358    need to load part of your network protocol over the network.
       
   359 
       
   360 7.1.  IPoXML DTD
       
   361 
       
   362    <!--
       
   363     DTD for IP over XML.
       
   364     Refer to this DTD as:
       
   365 
       
   366     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
   367    -->
       
   368    <!--
       
   369     DTD data types:
       
   370 
       
   371       Digits      [0..9]+
       
   372 
       
   373       Precedence  "NetworkControl | InternetworkControl |
       
   374                    CRITIC | FlashOverride | Flash | Immediate |
       
   375                    Priority | Routine"
       
   376 
       
   377       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
   378 
       
   379       Class       [0..3]
       
   380 
       
   381       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
   382                     Restricted | Secret | Top Secret | Reserved"
       
   383 
       
   384       Compartments [0..65535]
       
   385 
       
   386       Handling     [0..65535]
       
   387 
       
   388       TCC          [0..16777216]
       
   389 
       
   390    -->
       
   391 
       
   392 
       
   393 
       
   394 Kennedy                      Informational                      [Page 7]
       
   395 
       
   396 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
   397 
       
   398 
       
   399    <!ENTITY % Digits "CDATA">
       
   400    <!ENTITY % Precedence "CDATA">
       
   401    <!ENTITY % IP4Addr "CDATA">
       
   402    <!ENTITY % Class "CDATA">
       
   403    <!ENTITY % Sec "CDATA">
       
   404    <!ENTITY % Compartments "CDATA">
       
   405    <!ENTITY % Handling "CDATA">
       
   406    <!ENTITY % TCC "CDATA">
       
   407 
       
   408    <!ELEMENT ip (header, payload)>
       
   409 
       
   410    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
   411                     protocol, checksum, source, destination, options,
       
   412                     padding)>
       
   413    <!-- length of header in 32-bit words -->
       
   414    <!ATTLIST header
       
   415              length %Digits; #REQUIRED>
       
   416 
       
   417    <!ELEMENT version EMPTY>
       
   418    <!-- ip version. SHOULD be "4" -->
       
   419    <!ATTLIST version
       
   420              value   %Digits;  #REQUIRED>
       
   421 
       
   422    <!ELEMENT tos EMPTY>
       
   423    <!ATTLIST tos
       
   424              precedence   %Precedence;    #REQUIRED
       
   425              delay    (normal | low)  #REQUIRED
       
   426              throughput   (normal | high) #REQUIRED
       
   427              relibility   (normal | high) #REQUIRED
       
   428              reserved     CDATA #FIXED "0">
       
   429 
       
   430    <!ELEMENT total.length EMPTY>
       
   431    <!--
       
   432     total length of datagram (header and payload) in octets, MUST be
       
   433     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
   434     ethernets).
       
   435    -->
       
   436    <!ATTLIST total.length
       
   437              value %Digits; #REQUIRED>
       
   438 
       
   439    <!ELEMENT id EMPTY>
       
   440    <!-- 0 <= id <= 65,535  -->
       
   441    <!ATTLIST id
       
   442              value %Digits; #REQUIRED>
       
   443 
       
   444    <!ELEMENT flags EMPTY>
       
   445    <!-- df = don't fragment, mf = more fragments  -->
       
   446    <!ATTLIST flags
       
   447 
       
   448 
       
   449 
       
   450 Kennedy                      Informational                      [Page 8]
       
   451 
       
   452 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
   453 
       
   454 
       
   455           reserved CDATA  #FIXED "0"
       
   456           df (may|dont)   #REQUIRED
       
   457           mf (last|more)  #REQUIRED>
       
   458 
       
   459    <!ELEMENT offset EMPTY>
       
   460    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
   461    <!ATTLIST offset
       
   462              value %Digits; #REQUIRED>
       
   463 
       
   464    <!ELEMENT ttl EMPTY>
       
   465    <!-- 0 <= ttl <= 255 -->
       
   466    <!ATTLIST ttl
       
   467              value %Digits; #REQUIRED>
       
   468 
       
   469    <!ELEMENT protocol EMPTY>
       
   470    <!-- 0 <= protocol <= 255 (per IANA) -->
       
   471    <!ATTLIST protocol
       
   472              value %Digits; #REQUIRED>
       
   473 
       
   474    <!ELEMENT checksum EMPTY>
       
   475    <!-- 0 <= checksum <= 65535 (over header only) -->
       
   476    <!ATTLIST checksum
       
   477              value %Digits; #REQUIRED>
       
   478 
       
   479    <!ELEMENT source EMPTY>
       
   480    <!ATTLIST source
       
   481              address %IP4Addr; #REQUIRED>
       
   482 
       
   483    <!ELEMENT destination EMPTY>
       
   484    <!ATTLIST destination
       
   485              address %IP4Addr; #REQUIRED>
       
   486 
       
   487    <!ELEMENT options ( end | noop | security | loose | strict | record
       
   488                      | stream | timestamp )*>
       
   489 
       
   490    <!ELEMENT end EMPTY>
       
   491    <!ATTLIST end
       
   492              copied (0|1) #REQUIRED
       
   493              class  CDATA #FIXED "0"
       
   494              number CDATA #FIXED "0">
       
   495 
       
   496    <!ELEMENT noop EMPTY>
       
   497    <!ATTLIST noop
       
   498              copied (0|1) #REQUIRED
       
   499              class  CDATA #FIXED "0"
       
   500              number CDATA #FIXED "1">
       
   501 
       
   502    <!ELEMENT security EMPTY>
       
   503 
       
   504 
       
   505 
       
   506 Kennedy                      Informational                      [Page 9]
       
   507 
       
   508 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
   509 
       
   510 
       
   511    <!ATTLIST security
       
   512              copied CDATA #FIXED "1"
       
   513              class  CDATA #FIXED "0"
       
   514              number CDATA #FIXED "2"
       
   515              length CDATA #FIXED "11"
       
   516              security %Sec; #REQUIRED
       
   517              compartments %Compartments; #REQUIRED
       
   518              handling %Handling; #REQUIRED
       
   519              tcc %TCC; #REQUIRED>
       
   520    <!ELEMENT loose (hop)+>
       
   521    <!ATTLIST loose
       
   522              copied CDATA #FIXED "1"
       
   523              class  CDATA #FIXED "0"
       
   524              number CDATA #FIXED "3"
       
   525              length %Digits; #REQUIRED
       
   526              pointer %Digits; #REQUIRED>
       
   527 
       
   528    <!ELEMENT hop EMPTY>
       
   529    <!ATTLIST hop
       
   530              address %IP4Addr; #REQUIRED>
       
   531 
       
   532    <!ELEMENT strict (hop)+>
       
   533    <!ATTLIST strict
       
   534              copied CDATA #FIXED "1"
       
   535              class  CDATA #FIXED "0"
       
   536              number CDATA #FIXED "9"
       
   537              length %Digits; #REQUIRED
       
   538              pointer %Digits; #REQUIRED>
       
   539 
       
   540    <!ELEMENT record (hop)+>
       
   541    <!ATTLIST record
       
   542              copied CDATA #FIXED "0"
       
   543              class  CDATA #FIXED "0"
       
   544              number CDATA #FIXED "7"
       
   545              length %Digits; #REQUIRED
       
   546              pointer %Digits; #REQUIRED>
       
   547 
       
   548    <!ELEMENT stream EMPTY>
       
   549    <!-- 0 <= id <= 65,535 -->
       
   550    <!ATTLIST stream
       
   551              copied CDATA #FIXED "1"
       
   552              class  CDATA #FIXED "0"
       
   553              number CDATA #FIXED "8"
       
   554              length CDATA #FIXED "4"
       
   555              id %Digits; #REQUIRED>
       
   556 
       
   557    <!ELEMENT timestamp (tstamp)+>
       
   558    <!-- 0 <= oflw <=15 -->
       
   559 
       
   560 
       
   561 
       
   562 Kennedy                      Informational                     [Page 10]
       
   563 
       
   564 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
   565 
       
   566 
       
   567    <!ATTLIST timestamp
       
   568              copied CDATA #FIXED "0"
       
   569              class  CDATA #FIXED "2"
       
   570              number CDATA #FIXED "4"
       
   571              length %Digits;  #REQUIRED
       
   572              pointer %Digits; #REQUIRED
       
   573              oflw %Digits;    #REQUIRED
       
   574              flag (0 | 1 | 3)  #REQUIRED>
       
   575 
       
   576    <!ELEMENT tstamp EMPTY>
       
   577    <!ATTLIST tstamp
       
   578              time %Digits;   #REQUIRED
       
   579              address %IP4Addr; #IMPLIED>
       
   580    <!--
       
   581        padding to bring header to 32-bit boundary.
       
   582        pad MUST be "0"*
       
   583     -->
       
   584    <!ELEMENT padding EMPTY>
       
   585    <!ATTLIST padding
       
   586              pad CDATA #REQUIRED>
       
   587 
       
   588    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
   589         by section 2.1 of this RFC -->
       
   590    <!ELEMENT payload (CDATA)>
       
   591 
       
   592 7.2.  TCPoXML DTD
       
   593 
       
   594    <!--
       
   595       DTD for TCP over XML.
       
   596       Refer to this DTD as:
       
   597 
       
   598       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
   599    -->
       
   600 
       
   601    <!-- the pseudoheader is only included for checksum calculations -->
       
   602    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
   603 
       
   604    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
   605                          reserved, control, window, checksum, urgent,
       
   606                          tcp.options, padding)>
       
   607 
       
   608    <!ELEMENT src EMPTY>
       
   609    <!-- 0 <= port <= 65,535 -->
       
   610    <!ATTLIST src
       
   611              port %Digits; #REQUIRED>
       
   612 
       
   613    <!ELEMENT dest EMPTY>
       
   614    <!-- 0 <= port <= 65,535 -->
       
   615 
       
   616 
       
   617 
       
   618 Kennedy                      Informational                     [Page 11]
       
   619 
       
   620 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
   621 
       
   622 
       
   623    <!ATTLIST dest
       
   624              port %Digits; #REQUIRED>
       
   625 
       
   626    <!ELEMENT sequence EMPTY>
       
   627    <!-- 0 <= number <= 4294967295 -->
       
   628    <!ATTLIST sequence
       
   629              number %Digits; #REQUIRED>
       
   630 
       
   631    <!ELEMENT acknowledgement EMPTY>
       
   632    <!-- 0 <= number <= 4294967295 -->
       
   633    <!ATTLIST acknowledgement
       
   634              number %Digits; #REQUIRED>
       
   635 
       
   636    <!ELEMENT offset EMPTY>
       
   637    <!-- 0 <= number <= 255 -->
       
   638    <!ATTLIST offset
       
   639              number %Digits; #REQUIRED>
       
   640 
       
   641    <!ELEMENT reserved EMPTY>
       
   642    <!ATTLIST reserved
       
   643              value CDATA #FIXED "0">
       
   644 
       
   645    <!ELEMENT control EMPTY>
       
   646    <!ATTLIST control
       
   647              urg (0|1) #IMPLIED
       
   648              ack (0|1) #IMPLIED
       
   649              psh (0|1) #IMPLIED
       
   650              rst (0|1) #IMPLIED
       
   651              syn (0|1) #IMPLIED
       
   652              fin (0|1) #IMPLIED>
       
   653 
       
   654    <!ELEMENT window EMPTY>
       
   655    <!-- 0 <= size <= 65,535 -->
       
   656    <!ATTLIST window
       
   657              size %Digits; #REQUIRED>
       
   658 
       
   659    <!--
       
   660       checksum as in ip, but with
       
   661       the following pseudo-header added into the tcp element:
       
   662      -->
       
   663    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
   664                                tcp.length)>
       
   665 
       
   666    <!--
       
   667       tcp header + data length in octets. does not include the size of
       
   668 
       
   669       the pseudoheader.
       
   670     -->
       
   671 
       
   672 
       
   673 
       
   674 Kennedy                      Informational                     [Page 12]
       
   675 
       
   676 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
   677 
       
   678 
       
   679    <!ELEMENT tcp.length EMPTY>
       
   680    <!ATTLIST tcp.length
       
   681              value %Digits; #REQUIRED>
       
   682 
       
   683    <!ELEMENT urgent EMPTY>
       
   684    <!-- 0 <= pointer <= 65,535 -->
       
   685    <!ATTLIST urgent
       
   686              pointer %Digits; #REQUIRED>
       
   687 
       
   688    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
   689 
       
   690    <!ELEMENT tcp.end EMPTY>
       
   691    <!ATTLIST tcp.end
       
   692              kind CDATA #FIXED "0">
       
   693 
       
   694    <!ELEMENT tcp.noop EMPTY>
       
   695    <!ATTLIST tcp.noop
       
   696              kind CDATA #FIXED "1">
       
   697 
       
   698    <!ELEMENT tcp.mss EMPTY>
       
   699    <!ATTLIST tcp.mss
       
   700              kind CDATA #FIXED "2"
       
   701              length CDATA #FIXED "4"
       
   702              size %Digits; #REQUIRED>
       
   703 
       
   704 7.3.  UDPoXML DTD
       
   705 
       
   706    <!--
       
   707       DTD for UDP over XML.
       
   708       Refer to this DTD as:
       
   709 
       
   710       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
   711    -->
       
   712 
       
   713    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
   714 
       
   715    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
   716 
       
   717    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
   718                                udp.length)>
       
   719 
       
   720    <!--
       
   721       udp header + data length in octets. does not include the size of
       
   722       the pseudoheader.
       
   723     -->
       
   724    <!ELEMENT udp.length EMPTY>
       
   725    <!ATTLIST udp.length
       
   726              value %Digits; #REQUIRED>
       
   727 
       
   728 
       
   729 
       
   730 Kennedy                      Informational                     [Page 13]
       
   731 
       
   732 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
   733 
       
   734 
       
   735 8. Security Considerations
       
   736 
       
   737    XML, as a subset of SGML, has the same security considerations as
       
   738    specified in SGML Media Types [RFC1874].  Security considerations
       
   739    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
   740    not attempt to correct for issues not related to message format.
       
   741 
       
   742 9.   References
       
   743 
       
   744    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
   745                February 2002. (Work in Progress)
       
   746 
       
   747    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
   748                August 1980.
       
   749 
       
   750    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
   751                September 1981.
       
   752 
       
   753    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
   754                793, September 1981.
       
   755 
       
   756    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
   757                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
   758 
       
   759    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
   760                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
   761                43, RFC 1042, February 1988.
       
   762 
       
   763    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
   764                Application and Support", RFC 1123, October 1989.
       
   765 
       
   766    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
   767                1995.
       
   768 
       
   769    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
   770                October 1996.
       
   771 
       
   772    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
   773                Extensions (MIME) Part One: Format of Internet Message
       
   774                Bodies", RFC 2045, November 1996.
       
   775 
       
   776    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
   777                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
   778 
       
   779    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
   780                10646", RFC 2279, January 1998.
       
   781 
       
   782 
       
   783 
       
   784 
       
   785 
       
   786 Kennedy                      Informational                     [Page 14]
       
   787 
       
   788 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
   789 
       
   790 
       
   791    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
   792                (IPv6) Specification", RFC 2460, December 1998.
       
   793 
       
   794    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
   795                RFC 3080, March 2001.
       
   796 
       
   797    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
   798                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
   799                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
   800                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
   801 
       
   802    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
   803                Markup Language (XML)" World Wide Web Consortium
       
   804                Recommendation REC- xml-19980210.
       
   805                http://www.w3.org/TR/1998/REC-xml-19980210
       
   806 
       
   807 10.  Author's Address
       
   808 
       
   809    Hugh Kennedy
       
   810    Mimezine
       
   811    1060 West Addison
       
   812    Chicago, IL 60613
       
   813    USA
       
   814 
       
   815    EMail: kennedyh@engin.umich.edu
       
   816 
       
   817 
       
   818 
       
   819 
       
   820 
       
   821 
       
   822 
       
   823 
       
   824 
       
   825 
       
   826 
       
   827 
       
   828 
       
   829 
       
   830 
       
   831 
       
   832 
       
   833 
       
   834 
       
   835 
       
   836 
       
   837 
       
   838 
       
   839 
       
   840 
       
   841 
       
   842 Kennedy                      Informational                     [Page 15]
       
   843 
       
   844 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
   845 
       
   846 
       
   847 11.  Full Copyright Statement
       
   848 
       
   849    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
   850 
       
   851    This document and translations of it may be copied and furnished to
       
   852    others, and derivative works that comment on or otherwise explain it
       
   853    or assist in its implementation may be prepared, copied, published
       
   854    and distributed, in whole or in part, without restriction of any
       
   855    kind, provided that the above copyright notice and this paragraph are
       
   856    included on all such copies and derivative works.  However, this
       
   857    document itself may not be modified in any way, such as by removing
       
   858    the copyright notice or references to the Internet Society or other
       
   859    Internet organizations, except as needed for the purpose of
       
   860    developing Internet standards in which case the procedures for
       
   861    copyrights defined in the Internet Standards process must be
       
   862    followed, or as required to translate it into languages other than
       
   863    English.
       
   864 
       
   865    The limited permissions granted above are perpetual and will not be
       
   866    revoked by the Internet Society or its successors or assigns.
       
   867 
       
   868    This document and the information contained herein is provided on an
       
   869    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
   870    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
   871    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
   872    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
   873    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
   874 
       
   875 Acknowledgement
       
   876 
       
   877    Funding for the RFC Editor function is currently provided by the
       
   878    Internet Society.
       
   879 
       
   880 
       
   881 
       
   882 
       
   883 
       
   884 
       
   885 
       
   886 
       
   887 
       
   888 
       
   889 
       
   890 
       
   891 
       
   892 
       
   893 
       
   894 
       
   895 
       
   896 
       
   897 
       
   898 Kennedy                      Informational                     [Page 16]
       
   899 
       
   900 
       
   901 
       
   902 
       
   903 
       
   904 
       
   905 
       
   906 Network Working Group                                         H. Kennedy
       
   907 Request for Comments: 3252                                      Mimezine
       
   908 Category: Informational                                     1 April 2002
       
   909 
       
   910 
       
   911                  Binary Lexical Octet Ad-hoc Transport
       
   912 
       
   913 Status of this Memo
       
   914 
       
   915    This memo provides information for the Internet community.  It does
       
   916    not specify an Internet standard of any kind.  Distribution of this
       
   917    memo is unlimited.
       
   918 
       
   919 Copyright Notice
       
   920 
       
   921    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
   922 
       
   923 Abstract
       
   924 
       
   925    This document defines a reformulation of IP and two transport layer
       
   926    protocols (TCP and UDP) as XML applications.
       
   927 
       
   928 1.   Introduction
       
   929 
       
   930 1.1. Overview
       
   931 
       
   932    This document describes the Binary Lexical Octet Ad-hoc Transport
       
   933    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
   934    (IP [RFC791]), and two associated transport layer protocols (TCP
       
   935    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
   936    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
   937    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
   938    across the public Internet.
       
   939 
       
   940 1.2. Motivation
       
   941 
       
   942    The wild popularity of XML as a basis for application-level protocols
       
   943    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
   944    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
   945    investigation into the possibility of extending the use of XML in the
       
   946    protocol stack.  Using XML at both the transport and network layer in
       
   947    addition to the application layer would provide for an amazing amount
       
   948    of power and flexibility while removing dependencies on proprietary
       
   949    and hard-to-understand binary protocols.  This protocol unification
       
   950    would also allow applications to use a single XML parser for all
       
   951    aspects of their operation, eliminating developer time spent figuring
       
   952    out the intricacies of each new protocol, and moving the hard work of
       
   953 
       
   954 
       
   955 
       
   956 
       
   957 Kennedy                      Informational                      [Page 1]
       
   958 
       
   959 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
   960 
       
   961 
       
   962    parsing to the XML toolset.  The use of XML also mitigates concerns
       
   963    over "network vs. host" byte ordering which is at the root of many
       
   964    network application bugs.
       
   965 
       
   966 1.3. Relation to Existing Protocols
       
   967 
       
   968    The reformulations specified in this RFC follow as closely as
       
   969    possible the spirit of the RFCs on which they are based, and so MAY
       
   970    contain elements or attributes that would not be needed in a pure
       
   971    reworking (e.g. length attributes, which are implicit in XML.)
       
   972 
       
   973    The layering of network and transport protocols are maintained in
       
   974    this RFC despite the optimizations that could be made if the line
       
   975    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
   976    element in the DTD) in order to foster future use of this protocol as
       
   977    a basis for reformulating other protocols (such as ICMP.)
       
   978 
       
   979    Other than the encoding, the behavioral aspects of each of the
       
   980    existing protocols remain unchanged.  Routing, address spaces, TCP
       
   981    congestion control, etc. behave as specified in the extant standards.
       
   982    Adapting to new standards and experimental algorithm heuristics for
       
   983    improving performance will become much easier once the move to BLOAT
       
   984    has been completed.
       
   985 
       
   986 1.4. Requirement Levels
       
   987 
       
   988    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
   989    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
   990    document are to be interpreted as described in BCP 14, RFC 2119
       
   991    [RFC2119].
       
   992 
       
   993 2.   IPoXML
       
   994 
       
   995    This protocol MUST be implemented to be compliant with this RFC.
       
   996    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
   997    (section 3.) and higher-level application protocols.
       
   998 
       
   999    The DTD for this document type can be found in section 7.1.
       
  1000 
       
  1001    The routing of IPoXML can be easily implemented on hosts with an XML
       
  1002    parser, as the regular structure lends itself handily to parsing and
       
  1003    validation of the document/datagram and then processing the
       
  1004    destination address, TTL, and checksum before sending it on to its
       
  1005    next-hop.
       
  1006 
       
  1007    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
  1008    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
  1009    would have exceeded the 1500 byte Ethernet MTU.
       
  1010 
       
  1011 
       
  1012 
       
  1013 Kennedy                      Informational                      [Page 2]
       
  1014 
       
  1015 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  1016 
       
  1017 
       
  1018    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
  1019    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
  1020    formed and include the XMLDecl.
       
  1021 
       
  1022 2.1. IP Description
       
  1023 
       
  1024    A number of items have changed (for the better) from the original IP
       
  1025    specification.  Bit-masks, where present have been converted into
       
  1026    human-readable values.  IP addresses are listed in their dotted-
       
  1027    decimal notation [RFC1123].  Length and checksum values are present
       
  1028    as decimal integers.
       
  1029 
       
  1030    To calculate the length and checksum fields of the IP element, a
       
  1031    canonicalized form of the element MUST be used.  The canonical form
       
  1032    SHALL have no whitespace (including newline characters) between
       
  1033    elements and only one space character between attributes.  There
       
  1034    SHALL NOT be a space following the last attribute in an element.
       
  1035 
       
  1036    An iterative method SHOULD be used to calculate checksums, as the
       
  1037    length field will vary based on the size of the checksum.
       
  1038 
       
  1039    The payload element bears special attention.  Due to the character
       
  1040    set restrictions of XML, the payload of IP datagrams (which MAY
       
  1041    contain arbitrary data) MUST be encoded for transport. This RFC
       
  1042    REQUIRES the contents of the payload to be encoded in the base-64
       
  1043    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
  1044    encoded output MUST be wrapped on 76-character lines.
       
  1045 
       
  1046 
       
  1047 
       
  1048 
       
  1049 
       
  1050 
       
  1051 
       
  1052 
       
  1053 
       
  1054 
       
  1055 
       
  1056 
       
  1057 
       
  1058 
       
  1059 
       
  1060 
       
  1061 
       
  1062 
       
  1063 
       
  1064 
       
  1065 
       
  1066 
       
  1067 
       
  1068 
       
  1069 Kennedy                      Informational                      [Page 3]
       
  1070 
       
  1071 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  1072 
       
  1073 
       
  1074 2.2. Example Datagram
       
  1075 
       
  1076    The following is an example IPoXML datagram with an empty payload:
       
  1077 
       
  1078    <?xml version="1.0" encoding="UTF-8"?>
       
  1079    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  1080    <ip>
       
  1081    <header length="474">
       
  1082    <version value="4"/>
       
  1083    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
  1084         relibility="Normal" reserved="0"/>
       
  1085    <total.length value="461"/>
       
  1086    <id value="1"/>
       
  1087    <flags reserved="0" df="dont" mf="last"/>
       
  1088    <offset value="0"/>
       
  1089    <ttl value="255"/>
       
  1090    <protocol value="6"/>
       
  1091    <checksum value="8707"/>
       
  1092    <source address="10.0.0.22"/>
       
  1093    <destination address="10.0.0.1"/>
       
  1094    <options>
       
  1095    <end copied="0" class="0" number="0"/>
       
  1096    </options>
       
  1097    <padding pad="0"/>
       
  1098    </header>
       
  1099    <payload>
       
  1100    </payload>
       
  1101    </ip>
       
  1102 
       
  1103 3.   TCPoXML
       
  1104 
       
  1105    This protocol MUST be implemented to be compliant with this RFC.  The
       
  1106    DTD for this document type can be found in section 7.2.
       
  1107 
       
  1108 3.1. TCP Description
       
  1109 
       
  1110    A number of items have changed from the original TCP specification.
       
  1111    Bit-masks, where present have been converted into human-readable
       
  1112    values.  Length and checksum and port values are present as decimal
       
  1113    integers.
       
  1114 
       
  1115    To calculate the length and checksum fields of the TCP element, a
       
  1116    canonicalized form of the element MUST be used as in section 2.1.
       
  1117 
       
  1118    An iterative method SHOULD be used to calculate checksums as in
       
  1119    section 2.1.
       
  1120 
       
  1121    The payload element MUST be encoded as in section 2.1.
       
  1122 
       
  1123 
       
  1124 
       
  1125 Kennedy                      Informational                      [Page 4]
       
  1126 
       
  1127 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  1128 
       
  1129 
       
  1130    The TCP offset element was expanded to a maximum of 255 from 16 to
       
  1131    allow for the increased size of the header in XML.
       
  1132 
       
  1133    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  1134    as well as the <!DOCTYPE> declaration.
       
  1135 
       
  1136 3.2. Example Datagram
       
  1137 
       
  1138    The following is an example TCPoXML datagram with an empty payload:
       
  1139 
       
  1140    <?xml version="1.0" encoding="UTF-8"?>
       
  1141    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  1142    <tcp>
       
  1143    <tcp.header>
       
  1144    <src port="31415"/>
       
  1145    <dest port="42424"/>
       
  1146    <sequence number="322622954"/>
       
  1147    <acknowledgement number="689715995"/>
       
  1148    <offset number=""/>
       
  1149    <reserved value="0"/>
       
  1150    <control syn="1" ack="1"/>
       
  1151    <window size="1"/>
       
  1152    <urgent pointer="0"/>
       
  1153    <checksum value="2988"/>
       
  1154    <tcp.options>
       
  1155    <tcp.end kind="0"/>
       
  1156    </tcp.options>
       
  1157    <padding pad="0"/>
       
  1158    </tcp.header>
       
  1159    <payload>
       
  1160    </payload>
       
  1161    </tcp>
       
  1162 
       
  1163 4.   UDPoXML
       
  1164 
       
  1165    This protocol MUST be implemented to be compliant with this RFC.  The
       
  1166    DTD for this document type can be found in section 7.3.
       
  1167 
       
  1168 4.1. UDP Description
       
  1169 
       
  1170    A number of items have changed from the original UDP specification.
       
  1171    Bit-masks, where present have been converted into human-readable
       
  1172    values.  Length and checksum and port values are present as decimal
       
  1173    integers.
       
  1174 
       
  1175 
       
  1176 
       
  1177 
       
  1178 
       
  1179 
       
  1180 
       
  1181 Kennedy                      Informational                      [Page 5]
       
  1182 
       
  1183 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  1184 
       
  1185 
       
  1186    To calculate the length and checksum fields of the UDP element, a
       
  1187    canonicalized form of the element MUST be used as in section 2.1.  An
       
  1188    iterative method SHOULD be used to calculate checksums as in section
       
  1189    2.1.
       
  1190 
       
  1191    The payload element MUST be encoded as in section 2.1.
       
  1192 
       
  1193    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  1194    as well as the <!DOCTYPE> declaration.
       
  1195 
       
  1196 4.2. Example Datagram
       
  1197 
       
  1198    The following is an example UDPoXML datagram with an empty payload:
       
  1199 
       
  1200    <?xml version="1.0" encoding="UTF-8"?>
       
  1201    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  1202    <udp>
       
  1203    <udp.header>
       
  1204    <src port="31415"/>
       
  1205    <dest port="42424"/>
       
  1206    <udp.length value="143"/>
       
  1207    <checksum value="2988"/>
       
  1208    </udp.header>
       
  1209    <payload>
       
  1210    </payload>
       
  1211    </udp>
       
  1212 
       
  1213 5.   Network Transport
       
  1214 
       
  1215    This document provides for the transmission of BLOAT datagrams over
       
  1216    two common families of physical layer transport.  Future RFCs will
       
  1217    address additional transports as routing vendors catch up to the
       
  1218    specification, and we begin to see BLOAT routed across the Internet
       
  1219    backbone.
       
  1220 
       
  1221 5.1. Ethernet
       
  1222 
       
  1223    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
  1224    exception that the type field of the Ethernet frame MUST contain the
       
  1225    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
  1226    be 0x3c 3f 78 6d 6c ("<?xml".)
       
  1227 
       
  1228 5.2. IEEE 802
       
  1229 
       
  1230    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
  1231    that the protocol type code for IPoXML is 0xBEEF.
       
  1232 
       
  1233 
       
  1234 
       
  1235 
       
  1236 
       
  1237 Kennedy                      Informational                      [Page 6]
       
  1238 
       
  1239 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  1240 
       
  1241 
       
  1242 6. Gatewaying over IP
       
  1243 
       
  1244    In order to facilitate the gradual introduction of BLOAT into the
       
  1245    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
  1246    gateway between networks that run BLOAT natively on their LANs.
       
  1247 
       
  1248 7. DTDs
       
  1249 
       
  1250    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
  1251    Network DTD (7.1.)
       
  1252 
       
  1253    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
  1254    [XML]) although it is understood that most IPoXML implementations
       
  1255    will not need to pull down the DTD, as it will normally be embedded
       
  1256    in the implementation, and presents something of a catch-22 if you
       
  1257    need to load part of your network protocol over the network.
       
  1258 
       
  1259 7.1.  IPoXML DTD
       
  1260 
       
  1261    <!--
       
  1262     DTD for IP over XML.
       
  1263     Refer to this DTD as:
       
  1264 
       
  1265     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  1266    -->
       
  1267    <!--
       
  1268     DTD data types:
       
  1269 
       
  1270       Digits      [0..9]+
       
  1271 
       
  1272       Precedence  "NetworkControl | InternetworkControl |
       
  1273                    CRITIC | FlashOverride | Flash | Immediate |
       
  1274                    Priority | Routine"
       
  1275 
       
  1276       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
  1277 
       
  1278       Class       [0..3]
       
  1279 
       
  1280       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
  1281                     Restricted | Secret | Top Secret | Reserved"
       
  1282 
       
  1283       Compartments [0..65535]
       
  1284 
       
  1285       Handling     [0..65535]
       
  1286 
       
  1287       TCC          [0..16777216]
       
  1288 
       
  1289    -->
       
  1290 
       
  1291 
       
  1292 
       
  1293 Kennedy                      Informational                      [Page 7]
       
  1294 
       
  1295 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  1296 
       
  1297 
       
  1298    <!ENTITY % Digits "CDATA">
       
  1299    <!ENTITY % Precedence "CDATA">
       
  1300    <!ENTITY % IP4Addr "CDATA">
       
  1301    <!ENTITY % Class "CDATA">
       
  1302    <!ENTITY % Sec "CDATA">
       
  1303    <!ENTITY % Compartments "CDATA">
       
  1304    <!ENTITY % Handling "CDATA">
       
  1305    <!ENTITY % TCC "CDATA">
       
  1306 
       
  1307    <!ELEMENT ip (header, payload)>
       
  1308 
       
  1309    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
  1310                     protocol, checksum, source, destination, options,
       
  1311                     padding)>
       
  1312    <!-- length of header in 32-bit words -->
       
  1313    <!ATTLIST header
       
  1314              length %Digits; #REQUIRED>
       
  1315 
       
  1316    <!ELEMENT version EMPTY>
       
  1317    <!-- ip version. SHOULD be "4" -->
       
  1318    <!ATTLIST version
       
  1319              value   %Digits;  #REQUIRED>
       
  1320 
       
  1321    <!ELEMENT tos EMPTY>
       
  1322    <!ATTLIST tos
       
  1323              precedence   %Precedence;    #REQUIRED
       
  1324              delay    (normal | low)  #REQUIRED
       
  1325              throughput   (normal | high) #REQUIRED
       
  1326              relibility   (normal | high) #REQUIRED
       
  1327              reserved     CDATA #FIXED "0">
       
  1328 
       
  1329    <!ELEMENT total.length EMPTY>
       
  1330    <!--
       
  1331     total length of datagram (header and payload) in octets, MUST be
       
  1332     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
  1333     ethernets).
       
  1334    -->
       
  1335    <!ATTLIST total.length
       
  1336              value %Digits; #REQUIRED>
       
  1337 
       
  1338    <!ELEMENT id EMPTY>
       
  1339    <!-- 0 <= id <= 65,535  -->
       
  1340    <!ATTLIST id
       
  1341              value %Digits; #REQUIRED>
       
  1342 
       
  1343    <!ELEMENT flags EMPTY>
       
  1344    <!-- df = don't fragment, mf = more fragments  -->
       
  1345    <!ATTLIST flags
       
  1346 
       
  1347 
       
  1348 
       
  1349 Kennedy                      Informational                      [Page 8]
       
  1350 
       
  1351 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  1352 
       
  1353 
       
  1354           reserved CDATA  #FIXED "0"
       
  1355           df (may|dont)   #REQUIRED
       
  1356           mf (last|more)  #REQUIRED>
       
  1357 
       
  1358    <!ELEMENT offset EMPTY>
       
  1359    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
  1360    <!ATTLIST offset
       
  1361              value %Digits; #REQUIRED>
       
  1362 
       
  1363    <!ELEMENT ttl EMPTY>
       
  1364    <!-- 0 <= ttl <= 255 -->
       
  1365    <!ATTLIST ttl
       
  1366              value %Digits; #REQUIRED>
       
  1367 
       
  1368    <!ELEMENT protocol EMPTY>
       
  1369    <!-- 0 <= protocol <= 255 (per IANA) -->
       
  1370    <!ATTLIST protocol
       
  1371              value %Digits; #REQUIRED>
       
  1372 
       
  1373    <!ELEMENT checksum EMPTY>
       
  1374    <!-- 0 <= checksum <= 65535 (over header only) -->
       
  1375    <!ATTLIST checksum
       
  1376              value %Digits; #REQUIRED>
       
  1377 
       
  1378    <!ELEMENT source EMPTY>
       
  1379    <!ATTLIST source
       
  1380              address %IP4Addr; #REQUIRED>
       
  1381 
       
  1382    <!ELEMENT destination EMPTY>
       
  1383    <!ATTLIST destination
       
  1384              address %IP4Addr; #REQUIRED>
       
  1385 
       
  1386    <!ELEMENT options ( end | noop | security | loose | strict | record
       
  1387                      | stream | timestamp )*>
       
  1388 
       
  1389    <!ELEMENT end EMPTY>
       
  1390    <!ATTLIST end
       
  1391              copied (0|1) #REQUIRED
       
  1392              class  CDATA #FIXED "0"
       
  1393              number CDATA #FIXED "0">
       
  1394 
       
  1395    <!ELEMENT noop EMPTY>
       
  1396    <!ATTLIST noop
       
  1397              copied (0|1) #REQUIRED
       
  1398              class  CDATA #FIXED "0"
       
  1399              number CDATA #FIXED "1">
       
  1400 
       
  1401    <!ELEMENT security EMPTY>
       
  1402 
       
  1403 
       
  1404 
       
  1405 Kennedy                      Informational                      [Page 9]
       
  1406 
       
  1407 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  1408 
       
  1409 
       
  1410    <!ATTLIST security
       
  1411              copied CDATA #FIXED "1"
       
  1412              class  CDATA #FIXED "0"
       
  1413              number CDATA #FIXED "2"
       
  1414              length CDATA #FIXED "11"
       
  1415              security %Sec; #REQUIRED
       
  1416              compartments %Compartments; #REQUIRED
       
  1417              handling %Handling; #REQUIRED
       
  1418              tcc %TCC; #REQUIRED>
       
  1419    <!ELEMENT loose (hop)+>
       
  1420    <!ATTLIST loose
       
  1421              copied CDATA #FIXED "1"
       
  1422              class  CDATA #FIXED "0"
       
  1423              number CDATA #FIXED "3"
       
  1424              length %Digits; #REQUIRED
       
  1425              pointer %Digits; #REQUIRED>
       
  1426 
       
  1427    <!ELEMENT hop EMPTY>
       
  1428    <!ATTLIST hop
       
  1429              address %IP4Addr; #REQUIRED>
       
  1430 
       
  1431    <!ELEMENT strict (hop)+>
       
  1432    <!ATTLIST strict
       
  1433              copied CDATA #FIXED "1"
       
  1434              class  CDATA #FIXED "0"
       
  1435              number CDATA #FIXED "9"
       
  1436              length %Digits; #REQUIRED
       
  1437              pointer %Digits; #REQUIRED>
       
  1438 
       
  1439    <!ELEMENT record (hop)+>
       
  1440    <!ATTLIST record
       
  1441              copied CDATA #FIXED "0"
       
  1442              class  CDATA #FIXED "0"
       
  1443              number CDATA #FIXED "7"
       
  1444              length %Digits; #REQUIRED
       
  1445              pointer %Digits; #REQUIRED>
       
  1446 
       
  1447    <!ELEMENT stream EMPTY>
       
  1448    <!-- 0 <= id <= 65,535 -->
       
  1449    <!ATTLIST stream
       
  1450              copied CDATA #FIXED "1"
       
  1451              class  CDATA #FIXED "0"
       
  1452              number CDATA #FIXED "8"
       
  1453              length CDATA #FIXED "4"
       
  1454              id %Digits; #REQUIRED>
       
  1455 
       
  1456    <!ELEMENT timestamp (tstamp)+>
       
  1457    <!-- 0 <= oflw <=15 -->
       
  1458 
       
  1459 
       
  1460 
       
  1461 Kennedy                      Informational                     [Page 10]
       
  1462 
       
  1463 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  1464 
       
  1465 
       
  1466    <!ATTLIST timestamp
       
  1467              copied CDATA #FIXED "0"
       
  1468              class  CDATA #FIXED "2"
       
  1469              number CDATA #FIXED "4"
       
  1470              length %Digits;  #REQUIRED
       
  1471              pointer %Digits; #REQUIRED
       
  1472              oflw %Digits;    #REQUIRED
       
  1473              flag (0 | 1 | 3)  #REQUIRED>
       
  1474 
       
  1475    <!ELEMENT tstamp EMPTY>
       
  1476    <!ATTLIST tstamp
       
  1477              time %Digits;   #REQUIRED
       
  1478              address %IP4Addr; #IMPLIED>
       
  1479    <!--
       
  1480        padding to bring header to 32-bit boundary.
       
  1481        pad MUST be "0"*
       
  1482     -->
       
  1483    <!ELEMENT padding EMPTY>
       
  1484    <!ATTLIST padding
       
  1485              pad CDATA #REQUIRED>
       
  1486 
       
  1487    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
  1488         by section 2.1 of this RFC -->
       
  1489    <!ELEMENT payload (CDATA)>
       
  1490 
       
  1491 7.2.  TCPoXML DTD
       
  1492 
       
  1493    <!--
       
  1494       DTD for TCP over XML.
       
  1495       Refer to this DTD as:
       
  1496 
       
  1497       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  1498    -->
       
  1499 
       
  1500    <!-- the pseudoheader is only included for checksum calculations -->
       
  1501    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
  1502 
       
  1503    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
  1504                          reserved, control, window, checksum, urgent,
       
  1505                          tcp.options, padding)>
       
  1506 
       
  1507    <!ELEMENT src EMPTY>
       
  1508    <!-- 0 <= port <= 65,535 -->
       
  1509    <!ATTLIST src
       
  1510              port %Digits; #REQUIRED>
       
  1511 
       
  1512    <!ELEMENT dest EMPTY>
       
  1513    <!-- 0 <= port <= 65,535 -->
       
  1514 
       
  1515 
       
  1516 
       
  1517 Kennedy                      Informational                     [Page 11]
       
  1518 
       
  1519 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  1520 
       
  1521 
       
  1522    <!ATTLIST dest
       
  1523              port %Digits; #REQUIRED>
       
  1524 
       
  1525    <!ELEMENT sequence EMPTY>
       
  1526    <!-- 0 <= number <= 4294967295 -->
       
  1527    <!ATTLIST sequence
       
  1528              number %Digits; #REQUIRED>
       
  1529 
       
  1530    <!ELEMENT acknowledgement EMPTY>
       
  1531    <!-- 0 <= number <= 4294967295 -->
       
  1532    <!ATTLIST acknowledgement
       
  1533              number %Digits; #REQUIRED>
       
  1534 
       
  1535    <!ELEMENT offset EMPTY>
       
  1536    <!-- 0 <= number <= 255 -->
       
  1537    <!ATTLIST offset
       
  1538              number %Digits; #REQUIRED>
       
  1539 
       
  1540    <!ELEMENT reserved EMPTY>
       
  1541    <!ATTLIST reserved
       
  1542              value CDATA #FIXED "0">
       
  1543 
       
  1544    <!ELEMENT control EMPTY>
       
  1545    <!ATTLIST control
       
  1546              urg (0|1) #IMPLIED
       
  1547              ack (0|1) #IMPLIED
       
  1548              psh (0|1) #IMPLIED
       
  1549              rst (0|1) #IMPLIED
       
  1550              syn (0|1) #IMPLIED
       
  1551              fin (0|1) #IMPLIED>
       
  1552 
       
  1553    <!ELEMENT window EMPTY>
       
  1554    <!-- 0 <= size <= 65,535 -->
       
  1555    <!ATTLIST window
       
  1556              size %Digits; #REQUIRED>
       
  1557 
       
  1558    <!--
       
  1559       checksum as in ip, but with
       
  1560       the following pseudo-header added into the tcp element:
       
  1561      -->
       
  1562    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
  1563                                tcp.length)>
       
  1564 
       
  1565    <!--
       
  1566       tcp header + data length in octets. does not include the size of
       
  1567 
       
  1568       the pseudoheader.
       
  1569     -->
       
  1570 
       
  1571 
       
  1572 
       
  1573 Kennedy                      Informational                     [Page 12]
       
  1574 
       
  1575 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  1576 
       
  1577 
       
  1578    <!ELEMENT tcp.length EMPTY>
       
  1579    <!ATTLIST tcp.length
       
  1580              value %Digits; #REQUIRED>
       
  1581 
       
  1582    <!ELEMENT urgent EMPTY>
       
  1583    <!-- 0 <= pointer <= 65,535 -->
       
  1584    <!ATTLIST urgent
       
  1585              pointer %Digits; #REQUIRED>
       
  1586 
       
  1587    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
  1588 
       
  1589    <!ELEMENT tcp.end EMPTY>
       
  1590    <!ATTLIST tcp.end
       
  1591              kind CDATA #FIXED "0">
       
  1592 
       
  1593    <!ELEMENT tcp.noop EMPTY>
       
  1594    <!ATTLIST tcp.noop
       
  1595              kind CDATA #FIXED "1">
       
  1596 
       
  1597    <!ELEMENT tcp.mss EMPTY>
       
  1598    <!ATTLIST tcp.mss
       
  1599              kind CDATA #FIXED "2"
       
  1600              length CDATA #FIXED "4"
       
  1601              size %Digits; #REQUIRED>
       
  1602 
       
  1603 7.3.  UDPoXML DTD
       
  1604 
       
  1605    <!--
       
  1606       DTD for UDP over XML.
       
  1607       Refer to this DTD as:
       
  1608 
       
  1609       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  1610    -->
       
  1611 
       
  1612    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
  1613 
       
  1614    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
  1615 
       
  1616    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
  1617                                udp.length)>
       
  1618 
       
  1619    <!--
       
  1620       udp header + data length in octets. does not include the size of
       
  1621       the pseudoheader.
       
  1622     -->
       
  1623    <!ELEMENT udp.length EMPTY>
       
  1624    <!ATTLIST udp.length
       
  1625              value %Digits; #REQUIRED>
       
  1626 
       
  1627 
       
  1628 
       
  1629 Kennedy                      Informational                     [Page 13]
       
  1630 
       
  1631 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  1632 
       
  1633 
       
  1634 8. Security Considerations
       
  1635 
       
  1636    XML, as a subset of SGML, has the same security considerations as
       
  1637    specified in SGML Media Types [RFC1874].  Security considerations
       
  1638    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
  1639    not attempt to correct for issues not related to message format.
       
  1640 
       
  1641 9.   References
       
  1642 
       
  1643    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
  1644                February 2002. (Work in Progress)
       
  1645 
       
  1646    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
  1647                August 1980.
       
  1648 
       
  1649    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
  1650                September 1981.
       
  1651 
       
  1652    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
  1653                793, September 1981.
       
  1654 
       
  1655    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
  1656                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
  1657 
       
  1658    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
  1659                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
  1660                43, RFC 1042, February 1988.
       
  1661 
       
  1662    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
  1663                Application and Support", RFC 1123, October 1989.
       
  1664 
       
  1665    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
  1666                1995.
       
  1667 
       
  1668    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
  1669                October 1996.
       
  1670 
       
  1671    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
  1672                Extensions (MIME) Part One: Format of Internet Message
       
  1673                Bodies", RFC 2045, November 1996.
       
  1674 
       
  1675    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
  1676                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
  1677 
       
  1678    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
  1679                10646", RFC 2279, January 1998.
       
  1680 
       
  1681 
       
  1682 
       
  1683 
       
  1684 
       
  1685 Kennedy                      Informational                     [Page 14]
       
  1686 
       
  1687 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  1688 
       
  1689 
       
  1690    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
  1691                (IPv6) Specification", RFC 2460, December 1998.
       
  1692 
       
  1693    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
  1694                RFC 3080, March 2001.
       
  1695 
       
  1696    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
  1697                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
  1698                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
  1699                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
  1700 
       
  1701    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
  1702                Markup Language (XML)" World Wide Web Consortium
       
  1703                Recommendation REC- xml-19980210.
       
  1704                http://www.w3.org/TR/1998/REC-xml-19980210
       
  1705 
       
  1706 10.  Author's Address
       
  1707 
       
  1708    Hugh Kennedy
       
  1709    Mimezine
       
  1710    1060 West Addison
       
  1711    Chicago, IL 60613
       
  1712    USA
       
  1713 
       
  1714    EMail: kennedyh@engin.umich.edu
       
  1715 
       
  1716 
       
  1717 
       
  1718 
       
  1719 
       
  1720 
       
  1721 
       
  1722 
       
  1723 
       
  1724 
       
  1725 
       
  1726 
       
  1727 
       
  1728 
       
  1729 
       
  1730 
       
  1731 
       
  1732 
       
  1733 
       
  1734 
       
  1735 
       
  1736 
       
  1737 
       
  1738 
       
  1739 
       
  1740 
       
  1741 Kennedy                      Informational                     [Page 15]
       
  1742 
       
  1743 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  1744 
       
  1745 
       
  1746 11.  Full Copyright Statement
       
  1747 
       
  1748    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  1749 
       
  1750    This document and translations of it may be copied and furnished to
       
  1751    others, and derivative works that comment on or otherwise explain it
       
  1752    or assist in its implementation may be prepared, copied, published
       
  1753    and distributed, in whole or in part, without restriction of any
       
  1754    kind, provided that the above copyright notice and this paragraph are
       
  1755    included on all such copies and derivative works.  However, this
       
  1756    document itself may not be modified in any way, such as by removing
       
  1757    the copyright notice or references to the Internet Society or other
       
  1758    Internet organizations, except as needed for the purpose of
       
  1759    developing Internet standards in which case the procedures for
       
  1760    copyrights defined in the Internet Standards process must be
       
  1761    followed, or as required to translate it into languages other than
       
  1762    English.
       
  1763 
       
  1764    The limited permissions granted above are perpetual and will not be
       
  1765    revoked by the Internet Society or its successors or assigns.
       
  1766 
       
  1767    This document and the information contained herein is provided on an
       
  1768    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
  1769    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
  1770    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
  1771    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
  1772    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
  1773 
       
  1774 Acknowledgement
       
  1775 
       
  1776    Funding for the RFC Editor function is currently provided by the
       
  1777    Internet Society.
       
  1778 
       
  1779 
       
  1780 
       
  1781 
       
  1782 
       
  1783 
       
  1784 
       
  1785 
       
  1786 
       
  1787 
       
  1788 
       
  1789 
       
  1790 
       
  1791 
       
  1792 
       
  1793 
       
  1794 
       
  1795 
       
  1796 
       
  1797 Kennedy                      Informational                     [Page 16]
       
  1798 
       
  1799 
       
  1800 
       
  1801 
       
  1802 
       
  1803 
       
  1804 
       
  1805 Network Working Group                                         H. Kennedy
       
  1806 Request for Comments: 3252                                      Mimezine
       
  1807 Category: Informational                                     1 April 2002
       
  1808 
       
  1809 
       
  1810                  Binary Lexical Octet Ad-hoc Transport
       
  1811 
       
  1812 Status of this Memo
       
  1813 
       
  1814    This memo provides information for the Internet community.  It does
       
  1815    not specify an Internet standard of any kind.  Distribution of this
       
  1816    memo is unlimited.
       
  1817 
       
  1818 Copyright Notice
       
  1819 
       
  1820    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  1821 
       
  1822 Abstract
       
  1823 
       
  1824    This document defines a reformulation of IP and two transport layer
       
  1825    protocols (TCP and UDP) as XML applications.
       
  1826 
       
  1827 1.   Introduction
       
  1828 
       
  1829 1.1. Overview
       
  1830 
       
  1831    This document describes the Binary Lexical Octet Ad-hoc Transport
       
  1832    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
  1833    (IP [RFC791]), and two associated transport layer protocols (TCP
       
  1834    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
  1835    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
  1836    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
  1837    across the public Internet.
       
  1838 
       
  1839 1.2. Motivation
       
  1840 
       
  1841    The wild popularity of XML as a basis for application-level protocols
       
  1842    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
  1843    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
  1844    investigation into the possibility of extending the use of XML in the
       
  1845    protocol stack.  Using XML at both the transport and network layer in
       
  1846    addition to the application layer would provide for an amazing amount
       
  1847    of power and flexibility while removing dependencies on proprietary
       
  1848    and hard-to-understand binary protocols.  This protocol unification
       
  1849    would also allow applications to use a single XML parser for all
       
  1850    aspects of their operation, eliminating developer time spent figuring
       
  1851    out the intricacies of each new protocol, and moving the hard work of
       
  1852 
       
  1853 
       
  1854 
       
  1855 
       
  1856 Kennedy                      Informational                      [Page 1]
       
  1857 
       
  1858 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  1859 
       
  1860 
       
  1861    parsing to the XML toolset.  The use of XML also mitigates concerns
       
  1862    over "network vs. host" byte ordering which is at the root of many
       
  1863    network application bugs.
       
  1864 
       
  1865 1.3. Relation to Existing Protocols
       
  1866 
       
  1867    The reformulations specified in this RFC follow as closely as
       
  1868    possible the spirit of the RFCs on which they are based, and so MAY
       
  1869    contain elements or attributes that would not be needed in a pure
       
  1870    reworking (e.g. length attributes, which are implicit in XML.)
       
  1871 
       
  1872    The layering of network and transport protocols are maintained in
       
  1873    this RFC despite the optimizations that could be made if the line
       
  1874    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
  1875    element in the DTD) in order to foster future use of this protocol as
       
  1876    a basis for reformulating other protocols (such as ICMP.)
       
  1877 
       
  1878    Other than the encoding, the behavioral aspects of each of the
       
  1879    existing protocols remain unchanged.  Routing, address spaces, TCP
       
  1880    congestion control, etc. behave as specified in the extant standards.
       
  1881    Adapting to new standards and experimental algorithm heuristics for
       
  1882    improving performance will become much easier once the move to BLOAT
       
  1883    has been completed.
       
  1884 
       
  1885 1.4. Requirement Levels
       
  1886 
       
  1887    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
  1888    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
  1889    document are to be interpreted as described in BCP 14, RFC 2119
       
  1890    [RFC2119].
       
  1891 
       
  1892 2.   IPoXML
       
  1893 
       
  1894    This protocol MUST be implemented to be compliant with this RFC.
       
  1895    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
  1896    (section 3.) and higher-level application protocols.
       
  1897 
       
  1898    The DTD for this document type can be found in section 7.1.
       
  1899 
       
  1900    The routing of IPoXML can be easily implemented on hosts with an XML
       
  1901    parser, as the regular structure lends itself handily to parsing and
       
  1902    validation of the document/datagram and then processing the
       
  1903    destination address, TTL, and checksum before sending it on to its
       
  1904    next-hop.
       
  1905 
       
  1906    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
  1907    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
  1908    would have exceeded the 1500 byte Ethernet MTU.
       
  1909 
       
  1910 
       
  1911 
       
  1912 Kennedy                      Informational                      [Page 2]
       
  1913 
       
  1914 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  1915 
       
  1916 
       
  1917    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
  1918    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
  1919    formed and include the XMLDecl.
       
  1920 
       
  1921 2.1. IP Description
       
  1922 
       
  1923    A number of items have changed (for the better) from the original IP
       
  1924    specification.  Bit-masks, where present have been converted into
       
  1925    human-readable values.  IP addresses are listed in their dotted-
       
  1926    decimal notation [RFC1123].  Length and checksum values are present
       
  1927    as decimal integers.
       
  1928 
       
  1929    To calculate the length and checksum fields of the IP element, a
       
  1930    canonicalized form of the element MUST be used.  The canonical form
       
  1931    SHALL have no whitespace (including newline characters) between
       
  1932    elements and only one space character between attributes.  There
       
  1933    SHALL NOT be a space following the last attribute in an element.
       
  1934 
       
  1935    An iterative method SHOULD be used to calculate checksums, as the
       
  1936    length field will vary based on the size of the checksum.
       
  1937 
       
  1938    The payload element bears special attention.  Due to the character
       
  1939    set restrictions of XML, the payload of IP datagrams (which MAY
       
  1940    contain arbitrary data) MUST be encoded for transport. This RFC
       
  1941    REQUIRES the contents of the payload to be encoded in the base-64
       
  1942    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
  1943    encoded output MUST be wrapped on 76-character lines.
       
  1944 
       
  1945 
       
  1946 
       
  1947 
       
  1948 
       
  1949 
       
  1950 
       
  1951 
       
  1952 
       
  1953 
       
  1954 
       
  1955 
       
  1956 
       
  1957 
       
  1958 
       
  1959 
       
  1960 
       
  1961 
       
  1962 
       
  1963 
       
  1964 
       
  1965 
       
  1966 
       
  1967 
       
  1968 Kennedy                      Informational                      [Page 3]
       
  1969 
       
  1970 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  1971 
       
  1972 
       
  1973 2.2. Example Datagram
       
  1974 
       
  1975    The following is an example IPoXML datagram with an empty payload:
       
  1976 
       
  1977    <?xml version="1.0" encoding="UTF-8"?>
       
  1978    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  1979    <ip>
       
  1980    <header length="474">
       
  1981    <version value="4"/>
       
  1982    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
  1983         relibility="Normal" reserved="0"/>
       
  1984    <total.length value="461"/>
       
  1985    <id value="1"/>
       
  1986    <flags reserved="0" df="dont" mf="last"/>
       
  1987    <offset value="0"/>
       
  1988    <ttl value="255"/>
       
  1989    <protocol value="6"/>
       
  1990    <checksum value="8707"/>
       
  1991    <source address="10.0.0.22"/>
       
  1992    <destination address="10.0.0.1"/>
       
  1993    <options>
       
  1994    <end copied="0" class="0" number="0"/>
       
  1995    </options>
       
  1996    <padding pad="0"/>
       
  1997    </header>
       
  1998    <payload>
       
  1999    </payload>
       
  2000    </ip>
       
  2001 
       
  2002 3.   TCPoXML
       
  2003 
       
  2004    This protocol MUST be implemented to be compliant with this RFC.  The
       
  2005    DTD for this document type can be found in section 7.2.
       
  2006 
       
  2007 3.1. TCP Description
       
  2008 
       
  2009    A number of items have changed from the original TCP specification.
       
  2010    Bit-masks, where present have been converted into human-readable
       
  2011    values.  Length and checksum and port values are present as decimal
       
  2012    integers.
       
  2013 
       
  2014    To calculate the length and checksum fields of the TCP element, a
       
  2015    canonicalized form of the element MUST be used as in section 2.1.
       
  2016 
       
  2017    An iterative method SHOULD be used to calculate checksums as in
       
  2018    section 2.1.
       
  2019 
       
  2020    The payload element MUST be encoded as in section 2.1.
       
  2021 
       
  2022 
       
  2023 
       
  2024 Kennedy                      Informational                      [Page 4]
       
  2025 
       
  2026 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  2027 
       
  2028 
       
  2029    The TCP offset element was expanded to a maximum of 255 from 16 to
       
  2030    allow for the increased size of the header in XML.
       
  2031 
       
  2032    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  2033    as well as the <!DOCTYPE> declaration.
       
  2034 
       
  2035 3.2. Example Datagram
       
  2036 
       
  2037    The following is an example TCPoXML datagram with an empty payload:
       
  2038 
       
  2039    <?xml version="1.0" encoding="UTF-8"?>
       
  2040    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  2041    <tcp>
       
  2042    <tcp.header>
       
  2043    <src port="31415"/>
       
  2044    <dest port="42424"/>
       
  2045    <sequence number="322622954"/>
       
  2046    <acknowledgement number="689715995"/>
       
  2047    <offset number=""/>
       
  2048    <reserved value="0"/>
       
  2049    <control syn="1" ack="1"/>
       
  2050    <window size="1"/>
       
  2051    <urgent pointer="0"/>
       
  2052    <checksum value="2988"/>
       
  2053    <tcp.options>
       
  2054    <tcp.end kind="0"/>
       
  2055    </tcp.options>
       
  2056    <padding pad="0"/>
       
  2057    </tcp.header>
       
  2058    <payload>
       
  2059    </payload>
       
  2060    </tcp>
       
  2061 
       
  2062 4.   UDPoXML
       
  2063 
       
  2064    This protocol MUST be implemented to be compliant with this RFC.  The
       
  2065    DTD for this document type can be found in section 7.3.
       
  2066 
       
  2067 4.1. UDP Description
       
  2068 
       
  2069    A number of items have changed from the original UDP specification.
       
  2070    Bit-masks, where present have been converted into human-readable
       
  2071    values.  Length and checksum and port values are present as decimal
       
  2072    integers.
       
  2073 
       
  2074 
       
  2075 
       
  2076 
       
  2077 
       
  2078 
       
  2079 
       
  2080 Kennedy                      Informational                      [Page 5]
       
  2081 
       
  2082 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  2083 
       
  2084 
       
  2085    To calculate the length and checksum fields of the UDP element, a
       
  2086    canonicalized form of the element MUST be used as in section 2.1.  An
       
  2087    iterative method SHOULD be used to calculate checksums as in section
       
  2088    2.1.
       
  2089 
       
  2090    The payload element MUST be encoded as in section 2.1.
       
  2091 
       
  2092    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  2093    as well as the <!DOCTYPE> declaration.
       
  2094 
       
  2095 4.2. Example Datagram
       
  2096 
       
  2097    The following is an example UDPoXML datagram with an empty payload:
       
  2098 
       
  2099    <?xml version="1.0" encoding="UTF-8"?>
       
  2100    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  2101    <udp>
       
  2102    <udp.header>
       
  2103    <src port="31415"/>
       
  2104    <dest port="42424"/>
       
  2105    <udp.length value="143"/>
       
  2106    <checksum value="2988"/>
       
  2107    </udp.header>
       
  2108    <payload>
       
  2109    </payload>
       
  2110    </udp>
       
  2111 
       
  2112 5.   Network Transport
       
  2113 
       
  2114    This document provides for the transmission of BLOAT datagrams over
       
  2115    two common families of physical layer transport.  Future RFCs will
       
  2116    address additional transports as routing vendors catch up to the
       
  2117    specification, and we begin to see BLOAT routed across the Internet
       
  2118    backbone.
       
  2119 
       
  2120 5.1. Ethernet
       
  2121 
       
  2122    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
  2123    exception that the type field of the Ethernet frame MUST contain the
       
  2124    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
  2125    be 0x3c 3f 78 6d 6c ("<?xml".)
       
  2126 
       
  2127 5.2. IEEE 802
       
  2128 
       
  2129    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
  2130    that the protocol type code for IPoXML is 0xBEEF.
       
  2131 
       
  2132 
       
  2133 
       
  2134 
       
  2135 
       
  2136 Kennedy                      Informational                      [Page 6]
       
  2137 
       
  2138 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  2139 
       
  2140 
       
  2141 6. Gatewaying over IP
       
  2142 
       
  2143    In order to facilitate the gradual introduction of BLOAT into the
       
  2144    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
  2145    gateway between networks that run BLOAT natively on their LANs.
       
  2146 
       
  2147 7. DTDs
       
  2148 
       
  2149    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
  2150    Network DTD (7.1.)
       
  2151 
       
  2152    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
  2153    [XML]) although it is understood that most IPoXML implementations
       
  2154    will not need to pull down the DTD, as it will normally be embedded
       
  2155    in the implementation, and presents something of a catch-22 if you
       
  2156    need to load part of your network protocol over the network.
       
  2157 
       
  2158 7.1.  IPoXML DTD
       
  2159 
       
  2160    <!--
       
  2161     DTD for IP over XML.
       
  2162     Refer to this DTD as:
       
  2163 
       
  2164     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  2165    -->
       
  2166    <!--
       
  2167     DTD data types:
       
  2168 
       
  2169       Digits      [0..9]+
       
  2170 
       
  2171       Precedence  "NetworkControl | InternetworkControl |
       
  2172                    CRITIC | FlashOverride | Flash | Immediate |
       
  2173                    Priority | Routine"
       
  2174 
       
  2175       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
  2176 
       
  2177       Class       [0..3]
       
  2178 
       
  2179       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
  2180                     Restricted | Secret | Top Secret | Reserved"
       
  2181 
       
  2182       Compartments [0..65535]
       
  2183 
       
  2184       Handling     [0..65535]
       
  2185 
       
  2186       TCC          [0..16777216]
       
  2187 
       
  2188    -->
       
  2189 
       
  2190 
       
  2191 
       
  2192 Kennedy                      Informational                      [Page 7]
       
  2193 
       
  2194 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  2195 
       
  2196 
       
  2197    <!ENTITY % Digits "CDATA">
       
  2198    <!ENTITY % Precedence "CDATA">
       
  2199    <!ENTITY % IP4Addr "CDATA">
       
  2200    <!ENTITY % Class "CDATA">
       
  2201    <!ENTITY % Sec "CDATA">
       
  2202    <!ENTITY % Compartments "CDATA">
       
  2203    <!ENTITY % Handling "CDATA">
       
  2204    <!ENTITY % TCC "CDATA">
       
  2205 
       
  2206    <!ELEMENT ip (header, payload)>
       
  2207 
       
  2208    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
  2209                     protocol, checksum, source, destination, options,
       
  2210                     padding)>
       
  2211    <!-- length of header in 32-bit words -->
       
  2212    <!ATTLIST header
       
  2213              length %Digits; #REQUIRED>
       
  2214 
       
  2215    <!ELEMENT version EMPTY>
       
  2216    <!-- ip version. SHOULD be "4" -->
       
  2217    <!ATTLIST version
       
  2218              value   %Digits;  #REQUIRED>
       
  2219 
       
  2220    <!ELEMENT tos EMPTY>
       
  2221    <!ATTLIST tos
       
  2222              precedence   %Precedence;    #REQUIRED
       
  2223              delay    (normal | low)  #REQUIRED
       
  2224              throughput   (normal | high) #REQUIRED
       
  2225              relibility   (normal | high) #REQUIRED
       
  2226              reserved     CDATA #FIXED "0">
       
  2227 
       
  2228    <!ELEMENT total.length EMPTY>
       
  2229    <!--
       
  2230     total length of datagram (header and payload) in octets, MUST be
       
  2231     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
  2232     ethernets).
       
  2233    -->
       
  2234    <!ATTLIST total.length
       
  2235              value %Digits; #REQUIRED>
       
  2236 
       
  2237    <!ELEMENT id EMPTY>
       
  2238    <!-- 0 <= id <= 65,535  -->
       
  2239    <!ATTLIST id
       
  2240              value %Digits; #REQUIRED>
       
  2241 
       
  2242    <!ELEMENT flags EMPTY>
       
  2243    <!-- df = don't fragment, mf = more fragments  -->
       
  2244    <!ATTLIST flags
       
  2245 
       
  2246 
       
  2247 
       
  2248 Kennedy                      Informational                      [Page 8]
       
  2249 
       
  2250 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  2251 
       
  2252 
       
  2253           reserved CDATA  #FIXED "0"
       
  2254           df (may|dont)   #REQUIRED
       
  2255           mf (last|more)  #REQUIRED>
       
  2256 
       
  2257    <!ELEMENT offset EMPTY>
       
  2258    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
  2259    <!ATTLIST offset
       
  2260              value %Digits; #REQUIRED>
       
  2261 
       
  2262    <!ELEMENT ttl EMPTY>
       
  2263    <!-- 0 <= ttl <= 255 -->
       
  2264    <!ATTLIST ttl
       
  2265              value %Digits; #REQUIRED>
       
  2266 
       
  2267    <!ELEMENT protocol EMPTY>
       
  2268    <!-- 0 <= protocol <= 255 (per IANA) -->
       
  2269    <!ATTLIST protocol
       
  2270              value %Digits; #REQUIRED>
       
  2271 
       
  2272    <!ELEMENT checksum EMPTY>
       
  2273    <!-- 0 <= checksum <= 65535 (over header only) -->
       
  2274    <!ATTLIST checksum
       
  2275              value %Digits; #REQUIRED>
       
  2276 
       
  2277    <!ELEMENT source EMPTY>
       
  2278    <!ATTLIST source
       
  2279              address %IP4Addr; #REQUIRED>
       
  2280 
       
  2281    <!ELEMENT destination EMPTY>
       
  2282    <!ATTLIST destination
       
  2283              address %IP4Addr; #REQUIRED>
       
  2284 
       
  2285    <!ELEMENT options ( end | noop | security | loose | strict | record
       
  2286                      | stream | timestamp )*>
       
  2287 
       
  2288    <!ELEMENT end EMPTY>
       
  2289    <!ATTLIST end
       
  2290              copied (0|1) #REQUIRED
       
  2291              class  CDATA #FIXED "0"
       
  2292              number CDATA #FIXED "0">
       
  2293 
       
  2294    <!ELEMENT noop EMPTY>
       
  2295    <!ATTLIST noop
       
  2296              copied (0|1) #REQUIRED
       
  2297              class  CDATA #FIXED "0"
       
  2298              number CDATA #FIXED "1">
       
  2299 
       
  2300    <!ELEMENT security EMPTY>
       
  2301 
       
  2302 
       
  2303 
       
  2304 Kennedy                      Informational                      [Page 9]
       
  2305 
       
  2306 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  2307 
       
  2308 
       
  2309    <!ATTLIST security
       
  2310              copied CDATA #FIXED "1"
       
  2311              class  CDATA #FIXED "0"
       
  2312              number CDATA #FIXED "2"
       
  2313              length CDATA #FIXED "11"
       
  2314              security %Sec; #REQUIRED
       
  2315              compartments %Compartments; #REQUIRED
       
  2316              handling %Handling; #REQUIRED
       
  2317              tcc %TCC; #REQUIRED>
       
  2318    <!ELEMENT loose (hop)+>
       
  2319    <!ATTLIST loose
       
  2320              copied CDATA #FIXED "1"
       
  2321              class  CDATA #FIXED "0"
       
  2322              number CDATA #FIXED "3"
       
  2323              length %Digits; #REQUIRED
       
  2324              pointer %Digits; #REQUIRED>
       
  2325 
       
  2326    <!ELEMENT hop EMPTY>
       
  2327    <!ATTLIST hop
       
  2328              address %IP4Addr; #REQUIRED>
       
  2329 
       
  2330    <!ELEMENT strict (hop)+>
       
  2331    <!ATTLIST strict
       
  2332              copied CDATA #FIXED "1"
       
  2333              class  CDATA #FIXED "0"
       
  2334              number CDATA #FIXED "9"
       
  2335              length %Digits; #REQUIRED
       
  2336              pointer %Digits; #REQUIRED>
       
  2337 
       
  2338    <!ELEMENT record (hop)+>
       
  2339    <!ATTLIST record
       
  2340              copied CDATA #FIXED "0"
       
  2341              class  CDATA #FIXED "0"
       
  2342              number CDATA #FIXED "7"
       
  2343              length %Digits; #REQUIRED
       
  2344              pointer %Digits; #REQUIRED>
       
  2345 
       
  2346    <!ELEMENT stream EMPTY>
       
  2347    <!-- 0 <= id <= 65,535 -->
       
  2348    <!ATTLIST stream
       
  2349              copied CDATA #FIXED "1"
       
  2350              class  CDATA #FIXED "0"
       
  2351              number CDATA #FIXED "8"
       
  2352              length CDATA #FIXED "4"
       
  2353              id %Digits; #REQUIRED>
       
  2354 
       
  2355    <!ELEMENT timestamp (tstamp)+>
       
  2356    <!-- 0 <= oflw <=15 -->
       
  2357 
       
  2358 
       
  2359 
       
  2360 Kennedy                      Informational                     [Page 10]
       
  2361 
       
  2362 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  2363 
       
  2364 
       
  2365    <!ATTLIST timestamp
       
  2366              copied CDATA #FIXED "0"
       
  2367              class  CDATA #FIXED "2"
       
  2368              number CDATA #FIXED "4"
       
  2369              length %Digits;  #REQUIRED
       
  2370              pointer %Digits; #REQUIRED
       
  2371              oflw %Digits;    #REQUIRED
       
  2372              flag (0 | 1 | 3)  #REQUIRED>
       
  2373 
       
  2374    <!ELEMENT tstamp EMPTY>
       
  2375    <!ATTLIST tstamp
       
  2376              time %Digits;   #REQUIRED
       
  2377              address %IP4Addr; #IMPLIED>
       
  2378    <!--
       
  2379        padding to bring header to 32-bit boundary.
       
  2380        pad MUST be "0"*
       
  2381     -->
       
  2382    <!ELEMENT padding EMPTY>
       
  2383    <!ATTLIST padding
       
  2384              pad CDATA #REQUIRED>
       
  2385 
       
  2386    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
  2387         by section 2.1 of this RFC -->
       
  2388    <!ELEMENT payload (CDATA)>
       
  2389 
       
  2390 7.2.  TCPoXML DTD
       
  2391 
       
  2392    <!--
       
  2393       DTD for TCP over XML.
       
  2394       Refer to this DTD as:
       
  2395 
       
  2396       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  2397    -->
       
  2398 
       
  2399    <!-- the pseudoheader is only included for checksum calculations -->
       
  2400    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
  2401 
       
  2402    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
  2403                          reserved, control, window, checksum, urgent,
       
  2404                          tcp.options, padding)>
       
  2405 
       
  2406    <!ELEMENT src EMPTY>
       
  2407    <!-- 0 <= port <= 65,535 -->
       
  2408    <!ATTLIST src
       
  2409              port %Digits; #REQUIRED>
       
  2410 
       
  2411    <!ELEMENT dest EMPTY>
       
  2412    <!-- 0 <= port <= 65,535 -->
       
  2413 
       
  2414 
       
  2415 
       
  2416 Kennedy                      Informational                     [Page 11]
       
  2417 
       
  2418 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  2419 
       
  2420 
       
  2421    <!ATTLIST dest
       
  2422              port %Digits; #REQUIRED>
       
  2423 
       
  2424    <!ELEMENT sequence EMPTY>
       
  2425    <!-- 0 <= number <= 4294967295 -->
       
  2426    <!ATTLIST sequence
       
  2427              number %Digits; #REQUIRED>
       
  2428 
       
  2429    <!ELEMENT acknowledgement EMPTY>
       
  2430    <!-- 0 <= number <= 4294967295 -->
       
  2431    <!ATTLIST acknowledgement
       
  2432              number %Digits; #REQUIRED>
       
  2433 
       
  2434    <!ELEMENT offset EMPTY>
       
  2435    <!-- 0 <= number <= 255 -->
       
  2436    <!ATTLIST offset
       
  2437              number %Digits; #REQUIRED>
       
  2438 
       
  2439    <!ELEMENT reserved EMPTY>
       
  2440    <!ATTLIST reserved
       
  2441              value CDATA #FIXED "0">
       
  2442 
       
  2443    <!ELEMENT control EMPTY>
       
  2444    <!ATTLIST control
       
  2445              urg (0|1) #IMPLIED
       
  2446              ack (0|1) #IMPLIED
       
  2447              psh (0|1) #IMPLIED
       
  2448              rst (0|1) #IMPLIED
       
  2449              syn (0|1) #IMPLIED
       
  2450              fin (0|1) #IMPLIED>
       
  2451 
       
  2452    <!ELEMENT window EMPTY>
       
  2453    <!-- 0 <= size <= 65,535 -->
       
  2454    <!ATTLIST window
       
  2455              size %Digits; #REQUIRED>
       
  2456 
       
  2457    <!--
       
  2458       checksum as in ip, but with
       
  2459       the following pseudo-header added into the tcp element:
       
  2460      -->
       
  2461    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
  2462                                tcp.length)>
       
  2463 
       
  2464    <!--
       
  2465       tcp header + data length in octets. does not include the size of
       
  2466 
       
  2467       the pseudoheader.
       
  2468     -->
       
  2469 
       
  2470 
       
  2471 
       
  2472 Kennedy                      Informational                     [Page 12]
       
  2473 
       
  2474 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  2475 
       
  2476 
       
  2477    <!ELEMENT tcp.length EMPTY>
       
  2478    <!ATTLIST tcp.length
       
  2479              value %Digits; #REQUIRED>
       
  2480 
       
  2481    <!ELEMENT urgent EMPTY>
       
  2482    <!-- 0 <= pointer <= 65,535 -->
       
  2483    <!ATTLIST urgent
       
  2484              pointer %Digits; #REQUIRED>
       
  2485 
       
  2486    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
  2487 
       
  2488    <!ELEMENT tcp.end EMPTY>
       
  2489    <!ATTLIST tcp.end
       
  2490              kind CDATA #FIXED "0">
       
  2491 
       
  2492    <!ELEMENT tcp.noop EMPTY>
       
  2493    <!ATTLIST tcp.noop
       
  2494              kind CDATA #FIXED "1">
       
  2495 
       
  2496    <!ELEMENT tcp.mss EMPTY>
       
  2497    <!ATTLIST tcp.mss
       
  2498              kind CDATA #FIXED "2"
       
  2499              length CDATA #FIXED "4"
       
  2500              size %Digits; #REQUIRED>
       
  2501 
       
  2502 7.3.  UDPoXML DTD
       
  2503 
       
  2504    <!--
       
  2505       DTD for UDP over XML.
       
  2506       Refer to this DTD as:
       
  2507 
       
  2508       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  2509    -->
       
  2510 
       
  2511    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
  2512 
       
  2513    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
  2514 
       
  2515    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
  2516                                udp.length)>
       
  2517 
       
  2518    <!--
       
  2519       udp header + data length in octets. does not include the size of
       
  2520       the pseudoheader.
       
  2521     -->
       
  2522    <!ELEMENT udp.length EMPTY>
       
  2523    <!ATTLIST udp.length
       
  2524              value %Digits; #REQUIRED>
       
  2525 
       
  2526 
       
  2527 
       
  2528 Kennedy                      Informational                     [Page 13]
       
  2529 
       
  2530 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  2531 
       
  2532 
       
  2533 8. Security Considerations
       
  2534 
       
  2535    XML, as a subset of SGML, has the same security considerations as
       
  2536    specified in SGML Media Types [RFC1874].  Security considerations
       
  2537    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
  2538    not attempt to correct for issues not related to message format.
       
  2539 
       
  2540 9.   References
       
  2541 
       
  2542    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
  2543                February 2002. (Work in Progress)
       
  2544 
       
  2545    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
  2546                August 1980.
       
  2547 
       
  2548    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
  2549                September 1981.
       
  2550 
       
  2551    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
  2552                793, September 1981.
       
  2553 
       
  2554    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
  2555                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
  2556 
       
  2557    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
  2558                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
  2559                43, RFC 1042, February 1988.
       
  2560 
       
  2561    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
  2562                Application and Support", RFC 1123, October 1989.
       
  2563 
       
  2564    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
  2565                1995.
       
  2566 
       
  2567    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
  2568                October 1996.
       
  2569 
       
  2570    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
  2571                Extensions (MIME) Part One: Format of Internet Message
       
  2572                Bodies", RFC 2045, November 1996.
       
  2573 
       
  2574    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
  2575                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
  2576 
       
  2577    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
  2578                10646", RFC 2279, January 1998.
       
  2579 
       
  2580 
       
  2581 
       
  2582 
       
  2583 
       
  2584 Kennedy                      Informational                     [Page 14]
       
  2585 
       
  2586 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  2587 
       
  2588 
       
  2589    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
  2590                (IPv6) Specification", RFC 2460, December 1998.
       
  2591 
       
  2592    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
  2593                RFC 3080, March 2001.
       
  2594 
       
  2595    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
  2596                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
  2597                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
  2598                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
  2599 
       
  2600    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
  2601                Markup Language (XML)" World Wide Web Consortium
       
  2602                Recommendation REC- xml-19980210.
       
  2603                http://www.w3.org/TR/1998/REC-xml-19980210
       
  2604 
       
  2605 10.  Author's Address
       
  2606 
       
  2607    Hugh Kennedy
       
  2608    Mimezine
       
  2609    1060 West Addison
       
  2610    Chicago, IL 60613
       
  2611    USA
       
  2612 
       
  2613    EMail: kennedyh@engin.umich.edu
       
  2614 
       
  2615 
       
  2616 
       
  2617 
       
  2618 
       
  2619 
       
  2620 
       
  2621 
       
  2622 
       
  2623 
       
  2624 
       
  2625 
       
  2626 
       
  2627 
       
  2628 
       
  2629 
       
  2630 
       
  2631 
       
  2632 
       
  2633 
       
  2634 
       
  2635 
       
  2636 
       
  2637 
       
  2638 
       
  2639 
       
  2640 Kennedy                      Informational                     [Page 15]
       
  2641 
       
  2642 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  2643 
       
  2644 
       
  2645 11.  Full Copyright Statement
       
  2646 
       
  2647    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  2648 
       
  2649    This document and translations of it may be copied and furnished to
       
  2650    others, and derivative works that comment on or otherwise explain it
       
  2651    or assist in its implementation may be prepared, copied, published
       
  2652    and distributed, in whole or in part, without restriction of any
       
  2653    kind, provided that the above copyright notice and this paragraph are
       
  2654    included on all such copies and derivative works.  However, this
       
  2655    document itself may not be modified in any way, such as by removing
       
  2656    the copyright notice or references to the Internet Society or other
       
  2657    Internet organizations, except as needed for the purpose of
       
  2658    developing Internet standards in which case the procedures for
       
  2659    copyrights defined in the Internet Standards process must be
       
  2660    followed, or as required to translate it into languages other than
       
  2661    English.
       
  2662 
       
  2663    The limited permissions granted above are perpetual and will not be
       
  2664    revoked by the Internet Society or its successors or assigns.
       
  2665 
       
  2666    This document and the information contained herein is provided on an
       
  2667    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
  2668    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
  2669    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
  2670    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
  2671    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
  2672 
       
  2673 Acknowledgement
       
  2674 
       
  2675    Funding for the RFC Editor function is currently provided by the
       
  2676    Internet Society.
       
  2677 
       
  2678 
       
  2679 
       
  2680 
       
  2681 
       
  2682 
       
  2683 
       
  2684 
       
  2685 
       
  2686 
       
  2687 
       
  2688 
       
  2689 
       
  2690 
       
  2691 
       
  2692 
       
  2693 
       
  2694 
       
  2695 
       
  2696 Kennedy                      Informational                     [Page 16]
       
  2697 
       
  2698 
       
  2699 
       
  2700 
       
  2701 
       
  2702 
       
  2703 
       
  2704 Network Working Group                                         H. Kennedy
       
  2705 Request for Comments: 3252                                      Mimezine
       
  2706 Category: Informational                                     1 April 2002
       
  2707 
       
  2708 
       
  2709                  Binary Lexical Octet Ad-hoc Transport
       
  2710 
       
  2711 Status of this Memo
       
  2712 
       
  2713    This memo provides information for the Internet community.  It does
       
  2714    not specify an Internet standard of any kind.  Distribution of this
       
  2715    memo is unlimited.
       
  2716 
       
  2717 Copyright Notice
       
  2718 
       
  2719    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  2720 
       
  2721 Abstract
       
  2722 
       
  2723    This document defines a reformulation of IP and two transport layer
       
  2724    protocols (TCP and UDP) as XML applications.
       
  2725 
       
  2726 1.   Introduction
       
  2727 
       
  2728 1.1. Overview
       
  2729 
       
  2730    This document describes the Binary Lexical Octet Ad-hoc Transport
       
  2731    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
  2732    (IP [RFC791]), and two associated transport layer protocols (TCP
       
  2733    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
  2734    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
  2735    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
  2736    across the public Internet.
       
  2737 
       
  2738 1.2. Motivation
       
  2739 
       
  2740    The wild popularity of XML as a basis for application-level protocols
       
  2741    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
  2742    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
  2743    investigation into the possibility of extending the use of XML in the
       
  2744    protocol stack.  Using XML at both the transport and network layer in
       
  2745    addition to the application layer would provide for an amazing amount
       
  2746    of power and flexibility while removing dependencies on proprietary
       
  2747    and hard-to-understand binary protocols.  This protocol unification
       
  2748    would also allow applications to use a single XML parser for all
       
  2749    aspects of their operation, eliminating developer time spent figuring
       
  2750    out the intricacies of each new protocol, and moving the hard work of
       
  2751 
       
  2752 
       
  2753 
       
  2754 
       
  2755 Kennedy                      Informational                      [Page 1]
       
  2756 
       
  2757 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  2758 
       
  2759 
       
  2760    parsing to the XML toolset.  The use of XML also mitigates concerns
       
  2761    over "network vs. host" byte ordering which is at the root of many
       
  2762    network application bugs.
       
  2763 
       
  2764 1.3. Relation to Existing Protocols
       
  2765 
       
  2766    The reformulations specified in this RFC follow as closely as
       
  2767    possible the spirit of the RFCs on which they are based, and so MAY
       
  2768    contain elements or attributes that would not be needed in a pure
       
  2769    reworking (e.g. length attributes, which are implicit in XML.)
       
  2770 
       
  2771    The layering of network and transport protocols are maintained in
       
  2772    this RFC despite the optimizations that could be made if the line
       
  2773    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
  2774    element in the DTD) in order to foster future use of this protocol as
       
  2775    a basis for reformulating other protocols (such as ICMP.)
       
  2776 
       
  2777    Other than the encoding, the behavioral aspects of each of the
       
  2778    existing protocols remain unchanged.  Routing, address spaces, TCP
       
  2779    congestion control, etc. behave as specified in the extant standards.
       
  2780    Adapting to new standards and experimental algorithm heuristics for
       
  2781    improving performance will become much easier once the move to BLOAT
       
  2782    has been completed.
       
  2783 
       
  2784 1.4. Requirement Levels
       
  2785 
       
  2786    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
  2787    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
  2788    document are to be interpreted as described in BCP 14, RFC 2119
       
  2789    [RFC2119].
       
  2790 
       
  2791 2.   IPoXML
       
  2792 
       
  2793    This protocol MUST be implemented to be compliant with this RFC.
       
  2794    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
  2795    (section 3.) and higher-level application protocols.
       
  2796 
       
  2797    The DTD for this document type can be found in section 7.1.
       
  2798 
       
  2799    The routing of IPoXML can be easily implemented on hosts with an XML
       
  2800    parser, as the regular structure lends itself handily to parsing and
       
  2801    validation of the document/datagram and then processing the
       
  2802    destination address, TTL, and checksum before sending it on to its
       
  2803    next-hop.
       
  2804 
       
  2805    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
  2806    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
  2807    would have exceeded the 1500 byte Ethernet MTU.
       
  2808 
       
  2809 
       
  2810 
       
  2811 Kennedy                      Informational                      [Page 2]
       
  2812 
       
  2813 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  2814 
       
  2815 
       
  2816    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
  2817    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
  2818    formed and include the XMLDecl.
       
  2819 
       
  2820 2.1. IP Description
       
  2821 
       
  2822    A number of items have changed (for the better) from the original IP
       
  2823    specification.  Bit-masks, where present have been converted into
       
  2824    human-readable values.  IP addresses are listed in their dotted-
       
  2825    decimal notation [RFC1123].  Length and checksum values are present
       
  2826    as decimal integers.
       
  2827 
       
  2828    To calculate the length and checksum fields of the IP element, a
       
  2829    canonicalized form of the element MUST be used.  The canonical form
       
  2830    SHALL have no whitespace (including newline characters) between
       
  2831    elements and only one space character between attributes.  There
       
  2832    SHALL NOT be a space following the last attribute in an element.
       
  2833 
       
  2834    An iterative method SHOULD be used to calculate checksums, as the
       
  2835    length field will vary based on the size of the checksum.
       
  2836 
       
  2837    The payload element bears special attention.  Due to the character
       
  2838    set restrictions of XML, the payload of IP datagrams (which MAY
       
  2839    contain arbitrary data) MUST be encoded for transport. This RFC
       
  2840    REQUIRES the contents of the payload to be encoded in the base-64
       
  2841    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
  2842    encoded output MUST be wrapped on 76-character lines.
       
  2843 
       
  2844 
       
  2845 
       
  2846 
       
  2847 
       
  2848 
       
  2849 
       
  2850 
       
  2851 
       
  2852 
       
  2853 
       
  2854 
       
  2855 
       
  2856 
       
  2857 
       
  2858 
       
  2859 
       
  2860 
       
  2861 
       
  2862 
       
  2863 
       
  2864 
       
  2865 
       
  2866 
       
  2867 Kennedy                      Informational                      [Page 3]
       
  2868 
       
  2869 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  2870 
       
  2871 
       
  2872 2.2. Example Datagram
       
  2873 
       
  2874    The following is an example IPoXML datagram with an empty payload:
       
  2875 
       
  2876    <?xml version="1.0" encoding="UTF-8"?>
       
  2877    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  2878    <ip>
       
  2879    <header length="474">
       
  2880    <version value="4"/>
       
  2881    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
  2882         relibility="Normal" reserved="0"/>
       
  2883    <total.length value="461"/>
       
  2884    <id value="1"/>
       
  2885    <flags reserved="0" df="dont" mf="last"/>
       
  2886    <offset value="0"/>
       
  2887    <ttl value="255"/>
       
  2888    <protocol value="6"/>
       
  2889    <checksum value="8707"/>
       
  2890    <source address="10.0.0.22"/>
       
  2891    <destination address="10.0.0.1"/>
       
  2892    <options>
       
  2893    <end copied="0" class="0" number="0"/>
       
  2894    </options>
       
  2895    <padding pad="0"/>
       
  2896    </header>
       
  2897    <payload>
       
  2898    </payload>
       
  2899    </ip>
       
  2900 
       
  2901 3.   TCPoXML
       
  2902 
       
  2903    This protocol MUST be implemented to be compliant with this RFC.  The
       
  2904    DTD for this document type can be found in section 7.2.
       
  2905 
       
  2906 3.1. TCP Description
       
  2907 
       
  2908    A number of items have changed from the original TCP specification.
       
  2909    Bit-masks, where present have been converted into human-readable
       
  2910    values.  Length and checksum and port values are present as decimal
       
  2911    integers.
       
  2912 
       
  2913    To calculate the length and checksum fields of the TCP element, a
       
  2914    canonicalized form of the element MUST be used as in section 2.1.
       
  2915 
       
  2916    An iterative method SHOULD be used to calculate checksums as in
       
  2917    section 2.1.
       
  2918 
       
  2919    The payload element MUST be encoded as in section 2.1.
       
  2920 
       
  2921 
       
  2922 
       
  2923 Kennedy                      Informational                      [Page 4]
       
  2924 
       
  2925 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  2926 
       
  2927 
       
  2928    The TCP offset element was expanded to a maximum of 255 from 16 to
       
  2929    allow for the increased size of the header in XML.
       
  2930 
       
  2931    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  2932    as well as the <!DOCTYPE> declaration.
       
  2933 
       
  2934 3.2. Example Datagram
       
  2935 
       
  2936    The following is an example TCPoXML datagram with an empty payload:
       
  2937 
       
  2938    <?xml version="1.0" encoding="UTF-8"?>
       
  2939    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  2940    <tcp>
       
  2941    <tcp.header>
       
  2942    <src port="31415"/>
       
  2943    <dest port="42424"/>
       
  2944    <sequence number="322622954"/>
       
  2945    <acknowledgement number="689715995"/>
       
  2946    <offset number=""/>
       
  2947    <reserved value="0"/>
       
  2948    <control syn="1" ack="1"/>
       
  2949    <window size="1"/>
       
  2950    <urgent pointer="0"/>
       
  2951    <checksum value="2988"/>
       
  2952    <tcp.options>
       
  2953    <tcp.end kind="0"/>
       
  2954    </tcp.options>
       
  2955    <padding pad="0"/>
       
  2956    </tcp.header>
       
  2957    <payload>
       
  2958    </payload>
       
  2959    </tcp>
       
  2960 
       
  2961 4.   UDPoXML
       
  2962 
       
  2963    This protocol MUST be implemented to be compliant with this RFC.  The
       
  2964    DTD for this document type can be found in section 7.3.
       
  2965 
       
  2966 4.1. UDP Description
       
  2967 
       
  2968    A number of items have changed from the original UDP specification.
       
  2969    Bit-masks, where present have been converted into human-readable
       
  2970    values.  Length and checksum and port values are present as decimal
       
  2971    integers.
       
  2972 
       
  2973 
       
  2974 
       
  2975 
       
  2976 
       
  2977 
       
  2978 
       
  2979 Kennedy                      Informational                      [Page 5]
       
  2980 
       
  2981 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  2982 
       
  2983 
       
  2984    To calculate the length and checksum fields of the UDP element, a
       
  2985    canonicalized form of the element MUST be used as in section 2.1.  An
       
  2986    iterative method SHOULD be used to calculate checksums as in section
       
  2987    2.1.
       
  2988 
       
  2989    The payload element MUST be encoded as in section 2.1.
       
  2990 
       
  2991    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  2992    as well as the <!DOCTYPE> declaration.
       
  2993 
       
  2994 4.2. Example Datagram
       
  2995 
       
  2996    The following is an example UDPoXML datagram with an empty payload:
       
  2997 
       
  2998    <?xml version="1.0" encoding="UTF-8"?>
       
  2999    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  3000    <udp>
       
  3001    <udp.header>
       
  3002    <src port="31415"/>
       
  3003    <dest port="42424"/>
       
  3004    <udp.length value="143"/>
       
  3005    <checksum value="2988"/>
       
  3006    </udp.header>
       
  3007    <payload>
       
  3008    </payload>
       
  3009    </udp>
       
  3010 
       
  3011 5.   Network Transport
       
  3012 
       
  3013    This document provides for the transmission of BLOAT datagrams over
       
  3014    two common families of physical layer transport.  Future RFCs will
       
  3015    address additional transports as routing vendors catch up to the
       
  3016    specification, and we begin to see BLOAT routed across the Internet
       
  3017    backbone.
       
  3018 
       
  3019 5.1. Ethernet
       
  3020 
       
  3021    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
  3022    exception that the type field of the Ethernet frame MUST contain the
       
  3023    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
  3024    be 0x3c 3f 78 6d 6c ("<?xml".)
       
  3025 
       
  3026 5.2. IEEE 802
       
  3027 
       
  3028    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
  3029    that the protocol type code for IPoXML is 0xBEEF.
       
  3030 
       
  3031 
       
  3032 
       
  3033 
       
  3034 
       
  3035 Kennedy                      Informational                      [Page 6]
       
  3036 
       
  3037 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  3038 
       
  3039 
       
  3040 6. Gatewaying over IP
       
  3041 
       
  3042    In order to facilitate the gradual introduction of BLOAT into the
       
  3043    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
  3044    gateway between networks that run BLOAT natively on their LANs.
       
  3045 
       
  3046 7. DTDs
       
  3047 
       
  3048    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
  3049    Network DTD (7.1.)
       
  3050 
       
  3051    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
  3052    [XML]) although it is understood that most IPoXML implementations
       
  3053    will not need to pull down the DTD, as it will normally be embedded
       
  3054    in the implementation, and presents something of a catch-22 if you
       
  3055    need to load part of your network protocol over the network.
       
  3056 
       
  3057 7.1.  IPoXML DTD
       
  3058 
       
  3059    <!--
       
  3060     DTD for IP over XML.
       
  3061     Refer to this DTD as:
       
  3062 
       
  3063     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  3064    -->
       
  3065    <!--
       
  3066     DTD data types:
       
  3067 
       
  3068       Digits      [0..9]+
       
  3069 
       
  3070       Precedence  "NetworkControl | InternetworkControl |
       
  3071                    CRITIC | FlashOverride | Flash | Immediate |
       
  3072                    Priority | Routine"
       
  3073 
       
  3074       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
  3075 
       
  3076       Class       [0..3]
       
  3077 
       
  3078       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
  3079                     Restricted | Secret | Top Secret | Reserved"
       
  3080 
       
  3081       Compartments [0..65535]
       
  3082 
       
  3083       Handling     [0..65535]
       
  3084 
       
  3085       TCC          [0..16777216]
       
  3086 
       
  3087    -->
       
  3088 
       
  3089 
       
  3090 
       
  3091 Kennedy                      Informational                      [Page 7]
       
  3092 
       
  3093 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  3094 
       
  3095 
       
  3096    <!ENTITY % Digits "CDATA">
       
  3097    <!ENTITY % Precedence "CDATA">
       
  3098    <!ENTITY % IP4Addr "CDATA">
       
  3099    <!ENTITY % Class "CDATA">
       
  3100    <!ENTITY % Sec "CDATA">
       
  3101    <!ENTITY % Compartments "CDATA">
       
  3102    <!ENTITY % Handling "CDATA">
       
  3103    <!ENTITY % TCC "CDATA">
       
  3104 
       
  3105    <!ELEMENT ip (header, payload)>
       
  3106 
       
  3107    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
  3108                     protocol, checksum, source, destination, options,
       
  3109                     padding)>
       
  3110    <!-- length of header in 32-bit words -->
       
  3111    <!ATTLIST header
       
  3112              length %Digits; #REQUIRED>
       
  3113 
       
  3114    <!ELEMENT version EMPTY>
       
  3115    <!-- ip version. SHOULD be "4" -->
       
  3116    <!ATTLIST version
       
  3117              value   %Digits;  #REQUIRED>
       
  3118 
       
  3119    <!ELEMENT tos EMPTY>
       
  3120    <!ATTLIST tos
       
  3121              precedence   %Precedence;    #REQUIRED
       
  3122              delay    (normal | low)  #REQUIRED
       
  3123              throughput   (normal | high) #REQUIRED
       
  3124              relibility   (normal | high) #REQUIRED
       
  3125              reserved     CDATA #FIXED "0">
       
  3126 
       
  3127    <!ELEMENT total.length EMPTY>
       
  3128    <!--
       
  3129     total length of datagram (header and payload) in octets, MUST be
       
  3130     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
  3131     ethernets).
       
  3132    -->
       
  3133    <!ATTLIST total.length
       
  3134              value %Digits; #REQUIRED>
       
  3135 
       
  3136    <!ELEMENT id EMPTY>
       
  3137    <!-- 0 <= id <= 65,535  -->
       
  3138    <!ATTLIST id
       
  3139              value %Digits; #REQUIRED>
       
  3140 
       
  3141    <!ELEMENT flags EMPTY>
       
  3142    <!-- df = don't fragment, mf = more fragments  -->
       
  3143    <!ATTLIST flags
       
  3144 
       
  3145 
       
  3146 
       
  3147 Kennedy                      Informational                      [Page 8]
       
  3148 
       
  3149 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  3150 
       
  3151 
       
  3152           reserved CDATA  #FIXED "0"
       
  3153           df (may|dont)   #REQUIRED
       
  3154           mf (last|more)  #REQUIRED>
       
  3155 
       
  3156    <!ELEMENT offset EMPTY>
       
  3157    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
  3158    <!ATTLIST offset
       
  3159              value %Digits; #REQUIRED>
       
  3160 
       
  3161    <!ELEMENT ttl EMPTY>
       
  3162    <!-- 0 <= ttl <= 255 -->
       
  3163    <!ATTLIST ttl
       
  3164              value %Digits; #REQUIRED>
       
  3165 
       
  3166    <!ELEMENT protocol EMPTY>
       
  3167    <!-- 0 <= protocol <= 255 (per IANA) -->
       
  3168    <!ATTLIST protocol
       
  3169              value %Digits; #REQUIRED>
       
  3170 
       
  3171    <!ELEMENT checksum EMPTY>
       
  3172    <!-- 0 <= checksum <= 65535 (over header only) -->
       
  3173    <!ATTLIST checksum
       
  3174              value %Digits; #REQUIRED>
       
  3175 
       
  3176    <!ELEMENT source EMPTY>
       
  3177    <!ATTLIST source
       
  3178              address %IP4Addr; #REQUIRED>
       
  3179 
       
  3180    <!ELEMENT destination EMPTY>
       
  3181    <!ATTLIST destination
       
  3182              address %IP4Addr; #REQUIRED>
       
  3183 
       
  3184    <!ELEMENT options ( end | noop | security | loose | strict | record
       
  3185                      | stream | timestamp )*>
       
  3186 
       
  3187    <!ELEMENT end EMPTY>
       
  3188    <!ATTLIST end
       
  3189              copied (0|1) #REQUIRED
       
  3190              class  CDATA #FIXED "0"
       
  3191              number CDATA #FIXED "0">
       
  3192 
       
  3193    <!ELEMENT noop EMPTY>
       
  3194    <!ATTLIST noop
       
  3195              copied (0|1) #REQUIRED
       
  3196              class  CDATA #FIXED "0"
       
  3197              number CDATA #FIXED "1">
       
  3198 
       
  3199    <!ELEMENT security EMPTY>
       
  3200 
       
  3201 
       
  3202 
       
  3203 Kennedy                      Informational                      [Page 9]
       
  3204 
       
  3205 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  3206 
       
  3207 
       
  3208    <!ATTLIST security
       
  3209              copied CDATA #FIXED "1"
       
  3210              class  CDATA #FIXED "0"
       
  3211              number CDATA #FIXED "2"
       
  3212              length CDATA #FIXED "11"
       
  3213              security %Sec; #REQUIRED
       
  3214              compartments %Compartments; #REQUIRED
       
  3215              handling %Handling; #REQUIRED
       
  3216              tcc %TCC; #REQUIRED>
       
  3217    <!ELEMENT loose (hop)+>
       
  3218    <!ATTLIST loose
       
  3219              copied CDATA #FIXED "1"
       
  3220              class  CDATA #FIXED "0"
       
  3221              number CDATA #FIXED "3"
       
  3222              length %Digits; #REQUIRED
       
  3223              pointer %Digits; #REQUIRED>
       
  3224 
       
  3225    <!ELEMENT hop EMPTY>
       
  3226    <!ATTLIST hop
       
  3227              address %IP4Addr; #REQUIRED>
       
  3228 
       
  3229    <!ELEMENT strict (hop)+>
       
  3230    <!ATTLIST strict
       
  3231              copied CDATA #FIXED "1"
       
  3232              class  CDATA #FIXED "0"
       
  3233              number CDATA #FIXED "9"
       
  3234              length %Digits; #REQUIRED
       
  3235              pointer %Digits; #REQUIRED>
       
  3236 
       
  3237    <!ELEMENT record (hop)+>
       
  3238    <!ATTLIST record
       
  3239              copied CDATA #FIXED "0"
       
  3240              class  CDATA #FIXED "0"
       
  3241              number CDATA #FIXED "7"
       
  3242              length %Digits; #REQUIRED
       
  3243              pointer %Digits; #REQUIRED>
       
  3244 
       
  3245    <!ELEMENT stream EMPTY>
       
  3246    <!-- 0 <= id <= 65,535 -->
       
  3247    <!ATTLIST stream
       
  3248              copied CDATA #FIXED "1"
       
  3249              class  CDATA #FIXED "0"
       
  3250              number CDATA #FIXED "8"
       
  3251              length CDATA #FIXED "4"
       
  3252              id %Digits; #REQUIRED>
       
  3253 
       
  3254    <!ELEMENT timestamp (tstamp)+>
       
  3255    <!-- 0 <= oflw <=15 -->
       
  3256 
       
  3257 
       
  3258 
       
  3259 Kennedy                      Informational                     [Page 10]
       
  3260 
       
  3261 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  3262 
       
  3263 
       
  3264    <!ATTLIST timestamp
       
  3265              copied CDATA #FIXED "0"
       
  3266              class  CDATA #FIXED "2"
       
  3267              number CDATA #FIXED "4"
       
  3268              length %Digits;  #REQUIRED
       
  3269              pointer %Digits; #REQUIRED
       
  3270              oflw %Digits;    #REQUIRED
       
  3271              flag (0 | 1 | 3)  #REQUIRED>
       
  3272 
       
  3273    <!ELEMENT tstamp EMPTY>
       
  3274    <!ATTLIST tstamp
       
  3275              time %Digits;   #REQUIRED
       
  3276              address %IP4Addr; #IMPLIED>
       
  3277    <!--
       
  3278        padding to bring header to 32-bit boundary.
       
  3279        pad MUST be "0"*
       
  3280     -->
       
  3281    <!ELEMENT padding EMPTY>
       
  3282    <!ATTLIST padding
       
  3283              pad CDATA #REQUIRED>
       
  3284 
       
  3285    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
  3286         by section 2.1 of this RFC -->
       
  3287    <!ELEMENT payload (CDATA)>
       
  3288 
       
  3289 7.2.  TCPoXML DTD
       
  3290 
       
  3291    <!--
       
  3292       DTD for TCP over XML.
       
  3293       Refer to this DTD as:
       
  3294 
       
  3295       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  3296    -->
       
  3297 
       
  3298    <!-- the pseudoheader is only included for checksum calculations -->
       
  3299    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
  3300 
       
  3301    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
  3302                          reserved, control, window, checksum, urgent,
       
  3303                          tcp.options, padding)>
       
  3304 
       
  3305    <!ELEMENT src EMPTY>
       
  3306    <!-- 0 <= port <= 65,535 -->
       
  3307    <!ATTLIST src
       
  3308              port %Digits; #REQUIRED>
       
  3309 
       
  3310    <!ELEMENT dest EMPTY>
       
  3311    <!-- 0 <= port <= 65,535 -->
       
  3312 
       
  3313 
       
  3314 
       
  3315 Kennedy                      Informational                     [Page 11]
       
  3316 
       
  3317 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  3318 
       
  3319 
       
  3320    <!ATTLIST dest
       
  3321              port %Digits; #REQUIRED>
       
  3322 
       
  3323    <!ELEMENT sequence EMPTY>
       
  3324    <!-- 0 <= number <= 4294967295 -->
       
  3325    <!ATTLIST sequence
       
  3326              number %Digits; #REQUIRED>
       
  3327 
       
  3328    <!ELEMENT acknowledgement EMPTY>
       
  3329    <!-- 0 <= number <= 4294967295 -->
       
  3330    <!ATTLIST acknowledgement
       
  3331              number %Digits; #REQUIRED>
       
  3332 
       
  3333    <!ELEMENT offset EMPTY>
       
  3334    <!-- 0 <= number <= 255 -->
       
  3335    <!ATTLIST offset
       
  3336              number %Digits; #REQUIRED>
       
  3337 
       
  3338    <!ELEMENT reserved EMPTY>
       
  3339    <!ATTLIST reserved
       
  3340              value CDATA #FIXED "0">
       
  3341 
       
  3342    <!ELEMENT control EMPTY>
       
  3343    <!ATTLIST control
       
  3344              urg (0|1) #IMPLIED
       
  3345              ack (0|1) #IMPLIED
       
  3346              psh (0|1) #IMPLIED
       
  3347              rst (0|1) #IMPLIED
       
  3348              syn (0|1) #IMPLIED
       
  3349              fin (0|1) #IMPLIED>
       
  3350 
       
  3351    <!ELEMENT window EMPTY>
       
  3352    <!-- 0 <= size <= 65,535 -->
       
  3353    <!ATTLIST window
       
  3354              size %Digits; #REQUIRED>
       
  3355 
       
  3356    <!--
       
  3357       checksum as in ip, but with
       
  3358       the following pseudo-header added into the tcp element:
       
  3359      -->
       
  3360    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
  3361                                tcp.length)>
       
  3362 
       
  3363    <!--
       
  3364       tcp header + data length in octets. does not include the size of
       
  3365 
       
  3366       the pseudoheader.
       
  3367     -->
       
  3368 
       
  3369 
       
  3370 
       
  3371 Kennedy                      Informational                     [Page 12]
       
  3372 
       
  3373 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  3374 
       
  3375 
       
  3376    <!ELEMENT tcp.length EMPTY>
       
  3377    <!ATTLIST tcp.length
       
  3378              value %Digits; #REQUIRED>
       
  3379 
       
  3380    <!ELEMENT urgent EMPTY>
       
  3381    <!-- 0 <= pointer <= 65,535 -->
       
  3382    <!ATTLIST urgent
       
  3383              pointer %Digits; #REQUIRED>
       
  3384 
       
  3385    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
  3386 
       
  3387    <!ELEMENT tcp.end EMPTY>
       
  3388    <!ATTLIST tcp.end
       
  3389              kind CDATA #FIXED "0">
       
  3390 
       
  3391    <!ELEMENT tcp.noop EMPTY>
       
  3392    <!ATTLIST tcp.noop
       
  3393              kind CDATA #FIXED "1">
       
  3394 
       
  3395    <!ELEMENT tcp.mss EMPTY>
       
  3396    <!ATTLIST tcp.mss
       
  3397              kind CDATA #FIXED "2"
       
  3398              length CDATA #FIXED "4"
       
  3399              size %Digits; #REQUIRED>
       
  3400 
       
  3401 7.3.  UDPoXML DTD
       
  3402 
       
  3403    <!--
       
  3404       DTD for UDP over XML.
       
  3405       Refer to this DTD as:
       
  3406 
       
  3407       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  3408    -->
       
  3409 
       
  3410    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
  3411 
       
  3412    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
  3413 
       
  3414    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
  3415                                udp.length)>
       
  3416 
       
  3417    <!--
       
  3418       udp header + data length in octets. does not include the size of
       
  3419       the pseudoheader.
       
  3420     -->
       
  3421    <!ELEMENT udp.length EMPTY>
       
  3422    <!ATTLIST udp.length
       
  3423              value %Digits; #REQUIRED>
       
  3424 
       
  3425 
       
  3426 
       
  3427 Kennedy                      Informational                     [Page 13]
       
  3428 
       
  3429 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  3430 
       
  3431 
       
  3432 8. Security Considerations
       
  3433 
       
  3434    XML, as a subset of SGML, has the same security considerations as
       
  3435    specified in SGML Media Types [RFC1874].  Security considerations
       
  3436    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
  3437    not attempt to correct for issues not related to message format.
       
  3438 
       
  3439 9.   References
       
  3440 
       
  3441    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
  3442                February 2002. (Work in Progress)
       
  3443 
       
  3444    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
  3445                August 1980.
       
  3446 
       
  3447    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
  3448                September 1981.
       
  3449 
       
  3450    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
  3451                793, September 1981.
       
  3452 
       
  3453    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
  3454                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
  3455 
       
  3456    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
  3457                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
  3458                43, RFC 1042, February 1988.
       
  3459 
       
  3460    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
  3461                Application and Support", RFC 1123, October 1989.
       
  3462 
       
  3463    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
  3464                1995.
       
  3465 
       
  3466    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
  3467                October 1996.
       
  3468 
       
  3469    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
  3470                Extensions (MIME) Part One: Format of Internet Message
       
  3471                Bodies", RFC 2045, November 1996.
       
  3472 
       
  3473    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
  3474                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
  3475 
       
  3476    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
  3477                10646", RFC 2279, January 1998.
       
  3478 
       
  3479 
       
  3480 
       
  3481 
       
  3482 
       
  3483 Kennedy                      Informational                     [Page 14]
       
  3484 
       
  3485 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  3486 
       
  3487 
       
  3488    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
  3489                (IPv6) Specification", RFC 2460, December 1998.
       
  3490 
       
  3491    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
  3492                RFC 3080, March 2001.
       
  3493 
       
  3494    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
  3495                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
  3496                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
  3497                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
  3498 
       
  3499    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
  3500                Markup Language (XML)" World Wide Web Consortium
       
  3501                Recommendation REC- xml-19980210.
       
  3502                http://www.w3.org/TR/1998/REC-xml-19980210
       
  3503 
       
  3504 10.  Author's Address
       
  3505 
       
  3506    Hugh Kennedy
       
  3507    Mimezine
       
  3508    1060 West Addison
       
  3509    Chicago, IL 60613
       
  3510    USA
       
  3511 
       
  3512    EMail: kennedyh@engin.umich.edu
       
  3513 
       
  3514 
       
  3515 
       
  3516 
       
  3517 
       
  3518 
       
  3519 
       
  3520 
       
  3521 
       
  3522 
       
  3523 
       
  3524 
       
  3525 
       
  3526 
       
  3527 
       
  3528 
       
  3529 
       
  3530 
       
  3531 
       
  3532 
       
  3533 
       
  3534 
       
  3535 
       
  3536 
       
  3537 
       
  3538 
       
  3539 Kennedy                      Informational                     [Page 15]
       
  3540 
       
  3541 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  3542 
       
  3543 
       
  3544 11.  Full Copyright Statement
       
  3545 
       
  3546    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  3547 
       
  3548    This document and translations of it may be copied and furnished to
       
  3549    others, and derivative works that comment on or otherwise explain it
       
  3550    or assist in its implementation may be prepared, copied, published
       
  3551    and distributed, in whole or in part, without restriction of any
       
  3552    kind, provided that the above copyright notice and this paragraph are
       
  3553    included on all such copies and derivative works.  However, this
       
  3554    document itself may not be modified in any way, such as by removing
       
  3555    the copyright notice or references to the Internet Society or other
       
  3556    Internet organizations, except as needed for the purpose of
       
  3557    developing Internet standards in which case the procedures for
       
  3558    copyrights defined in the Internet Standards process must be
       
  3559    followed, or as required to translate it into languages other than
       
  3560    English.
       
  3561 
       
  3562    The limited permissions granted above are perpetual and will not be
       
  3563    revoked by the Internet Society or its successors or assigns.
       
  3564 
       
  3565    This document and the information contained herein is provided on an
       
  3566    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
  3567    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
  3568    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
  3569    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
  3570    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
  3571 
       
  3572 Acknowledgement
       
  3573 
       
  3574    Funding for the RFC Editor function is currently provided by the
       
  3575    Internet Society.
       
  3576 
       
  3577 
       
  3578 
       
  3579 
       
  3580 
       
  3581 
       
  3582 
       
  3583 
       
  3584 
       
  3585 
       
  3586 
       
  3587 
       
  3588 
       
  3589 
       
  3590 
       
  3591 
       
  3592 
       
  3593 
       
  3594 
       
  3595 Kennedy                      Informational                     [Page 16]
       
  3596 
       
  3597 
       
  3598 
       
  3599 
       
  3600 
       
  3601 
       
  3602 
       
  3603 Network Working Group                                         H. Kennedy
       
  3604 Request for Comments: 3252                                      Mimezine
       
  3605 Category: Informational                                     1 April 2002
       
  3606 
       
  3607 
       
  3608                  Binary Lexical Octet Ad-hoc Transport
       
  3609 
       
  3610 Status of this Memo
       
  3611 
       
  3612    This memo provides information for the Internet community.  It does
       
  3613    not specify an Internet standard of any kind.  Distribution of this
       
  3614    memo is unlimited.
       
  3615 
       
  3616 Copyright Notice
       
  3617 
       
  3618    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  3619 
       
  3620 Abstract
       
  3621 
       
  3622    This document defines a reformulation of IP and two transport layer
       
  3623    protocols (TCP and UDP) as XML applications.
       
  3624 
       
  3625 1.   Introduction
       
  3626 
       
  3627 1.1. Overview
       
  3628 
       
  3629    This document describes the Binary Lexical Octet Ad-hoc Transport
       
  3630    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
  3631    (IP [RFC791]), and two associated transport layer protocols (TCP
       
  3632    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
  3633    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
  3634    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
  3635    across the public Internet.
       
  3636 
       
  3637 1.2. Motivation
       
  3638 
       
  3639    The wild popularity of XML as a basis for application-level protocols
       
  3640    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
  3641    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
  3642    investigation into the possibility of extending the use of XML in the
       
  3643    protocol stack.  Using XML at both the transport and network layer in
       
  3644    addition to the application layer would provide for an amazing amount
       
  3645    of power and flexibility while removing dependencies on proprietary
       
  3646    and hard-to-understand binary protocols.  This protocol unification
       
  3647    would also allow applications to use a single XML parser for all
       
  3648    aspects of their operation, eliminating developer time spent figuring
       
  3649    out the intricacies of each new protocol, and moving the hard work of
       
  3650 
       
  3651 
       
  3652 
       
  3653 
       
  3654 Kennedy                      Informational                      [Page 1]
       
  3655 
       
  3656 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  3657 
       
  3658 
       
  3659    parsing to the XML toolset.  The use of XML also mitigates concerns
       
  3660    over "network vs. host" byte ordering which is at the root of many
       
  3661    network application bugs.
       
  3662 
       
  3663 1.3. Relation to Existing Protocols
       
  3664 
       
  3665    The reformulations specified in this RFC follow as closely as
       
  3666    possible the spirit of the RFCs on which they are based, and so MAY
       
  3667    contain elements or attributes that would not be needed in a pure
       
  3668    reworking (e.g. length attributes, which are implicit in XML.)
       
  3669 
       
  3670    The layering of network and transport protocols are maintained in
       
  3671    this RFC despite the optimizations that could be made if the line
       
  3672    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
  3673    element in the DTD) in order to foster future use of this protocol as
       
  3674    a basis for reformulating other protocols (such as ICMP.)
       
  3675 
       
  3676    Other than the encoding, the behavioral aspects of each of the
       
  3677    existing protocols remain unchanged.  Routing, address spaces, TCP
       
  3678    congestion control, etc. behave as specified in the extant standards.
       
  3679    Adapting to new standards and experimental algorithm heuristics for
       
  3680    improving performance will become much easier once the move to BLOAT
       
  3681    has been completed.
       
  3682 
       
  3683 1.4. Requirement Levels
       
  3684 
       
  3685    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
  3686    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
  3687    document are to be interpreted as described in BCP 14, RFC 2119
       
  3688    [RFC2119].
       
  3689 
       
  3690 2.   IPoXML
       
  3691 
       
  3692    This protocol MUST be implemented to be compliant with this RFC.
       
  3693    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
  3694    (section 3.) and higher-level application protocols.
       
  3695 
       
  3696    The DTD for this document type can be found in section 7.1.
       
  3697 
       
  3698    The routing of IPoXML can be easily implemented on hosts with an XML
       
  3699    parser, as the regular structure lends itself handily to parsing and
       
  3700    validation of the document/datagram and then processing the
       
  3701    destination address, TTL, and checksum before sending it on to its
       
  3702    next-hop.
       
  3703 
       
  3704    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
  3705    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
  3706    would have exceeded the 1500 byte Ethernet MTU.
       
  3707 
       
  3708 
       
  3709 
       
  3710 Kennedy                      Informational                      [Page 2]
       
  3711 
       
  3712 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  3713 
       
  3714 
       
  3715    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
  3716    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
  3717    formed and include the XMLDecl.
       
  3718 
       
  3719 2.1. IP Description
       
  3720 
       
  3721    A number of items have changed (for the better) from the original IP
       
  3722    specification.  Bit-masks, where present have been converted into
       
  3723    human-readable values.  IP addresses are listed in their dotted-
       
  3724    decimal notation [RFC1123].  Length and checksum values are present
       
  3725    as decimal integers.
       
  3726 
       
  3727    To calculate the length and checksum fields of the IP element, a
       
  3728    canonicalized form of the element MUST be used.  The canonical form
       
  3729    SHALL have no whitespace (including newline characters) between
       
  3730    elements and only one space character between attributes.  There
       
  3731    SHALL NOT be a space following the last attribute in an element.
       
  3732 
       
  3733    An iterative method SHOULD be used to calculate checksums, as the
       
  3734    length field will vary based on the size of the checksum.
       
  3735 
       
  3736    The payload element bears special attention.  Due to the character
       
  3737    set restrictions of XML, the payload of IP datagrams (which MAY
       
  3738    contain arbitrary data) MUST be encoded for transport. This RFC
       
  3739    REQUIRES the contents of the payload to be encoded in the base-64
       
  3740    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
  3741    encoded output MUST be wrapped on 76-character lines.
       
  3742 
       
  3743 
       
  3744 
       
  3745 
       
  3746 
       
  3747 
       
  3748 
       
  3749 
       
  3750 
       
  3751 
       
  3752 
       
  3753 
       
  3754 
       
  3755 
       
  3756 
       
  3757 
       
  3758 
       
  3759 
       
  3760 
       
  3761 
       
  3762 
       
  3763 
       
  3764 
       
  3765 
       
  3766 Kennedy                      Informational                      [Page 3]
       
  3767 
       
  3768 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  3769 
       
  3770 
       
  3771 2.2. Example Datagram
       
  3772 
       
  3773    The following is an example IPoXML datagram with an empty payload:
       
  3774 
       
  3775    <?xml version="1.0" encoding="UTF-8"?>
       
  3776    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  3777    <ip>
       
  3778    <header length="474">
       
  3779    <version value="4"/>
       
  3780    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
  3781         relibility="Normal" reserved="0"/>
       
  3782    <total.length value="461"/>
       
  3783    <id value="1"/>
       
  3784    <flags reserved="0" df="dont" mf="last"/>
       
  3785    <offset value="0"/>
       
  3786    <ttl value="255"/>
       
  3787    <protocol value="6"/>
       
  3788    <checksum value="8707"/>
       
  3789    <source address="10.0.0.22"/>
       
  3790    <destination address="10.0.0.1"/>
       
  3791    <options>
       
  3792    <end copied="0" class="0" number="0"/>
       
  3793    </options>
       
  3794    <padding pad="0"/>
       
  3795    </header>
       
  3796    <payload>
       
  3797    </payload>
       
  3798    </ip>
       
  3799 
       
  3800 3.   TCPoXML
       
  3801 
       
  3802    This protocol MUST be implemented to be compliant with this RFC.  The
       
  3803    DTD for this document type can be found in section 7.2.
       
  3804 
       
  3805 3.1. TCP Description
       
  3806 
       
  3807    A number of items have changed from the original TCP specification.
       
  3808    Bit-masks, where present have been converted into human-readable
       
  3809    values.  Length and checksum and port values are present as decimal
       
  3810    integers.
       
  3811 
       
  3812    To calculate the length and checksum fields of the TCP element, a
       
  3813    canonicalized form of the element MUST be used as in section 2.1.
       
  3814 
       
  3815    An iterative method SHOULD be used to calculate checksums as in
       
  3816    section 2.1.
       
  3817 
       
  3818    The payload element MUST be encoded as in section 2.1.
       
  3819 
       
  3820 
       
  3821 
       
  3822 Kennedy                      Informational                      [Page 4]
       
  3823 
       
  3824 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  3825 
       
  3826 
       
  3827    The TCP offset element was expanded to a maximum of 255 from 16 to
       
  3828    allow for the increased size of the header in XML.
       
  3829 
       
  3830    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  3831    as well as the <!DOCTYPE> declaration.
       
  3832 
       
  3833 3.2. Example Datagram
       
  3834 
       
  3835    The following is an example TCPoXML datagram with an empty payload:
       
  3836 
       
  3837    <?xml version="1.0" encoding="UTF-8"?>
       
  3838    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  3839    <tcp>
       
  3840    <tcp.header>
       
  3841    <src port="31415"/>
       
  3842    <dest port="42424"/>
       
  3843    <sequence number="322622954"/>
       
  3844    <acknowledgement number="689715995"/>
       
  3845    <offset number=""/>
       
  3846    <reserved value="0"/>
       
  3847    <control syn="1" ack="1"/>
       
  3848    <window size="1"/>
       
  3849    <urgent pointer="0"/>
       
  3850    <checksum value="2988"/>
       
  3851    <tcp.options>
       
  3852    <tcp.end kind="0"/>
       
  3853    </tcp.options>
       
  3854    <padding pad="0"/>
       
  3855    </tcp.header>
       
  3856    <payload>
       
  3857    </payload>
       
  3858    </tcp>
       
  3859 
       
  3860 4.   UDPoXML
       
  3861 
       
  3862    This protocol MUST be implemented to be compliant with this RFC.  The
       
  3863    DTD for this document type can be found in section 7.3.
       
  3864 
       
  3865 4.1. UDP Description
       
  3866 
       
  3867    A number of items have changed from the original UDP specification.
       
  3868    Bit-masks, where present have been converted into human-readable
       
  3869    values.  Length and checksum and port values are present as decimal
       
  3870    integers.
       
  3871 
       
  3872 
       
  3873 
       
  3874 
       
  3875 
       
  3876 
       
  3877 
       
  3878 Kennedy                      Informational                      [Page 5]
       
  3879 
       
  3880 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  3881 
       
  3882 
       
  3883    To calculate the length and checksum fields of the UDP element, a
       
  3884    canonicalized form of the element MUST be used as in section 2.1.  An
       
  3885    iterative method SHOULD be used to calculate checksums as in section
       
  3886    2.1.
       
  3887 
       
  3888    The payload element MUST be encoded as in section 2.1.
       
  3889 
       
  3890    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  3891    as well as the <!DOCTYPE> declaration.
       
  3892 
       
  3893 4.2. Example Datagram
       
  3894 
       
  3895    The following is an example UDPoXML datagram with an empty payload:
       
  3896 
       
  3897    <?xml version="1.0" encoding="UTF-8"?>
       
  3898    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  3899    <udp>
       
  3900    <udp.header>
       
  3901    <src port="31415"/>
       
  3902    <dest port="42424"/>
       
  3903    <udp.length value="143"/>
       
  3904    <checksum value="2988"/>
       
  3905    </udp.header>
       
  3906    <payload>
       
  3907    </payload>
       
  3908    </udp>
       
  3909 
       
  3910 5.   Network Transport
       
  3911 
       
  3912    This document provides for the transmission of BLOAT datagrams over
       
  3913    two common families of physical layer transport.  Future RFCs will
       
  3914    address additional transports as routing vendors catch up to the
       
  3915    specification, and we begin to see BLOAT routed across the Internet
       
  3916    backbone.
       
  3917 
       
  3918 5.1. Ethernet
       
  3919 
       
  3920    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
  3921    exception that the type field of the Ethernet frame MUST contain the
       
  3922    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
  3923    be 0x3c 3f 78 6d 6c ("<?xml".)
       
  3924 
       
  3925 5.2. IEEE 802
       
  3926 
       
  3927    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
  3928    that the protocol type code for IPoXML is 0xBEEF.
       
  3929 
       
  3930 
       
  3931 
       
  3932 
       
  3933 
       
  3934 Kennedy                      Informational                      [Page 6]
       
  3935 
       
  3936 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  3937 
       
  3938 
       
  3939 6. Gatewaying over IP
       
  3940 
       
  3941    In order to facilitate the gradual introduction of BLOAT into the
       
  3942    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
  3943    gateway between networks that run BLOAT natively on their LANs.
       
  3944 
       
  3945 7. DTDs
       
  3946 
       
  3947    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
  3948    Network DTD (7.1.)
       
  3949 
       
  3950    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
  3951    [XML]) although it is understood that most IPoXML implementations
       
  3952    will not need to pull down the DTD, as it will normally be embedded
       
  3953    in the implementation, and presents something of a catch-22 if you
       
  3954    need to load part of your network protocol over the network.
       
  3955 
       
  3956 7.1.  IPoXML DTD
       
  3957 
       
  3958    <!--
       
  3959     DTD for IP over XML.
       
  3960     Refer to this DTD as:
       
  3961 
       
  3962     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  3963    -->
       
  3964    <!--
       
  3965     DTD data types:
       
  3966 
       
  3967       Digits      [0..9]+
       
  3968 
       
  3969       Precedence  "NetworkControl | InternetworkControl |
       
  3970                    CRITIC | FlashOverride | Flash | Immediate |
       
  3971                    Priority | Routine"
       
  3972 
       
  3973       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
  3974 
       
  3975       Class       [0..3]
       
  3976 
       
  3977       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
  3978                     Restricted | Secret | Top Secret | Reserved"
       
  3979 
       
  3980       Compartments [0..65535]
       
  3981 
       
  3982       Handling     [0..65535]
       
  3983 
       
  3984       TCC          [0..16777216]
       
  3985 
       
  3986    -->
       
  3987 
       
  3988 
       
  3989 
       
  3990 Kennedy                      Informational                      [Page 7]
       
  3991 
       
  3992 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  3993 
       
  3994 
       
  3995    <!ENTITY % Digits "CDATA">
       
  3996    <!ENTITY % Precedence "CDATA">
       
  3997    <!ENTITY % IP4Addr "CDATA">
       
  3998    <!ENTITY % Class "CDATA">
       
  3999    <!ENTITY % Sec "CDATA">
       
  4000    <!ENTITY % Compartments "CDATA">
       
  4001    <!ENTITY % Handling "CDATA">
       
  4002    <!ENTITY % TCC "CDATA">
       
  4003 
       
  4004    <!ELEMENT ip (header, payload)>
       
  4005 
       
  4006    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
  4007                     protocol, checksum, source, destination, options,
       
  4008                     padding)>
       
  4009    <!-- length of header in 32-bit words -->
       
  4010    <!ATTLIST header
       
  4011              length %Digits; #REQUIRED>
       
  4012 
       
  4013    <!ELEMENT version EMPTY>
       
  4014    <!-- ip version. SHOULD be "4" -->
       
  4015    <!ATTLIST version
       
  4016              value   %Digits;  #REQUIRED>
       
  4017 
       
  4018    <!ELEMENT tos EMPTY>
       
  4019    <!ATTLIST tos
       
  4020              precedence   %Precedence;    #REQUIRED
       
  4021              delay    (normal | low)  #REQUIRED
       
  4022              throughput   (normal | high) #REQUIRED
       
  4023              relibility   (normal | high) #REQUIRED
       
  4024              reserved     CDATA #FIXED "0">
       
  4025 
       
  4026    <!ELEMENT total.length EMPTY>
       
  4027    <!--
       
  4028     total length of datagram (header and payload) in octets, MUST be
       
  4029     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
  4030     ethernets).
       
  4031    -->
       
  4032    <!ATTLIST total.length
       
  4033              value %Digits; #REQUIRED>
       
  4034 
       
  4035    <!ELEMENT id EMPTY>
       
  4036    <!-- 0 <= id <= 65,535  -->
       
  4037    <!ATTLIST id
       
  4038              value %Digits; #REQUIRED>
       
  4039 
       
  4040    <!ELEMENT flags EMPTY>
       
  4041    <!-- df = don't fragment, mf = more fragments  -->
       
  4042    <!ATTLIST flags
       
  4043 
       
  4044 
       
  4045 
       
  4046 Kennedy                      Informational                      [Page 8]
       
  4047 
       
  4048 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  4049 
       
  4050 
       
  4051           reserved CDATA  #FIXED "0"
       
  4052           df (may|dont)   #REQUIRED
       
  4053           mf (last|more)  #REQUIRED>
       
  4054 
       
  4055    <!ELEMENT offset EMPTY>
       
  4056    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
  4057    <!ATTLIST offset
       
  4058              value %Digits; #REQUIRED>
       
  4059 
       
  4060    <!ELEMENT ttl EMPTY>
       
  4061    <!-- 0 <= ttl <= 255 -->
       
  4062    <!ATTLIST ttl
       
  4063              value %Digits; #REQUIRED>
       
  4064 
       
  4065    <!ELEMENT protocol EMPTY>
       
  4066    <!-- 0 <= protocol <= 255 (per IANA) -->
       
  4067    <!ATTLIST protocol
       
  4068              value %Digits; #REQUIRED>
       
  4069 
       
  4070    <!ELEMENT checksum EMPTY>
       
  4071    <!-- 0 <= checksum <= 65535 (over header only) -->
       
  4072    <!ATTLIST checksum
       
  4073              value %Digits; #REQUIRED>
       
  4074 
       
  4075    <!ELEMENT source EMPTY>
       
  4076    <!ATTLIST source
       
  4077              address %IP4Addr; #REQUIRED>
       
  4078 
       
  4079    <!ELEMENT destination EMPTY>
       
  4080    <!ATTLIST destination
       
  4081              address %IP4Addr; #REQUIRED>
       
  4082 
       
  4083    <!ELEMENT options ( end | noop | security | loose | strict | record
       
  4084                      | stream | timestamp )*>
       
  4085 
       
  4086    <!ELEMENT end EMPTY>
       
  4087    <!ATTLIST end
       
  4088              copied (0|1) #REQUIRED
       
  4089              class  CDATA #FIXED "0"
       
  4090              number CDATA #FIXED "0">
       
  4091 
       
  4092    <!ELEMENT noop EMPTY>
       
  4093    <!ATTLIST noop
       
  4094              copied (0|1) #REQUIRED
       
  4095              class  CDATA #FIXED "0"
       
  4096              number CDATA #FIXED "1">
       
  4097 
       
  4098    <!ELEMENT security EMPTY>
       
  4099 
       
  4100 
       
  4101 
       
  4102 Kennedy                      Informational                      [Page 9]
       
  4103 
       
  4104 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  4105 
       
  4106 
       
  4107    <!ATTLIST security
       
  4108              copied CDATA #FIXED "1"
       
  4109              class  CDATA #FIXED "0"
       
  4110              number CDATA #FIXED "2"
       
  4111              length CDATA #FIXED "11"
       
  4112              security %Sec; #REQUIRED
       
  4113              compartments %Compartments; #REQUIRED
       
  4114              handling %Handling; #REQUIRED
       
  4115              tcc %TCC; #REQUIRED>
       
  4116    <!ELEMENT loose (hop)+>
       
  4117    <!ATTLIST loose
       
  4118              copied CDATA #FIXED "1"
       
  4119              class  CDATA #FIXED "0"
       
  4120              number CDATA #FIXED "3"
       
  4121              length %Digits; #REQUIRED
       
  4122              pointer %Digits; #REQUIRED>
       
  4123 
       
  4124    <!ELEMENT hop EMPTY>
       
  4125    <!ATTLIST hop
       
  4126              address %IP4Addr; #REQUIRED>
       
  4127 
       
  4128    <!ELEMENT strict (hop)+>
       
  4129    <!ATTLIST strict
       
  4130              copied CDATA #FIXED "1"
       
  4131              class  CDATA #FIXED "0"
       
  4132              number CDATA #FIXED "9"
       
  4133              length %Digits; #REQUIRED
       
  4134              pointer %Digits; #REQUIRED>
       
  4135 
       
  4136    <!ELEMENT record (hop)+>
       
  4137    <!ATTLIST record
       
  4138              copied CDATA #FIXED "0"
       
  4139              class  CDATA #FIXED "0"
       
  4140              number CDATA #FIXED "7"
       
  4141              length %Digits; #REQUIRED
       
  4142              pointer %Digits; #REQUIRED>
       
  4143 
       
  4144    <!ELEMENT stream EMPTY>
       
  4145    <!-- 0 <= id <= 65,535 -->
       
  4146    <!ATTLIST stream
       
  4147              copied CDATA #FIXED "1"
       
  4148              class  CDATA #FIXED "0"
       
  4149              number CDATA #FIXED "8"
       
  4150              length CDATA #FIXED "4"
       
  4151              id %Digits; #REQUIRED>
       
  4152 
       
  4153    <!ELEMENT timestamp (tstamp)+>
       
  4154    <!-- 0 <= oflw <=15 -->
       
  4155 
       
  4156 
       
  4157 
       
  4158 Kennedy                      Informational                     [Page 10]
       
  4159 
       
  4160 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  4161 
       
  4162 
       
  4163    <!ATTLIST timestamp
       
  4164              copied CDATA #FIXED "0"
       
  4165              class  CDATA #FIXED "2"
       
  4166              number CDATA #FIXED "4"
       
  4167              length %Digits;  #REQUIRED
       
  4168              pointer %Digits; #REQUIRED
       
  4169              oflw %Digits;    #REQUIRED
       
  4170              flag (0 | 1 | 3)  #REQUIRED>
       
  4171 
       
  4172    <!ELEMENT tstamp EMPTY>
       
  4173    <!ATTLIST tstamp
       
  4174              time %Digits;   #REQUIRED
       
  4175              address %IP4Addr; #IMPLIED>
       
  4176    <!--
       
  4177        padding to bring header to 32-bit boundary.
       
  4178        pad MUST be "0"*
       
  4179     -->
       
  4180    <!ELEMENT padding EMPTY>
       
  4181    <!ATTLIST padding
       
  4182              pad CDATA #REQUIRED>
       
  4183 
       
  4184    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
  4185         by section 2.1 of this RFC -->
       
  4186    <!ELEMENT payload (CDATA)>
       
  4187 
       
  4188 7.2.  TCPoXML DTD
       
  4189 
       
  4190    <!--
       
  4191       DTD for TCP over XML.
       
  4192       Refer to this DTD as:
       
  4193 
       
  4194       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  4195    -->
       
  4196 
       
  4197    <!-- the pseudoheader is only included for checksum calculations -->
       
  4198    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
  4199 
       
  4200    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
  4201                          reserved, control, window, checksum, urgent,
       
  4202                          tcp.options, padding)>
       
  4203 
       
  4204    <!ELEMENT src EMPTY>
       
  4205    <!-- 0 <= port <= 65,535 -->
       
  4206    <!ATTLIST src
       
  4207              port %Digits; #REQUIRED>
       
  4208 
       
  4209    <!ELEMENT dest EMPTY>
       
  4210    <!-- 0 <= port <= 65,535 -->
       
  4211 
       
  4212 
       
  4213 
       
  4214 Kennedy                      Informational                     [Page 11]
       
  4215 
       
  4216 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  4217 
       
  4218 
       
  4219    <!ATTLIST dest
       
  4220              port %Digits; #REQUIRED>
       
  4221 
       
  4222    <!ELEMENT sequence EMPTY>
       
  4223    <!-- 0 <= number <= 4294967295 -->
       
  4224    <!ATTLIST sequence
       
  4225              number %Digits; #REQUIRED>
       
  4226 
       
  4227    <!ELEMENT acknowledgement EMPTY>
       
  4228    <!-- 0 <= number <= 4294967295 -->
       
  4229    <!ATTLIST acknowledgement
       
  4230              number %Digits; #REQUIRED>
       
  4231 
       
  4232    <!ELEMENT offset EMPTY>
       
  4233    <!-- 0 <= number <= 255 -->
       
  4234    <!ATTLIST offset
       
  4235              number %Digits; #REQUIRED>
       
  4236 
       
  4237    <!ELEMENT reserved EMPTY>
       
  4238    <!ATTLIST reserved
       
  4239              value CDATA #FIXED "0">
       
  4240 
       
  4241    <!ELEMENT control EMPTY>
       
  4242    <!ATTLIST control
       
  4243              urg (0|1) #IMPLIED
       
  4244              ack (0|1) #IMPLIED
       
  4245              psh (0|1) #IMPLIED
       
  4246              rst (0|1) #IMPLIED
       
  4247              syn (0|1) #IMPLIED
       
  4248              fin (0|1) #IMPLIED>
       
  4249 
       
  4250    <!ELEMENT window EMPTY>
       
  4251    <!-- 0 <= size <= 65,535 -->
       
  4252    <!ATTLIST window
       
  4253              size %Digits; #REQUIRED>
       
  4254 
       
  4255    <!--
       
  4256       checksum as in ip, but with
       
  4257       the following pseudo-header added into the tcp element:
       
  4258      -->
       
  4259    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
  4260                                tcp.length)>
       
  4261 
       
  4262    <!--
       
  4263       tcp header + data length in octets. does not include the size of
       
  4264 
       
  4265       the pseudoheader.
       
  4266     -->
       
  4267 
       
  4268 
       
  4269 
       
  4270 Kennedy                      Informational                     [Page 12]
       
  4271 
       
  4272 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  4273 
       
  4274 
       
  4275    <!ELEMENT tcp.length EMPTY>
       
  4276    <!ATTLIST tcp.length
       
  4277              value %Digits; #REQUIRED>
       
  4278 
       
  4279    <!ELEMENT urgent EMPTY>
       
  4280    <!-- 0 <= pointer <= 65,535 -->
       
  4281    <!ATTLIST urgent
       
  4282              pointer %Digits; #REQUIRED>
       
  4283 
       
  4284    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
  4285 
       
  4286    <!ELEMENT tcp.end EMPTY>
       
  4287    <!ATTLIST tcp.end
       
  4288              kind CDATA #FIXED "0">
       
  4289 
       
  4290    <!ELEMENT tcp.noop EMPTY>
       
  4291    <!ATTLIST tcp.noop
       
  4292              kind CDATA #FIXED "1">
       
  4293 
       
  4294    <!ELEMENT tcp.mss EMPTY>
       
  4295    <!ATTLIST tcp.mss
       
  4296              kind CDATA #FIXED "2"
       
  4297              length CDATA #FIXED "4"
       
  4298              size %Digits; #REQUIRED>
       
  4299 
       
  4300 7.3.  UDPoXML DTD
       
  4301 
       
  4302    <!--
       
  4303       DTD for UDP over XML.
       
  4304       Refer to this DTD as:
       
  4305 
       
  4306       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  4307    -->
       
  4308 
       
  4309    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
  4310 
       
  4311    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
  4312 
       
  4313    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
  4314                                udp.length)>
       
  4315 
       
  4316    <!--
       
  4317       udp header + data length in octets. does not include the size of
       
  4318       the pseudoheader.
       
  4319     -->
       
  4320    <!ELEMENT udp.length EMPTY>
       
  4321    <!ATTLIST udp.length
       
  4322              value %Digits; #REQUIRED>
       
  4323 
       
  4324 
       
  4325 
       
  4326 Kennedy                      Informational                     [Page 13]
       
  4327 
       
  4328 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  4329 
       
  4330 
       
  4331 8. Security Considerations
       
  4332 
       
  4333    XML, as a subset of SGML, has the same security considerations as
       
  4334    specified in SGML Media Types [RFC1874].  Security considerations
       
  4335    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
  4336    not attempt to correct for issues not related to message format.
       
  4337 
       
  4338 9.   References
       
  4339 
       
  4340    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
  4341                February 2002. (Work in Progress)
       
  4342 
       
  4343    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
  4344                August 1980.
       
  4345 
       
  4346    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
  4347                September 1981.
       
  4348 
       
  4349    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
  4350                793, September 1981.
       
  4351 
       
  4352    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
  4353                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
  4354 
       
  4355    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
  4356                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
  4357                43, RFC 1042, February 1988.
       
  4358 
       
  4359    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
  4360                Application and Support", RFC 1123, October 1989.
       
  4361 
       
  4362    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
  4363                1995.
       
  4364 
       
  4365    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
  4366                October 1996.
       
  4367 
       
  4368    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
  4369                Extensions (MIME) Part One: Format of Internet Message
       
  4370                Bodies", RFC 2045, November 1996.
       
  4371 
       
  4372    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
  4373                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
  4374 
       
  4375    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
  4376                10646", RFC 2279, January 1998.
       
  4377 
       
  4378 
       
  4379 
       
  4380 
       
  4381 
       
  4382 Kennedy                      Informational                     [Page 14]
       
  4383 
       
  4384 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  4385 
       
  4386 
       
  4387    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
  4388                (IPv6) Specification", RFC 2460, December 1998.
       
  4389 
       
  4390    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
  4391                RFC 3080, March 2001.
       
  4392 
       
  4393    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
  4394                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
  4395                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
  4396                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
  4397 
       
  4398    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
  4399                Markup Language (XML)" World Wide Web Consortium
       
  4400                Recommendation REC- xml-19980210.
       
  4401                http://www.w3.org/TR/1998/REC-xml-19980210
       
  4402 
       
  4403 10.  Author's Address
       
  4404 
       
  4405    Hugh Kennedy
       
  4406    Mimezine
       
  4407    1060 West Addison
       
  4408    Chicago, IL 60613
       
  4409    USA
       
  4410 
       
  4411    EMail: kennedyh@engin.umich.edu
       
  4412 
       
  4413 
       
  4414 
       
  4415 
       
  4416 
       
  4417 
       
  4418 
       
  4419 
       
  4420 
       
  4421 
       
  4422 
       
  4423 
       
  4424 
       
  4425 
       
  4426 
       
  4427 
       
  4428 
       
  4429 
       
  4430 
       
  4431 
       
  4432 
       
  4433 
       
  4434 
       
  4435 
       
  4436 
       
  4437 
       
  4438 Kennedy                      Informational                     [Page 15]
       
  4439 
       
  4440 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  4441 
       
  4442 
       
  4443 11.  Full Copyright Statement
       
  4444 
       
  4445    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  4446 
       
  4447    This document and translations of it may be copied and furnished to
       
  4448    others, and derivative works that comment on or otherwise explain it
       
  4449    or assist in its implementation may be prepared, copied, published
       
  4450    and distributed, in whole or in part, without restriction of any
       
  4451    kind, provided that the above copyright notice and this paragraph are
       
  4452    included on all such copies and derivative works.  However, this
       
  4453    document itself may not be modified in any way, such as by removing
       
  4454    the copyright notice or references to the Internet Society or other
       
  4455    Internet organizations, except as needed for the purpose of
       
  4456    developing Internet standards in which case the procedures for
       
  4457    copyrights defined in the Internet Standards process must be
       
  4458    followed, or as required to translate it into languages other than
       
  4459    English.
       
  4460 
       
  4461    The limited permissions granted above are perpetual and will not be
       
  4462    revoked by the Internet Society or its successors or assigns.
       
  4463 
       
  4464    This document and the information contained herein is provided on an
       
  4465    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
  4466    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
  4467    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
  4468    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
  4469    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
  4470 
       
  4471 Acknowledgement
       
  4472 
       
  4473    Funding for the RFC Editor function is currently provided by the
       
  4474    Internet Society.
       
  4475 
       
  4476 
       
  4477 
       
  4478 
       
  4479 
       
  4480 
       
  4481 
       
  4482 
       
  4483 
       
  4484 
       
  4485 
       
  4486 
       
  4487 
       
  4488 
       
  4489 
       
  4490 
       
  4491 
       
  4492 
       
  4493 
       
  4494 Kennedy                      Informational                     [Page 16]
       
  4495 
       
  4496 
       
  4497 
       
  4498 
       
  4499 
       
  4500 
       
  4501 
       
  4502 Network Working Group                                         H. Kennedy
       
  4503 Request for Comments: 3252                                      Mimezine
       
  4504 Category: Informational                                     1 April 2002
       
  4505 
       
  4506 
       
  4507                  Binary Lexical Octet Ad-hoc Transport
       
  4508 
       
  4509 Status of this Memo
       
  4510 
       
  4511    This memo provides information for the Internet community.  It does
       
  4512    not specify an Internet standard of any kind.  Distribution of this
       
  4513    memo is unlimited.
       
  4514 
       
  4515 Copyright Notice
       
  4516 
       
  4517    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  4518 
       
  4519 Abstract
       
  4520 
       
  4521    This document defines a reformulation of IP and two transport layer
       
  4522    protocols (TCP and UDP) as XML applications.
       
  4523 
       
  4524 1.   Introduction
       
  4525 
       
  4526 1.1. Overview
       
  4527 
       
  4528    This document describes the Binary Lexical Octet Ad-hoc Transport
       
  4529    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
  4530    (IP [RFC791]), and two associated transport layer protocols (TCP
       
  4531    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
  4532    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
  4533    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
  4534    across the public Internet.
       
  4535 
       
  4536 1.2. Motivation
       
  4537 
       
  4538    The wild popularity of XML as a basis for application-level protocols
       
  4539    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
  4540    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
  4541    investigation into the possibility of extending the use of XML in the
       
  4542    protocol stack.  Using XML at both the transport and network layer in
       
  4543    addition to the application layer would provide for an amazing amount
       
  4544    of power and flexibility while removing dependencies on proprietary
       
  4545    and hard-to-understand binary protocols.  This protocol unification
       
  4546    would also allow applications to use a single XML parser for all
       
  4547    aspects of their operation, eliminating developer time spent figuring
       
  4548    out the intricacies of each new protocol, and moving the hard work of
       
  4549 
       
  4550 
       
  4551 
       
  4552 
       
  4553 Kennedy                      Informational                      [Page 1]
       
  4554 
       
  4555 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  4556 
       
  4557 
       
  4558    parsing to the XML toolset.  The use of XML also mitigates concerns
       
  4559    over "network vs. host" byte ordering which is at the root of many
       
  4560    network application bugs.
       
  4561 
       
  4562 1.3. Relation to Existing Protocols
       
  4563 
       
  4564    The reformulations specified in this RFC follow as closely as
       
  4565    possible the spirit of the RFCs on which they are based, and so MAY
       
  4566    contain elements or attributes that would not be needed in a pure
       
  4567    reworking (e.g. length attributes, which are implicit in XML.)
       
  4568 
       
  4569    The layering of network and transport protocols are maintained in
       
  4570    this RFC despite the optimizations that could be made if the line
       
  4571    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
  4572    element in the DTD) in order to foster future use of this protocol as
       
  4573    a basis for reformulating other protocols (such as ICMP.)
       
  4574 
       
  4575    Other than the encoding, the behavioral aspects of each of the
       
  4576    existing protocols remain unchanged.  Routing, address spaces, TCP
       
  4577    congestion control, etc. behave as specified in the extant standards.
       
  4578    Adapting to new standards and experimental algorithm heuristics for
       
  4579    improving performance will become much easier once the move to BLOAT
       
  4580    has been completed.
       
  4581 
       
  4582 1.4. Requirement Levels
       
  4583 
       
  4584    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
  4585    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
  4586    document are to be interpreted as described in BCP 14, RFC 2119
       
  4587    [RFC2119].
       
  4588 
       
  4589 2.   IPoXML
       
  4590 
       
  4591    This protocol MUST be implemented to be compliant with this RFC.
       
  4592    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
  4593    (section 3.) and higher-level application protocols.
       
  4594 
       
  4595    The DTD for this document type can be found in section 7.1.
       
  4596 
       
  4597    The routing of IPoXML can be easily implemented on hosts with an XML
       
  4598    parser, as the regular structure lends itself handily to parsing and
       
  4599    validation of the document/datagram and then processing the
       
  4600    destination address, TTL, and checksum before sending it on to its
       
  4601    next-hop.
       
  4602 
       
  4603    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
  4604    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
  4605    would have exceeded the 1500 byte Ethernet MTU.
       
  4606 
       
  4607 
       
  4608 
       
  4609 Kennedy                      Informational                      [Page 2]
       
  4610 
       
  4611 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  4612 
       
  4613 
       
  4614    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
  4615    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
  4616    formed and include the XMLDecl.
       
  4617 
       
  4618 2.1. IP Description
       
  4619 
       
  4620    A number of items have changed (for the better) from the original IP
       
  4621    specification.  Bit-masks, where present have been converted into
       
  4622    human-readable values.  IP addresses are listed in their dotted-
       
  4623    decimal notation [RFC1123].  Length and checksum values are present
       
  4624    as decimal integers.
       
  4625 
       
  4626    To calculate the length and checksum fields of the IP element, a
       
  4627    canonicalized form of the element MUST be used.  The canonical form
       
  4628    SHALL have no whitespace (including newline characters) between
       
  4629    elements and only one space character between attributes.  There
       
  4630    SHALL NOT be a space following the last attribute in an element.
       
  4631 
       
  4632    An iterative method SHOULD be used to calculate checksums, as the
       
  4633    length field will vary based on the size of the checksum.
       
  4634 
       
  4635    The payload element bears special attention.  Due to the character
       
  4636    set restrictions of XML, the payload of IP datagrams (which MAY
       
  4637    contain arbitrary data) MUST be encoded for transport. This RFC
       
  4638    REQUIRES the contents of the payload to be encoded in the base-64
       
  4639    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
  4640    encoded output MUST be wrapped on 76-character lines.
       
  4641 
       
  4642 
       
  4643 
       
  4644 
       
  4645 
       
  4646 
       
  4647 
       
  4648 
       
  4649 
       
  4650 
       
  4651 
       
  4652 
       
  4653 
       
  4654 
       
  4655 
       
  4656 
       
  4657 
       
  4658 
       
  4659 
       
  4660 
       
  4661 
       
  4662 
       
  4663 
       
  4664 
       
  4665 Kennedy                      Informational                      [Page 3]
       
  4666 
       
  4667 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  4668 
       
  4669 
       
  4670 2.2. Example Datagram
       
  4671 
       
  4672    The following is an example IPoXML datagram with an empty payload:
       
  4673 
       
  4674    <?xml version="1.0" encoding="UTF-8"?>
       
  4675    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  4676    <ip>
       
  4677    <header length="474">
       
  4678    <version value="4"/>
       
  4679    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
  4680         relibility="Normal" reserved="0"/>
       
  4681    <total.length value="461"/>
       
  4682    <id value="1"/>
       
  4683    <flags reserved="0" df="dont" mf="last"/>
       
  4684    <offset value="0"/>
       
  4685    <ttl value="255"/>
       
  4686    <protocol value="6"/>
       
  4687    <checksum value="8707"/>
       
  4688    <source address="10.0.0.22"/>
       
  4689    <destination address="10.0.0.1"/>
       
  4690    <options>
       
  4691    <end copied="0" class="0" number="0"/>
       
  4692    </options>
       
  4693    <padding pad="0"/>
       
  4694    </header>
       
  4695    <payload>
       
  4696    </payload>
       
  4697    </ip>
       
  4698 
       
  4699 3.   TCPoXML
       
  4700 
       
  4701    This protocol MUST be implemented to be compliant with this RFC.  The
       
  4702    DTD for this document type can be found in section 7.2.
       
  4703 
       
  4704 3.1. TCP Description
       
  4705 
       
  4706    A number of items have changed from the original TCP specification.
       
  4707    Bit-masks, where present have been converted into human-readable
       
  4708    values.  Length and checksum and port values are present as decimal
       
  4709    integers.
       
  4710 
       
  4711    To calculate the length and checksum fields of the TCP element, a
       
  4712    canonicalized form of the element MUST be used as in section 2.1.
       
  4713 
       
  4714    An iterative method SHOULD be used to calculate checksums as in
       
  4715    section 2.1.
       
  4716 
       
  4717    The payload element MUST be encoded as in section 2.1.
       
  4718 
       
  4719 
       
  4720 
       
  4721 Kennedy                      Informational                      [Page 4]
       
  4722 
       
  4723 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  4724 
       
  4725 
       
  4726    The TCP offset element was expanded to a maximum of 255 from 16 to
       
  4727    allow for the increased size of the header in XML.
       
  4728 
       
  4729    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  4730    as well as the <!DOCTYPE> declaration.
       
  4731 
       
  4732 3.2. Example Datagram
       
  4733 
       
  4734    The following is an example TCPoXML datagram with an empty payload:
       
  4735 
       
  4736    <?xml version="1.0" encoding="UTF-8"?>
       
  4737    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  4738    <tcp>
       
  4739    <tcp.header>
       
  4740    <src port="31415"/>
       
  4741    <dest port="42424"/>
       
  4742    <sequence number="322622954"/>
       
  4743    <acknowledgement number="689715995"/>
       
  4744    <offset number=""/>
       
  4745    <reserved value="0"/>
       
  4746    <control syn="1" ack="1"/>
       
  4747    <window size="1"/>
       
  4748    <urgent pointer="0"/>
       
  4749    <checksum value="2988"/>
       
  4750    <tcp.options>
       
  4751    <tcp.end kind="0"/>
       
  4752    </tcp.options>
       
  4753    <padding pad="0"/>
       
  4754    </tcp.header>
       
  4755    <payload>
       
  4756    </payload>
       
  4757    </tcp>
       
  4758 
       
  4759 4.   UDPoXML
       
  4760 
       
  4761    This protocol MUST be implemented to be compliant with this RFC.  The
       
  4762    DTD for this document type can be found in section 7.3.
       
  4763 
       
  4764 4.1. UDP Description
       
  4765 
       
  4766    A number of items have changed from the original UDP specification.
       
  4767    Bit-masks, where present have been converted into human-readable
       
  4768    values.  Length and checksum and port values are present as decimal
       
  4769    integers.
       
  4770 
       
  4771 
       
  4772 
       
  4773 
       
  4774 
       
  4775 
       
  4776 
       
  4777 Kennedy                      Informational                      [Page 5]
       
  4778 
       
  4779 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  4780 
       
  4781 
       
  4782    To calculate the length and checksum fields of the UDP element, a
       
  4783    canonicalized form of the element MUST be used as in section 2.1.  An
       
  4784    iterative method SHOULD be used to calculate checksums as in section
       
  4785    2.1.
       
  4786 
       
  4787    The payload element MUST be encoded as in section 2.1.
       
  4788 
       
  4789    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  4790    as well as the <!DOCTYPE> declaration.
       
  4791 
       
  4792 4.2. Example Datagram
       
  4793 
       
  4794    The following is an example UDPoXML datagram with an empty payload:
       
  4795 
       
  4796    <?xml version="1.0" encoding="UTF-8"?>
       
  4797    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  4798    <udp>
       
  4799    <udp.header>
       
  4800    <src port="31415"/>
       
  4801    <dest port="42424"/>
       
  4802    <udp.length value="143"/>
       
  4803    <checksum value="2988"/>
       
  4804    </udp.header>
       
  4805    <payload>
       
  4806    </payload>
       
  4807    </udp>
       
  4808 
       
  4809 5.   Network Transport
       
  4810 
       
  4811    This document provides for the transmission of BLOAT datagrams over
       
  4812    two common families of physical layer transport.  Future RFCs will
       
  4813    address additional transports as routing vendors catch up to the
       
  4814    specification, and we begin to see BLOAT routed across the Internet
       
  4815    backbone.
       
  4816 
       
  4817 5.1. Ethernet
       
  4818 
       
  4819    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
  4820    exception that the type field of the Ethernet frame MUST contain the
       
  4821    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
  4822    be 0x3c 3f 78 6d 6c ("<?xml".)
       
  4823 
       
  4824 5.2. IEEE 802
       
  4825 
       
  4826    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
  4827    that the protocol type code for IPoXML is 0xBEEF.
       
  4828 
       
  4829 
       
  4830 
       
  4831 
       
  4832 
       
  4833 Kennedy                      Informational                      [Page 6]
       
  4834 
       
  4835 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  4836 
       
  4837 
       
  4838 6. Gatewaying over IP
       
  4839 
       
  4840    In order to facilitate the gradual introduction of BLOAT into the
       
  4841    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
  4842    gateway between networks that run BLOAT natively on their LANs.
       
  4843 
       
  4844 7. DTDs
       
  4845 
       
  4846    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
  4847    Network DTD (7.1.)
       
  4848 
       
  4849    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
  4850    [XML]) although it is understood that most IPoXML implementations
       
  4851    will not need to pull down the DTD, as it will normally be embedded
       
  4852    in the implementation, and presents something of a catch-22 if you
       
  4853    need to load part of your network protocol over the network.
       
  4854 
       
  4855 7.1.  IPoXML DTD
       
  4856 
       
  4857    <!--
       
  4858     DTD for IP over XML.
       
  4859     Refer to this DTD as:
       
  4860 
       
  4861     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  4862    -->
       
  4863    <!--
       
  4864     DTD data types:
       
  4865 
       
  4866       Digits      [0..9]+
       
  4867 
       
  4868       Precedence  "NetworkControl | InternetworkControl |
       
  4869                    CRITIC | FlashOverride | Flash | Immediate |
       
  4870                    Priority | Routine"
       
  4871 
       
  4872       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
  4873 
       
  4874       Class       [0..3]
       
  4875 
       
  4876       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
  4877                     Restricted | Secret | Top Secret | Reserved"
       
  4878 
       
  4879       Compartments [0..65535]
       
  4880 
       
  4881       Handling     [0..65535]
       
  4882 
       
  4883       TCC          [0..16777216]
       
  4884 
       
  4885    -->
       
  4886 
       
  4887 
       
  4888 
       
  4889 Kennedy                      Informational                      [Page 7]
       
  4890 
       
  4891 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  4892 
       
  4893 
       
  4894    <!ENTITY % Digits "CDATA">
       
  4895    <!ENTITY % Precedence "CDATA">
       
  4896    <!ENTITY % IP4Addr "CDATA">
       
  4897    <!ENTITY % Class "CDATA">
       
  4898    <!ENTITY % Sec "CDATA">
       
  4899    <!ENTITY % Compartments "CDATA">
       
  4900    <!ENTITY % Handling "CDATA">
       
  4901    <!ENTITY % TCC "CDATA">
       
  4902 
       
  4903    <!ELEMENT ip (header, payload)>
       
  4904 
       
  4905    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
  4906                     protocol, checksum, source, destination, options,
       
  4907                     padding)>
       
  4908    <!-- length of header in 32-bit words -->
       
  4909    <!ATTLIST header
       
  4910              length %Digits; #REQUIRED>
       
  4911 
       
  4912    <!ELEMENT version EMPTY>
       
  4913    <!-- ip version. SHOULD be "4" -->
       
  4914    <!ATTLIST version
       
  4915              value   %Digits;  #REQUIRED>
       
  4916 
       
  4917    <!ELEMENT tos EMPTY>
       
  4918    <!ATTLIST tos
       
  4919              precedence   %Precedence;    #REQUIRED
       
  4920              delay    (normal | low)  #REQUIRED
       
  4921              throughput   (normal | high) #REQUIRED
       
  4922              relibility   (normal | high) #REQUIRED
       
  4923              reserved     CDATA #FIXED "0">
       
  4924 
       
  4925    <!ELEMENT total.length EMPTY>
       
  4926    <!--
       
  4927     total length of datagram (header and payload) in octets, MUST be
       
  4928     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
  4929     ethernets).
       
  4930    -->
       
  4931    <!ATTLIST total.length
       
  4932              value %Digits; #REQUIRED>
       
  4933 
       
  4934    <!ELEMENT id EMPTY>
       
  4935    <!-- 0 <= id <= 65,535  -->
       
  4936    <!ATTLIST id
       
  4937              value %Digits; #REQUIRED>
       
  4938 
       
  4939    <!ELEMENT flags EMPTY>
       
  4940    <!-- df = don't fragment, mf = more fragments  -->
       
  4941    <!ATTLIST flags
       
  4942 
       
  4943 
       
  4944 
       
  4945 Kennedy                      Informational                      [Page 8]
       
  4946 
       
  4947 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  4948 
       
  4949 
       
  4950           reserved CDATA  #FIXED "0"
       
  4951           df (may|dont)   #REQUIRED
       
  4952           mf (last|more)  #REQUIRED>
       
  4953 
       
  4954    <!ELEMENT offset EMPTY>
       
  4955    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
  4956    <!ATTLIST offset
       
  4957              value %Digits; #REQUIRED>
       
  4958 
       
  4959    <!ELEMENT ttl EMPTY>
       
  4960    <!-- 0 <= ttl <= 255 -->
       
  4961    <!ATTLIST ttl
       
  4962              value %Digits; #REQUIRED>
       
  4963 
       
  4964    <!ELEMENT protocol EMPTY>
       
  4965    <!-- 0 <= protocol <= 255 (per IANA) -->
       
  4966    <!ATTLIST protocol
       
  4967              value %Digits; #REQUIRED>
       
  4968 
       
  4969    <!ELEMENT checksum EMPTY>
       
  4970    <!-- 0 <= checksum <= 65535 (over header only) -->
       
  4971    <!ATTLIST checksum
       
  4972              value %Digits; #REQUIRED>
       
  4973 
       
  4974    <!ELEMENT source EMPTY>
       
  4975    <!ATTLIST source
       
  4976              address %IP4Addr; #REQUIRED>
       
  4977 
       
  4978    <!ELEMENT destination EMPTY>
       
  4979    <!ATTLIST destination
       
  4980              address %IP4Addr; #REQUIRED>
       
  4981 
       
  4982    <!ELEMENT options ( end | noop | security | loose | strict | record
       
  4983                      | stream | timestamp )*>
       
  4984 
       
  4985    <!ELEMENT end EMPTY>
       
  4986    <!ATTLIST end
       
  4987              copied (0|1) #REQUIRED
       
  4988              class  CDATA #FIXED "0"
       
  4989              number CDATA #FIXED "0">
       
  4990 
       
  4991    <!ELEMENT noop EMPTY>
       
  4992    <!ATTLIST noop
       
  4993              copied (0|1) #REQUIRED
       
  4994              class  CDATA #FIXED "0"
       
  4995              number CDATA #FIXED "1">
       
  4996 
       
  4997    <!ELEMENT security EMPTY>
       
  4998 
       
  4999 
       
  5000 
       
  5001 Kennedy                      Informational                      [Page 9]
       
  5002 
       
  5003 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  5004 
       
  5005 
       
  5006    <!ATTLIST security
       
  5007              copied CDATA #FIXED "1"
       
  5008              class  CDATA #FIXED "0"
       
  5009              number CDATA #FIXED "2"
       
  5010              length CDATA #FIXED "11"
       
  5011              security %Sec; #REQUIRED
       
  5012              compartments %Compartments; #REQUIRED
       
  5013              handling %Handling; #REQUIRED
       
  5014              tcc %TCC; #REQUIRED>
       
  5015    <!ELEMENT loose (hop)+>
       
  5016    <!ATTLIST loose
       
  5017              copied CDATA #FIXED "1"
       
  5018              class  CDATA #FIXED "0"
       
  5019              number CDATA #FIXED "3"
       
  5020              length %Digits; #REQUIRED
       
  5021              pointer %Digits; #REQUIRED>
       
  5022 
       
  5023    <!ELEMENT hop EMPTY>
       
  5024    <!ATTLIST hop
       
  5025              address %IP4Addr; #REQUIRED>
       
  5026 
       
  5027    <!ELEMENT strict (hop)+>
       
  5028    <!ATTLIST strict
       
  5029              copied CDATA #FIXED "1"
       
  5030              class  CDATA #FIXED "0"
       
  5031              number CDATA #FIXED "9"
       
  5032              length %Digits; #REQUIRED
       
  5033              pointer %Digits; #REQUIRED>
       
  5034 
       
  5035    <!ELEMENT record (hop)+>
       
  5036    <!ATTLIST record
       
  5037              copied CDATA #FIXED "0"
       
  5038              class  CDATA #FIXED "0"
       
  5039              number CDATA #FIXED "7"
       
  5040              length %Digits; #REQUIRED
       
  5041              pointer %Digits; #REQUIRED>
       
  5042 
       
  5043    <!ELEMENT stream EMPTY>
       
  5044    <!-- 0 <= id <= 65,535 -->
       
  5045    <!ATTLIST stream
       
  5046              copied CDATA #FIXED "1"
       
  5047              class  CDATA #FIXED "0"
       
  5048              number CDATA #FIXED "8"
       
  5049              length CDATA #FIXED "4"
       
  5050              id %Digits; #REQUIRED>
       
  5051 
       
  5052    <!ELEMENT timestamp (tstamp)+>
       
  5053    <!-- 0 <= oflw <=15 -->
       
  5054 
       
  5055 
       
  5056 
       
  5057 Kennedy                      Informational                     [Page 10]
       
  5058 
       
  5059 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  5060 
       
  5061 
       
  5062    <!ATTLIST timestamp
       
  5063              copied CDATA #FIXED "0"
       
  5064              class  CDATA #FIXED "2"
       
  5065              number CDATA #FIXED "4"
       
  5066              length %Digits;  #REQUIRED
       
  5067              pointer %Digits; #REQUIRED
       
  5068              oflw %Digits;    #REQUIRED
       
  5069              flag (0 | 1 | 3)  #REQUIRED>
       
  5070 
       
  5071    <!ELEMENT tstamp EMPTY>
       
  5072    <!ATTLIST tstamp
       
  5073              time %Digits;   #REQUIRED
       
  5074              address %IP4Addr; #IMPLIED>
       
  5075    <!--
       
  5076        padding to bring header to 32-bit boundary.
       
  5077        pad MUST be "0"*
       
  5078     -->
       
  5079    <!ELEMENT padding EMPTY>
       
  5080    <!ATTLIST padding
       
  5081              pad CDATA #REQUIRED>
       
  5082 
       
  5083    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
  5084         by section 2.1 of this RFC -->
       
  5085    <!ELEMENT payload (CDATA)>
       
  5086 
       
  5087 7.2.  TCPoXML DTD
       
  5088 
       
  5089    <!--
       
  5090       DTD for TCP over XML.
       
  5091       Refer to this DTD as:
       
  5092 
       
  5093       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  5094    -->
       
  5095 
       
  5096    <!-- the pseudoheader is only included for checksum calculations -->
       
  5097    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
  5098 
       
  5099    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
  5100                          reserved, control, window, checksum, urgent,
       
  5101                          tcp.options, padding)>
       
  5102 
       
  5103    <!ELEMENT src EMPTY>
       
  5104    <!-- 0 <= port <= 65,535 -->
       
  5105    <!ATTLIST src
       
  5106              port %Digits; #REQUIRED>
       
  5107 
       
  5108    <!ELEMENT dest EMPTY>
       
  5109    <!-- 0 <= port <= 65,535 -->
       
  5110 
       
  5111 
       
  5112 
       
  5113 Kennedy                      Informational                     [Page 11]
       
  5114 
       
  5115 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  5116 
       
  5117 
       
  5118    <!ATTLIST dest
       
  5119              port %Digits; #REQUIRED>
       
  5120 
       
  5121    <!ELEMENT sequence EMPTY>
       
  5122    <!-- 0 <= number <= 4294967295 -->
       
  5123    <!ATTLIST sequence
       
  5124              number %Digits; #REQUIRED>
       
  5125 
       
  5126    <!ELEMENT acknowledgement EMPTY>
       
  5127    <!-- 0 <= number <= 4294967295 -->
       
  5128    <!ATTLIST acknowledgement
       
  5129              number %Digits; #REQUIRED>
       
  5130 
       
  5131    <!ELEMENT offset EMPTY>
       
  5132    <!-- 0 <= number <= 255 -->
       
  5133    <!ATTLIST offset
       
  5134              number %Digits; #REQUIRED>
       
  5135 
       
  5136    <!ELEMENT reserved EMPTY>
       
  5137    <!ATTLIST reserved
       
  5138              value CDATA #FIXED "0">
       
  5139 
       
  5140    <!ELEMENT control EMPTY>
       
  5141    <!ATTLIST control
       
  5142              urg (0|1) #IMPLIED
       
  5143              ack (0|1) #IMPLIED
       
  5144              psh (0|1) #IMPLIED
       
  5145              rst (0|1) #IMPLIED
       
  5146              syn (0|1) #IMPLIED
       
  5147              fin (0|1) #IMPLIED>
       
  5148 
       
  5149    <!ELEMENT window EMPTY>
       
  5150    <!-- 0 <= size <= 65,535 -->
       
  5151    <!ATTLIST window
       
  5152              size %Digits; #REQUIRED>
       
  5153 
       
  5154    <!--
       
  5155       checksum as in ip, but with
       
  5156       the following pseudo-header added into the tcp element:
       
  5157      -->
       
  5158    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
  5159                                tcp.length)>
       
  5160 
       
  5161    <!--
       
  5162       tcp header + data length in octets. does not include the size of
       
  5163 
       
  5164       the pseudoheader.
       
  5165     -->
       
  5166 
       
  5167 
       
  5168 
       
  5169 Kennedy                      Informational                     [Page 12]
       
  5170 
       
  5171 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  5172 
       
  5173 
       
  5174    <!ELEMENT tcp.length EMPTY>
       
  5175    <!ATTLIST tcp.length
       
  5176              value %Digits; #REQUIRED>
       
  5177 
       
  5178    <!ELEMENT urgent EMPTY>
       
  5179    <!-- 0 <= pointer <= 65,535 -->
       
  5180    <!ATTLIST urgent
       
  5181              pointer %Digits; #REQUIRED>
       
  5182 
       
  5183    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
  5184 
       
  5185    <!ELEMENT tcp.end EMPTY>
       
  5186    <!ATTLIST tcp.end
       
  5187              kind CDATA #FIXED "0">
       
  5188 
       
  5189    <!ELEMENT tcp.noop EMPTY>
       
  5190    <!ATTLIST tcp.noop
       
  5191              kind CDATA #FIXED "1">
       
  5192 
       
  5193    <!ELEMENT tcp.mss EMPTY>
       
  5194    <!ATTLIST tcp.mss
       
  5195              kind CDATA #FIXED "2"
       
  5196              length CDATA #FIXED "4"
       
  5197              size %Digits; #REQUIRED>
       
  5198 
       
  5199 7.3.  UDPoXML DTD
       
  5200 
       
  5201    <!--
       
  5202       DTD for UDP over XML.
       
  5203       Refer to this DTD as:
       
  5204 
       
  5205       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  5206    -->
       
  5207 
       
  5208    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
  5209 
       
  5210    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
  5211 
       
  5212    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
  5213                                udp.length)>
       
  5214 
       
  5215    <!--
       
  5216       udp header + data length in octets. does not include the size of
       
  5217       the pseudoheader.
       
  5218     -->
       
  5219    <!ELEMENT udp.length EMPTY>
       
  5220    <!ATTLIST udp.length
       
  5221              value %Digits; #REQUIRED>
       
  5222 
       
  5223 
       
  5224 
       
  5225 Kennedy                      Informational                     [Page 13]
       
  5226 
       
  5227 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  5228 
       
  5229 
       
  5230 8. Security Considerations
       
  5231 
       
  5232    XML, as a subset of SGML, has the same security considerations as
       
  5233    specified in SGML Media Types [RFC1874].  Security considerations
       
  5234    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
  5235    not attempt to correct for issues not related to message format.
       
  5236 
       
  5237 9.   References
       
  5238 
       
  5239    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
  5240                February 2002. (Work in Progress)
       
  5241 
       
  5242    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
  5243                August 1980.
       
  5244 
       
  5245    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
  5246                September 1981.
       
  5247 
       
  5248    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
  5249                793, September 1981.
       
  5250 
       
  5251    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
  5252                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
  5253 
       
  5254    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
  5255                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
  5256                43, RFC 1042, February 1988.
       
  5257 
       
  5258    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
  5259                Application and Support", RFC 1123, October 1989.
       
  5260 
       
  5261    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
  5262                1995.
       
  5263 
       
  5264    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
  5265                October 1996.
       
  5266 
       
  5267    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
  5268                Extensions (MIME) Part One: Format of Internet Message
       
  5269                Bodies", RFC 2045, November 1996.
       
  5270 
       
  5271    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
  5272                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
  5273 
       
  5274    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
  5275                10646", RFC 2279, January 1998.
       
  5276 
       
  5277 
       
  5278 
       
  5279 
       
  5280 
       
  5281 Kennedy                      Informational                     [Page 14]
       
  5282 
       
  5283 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  5284 
       
  5285 
       
  5286    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
  5287                (IPv6) Specification", RFC 2460, December 1998.
       
  5288 
       
  5289    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
  5290                RFC 3080, March 2001.
       
  5291 
       
  5292    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
  5293                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
  5294                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
  5295                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
  5296 
       
  5297    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
  5298                Markup Language (XML)" World Wide Web Consortium
       
  5299                Recommendation REC- xml-19980210.
       
  5300                http://www.w3.org/TR/1998/REC-xml-19980210
       
  5301 
       
  5302 10.  Author's Address
       
  5303 
       
  5304    Hugh Kennedy
       
  5305    Mimezine
       
  5306    1060 West Addison
       
  5307    Chicago, IL 60613
       
  5308    USA
       
  5309 
       
  5310    EMail: kennedyh@engin.umich.edu
       
  5311 
       
  5312 
       
  5313 
       
  5314 
       
  5315 
       
  5316 
       
  5317 
       
  5318 
       
  5319 
       
  5320 
       
  5321 
       
  5322 
       
  5323 
       
  5324 
       
  5325 
       
  5326 
       
  5327 
       
  5328 
       
  5329 
       
  5330 
       
  5331 
       
  5332 
       
  5333 
       
  5334 
       
  5335 
       
  5336 
       
  5337 Kennedy                      Informational                     [Page 15]
       
  5338 
       
  5339 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  5340 
       
  5341 
       
  5342 11.  Full Copyright Statement
       
  5343 
       
  5344    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  5345 
       
  5346    This document and translations of it may be copied and furnished to
       
  5347    others, and derivative works that comment on or otherwise explain it
       
  5348    or assist in its implementation may be prepared, copied, published
       
  5349    and distributed, in whole or in part, without restriction of any
       
  5350    kind, provided that the above copyright notice and this paragraph are
       
  5351    included on all such copies and derivative works.  However, this
       
  5352    document itself may not be modified in any way, such as by removing
       
  5353    the copyright notice or references to the Internet Society or other
       
  5354    Internet organizations, except as needed for the purpose of
       
  5355    developing Internet standards in which case the procedures for
       
  5356    copyrights defined in the Internet Standards process must be
       
  5357    followed, or as required to translate it into languages other than
       
  5358    English.
       
  5359 
       
  5360    The limited permissions granted above are perpetual and will not be
       
  5361    revoked by the Internet Society or its successors or assigns.
       
  5362 
       
  5363    This document and the information contained herein is provided on an
       
  5364    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
  5365    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
  5366    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
  5367    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
  5368    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
  5369 
       
  5370 Acknowledgement
       
  5371 
       
  5372    Funding for the RFC Editor function is currently provided by the
       
  5373    Internet Society.
       
  5374 
       
  5375 
       
  5376 
       
  5377 
       
  5378 
       
  5379 
       
  5380 
       
  5381 
       
  5382 
       
  5383 
       
  5384 
       
  5385 
       
  5386 
       
  5387 
       
  5388 
       
  5389 
       
  5390 
       
  5391 
       
  5392 
       
  5393 Kennedy                      Informational                     [Page 16]
       
  5394 
       
  5395 
       
  5396 
       
  5397 
       
  5398 
       
  5399 
       
  5400 
       
  5401 Network Working Group                                         H. Kennedy
       
  5402 Request for Comments: 3252                                      Mimezine
       
  5403 Category: Informational                                     1 April 2002
       
  5404 
       
  5405 
       
  5406                  Binary Lexical Octet Ad-hoc Transport
       
  5407 
       
  5408 Status of this Memo
       
  5409 
       
  5410    This memo provides information for the Internet community.  It does
       
  5411    not specify an Internet standard of any kind.  Distribution of this
       
  5412    memo is unlimited.
       
  5413 
       
  5414 Copyright Notice
       
  5415 
       
  5416    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  5417 
       
  5418 Abstract
       
  5419 
       
  5420    This document defines a reformulation of IP and two transport layer
       
  5421    protocols (TCP and UDP) as XML applications.
       
  5422 
       
  5423 1.   Introduction
       
  5424 
       
  5425 1.1. Overview
       
  5426 
       
  5427    This document describes the Binary Lexical Octet Ad-hoc Transport
       
  5428    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
  5429    (IP [RFC791]), and two associated transport layer protocols (TCP
       
  5430    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
  5431    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
  5432    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
  5433    across the public Internet.
       
  5434 
       
  5435 1.2. Motivation
       
  5436 
       
  5437    The wild popularity of XML as a basis for application-level protocols
       
  5438    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
  5439    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
  5440    investigation into the possibility of extending the use of XML in the
       
  5441    protocol stack.  Using XML at both the transport and network layer in
       
  5442    addition to the application layer would provide for an amazing amount
       
  5443    of power and flexibility while removing dependencies on proprietary
       
  5444    and hard-to-understand binary protocols.  This protocol unification
       
  5445    would also allow applications to use a single XML parser for all
       
  5446    aspects of their operation, eliminating developer time spent figuring
       
  5447    out the intricacies of each new protocol, and moving the hard work of
       
  5448 
       
  5449 
       
  5450 
       
  5451 
       
  5452 Kennedy                      Informational                      [Page 1]
       
  5453 
       
  5454 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  5455 
       
  5456 
       
  5457    parsing to the XML toolset.  The use of XML also mitigates concerns
       
  5458    over "network vs. host" byte ordering which is at the root of many
       
  5459    network application bugs.
       
  5460 
       
  5461 1.3. Relation to Existing Protocols
       
  5462 
       
  5463    The reformulations specified in this RFC follow as closely as
       
  5464    possible the spirit of the RFCs on which they are based, and so MAY
       
  5465    contain elements or attributes that would not be needed in a pure
       
  5466    reworking (e.g. length attributes, which are implicit in XML.)
       
  5467 
       
  5468    The layering of network and transport protocols are maintained in
       
  5469    this RFC despite the optimizations that could be made if the line
       
  5470    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
  5471    element in the DTD) in order to foster future use of this protocol as
       
  5472    a basis for reformulating other protocols (such as ICMP.)
       
  5473 
       
  5474    Other than the encoding, the behavioral aspects of each of the
       
  5475    existing protocols remain unchanged.  Routing, address spaces, TCP
       
  5476    congestion control, etc. behave as specified in the extant standards.
       
  5477    Adapting to new standards and experimental algorithm heuristics for
       
  5478    improving performance will become much easier once the move to BLOAT
       
  5479    has been completed.
       
  5480 
       
  5481 1.4. Requirement Levels
       
  5482 
       
  5483    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
  5484    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
  5485    document are to be interpreted as described in BCP 14, RFC 2119
       
  5486    [RFC2119].
       
  5487 
       
  5488 2.   IPoXML
       
  5489 
       
  5490    This protocol MUST be implemented to be compliant with this RFC.
       
  5491    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
  5492    (section 3.) and higher-level application protocols.
       
  5493 
       
  5494    The DTD for this document type can be found in section 7.1.
       
  5495 
       
  5496    The routing of IPoXML can be easily implemented on hosts with an XML
       
  5497    parser, as the regular structure lends itself handily to parsing and
       
  5498    validation of the document/datagram and then processing the
       
  5499    destination address, TTL, and checksum before sending it on to its
       
  5500    next-hop.
       
  5501 
       
  5502    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
  5503    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
  5504    would have exceeded the 1500 byte Ethernet MTU.
       
  5505 
       
  5506 
       
  5507 
       
  5508 Kennedy                      Informational                      [Page 2]
       
  5509 
       
  5510 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  5511 
       
  5512 
       
  5513    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
  5514    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
  5515    formed and include the XMLDecl.
       
  5516 
       
  5517 2.1. IP Description
       
  5518 
       
  5519    A number of items have changed (for the better) from the original IP
       
  5520    specification.  Bit-masks, where present have been converted into
       
  5521    human-readable values.  IP addresses are listed in their dotted-
       
  5522    decimal notation [RFC1123].  Length and checksum values are present
       
  5523    as decimal integers.
       
  5524 
       
  5525    To calculate the length and checksum fields of the IP element, a
       
  5526    canonicalized form of the element MUST be used.  The canonical form
       
  5527    SHALL have no whitespace (including newline characters) between
       
  5528    elements and only one space character between attributes.  There
       
  5529    SHALL NOT be a space following the last attribute in an element.
       
  5530 
       
  5531    An iterative method SHOULD be used to calculate checksums, as the
       
  5532    length field will vary based on the size of the checksum.
       
  5533 
       
  5534    The payload element bears special attention.  Due to the character
       
  5535    set restrictions of XML, the payload of IP datagrams (which MAY
       
  5536    contain arbitrary data) MUST be encoded for transport. This RFC
       
  5537    REQUIRES the contents of the payload to be encoded in the base-64
       
  5538    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
  5539    encoded output MUST be wrapped on 76-character lines.
       
  5540 
       
  5541 
       
  5542 
       
  5543 
       
  5544 
       
  5545 
       
  5546 
       
  5547 
       
  5548 
       
  5549 
       
  5550 
       
  5551 
       
  5552 
       
  5553 
       
  5554 
       
  5555 
       
  5556 
       
  5557 
       
  5558 
       
  5559 
       
  5560 
       
  5561 
       
  5562 
       
  5563 
       
  5564 Kennedy                      Informational                      [Page 3]
       
  5565 
       
  5566 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  5567 
       
  5568 
       
  5569 2.2. Example Datagram
       
  5570 
       
  5571    The following is an example IPoXML datagram with an empty payload:
       
  5572 
       
  5573    <?xml version="1.0" encoding="UTF-8"?>
       
  5574    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  5575    <ip>
       
  5576    <header length="474">
       
  5577    <version value="4"/>
       
  5578    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
  5579         relibility="Normal" reserved="0"/>
       
  5580    <total.length value="461"/>
       
  5581    <id value="1"/>
       
  5582    <flags reserved="0" df="dont" mf="last"/>
       
  5583    <offset value="0"/>
       
  5584    <ttl value="255"/>
       
  5585    <protocol value="6"/>
       
  5586    <checksum value="8707"/>
       
  5587    <source address="10.0.0.22"/>
       
  5588    <destination address="10.0.0.1"/>
       
  5589    <options>
       
  5590    <end copied="0" class="0" number="0"/>
       
  5591    </options>
       
  5592    <padding pad="0"/>
       
  5593    </header>
       
  5594    <payload>
       
  5595    </payload>
       
  5596    </ip>
       
  5597 
       
  5598 3.   TCPoXML
       
  5599 
       
  5600    This protocol MUST be implemented to be compliant with this RFC.  The
       
  5601    DTD for this document type can be found in section 7.2.
       
  5602 
       
  5603 3.1. TCP Description
       
  5604 
       
  5605    A number of items have changed from the original TCP specification.
       
  5606    Bit-masks, where present have been converted into human-readable
       
  5607    values.  Length and checksum and port values are present as decimal
       
  5608    integers.
       
  5609 
       
  5610    To calculate the length and checksum fields of the TCP element, a
       
  5611    canonicalized form of the element MUST be used as in section 2.1.
       
  5612 
       
  5613    An iterative method SHOULD be used to calculate checksums as in
       
  5614    section 2.1.
       
  5615 
       
  5616    The payload element MUST be encoded as in section 2.1.
       
  5617 
       
  5618 
       
  5619 
       
  5620 Kennedy                      Informational                      [Page 4]
       
  5621 
       
  5622 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  5623 
       
  5624 
       
  5625    The TCP offset element was expanded to a maximum of 255 from 16 to
       
  5626    allow for the increased size of the header in XML.
       
  5627 
       
  5628    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  5629    as well as the <!DOCTYPE> declaration.
       
  5630 
       
  5631 3.2. Example Datagram
       
  5632 
       
  5633    The following is an example TCPoXML datagram with an empty payload:
       
  5634 
       
  5635    <?xml version="1.0" encoding="UTF-8"?>
       
  5636    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  5637    <tcp>
       
  5638    <tcp.header>
       
  5639    <src port="31415"/>
       
  5640    <dest port="42424"/>
       
  5641    <sequence number="322622954"/>
       
  5642    <acknowledgement number="689715995"/>
       
  5643    <offset number=""/>
       
  5644    <reserved value="0"/>
       
  5645    <control syn="1" ack="1"/>
       
  5646    <window size="1"/>
       
  5647    <urgent pointer="0"/>
       
  5648    <checksum value="2988"/>
       
  5649    <tcp.options>
       
  5650    <tcp.end kind="0"/>
       
  5651    </tcp.options>
       
  5652    <padding pad="0"/>
       
  5653    </tcp.header>
       
  5654    <payload>
       
  5655    </payload>
       
  5656    </tcp>
       
  5657 
       
  5658 4.   UDPoXML
       
  5659 
       
  5660    This protocol MUST be implemented to be compliant with this RFC.  The
       
  5661    DTD for this document type can be found in section 7.3.
       
  5662 
       
  5663 4.1. UDP Description
       
  5664 
       
  5665    A number of items have changed from the original UDP specification.
       
  5666    Bit-masks, where present have been converted into human-readable
       
  5667    values.  Length and checksum and port values are present as decimal
       
  5668    integers.
       
  5669 
       
  5670 
       
  5671 
       
  5672 
       
  5673 
       
  5674 
       
  5675 
       
  5676 Kennedy                      Informational                      [Page 5]
       
  5677 
       
  5678 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  5679 
       
  5680 
       
  5681    To calculate the length and checksum fields of the UDP element, a
       
  5682    canonicalized form of the element MUST be used as in section 2.1.  An
       
  5683    iterative method SHOULD be used to calculate checksums as in section
       
  5684    2.1.
       
  5685 
       
  5686    The payload element MUST be encoded as in section 2.1.
       
  5687 
       
  5688    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  5689    as well as the <!DOCTYPE> declaration.
       
  5690 
       
  5691 4.2. Example Datagram
       
  5692 
       
  5693    The following is an example UDPoXML datagram with an empty payload:
       
  5694 
       
  5695    <?xml version="1.0" encoding="UTF-8"?>
       
  5696    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  5697    <udp>
       
  5698    <udp.header>
       
  5699    <src port="31415"/>
       
  5700    <dest port="42424"/>
       
  5701    <udp.length value="143"/>
       
  5702    <checksum value="2988"/>
       
  5703    </udp.header>
       
  5704    <payload>
       
  5705    </payload>
       
  5706    </udp>
       
  5707 
       
  5708 5.   Network Transport
       
  5709 
       
  5710    This document provides for the transmission of BLOAT datagrams over
       
  5711    two common families of physical layer transport.  Future RFCs will
       
  5712    address additional transports as routing vendors catch up to the
       
  5713    specification, and we begin to see BLOAT routed across the Internet
       
  5714    backbone.
       
  5715 
       
  5716 5.1. Ethernet
       
  5717 
       
  5718    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
  5719    exception that the type field of the Ethernet frame MUST contain the
       
  5720    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
  5721    be 0x3c 3f 78 6d 6c ("<?xml".)
       
  5722 
       
  5723 5.2. IEEE 802
       
  5724 
       
  5725    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
  5726    that the protocol type code for IPoXML is 0xBEEF.
       
  5727 
       
  5728 
       
  5729 
       
  5730 
       
  5731 
       
  5732 Kennedy                      Informational                      [Page 6]
       
  5733 
       
  5734 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  5735 
       
  5736 
       
  5737 6. Gatewaying over IP
       
  5738 
       
  5739    In order to facilitate the gradual introduction of BLOAT into the
       
  5740    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
  5741    gateway between networks that run BLOAT natively on their LANs.
       
  5742 
       
  5743 7. DTDs
       
  5744 
       
  5745    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
  5746    Network DTD (7.1.)
       
  5747 
       
  5748    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
  5749    [XML]) although it is understood that most IPoXML implementations
       
  5750    will not need to pull down the DTD, as it will normally be embedded
       
  5751    in the implementation, and presents something of a catch-22 if you
       
  5752    need to load part of your network protocol over the network.
       
  5753 
       
  5754 7.1.  IPoXML DTD
       
  5755 
       
  5756    <!--
       
  5757     DTD for IP over XML.
       
  5758     Refer to this DTD as:
       
  5759 
       
  5760     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  5761    -->
       
  5762    <!--
       
  5763     DTD data types:
       
  5764 
       
  5765       Digits      [0..9]+
       
  5766 
       
  5767       Precedence  "NetworkControl | InternetworkControl |
       
  5768                    CRITIC | FlashOverride | Flash | Immediate |
       
  5769                    Priority | Routine"
       
  5770 
       
  5771       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
  5772 
       
  5773       Class       [0..3]
       
  5774 
       
  5775       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
  5776                     Restricted | Secret | Top Secret | Reserved"
       
  5777 
       
  5778       Compartments [0..65535]
       
  5779 
       
  5780       Handling     [0..65535]
       
  5781 
       
  5782       TCC          [0..16777216]
       
  5783 
       
  5784    -->
       
  5785 
       
  5786 
       
  5787 
       
  5788 Kennedy                      Informational                      [Page 7]
       
  5789 
       
  5790 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  5791 
       
  5792 
       
  5793    <!ENTITY % Digits "CDATA">
       
  5794    <!ENTITY % Precedence "CDATA">
       
  5795    <!ENTITY % IP4Addr "CDATA">
       
  5796    <!ENTITY % Class "CDATA">
       
  5797    <!ENTITY % Sec "CDATA">
       
  5798    <!ENTITY % Compartments "CDATA">
       
  5799    <!ENTITY % Handling "CDATA">
       
  5800    <!ENTITY % TCC "CDATA">
       
  5801 
       
  5802    <!ELEMENT ip (header, payload)>
       
  5803 
       
  5804    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
  5805                     protocol, checksum, source, destination, options,
       
  5806                     padding)>
       
  5807    <!-- length of header in 32-bit words -->
       
  5808    <!ATTLIST header
       
  5809              length %Digits; #REQUIRED>
       
  5810 
       
  5811    <!ELEMENT version EMPTY>
       
  5812    <!-- ip version. SHOULD be "4" -->
       
  5813    <!ATTLIST version
       
  5814              value   %Digits;  #REQUIRED>
       
  5815 
       
  5816    <!ELEMENT tos EMPTY>
       
  5817    <!ATTLIST tos
       
  5818              precedence   %Precedence;    #REQUIRED
       
  5819              delay    (normal | low)  #REQUIRED
       
  5820              throughput   (normal | high) #REQUIRED
       
  5821              relibility   (normal | high) #REQUIRED
       
  5822              reserved     CDATA #FIXED "0">
       
  5823 
       
  5824    <!ELEMENT total.length EMPTY>
       
  5825    <!--
       
  5826     total length of datagram (header and payload) in octets, MUST be
       
  5827     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
  5828     ethernets).
       
  5829    -->
       
  5830    <!ATTLIST total.length
       
  5831              value %Digits; #REQUIRED>
       
  5832 
       
  5833    <!ELEMENT id EMPTY>
       
  5834    <!-- 0 <= id <= 65,535  -->
       
  5835    <!ATTLIST id
       
  5836              value %Digits; #REQUIRED>
       
  5837 
       
  5838    <!ELEMENT flags EMPTY>
       
  5839    <!-- df = don't fragment, mf = more fragments  -->
       
  5840    <!ATTLIST flags
       
  5841 
       
  5842 
       
  5843 
       
  5844 Kennedy                      Informational                      [Page 8]
       
  5845 
       
  5846 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  5847 
       
  5848 
       
  5849           reserved CDATA  #FIXED "0"
       
  5850           df (may|dont)   #REQUIRED
       
  5851           mf (last|more)  #REQUIRED>
       
  5852 
       
  5853    <!ELEMENT offset EMPTY>
       
  5854    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
  5855    <!ATTLIST offset
       
  5856              value %Digits; #REQUIRED>
       
  5857 
       
  5858    <!ELEMENT ttl EMPTY>
       
  5859    <!-- 0 <= ttl <= 255 -->
       
  5860    <!ATTLIST ttl
       
  5861              value %Digits; #REQUIRED>
       
  5862 
       
  5863    <!ELEMENT protocol EMPTY>
       
  5864    <!-- 0 <= protocol <= 255 (per IANA) -->
       
  5865    <!ATTLIST protocol
       
  5866              value %Digits; #REQUIRED>
       
  5867 
       
  5868    <!ELEMENT checksum EMPTY>
       
  5869    <!-- 0 <= checksum <= 65535 (over header only) -->
       
  5870    <!ATTLIST checksum
       
  5871              value %Digits; #REQUIRED>
       
  5872 
       
  5873    <!ELEMENT source EMPTY>
       
  5874    <!ATTLIST source
       
  5875              address %IP4Addr; #REQUIRED>
       
  5876 
       
  5877    <!ELEMENT destination EMPTY>
       
  5878    <!ATTLIST destination
       
  5879              address %IP4Addr; #REQUIRED>
       
  5880 
       
  5881    <!ELEMENT options ( end | noop | security | loose | strict | record
       
  5882                      | stream | timestamp )*>
       
  5883 
       
  5884    <!ELEMENT end EMPTY>
       
  5885    <!ATTLIST end
       
  5886              copied (0|1) #REQUIRED
       
  5887              class  CDATA #FIXED "0"
       
  5888              number CDATA #FIXED "0">
       
  5889 
       
  5890    <!ELEMENT noop EMPTY>
       
  5891    <!ATTLIST noop
       
  5892              copied (0|1) #REQUIRED
       
  5893              class  CDATA #FIXED "0"
       
  5894              number CDATA #FIXED "1">
       
  5895 
       
  5896    <!ELEMENT security EMPTY>
       
  5897 
       
  5898 
       
  5899 
       
  5900 Kennedy                      Informational                      [Page 9]
       
  5901 
       
  5902 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  5903 
       
  5904 
       
  5905    <!ATTLIST security
       
  5906              copied CDATA #FIXED "1"
       
  5907              class  CDATA #FIXED "0"
       
  5908              number CDATA #FIXED "2"
       
  5909              length CDATA #FIXED "11"
       
  5910              security %Sec; #REQUIRED
       
  5911              compartments %Compartments; #REQUIRED
       
  5912              handling %Handling; #REQUIRED
       
  5913              tcc %TCC; #REQUIRED>
       
  5914    <!ELEMENT loose (hop)+>
       
  5915    <!ATTLIST loose
       
  5916              copied CDATA #FIXED "1"
       
  5917              class  CDATA #FIXED "0"
       
  5918              number CDATA #FIXED "3"
       
  5919              length %Digits; #REQUIRED
       
  5920              pointer %Digits; #REQUIRED>
       
  5921 
       
  5922    <!ELEMENT hop EMPTY>
       
  5923    <!ATTLIST hop
       
  5924              address %IP4Addr; #REQUIRED>
       
  5925 
       
  5926    <!ELEMENT strict (hop)+>
       
  5927    <!ATTLIST strict
       
  5928              copied CDATA #FIXED "1"
       
  5929              class  CDATA #FIXED "0"
       
  5930              number CDATA #FIXED "9"
       
  5931              length %Digits; #REQUIRED
       
  5932              pointer %Digits; #REQUIRED>
       
  5933 
       
  5934    <!ELEMENT record (hop)+>
       
  5935    <!ATTLIST record
       
  5936              copied CDATA #FIXED "0"
       
  5937              class  CDATA #FIXED "0"
       
  5938              number CDATA #FIXED "7"
       
  5939              length %Digits; #REQUIRED
       
  5940              pointer %Digits; #REQUIRED>
       
  5941 
       
  5942    <!ELEMENT stream EMPTY>
       
  5943    <!-- 0 <= id <= 65,535 -->
       
  5944    <!ATTLIST stream
       
  5945              copied CDATA #FIXED "1"
       
  5946              class  CDATA #FIXED "0"
       
  5947              number CDATA #FIXED "8"
       
  5948              length CDATA #FIXED "4"
       
  5949              id %Digits; #REQUIRED>
       
  5950 
       
  5951    <!ELEMENT timestamp (tstamp)+>
       
  5952    <!-- 0 <= oflw <=15 -->
       
  5953 
       
  5954 
       
  5955 
       
  5956 Kennedy                      Informational                     [Page 10]
       
  5957 
       
  5958 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  5959 
       
  5960 
       
  5961    <!ATTLIST timestamp
       
  5962              copied CDATA #FIXED "0"
       
  5963              class  CDATA #FIXED "2"
       
  5964              number CDATA #FIXED "4"
       
  5965              length %Digits;  #REQUIRED
       
  5966              pointer %Digits; #REQUIRED
       
  5967              oflw %Digits;    #REQUIRED
       
  5968              flag (0 | 1 | 3)  #REQUIRED>
       
  5969 
       
  5970    <!ELEMENT tstamp EMPTY>
       
  5971    <!ATTLIST tstamp
       
  5972              time %Digits;   #REQUIRED
       
  5973              address %IP4Addr; #IMPLIED>
       
  5974    <!--
       
  5975        padding to bring header to 32-bit boundary.
       
  5976        pad MUST be "0"*
       
  5977     -->
       
  5978    <!ELEMENT padding EMPTY>
       
  5979    <!ATTLIST padding
       
  5980              pad CDATA #REQUIRED>
       
  5981 
       
  5982    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
  5983         by section 2.1 of this RFC -->
       
  5984    <!ELEMENT payload (CDATA)>
       
  5985 
       
  5986 7.2.  TCPoXML DTD
       
  5987 
       
  5988    <!--
       
  5989       DTD for TCP over XML.
       
  5990       Refer to this DTD as:
       
  5991 
       
  5992       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  5993    -->
       
  5994 
       
  5995    <!-- the pseudoheader is only included for checksum calculations -->
       
  5996    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
  5997 
       
  5998    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
  5999                          reserved, control, window, checksum, urgent,
       
  6000                          tcp.options, padding)>
       
  6001 
       
  6002    <!ELEMENT src EMPTY>
       
  6003    <!-- 0 <= port <= 65,535 -->
       
  6004    <!ATTLIST src
       
  6005              port %Digits; #REQUIRED>
       
  6006 
       
  6007    <!ELEMENT dest EMPTY>
       
  6008    <!-- 0 <= port <= 65,535 -->
       
  6009 
       
  6010 
       
  6011 
       
  6012 Kennedy                      Informational                     [Page 11]
       
  6013 
       
  6014 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  6015 
       
  6016 
       
  6017    <!ATTLIST dest
       
  6018              port %Digits; #REQUIRED>
       
  6019 
       
  6020    <!ELEMENT sequence EMPTY>
       
  6021    <!-- 0 <= number <= 4294967295 -->
       
  6022    <!ATTLIST sequence
       
  6023              number %Digits; #REQUIRED>
       
  6024 
       
  6025    <!ELEMENT acknowledgement EMPTY>
       
  6026    <!-- 0 <= number <= 4294967295 -->
       
  6027    <!ATTLIST acknowledgement
       
  6028              number %Digits; #REQUIRED>
       
  6029 
       
  6030    <!ELEMENT offset EMPTY>
       
  6031    <!-- 0 <= number <= 255 -->
       
  6032    <!ATTLIST offset
       
  6033              number %Digits; #REQUIRED>
       
  6034 
       
  6035    <!ELEMENT reserved EMPTY>
       
  6036    <!ATTLIST reserved
       
  6037              value CDATA #FIXED "0">
       
  6038 
       
  6039    <!ELEMENT control EMPTY>
       
  6040    <!ATTLIST control
       
  6041              urg (0|1) #IMPLIED
       
  6042              ack (0|1) #IMPLIED
       
  6043              psh (0|1) #IMPLIED
       
  6044              rst (0|1) #IMPLIED
       
  6045              syn (0|1) #IMPLIED
       
  6046              fin (0|1) #IMPLIED>
       
  6047 
       
  6048    <!ELEMENT window EMPTY>
       
  6049    <!-- 0 <= size <= 65,535 -->
       
  6050    <!ATTLIST window
       
  6051              size %Digits; #REQUIRED>
       
  6052 
       
  6053    <!--
       
  6054       checksum as in ip, but with
       
  6055       the following pseudo-header added into the tcp element:
       
  6056      -->
       
  6057    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
  6058                                tcp.length)>
       
  6059 
       
  6060    <!--
       
  6061       tcp header + data length in octets. does not include the size of
       
  6062 
       
  6063       the pseudoheader.
       
  6064     -->
       
  6065 
       
  6066 
       
  6067 
       
  6068 Kennedy                      Informational                     [Page 12]
       
  6069 
       
  6070 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  6071 
       
  6072 
       
  6073    <!ELEMENT tcp.length EMPTY>
       
  6074    <!ATTLIST tcp.length
       
  6075              value %Digits; #REQUIRED>
       
  6076 
       
  6077    <!ELEMENT urgent EMPTY>
       
  6078    <!-- 0 <= pointer <= 65,535 -->
       
  6079    <!ATTLIST urgent
       
  6080              pointer %Digits; #REQUIRED>
       
  6081 
       
  6082    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
  6083 
       
  6084    <!ELEMENT tcp.end EMPTY>
       
  6085    <!ATTLIST tcp.end
       
  6086              kind CDATA #FIXED "0">
       
  6087 
       
  6088    <!ELEMENT tcp.noop EMPTY>
       
  6089    <!ATTLIST tcp.noop
       
  6090              kind CDATA #FIXED "1">
       
  6091 
       
  6092    <!ELEMENT tcp.mss EMPTY>
       
  6093    <!ATTLIST tcp.mss
       
  6094              kind CDATA #FIXED "2"
       
  6095              length CDATA #FIXED "4"
       
  6096              size %Digits; #REQUIRED>
       
  6097 
       
  6098 7.3.  UDPoXML DTD
       
  6099 
       
  6100    <!--
       
  6101       DTD for UDP over XML.
       
  6102       Refer to this DTD as:
       
  6103 
       
  6104       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  6105    -->
       
  6106 
       
  6107    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
  6108 
       
  6109    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
  6110 
       
  6111    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
  6112                                udp.length)>
       
  6113 
       
  6114    <!--
       
  6115       udp header + data length in octets. does not include the size of
       
  6116       the pseudoheader.
       
  6117     -->
       
  6118    <!ELEMENT udp.length EMPTY>
       
  6119    <!ATTLIST udp.length
       
  6120              value %Digits; #REQUIRED>
       
  6121 
       
  6122 
       
  6123 
       
  6124 Kennedy                      Informational                     [Page 13]
       
  6125 
       
  6126 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  6127 
       
  6128 
       
  6129 8. Security Considerations
       
  6130 
       
  6131    XML, as a subset of SGML, has the same security considerations as
       
  6132    specified in SGML Media Types [RFC1874].  Security considerations
       
  6133    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
  6134    not attempt to correct for issues not related to message format.
       
  6135 
       
  6136 9.   References
       
  6137 
       
  6138    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
  6139                February 2002. (Work in Progress)
       
  6140 
       
  6141    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
  6142                August 1980.
       
  6143 
       
  6144    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
  6145                September 1981.
       
  6146 
       
  6147    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
  6148                793, September 1981.
       
  6149 
       
  6150    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
  6151                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
  6152 
       
  6153    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
  6154                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
  6155                43, RFC 1042, February 1988.
       
  6156 
       
  6157    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
  6158                Application and Support", RFC 1123, October 1989.
       
  6159 
       
  6160    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
  6161                1995.
       
  6162 
       
  6163    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
  6164                October 1996.
       
  6165 
       
  6166    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
  6167                Extensions (MIME) Part One: Format of Internet Message
       
  6168                Bodies", RFC 2045, November 1996.
       
  6169 
       
  6170    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
  6171                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
  6172 
       
  6173    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
  6174                10646", RFC 2279, January 1998.
       
  6175 
       
  6176 
       
  6177 
       
  6178 
       
  6179 
       
  6180 Kennedy                      Informational                     [Page 14]
       
  6181 
       
  6182 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  6183 
       
  6184 
       
  6185    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
  6186                (IPv6) Specification", RFC 2460, December 1998.
       
  6187 
       
  6188    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
  6189                RFC 3080, March 2001.
       
  6190 
       
  6191    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
  6192                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
  6193                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
  6194                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
  6195 
       
  6196    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
  6197                Markup Language (XML)" World Wide Web Consortium
       
  6198                Recommendation REC- xml-19980210.
       
  6199                http://www.w3.org/TR/1998/REC-xml-19980210
       
  6200 
       
  6201 10.  Author's Address
       
  6202 
       
  6203    Hugh Kennedy
       
  6204    Mimezine
       
  6205    1060 West Addison
       
  6206    Chicago, IL 60613
       
  6207    USA
       
  6208 
       
  6209    EMail: kennedyh@engin.umich.edu
       
  6210 
       
  6211 
       
  6212 
       
  6213 
       
  6214 
       
  6215 
       
  6216 
       
  6217 
       
  6218 
       
  6219 
       
  6220 
       
  6221 
       
  6222 
       
  6223 
       
  6224 
       
  6225 
       
  6226 
       
  6227 
       
  6228 
       
  6229 
       
  6230 
       
  6231 
       
  6232 
       
  6233 
       
  6234 
       
  6235 
       
  6236 Kennedy                      Informational                     [Page 15]
       
  6237 
       
  6238 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  6239 
       
  6240 
       
  6241 11.  Full Copyright Statement
       
  6242 
       
  6243    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  6244 
       
  6245    This document and translations of it may be copied and furnished to
       
  6246    others, and derivative works that comment on or otherwise explain it
       
  6247    or assist in its implementation may be prepared, copied, published
       
  6248    and distributed, in whole or in part, without restriction of any
       
  6249    kind, provided that the above copyright notice and this paragraph are
       
  6250    included on all such copies and derivative works.  However, this
       
  6251    document itself may not be modified in any way, such as by removing
       
  6252    the copyright notice or references to the Internet Society or other
       
  6253    Internet organizations, except as needed for the purpose of
       
  6254    developing Internet standards in which case the procedures for
       
  6255    copyrights defined in the Internet Standards process must be
       
  6256    followed, or as required to translate it into languages other than
       
  6257    English.
       
  6258 
       
  6259    The limited permissions granted above are perpetual and will not be
       
  6260    revoked by the Internet Society or its successors or assigns.
       
  6261 
       
  6262    This document and the information contained herein is provided on an
       
  6263    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
  6264    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
  6265    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
  6266    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
  6267    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
  6268 
       
  6269 Acknowledgement
       
  6270 
       
  6271    Funding for the RFC Editor function is currently provided by the
       
  6272    Internet Society.
       
  6273 
       
  6274 
       
  6275 
       
  6276 
       
  6277 
       
  6278 
       
  6279 
       
  6280 
       
  6281 
       
  6282 
       
  6283 
       
  6284 
       
  6285 
       
  6286 
       
  6287 
       
  6288 
       
  6289 
       
  6290 
       
  6291 
       
  6292 Kennedy                      Informational                     [Page 16]
       
  6293 
       
  6294 
       
  6295 
       
  6296 
       
  6297 
       
  6298 
       
  6299 
       
  6300 Network Working Group                                         H. Kennedy
       
  6301 Request for Comments: 3252                                      Mimezine
       
  6302 Category: Informational                                     1 April 2002
       
  6303 
       
  6304 
       
  6305                  Binary Lexical Octet Ad-hoc Transport
       
  6306 
       
  6307 Status of this Memo
       
  6308 
       
  6309    This memo provides information for the Internet community.  It does
       
  6310    not specify an Internet standard of any kind.  Distribution of this
       
  6311    memo is unlimited.
       
  6312 
       
  6313 Copyright Notice
       
  6314 
       
  6315    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  6316 
       
  6317 Abstract
       
  6318 
       
  6319    This document defines a reformulation of IP and two transport layer
       
  6320    protocols (TCP and UDP) as XML applications.
       
  6321 
       
  6322 1.   Introduction
       
  6323 
       
  6324 1.1. Overview
       
  6325 
       
  6326    This document describes the Binary Lexical Octet Ad-hoc Transport
       
  6327    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
  6328    (IP [RFC791]), and two associated transport layer protocols (TCP
       
  6329    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
  6330    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
  6331    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
  6332    across the public Internet.
       
  6333 
       
  6334 1.2. Motivation
       
  6335 
       
  6336    The wild popularity of XML as a basis for application-level protocols
       
  6337    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
  6338    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
  6339    investigation into the possibility of extending the use of XML in the
       
  6340    protocol stack.  Using XML at both the transport and network layer in
       
  6341    addition to the application layer would provide for an amazing amount
       
  6342    of power and flexibility while removing dependencies on proprietary
       
  6343    and hard-to-understand binary protocols.  This protocol unification
       
  6344    would also allow applications to use a single XML parser for all
       
  6345    aspects of their operation, eliminating developer time spent figuring
       
  6346    out the intricacies of each new protocol, and moving the hard work of
       
  6347 
       
  6348 
       
  6349 
       
  6350 
       
  6351 Kennedy                      Informational                      [Page 1]
       
  6352 
       
  6353 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  6354 
       
  6355 
       
  6356    parsing to the XML toolset.  The use of XML also mitigates concerns
       
  6357    over "network vs. host" byte ordering which is at the root of many
       
  6358    network application bugs.
       
  6359 
       
  6360 1.3. Relation to Existing Protocols
       
  6361 
       
  6362    The reformulations specified in this RFC follow as closely as
       
  6363    possible the spirit of the RFCs on which they are based, and so MAY
       
  6364    contain elements or attributes that would not be needed in a pure
       
  6365    reworking (e.g. length attributes, which are implicit in XML.)
       
  6366 
       
  6367    The layering of network and transport protocols are maintained in
       
  6368    this RFC despite the optimizations that could be made if the line
       
  6369    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
  6370    element in the DTD) in order to foster future use of this protocol as
       
  6371    a basis for reformulating other protocols (such as ICMP.)
       
  6372 
       
  6373    Other than the encoding, the behavioral aspects of each of the
       
  6374    existing protocols remain unchanged.  Routing, address spaces, TCP
       
  6375    congestion control, etc. behave as specified in the extant standards.
       
  6376    Adapting to new standards and experimental algorithm heuristics for
       
  6377    improving performance will become much easier once the move to BLOAT
       
  6378    has been completed.
       
  6379 
       
  6380 1.4. Requirement Levels
       
  6381 
       
  6382    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
  6383    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
  6384    document are to be interpreted as described in BCP 14, RFC 2119
       
  6385    [RFC2119].
       
  6386 
       
  6387 2.   IPoXML
       
  6388 
       
  6389    This protocol MUST be implemented to be compliant with this RFC.
       
  6390    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
  6391    (section 3.) and higher-level application protocols.
       
  6392 
       
  6393    The DTD for this document type can be found in section 7.1.
       
  6394 
       
  6395    The routing of IPoXML can be easily implemented on hosts with an XML
       
  6396    parser, as the regular structure lends itself handily to parsing and
       
  6397    validation of the document/datagram and then processing the
       
  6398    destination address, TTL, and checksum before sending it on to its
       
  6399    next-hop.
       
  6400 
       
  6401    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
  6402    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
  6403    would have exceeded the 1500 byte Ethernet MTU.
       
  6404 
       
  6405 
       
  6406 
       
  6407 Kennedy                      Informational                      [Page 2]
       
  6408 
       
  6409 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  6410 
       
  6411 
       
  6412    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
  6413    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
  6414    formed and include the XMLDecl.
       
  6415 
       
  6416 2.1. IP Description
       
  6417 
       
  6418    A number of items have changed (for the better) from the original IP
       
  6419    specification.  Bit-masks, where present have been converted into
       
  6420    human-readable values.  IP addresses are listed in their dotted-
       
  6421    decimal notation [RFC1123].  Length and checksum values are present
       
  6422    as decimal integers.
       
  6423 
       
  6424    To calculate the length and checksum fields of the IP element, a
       
  6425    canonicalized form of the element MUST be used.  The canonical form
       
  6426    SHALL have no whitespace (including newline characters) between
       
  6427    elements and only one space character between attributes.  There
       
  6428    SHALL NOT be a space following the last attribute in an element.
       
  6429 
       
  6430    An iterative method SHOULD be used to calculate checksums, as the
       
  6431    length field will vary based on the size of the checksum.
       
  6432 
       
  6433    The payload element bears special attention.  Due to the character
       
  6434    set restrictions of XML, the payload of IP datagrams (which MAY
       
  6435    contain arbitrary data) MUST be encoded for transport. This RFC
       
  6436    REQUIRES the contents of the payload to be encoded in the base-64
       
  6437    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
  6438    encoded output MUST be wrapped on 76-character lines.
       
  6439 
       
  6440 
       
  6441 
       
  6442 
       
  6443 
       
  6444 
       
  6445 
       
  6446 
       
  6447 
       
  6448 
       
  6449 
       
  6450 
       
  6451 
       
  6452 
       
  6453 
       
  6454 
       
  6455 
       
  6456 
       
  6457 
       
  6458 
       
  6459 
       
  6460 
       
  6461 
       
  6462 
       
  6463 Kennedy                      Informational                      [Page 3]
       
  6464 
       
  6465 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  6466 
       
  6467 
       
  6468 2.2. Example Datagram
       
  6469 
       
  6470    The following is an example IPoXML datagram with an empty payload:
       
  6471 
       
  6472    <?xml version="1.0" encoding="UTF-8"?>
       
  6473    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  6474    <ip>
       
  6475    <header length="474">
       
  6476    <version value="4"/>
       
  6477    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
  6478         relibility="Normal" reserved="0"/>
       
  6479    <total.length value="461"/>
       
  6480    <id value="1"/>
       
  6481    <flags reserved="0" df="dont" mf="last"/>
       
  6482    <offset value="0"/>
       
  6483    <ttl value="255"/>
       
  6484    <protocol value="6"/>
       
  6485    <checksum value="8707"/>
       
  6486    <source address="10.0.0.22"/>
       
  6487    <destination address="10.0.0.1"/>
       
  6488    <options>
       
  6489    <end copied="0" class="0" number="0"/>
       
  6490    </options>
       
  6491    <padding pad="0"/>
       
  6492    </header>
       
  6493    <payload>
       
  6494    </payload>
       
  6495    </ip>
       
  6496 
       
  6497 3.   TCPoXML
       
  6498 
       
  6499    This protocol MUST be implemented to be compliant with this RFC.  The
       
  6500    DTD for this document type can be found in section 7.2.
       
  6501 
       
  6502 3.1. TCP Description
       
  6503 
       
  6504    A number of items have changed from the original TCP specification.
       
  6505    Bit-masks, where present have been converted into human-readable
       
  6506    values.  Length and checksum and port values are present as decimal
       
  6507    integers.
       
  6508 
       
  6509    To calculate the length and checksum fields of the TCP element, a
       
  6510    canonicalized form of the element MUST be used as in section 2.1.
       
  6511 
       
  6512    An iterative method SHOULD be used to calculate checksums as in
       
  6513    section 2.1.
       
  6514 
       
  6515    The payload element MUST be encoded as in section 2.1.
       
  6516 
       
  6517 
       
  6518 
       
  6519 Kennedy                      Informational                      [Page 4]
       
  6520 
       
  6521 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  6522 
       
  6523 
       
  6524    The TCP offset element was expanded to a maximum of 255 from 16 to
       
  6525    allow for the increased size of the header in XML.
       
  6526 
       
  6527    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  6528    as well as the <!DOCTYPE> declaration.
       
  6529 
       
  6530 3.2. Example Datagram
       
  6531 
       
  6532    The following is an example TCPoXML datagram with an empty payload:
       
  6533 
       
  6534    <?xml version="1.0" encoding="UTF-8"?>
       
  6535    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  6536    <tcp>
       
  6537    <tcp.header>
       
  6538    <src port="31415"/>
       
  6539    <dest port="42424"/>
       
  6540    <sequence number="322622954"/>
       
  6541    <acknowledgement number="689715995"/>
       
  6542    <offset number=""/>
       
  6543    <reserved value="0"/>
       
  6544    <control syn="1" ack="1"/>
       
  6545    <window size="1"/>
       
  6546    <urgent pointer="0"/>
       
  6547    <checksum value="2988"/>
       
  6548    <tcp.options>
       
  6549    <tcp.end kind="0"/>
       
  6550    </tcp.options>
       
  6551    <padding pad="0"/>
       
  6552    </tcp.header>
       
  6553    <payload>
       
  6554    </payload>
       
  6555    </tcp>
       
  6556 
       
  6557 4.   UDPoXML
       
  6558 
       
  6559    This protocol MUST be implemented to be compliant with this RFC.  The
       
  6560    DTD for this document type can be found in section 7.3.
       
  6561 
       
  6562 4.1. UDP Description
       
  6563 
       
  6564    A number of items have changed from the original UDP specification.
       
  6565    Bit-masks, where present have been converted into human-readable
       
  6566    values.  Length and checksum and port values are present as decimal
       
  6567    integers.
       
  6568 
       
  6569 
       
  6570 
       
  6571 
       
  6572 
       
  6573 
       
  6574 
       
  6575 Kennedy                      Informational                      [Page 5]
       
  6576 
       
  6577 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  6578 
       
  6579 
       
  6580    To calculate the length and checksum fields of the UDP element, a
       
  6581    canonicalized form of the element MUST be used as in section 2.1.  An
       
  6582    iterative method SHOULD be used to calculate checksums as in section
       
  6583    2.1.
       
  6584 
       
  6585    The payload element MUST be encoded as in section 2.1.
       
  6586 
       
  6587    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  6588    as well as the <!DOCTYPE> declaration.
       
  6589 
       
  6590 4.2. Example Datagram
       
  6591 
       
  6592    The following is an example UDPoXML datagram with an empty payload:
       
  6593 
       
  6594    <?xml version="1.0" encoding="UTF-8"?>
       
  6595    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  6596    <udp>
       
  6597    <udp.header>
       
  6598    <src port="31415"/>
       
  6599    <dest port="42424"/>
       
  6600    <udp.length value="143"/>
       
  6601    <checksum value="2988"/>
       
  6602    </udp.header>
       
  6603    <payload>
       
  6604    </payload>
       
  6605    </udp>
       
  6606 
       
  6607 5.   Network Transport
       
  6608 
       
  6609    This document provides for the transmission of BLOAT datagrams over
       
  6610    two common families of physical layer transport.  Future RFCs will
       
  6611    address additional transports as routing vendors catch up to the
       
  6612    specification, and we begin to see BLOAT routed across the Internet
       
  6613    backbone.
       
  6614 
       
  6615 5.1. Ethernet
       
  6616 
       
  6617    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
  6618    exception that the type field of the Ethernet frame MUST contain the
       
  6619    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
  6620    be 0x3c 3f 78 6d 6c ("<?xml".)
       
  6621 
       
  6622 5.2. IEEE 802
       
  6623 
       
  6624    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
  6625    that the protocol type code for IPoXML is 0xBEEF.
       
  6626 
       
  6627 
       
  6628 
       
  6629 
       
  6630 
       
  6631 Kennedy                      Informational                      [Page 6]
       
  6632 
       
  6633 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  6634 
       
  6635 
       
  6636 6. Gatewaying over IP
       
  6637 
       
  6638    In order to facilitate the gradual introduction of BLOAT into the
       
  6639    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
  6640    gateway between networks that run BLOAT natively on their LANs.
       
  6641 
       
  6642 7. DTDs
       
  6643 
       
  6644    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
  6645    Network DTD (7.1.)
       
  6646 
       
  6647    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
  6648    [XML]) although it is understood that most IPoXML implementations
       
  6649    will not need to pull down the DTD, as it will normally be embedded
       
  6650    in the implementation, and presents something of a catch-22 if you
       
  6651    need to load part of your network protocol over the network.
       
  6652 
       
  6653 7.1.  IPoXML DTD
       
  6654 
       
  6655    <!--
       
  6656     DTD for IP over XML.
       
  6657     Refer to this DTD as:
       
  6658 
       
  6659     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  6660    -->
       
  6661    <!--
       
  6662     DTD data types:
       
  6663 
       
  6664       Digits      [0..9]+
       
  6665 
       
  6666       Precedence  "NetworkControl | InternetworkControl |
       
  6667                    CRITIC | FlashOverride | Flash | Immediate |
       
  6668                    Priority | Routine"
       
  6669 
       
  6670       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
  6671 
       
  6672       Class       [0..3]
       
  6673 
       
  6674       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
  6675                     Restricted | Secret | Top Secret | Reserved"
       
  6676 
       
  6677       Compartments [0..65535]
       
  6678 
       
  6679       Handling     [0..65535]
       
  6680 
       
  6681       TCC          [0..16777216]
       
  6682 
       
  6683    -->
       
  6684 
       
  6685 
       
  6686 
       
  6687 Kennedy                      Informational                      [Page 7]
       
  6688 
       
  6689 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  6690 
       
  6691 
       
  6692    <!ENTITY % Digits "CDATA">
       
  6693    <!ENTITY % Precedence "CDATA">
       
  6694    <!ENTITY % IP4Addr "CDATA">
       
  6695    <!ENTITY % Class "CDATA">
       
  6696    <!ENTITY % Sec "CDATA">
       
  6697    <!ENTITY % Compartments "CDATA">
       
  6698    <!ENTITY % Handling "CDATA">
       
  6699    <!ENTITY % TCC "CDATA">
       
  6700 
       
  6701    <!ELEMENT ip (header, payload)>
       
  6702 
       
  6703    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
  6704                     protocol, checksum, source, destination, options,
       
  6705                     padding)>
       
  6706    <!-- length of header in 32-bit words -->
       
  6707    <!ATTLIST header
       
  6708              length %Digits; #REQUIRED>
       
  6709 
       
  6710    <!ELEMENT version EMPTY>
       
  6711    <!-- ip version. SHOULD be "4" -->
       
  6712    <!ATTLIST version
       
  6713              value   %Digits;  #REQUIRED>
       
  6714 
       
  6715    <!ELEMENT tos EMPTY>
       
  6716    <!ATTLIST tos
       
  6717              precedence   %Precedence;    #REQUIRED
       
  6718              delay    (normal | low)  #REQUIRED
       
  6719              throughput   (normal | high) #REQUIRED
       
  6720              relibility   (normal | high) #REQUIRED
       
  6721              reserved     CDATA #FIXED "0">
       
  6722 
       
  6723    <!ELEMENT total.length EMPTY>
       
  6724    <!--
       
  6725     total length of datagram (header and payload) in octets, MUST be
       
  6726     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
  6727     ethernets).
       
  6728    -->
       
  6729    <!ATTLIST total.length
       
  6730              value %Digits; #REQUIRED>
       
  6731 
       
  6732    <!ELEMENT id EMPTY>
       
  6733    <!-- 0 <= id <= 65,535  -->
       
  6734    <!ATTLIST id
       
  6735              value %Digits; #REQUIRED>
       
  6736 
       
  6737    <!ELEMENT flags EMPTY>
       
  6738    <!-- df = don't fragment, mf = more fragments  -->
       
  6739    <!ATTLIST flags
       
  6740 
       
  6741 
       
  6742 
       
  6743 Kennedy                      Informational                      [Page 8]
       
  6744 
       
  6745 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  6746 
       
  6747 
       
  6748           reserved CDATA  #FIXED "0"
       
  6749           df (may|dont)   #REQUIRED
       
  6750           mf (last|more)  #REQUIRED>
       
  6751 
       
  6752    <!ELEMENT offset EMPTY>
       
  6753    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
  6754    <!ATTLIST offset
       
  6755              value %Digits; #REQUIRED>
       
  6756 
       
  6757    <!ELEMENT ttl EMPTY>
       
  6758    <!-- 0 <= ttl <= 255 -->
       
  6759    <!ATTLIST ttl
       
  6760              value %Digits; #REQUIRED>
       
  6761 
       
  6762    <!ELEMENT protocol EMPTY>
       
  6763    <!-- 0 <= protocol <= 255 (per IANA) -->
       
  6764    <!ATTLIST protocol
       
  6765              value %Digits; #REQUIRED>
       
  6766 
       
  6767    <!ELEMENT checksum EMPTY>
       
  6768    <!-- 0 <= checksum <= 65535 (over header only) -->
       
  6769    <!ATTLIST checksum
       
  6770              value %Digits; #REQUIRED>
       
  6771 
       
  6772    <!ELEMENT source EMPTY>
       
  6773    <!ATTLIST source
       
  6774              address %IP4Addr; #REQUIRED>
       
  6775 
       
  6776    <!ELEMENT destination EMPTY>
       
  6777    <!ATTLIST destination
       
  6778              address %IP4Addr; #REQUIRED>
       
  6779 
       
  6780    <!ELEMENT options ( end | noop | security | loose | strict | record
       
  6781                      | stream | timestamp )*>
       
  6782 
       
  6783    <!ELEMENT end EMPTY>
       
  6784    <!ATTLIST end
       
  6785              copied (0|1) #REQUIRED
       
  6786              class  CDATA #FIXED "0"
       
  6787              number CDATA #FIXED "0">
       
  6788 
       
  6789    <!ELEMENT noop EMPTY>
       
  6790    <!ATTLIST noop
       
  6791              copied (0|1) #REQUIRED
       
  6792              class  CDATA #FIXED "0"
       
  6793              number CDATA #FIXED "1">
       
  6794 
       
  6795    <!ELEMENT security EMPTY>
       
  6796 
       
  6797 
       
  6798 
       
  6799 Kennedy                      Informational                      [Page 9]
       
  6800 
       
  6801 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  6802 
       
  6803 
       
  6804    <!ATTLIST security
       
  6805              copied CDATA #FIXED "1"
       
  6806              class  CDATA #FIXED "0"
       
  6807              number CDATA #FIXED "2"
       
  6808              length CDATA #FIXED "11"
       
  6809              security %Sec; #REQUIRED
       
  6810              compartments %Compartments; #REQUIRED
       
  6811              handling %Handling; #REQUIRED
       
  6812              tcc %TCC; #REQUIRED>
       
  6813    <!ELEMENT loose (hop)+>
       
  6814    <!ATTLIST loose
       
  6815              copied CDATA #FIXED "1"
       
  6816              class  CDATA #FIXED "0"
       
  6817              number CDATA #FIXED "3"
       
  6818              length %Digits; #REQUIRED
       
  6819              pointer %Digits; #REQUIRED>
       
  6820 
       
  6821    <!ELEMENT hop EMPTY>
       
  6822    <!ATTLIST hop
       
  6823              address %IP4Addr; #REQUIRED>
       
  6824 
       
  6825    <!ELEMENT strict (hop)+>
       
  6826    <!ATTLIST strict
       
  6827              copied CDATA #FIXED "1"
       
  6828              class  CDATA #FIXED "0"
       
  6829              number CDATA #FIXED "9"
       
  6830              length %Digits; #REQUIRED
       
  6831              pointer %Digits; #REQUIRED>
       
  6832 
       
  6833    <!ELEMENT record (hop)+>
       
  6834    <!ATTLIST record
       
  6835              copied CDATA #FIXED "0"
       
  6836              class  CDATA #FIXED "0"
       
  6837              number CDATA #FIXED "7"
       
  6838              length %Digits; #REQUIRED
       
  6839              pointer %Digits; #REQUIRED>
       
  6840 
       
  6841    <!ELEMENT stream EMPTY>
       
  6842    <!-- 0 <= id <= 65,535 -->
       
  6843    <!ATTLIST stream
       
  6844              copied CDATA #FIXED "1"
       
  6845              class  CDATA #FIXED "0"
       
  6846              number CDATA #FIXED "8"
       
  6847              length CDATA #FIXED "4"
       
  6848              id %Digits; #REQUIRED>
       
  6849 
       
  6850    <!ELEMENT timestamp (tstamp)+>
       
  6851    <!-- 0 <= oflw <=15 -->
       
  6852 
       
  6853 
       
  6854 
       
  6855 Kennedy                      Informational                     [Page 10]
       
  6856 
       
  6857 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  6858 
       
  6859 
       
  6860    <!ATTLIST timestamp
       
  6861              copied CDATA #FIXED "0"
       
  6862              class  CDATA #FIXED "2"
       
  6863              number CDATA #FIXED "4"
       
  6864              length %Digits;  #REQUIRED
       
  6865              pointer %Digits; #REQUIRED
       
  6866              oflw %Digits;    #REQUIRED
       
  6867              flag (0 | 1 | 3)  #REQUIRED>
       
  6868 
       
  6869    <!ELEMENT tstamp EMPTY>
       
  6870    <!ATTLIST tstamp
       
  6871              time %Digits;   #REQUIRED
       
  6872              address %IP4Addr; #IMPLIED>
       
  6873    <!--
       
  6874        padding to bring header to 32-bit boundary.
       
  6875        pad MUST be "0"*
       
  6876     -->
       
  6877    <!ELEMENT padding EMPTY>
       
  6878    <!ATTLIST padding
       
  6879              pad CDATA #REQUIRED>
       
  6880 
       
  6881    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
  6882         by section 2.1 of this RFC -->
       
  6883    <!ELEMENT payload (CDATA)>
       
  6884 
       
  6885 7.2.  TCPoXML DTD
       
  6886 
       
  6887    <!--
       
  6888       DTD for TCP over XML.
       
  6889       Refer to this DTD as:
       
  6890 
       
  6891       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  6892    -->
       
  6893 
       
  6894    <!-- the pseudoheader is only included for checksum calculations -->
       
  6895    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
  6896 
       
  6897    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
  6898                          reserved, control, window, checksum, urgent,
       
  6899                          tcp.options, padding)>
       
  6900 
       
  6901    <!ELEMENT src EMPTY>
       
  6902    <!-- 0 <= port <= 65,535 -->
       
  6903    <!ATTLIST src
       
  6904              port %Digits; #REQUIRED>
       
  6905 
       
  6906    <!ELEMENT dest EMPTY>
       
  6907    <!-- 0 <= port <= 65,535 -->
       
  6908 
       
  6909 
       
  6910 
       
  6911 Kennedy                      Informational                     [Page 11]
       
  6912 
       
  6913 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  6914 
       
  6915 
       
  6916    <!ATTLIST dest
       
  6917              port %Digits; #REQUIRED>
       
  6918 
       
  6919    <!ELEMENT sequence EMPTY>
       
  6920    <!-- 0 <= number <= 4294967295 -->
       
  6921    <!ATTLIST sequence
       
  6922              number %Digits; #REQUIRED>
       
  6923 
       
  6924    <!ELEMENT acknowledgement EMPTY>
       
  6925    <!-- 0 <= number <= 4294967295 -->
       
  6926    <!ATTLIST acknowledgement
       
  6927              number %Digits; #REQUIRED>
       
  6928 
       
  6929    <!ELEMENT offset EMPTY>
       
  6930    <!-- 0 <= number <= 255 -->
       
  6931    <!ATTLIST offset
       
  6932              number %Digits; #REQUIRED>
       
  6933 
       
  6934    <!ELEMENT reserved EMPTY>
       
  6935    <!ATTLIST reserved
       
  6936              value CDATA #FIXED "0">
       
  6937 
       
  6938    <!ELEMENT control EMPTY>
       
  6939    <!ATTLIST control
       
  6940              urg (0|1) #IMPLIED
       
  6941              ack (0|1) #IMPLIED
       
  6942              psh (0|1) #IMPLIED
       
  6943              rst (0|1) #IMPLIED
       
  6944              syn (0|1) #IMPLIED
       
  6945              fin (0|1) #IMPLIED>
       
  6946 
       
  6947    <!ELEMENT window EMPTY>
       
  6948    <!-- 0 <= size <= 65,535 -->
       
  6949    <!ATTLIST window
       
  6950              size %Digits; #REQUIRED>
       
  6951 
       
  6952    <!--
       
  6953       checksum as in ip, but with
       
  6954       the following pseudo-header added into the tcp element:
       
  6955      -->
       
  6956    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
  6957                                tcp.length)>
       
  6958 
       
  6959    <!--
       
  6960       tcp header + data length in octets. does not include the size of
       
  6961 
       
  6962       the pseudoheader.
       
  6963     -->
       
  6964 
       
  6965 
       
  6966 
       
  6967 Kennedy                      Informational                     [Page 12]
       
  6968 
       
  6969 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  6970 
       
  6971 
       
  6972    <!ELEMENT tcp.length EMPTY>
       
  6973    <!ATTLIST tcp.length
       
  6974              value %Digits; #REQUIRED>
       
  6975 
       
  6976    <!ELEMENT urgent EMPTY>
       
  6977    <!-- 0 <= pointer <= 65,535 -->
       
  6978    <!ATTLIST urgent
       
  6979              pointer %Digits; #REQUIRED>
       
  6980 
       
  6981    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
  6982 
       
  6983    <!ELEMENT tcp.end EMPTY>
       
  6984    <!ATTLIST tcp.end
       
  6985              kind CDATA #FIXED "0">
       
  6986 
       
  6987    <!ELEMENT tcp.noop EMPTY>
       
  6988    <!ATTLIST tcp.noop
       
  6989              kind CDATA #FIXED "1">
       
  6990 
       
  6991    <!ELEMENT tcp.mss EMPTY>
       
  6992    <!ATTLIST tcp.mss
       
  6993              kind CDATA #FIXED "2"
       
  6994              length CDATA #FIXED "4"
       
  6995              size %Digits; #REQUIRED>
       
  6996 
       
  6997 7.3.  UDPoXML DTD
       
  6998 
       
  6999    <!--
       
  7000       DTD for UDP over XML.
       
  7001       Refer to this DTD as:
       
  7002 
       
  7003       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  7004    -->
       
  7005 
       
  7006    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
  7007 
       
  7008    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
  7009 
       
  7010    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
  7011                                udp.length)>
       
  7012 
       
  7013    <!--
       
  7014       udp header + data length in octets. does not include the size of
       
  7015       the pseudoheader.
       
  7016     -->
       
  7017    <!ELEMENT udp.length EMPTY>
       
  7018    <!ATTLIST udp.length
       
  7019              value %Digits; #REQUIRED>
       
  7020 
       
  7021 
       
  7022 
       
  7023 Kennedy                      Informational                     [Page 13]
       
  7024 
       
  7025 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  7026 
       
  7027 
       
  7028 8. Security Considerations
       
  7029 
       
  7030    XML, as a subset of SGML, has the same security considerations as
       
  7031    specified in SGML Media Types [RFC1874].  Security considerations
       
  7032    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
  7033    not attempt to correct for issues not related to message format.
       
  7034 
       
  7035 9.   References
       
  7036 
       
  7037    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
  7038                February 2002. (Work in Progress)
       
  7039 
       
  7040    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
  7041                August 1980.
       
  7042 
       
  7043    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
  7044                September 1981.
       
  7045 
       
  7046    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
  7047                793, September 1981.
       
  7048 
       
  7049    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
  7050                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
  7051 
       
  7052    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
  7053                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
  7054                43, RFC 1042, February 1988.
       
  7055 
       
  7056    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
  7057                Application and Support", RFC 1123, October 1989.
       
  7058 
       
  7059    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
  7060                1995.
       
  7061 
       
  7062    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
  7063                October 1996.
       
  7064 
       
  7065    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
  7066                Extensions (MIME) Part One: Format of Internet Message
       
  7067                Bodies", RFC 2045, November 1996.
       
  7068 
       
  7069    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
  7070                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
  7071 
       
  7072    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
  7073                10646", RFC 2279, January 1998.
       
  7074 
       
  7075 
       
  7076 
       
  7077 
       
  7078 
       
  7079 Kennedy                      Informational                     [Page 14]
       
  7080 
       
  7081 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  7082 
       
  7083 
       
  7084    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
  7085                (IPv6) Specification", RFC 2460, December 1998.
       
  7086 
       
  7087    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
  7088                RFC 3080, March 2001.
       
  7089 
       
  7090    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
  7091                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
  7092                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
  7093                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
  7094 
       
  7095    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
  7096                Markup Language (XML)" World Wide Web Consortium
       
  7097                Recommendation REC- xml-19980210.
       
  7098                http://www.w3.org/TR/1998/REC-xml-19980210
       
  7099 
       
  7100 10.  Author's Address
       
  7101 
       
  7102    Hugh Kennedy
       
  7103    Mimezine
       
  7104    1060 West Addison
       
  7105    Chicago, IL 60613
       
  7106    USA
       
  7107 
       
  7108    EMail: kennedyh@engin.umich.edu
       
  7109 
       
  7110 
       
  7111 
       
  7112 
       
  7113 
       
  7114 
       
  7115 
       
  7116 
       
  7117 
       
  7118 
       
  7119 
       
  7120 
       
  7121 
       
  7122 
       
  7123 
       
  7124 
       
  7125 
       
  7126 
       
  7127 
       
  7128 
       
  7129 
       
  7130 
       
  7131 
       
  7132 
       
  7133 
       
  7134 
       
  7135 Kennedy                      Informational                     [Page 15]
       
  7136 
       
  7137 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  7138 
       
  7139 
       
  7140 11.  Full Copyright Statement
       
  7141 
       
  7142    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  7143 
       
  7144    This document and translations of it may be copied and furnished to
       
  7145    others, and derivative works that comment on or otherwise explain it
       
  7146    or assist in its implementation may be prepared, copied, published
       
  7147    and distributed, in whole or in part, without restriction of any
       
  7148    kind, provided that the above copyright notice and this paragraph are
       
  7149    included on all such copies and derivative works.  However, this
       
  7150    document itself may not be modified in any way, such as by removing
       
  7151    the copyright notice or references to the Internet Society or other
       
  7152    Internet organizations, except as needed for the purpose of
       
  7153    developing Internet standards in which case the procedures for
       
  7154    copyrights defined in the Internet Standards process must be
       
  7155    followed, or as required to translate it into languages other than
       
  7156    English.
       
  7157 
       
  7158    The limited permissions granted above are perpetual and will not be
       
  7159    revoked by the Internet Society or its successors or assigns.
       
  7160 
       
  7161    This document and the information contained herein is provided on an
       
  7162    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
  7163    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
  7164    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
  7165    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
  7166    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
  7167 
       
  7168 Acknowledgement
       
  7169 
       
  7170    Funding for the RFC Editor function is currently provided by the
       
  7171    Internet Society.
       
  7172 
       
  7173 
       
  7174 
       
  7175 
       
  7176 
       
  7177 
       
  7178 
       
  7179 
       
  7180 
       
  7181 
       
  7182 
       
  7183 
       
  7184 
       
  7185 
       
  7186 
       
  7187 
       
  7188 
       
  7189 
       
  7190 
       
  7191 Kennedy                      Informational                     [Page 16]
       
  7192 
       
  7193 
       
  7194 
       
  7195 
       
  7196 
       
  7197 
       
  7198 
       
  7199 Network Working Group                                         H. Kennedy
       
  7200 Request for Comments: 3252                                      Mimezine
       
  7201 Category: Informational                                     1 April 2002
       
  7202 
       
  7203 
       
  7204                  Binary Lexical Octet Ad-hoc Transport
       
  7205 
       
  7206 Status of this Memo
       
  7207 
       
  7208    This memo provides information for the Internet community.  It does
       
  7209    not specify an Internet standard of any kind.  Distribution of this
       
  7210    memo is unlimited.
       
  7211 
       
  7212 Copyright Notice
       
  7213 
       
  7214    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  7215 
       
  7216 Abstract
       
  7217 
       
  7218    This document defines a reformulation of IP and two transport layer
       
  7219    protocols (TCP and UDP) as XML applications.
       
  7220 
       
  7221 1.   Introduction
       
  7222 
       
  7223 1.1. Overview
       
  7224 
       
  7225    This document describes the Binary Lexical Octet Ad-hoc Transport
       
  7226    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
  7227    (IP [RFC791]), and two associated transport layer protocols (TCP
       
  7228    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
  7229    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
  7230    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
  7231    across the public Internet.
       
  7232 
       
  7233 1.2. Motivation
       
  7234 
       
  7235    The wild popularity of XML as a basis for application-level protocols
       
  7236    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
  7237    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
  7238    investigation into the possibility of extending the use of XML in the
       
  7239    protocol stack.  Using XML at both the transport and network layer in
       
  7240    addition to the application layer would provide for an amazing amount
       
  7241    of power and flexibility while removing dependencies on proprietary
       
  7242    and hard-to-understand binary protocols.  This protocol unification
       
  7243    would also allow applications to use a single XML parser for all
       
  7244    aspects of their operation, eliminating developer time spent figuring
       
  7245    out the intricacies of each new protocol, and moving the hard work of
       
  7246 
       
  7247 
       
  7248 
       
  7249 
       
  7250 Kennedy                      Informational                      [Page 1]
       
  7251 
       
  7252 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  7253 
       
  7254 
       
  7255    parsing to the XML toolset.  The use of XML also mitigates concerns
       
  7256    over "network vs. host" byte ordering which is at the root of many
       
  7257    network application bugs.
       
  7258 
       
  7259 1.3. Relation to Existing Protocols
       
  7260 
       
  7261    The reformulations specified in this RFC follow as closely as
       
  7262    possible the spirit of the RFCs on which they are based, and so MAY
       
  7263    contain elements or attributes that would not be needed in a pure
       
  7264    reworking (e.g. length attributes, which are implicit in XML.)
       
  7265 
       
  7266    The layering of network and transport protocols are maintained in
       
  7267    this RFC despite the optimizations that could be made if the line
       
  7268    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
  7269    element in the DTD) in order to foster future use of this protocol as
       
  7270    a basis for reformulating other protocols (such as ICMP.)
       
  7271 
       
  7272    Other than the encoding, the behavioral aspects of each of the
       
  7273    existing protocols remain unchanged.  Routing, address spaces, TCP
       
  7274    congestion control, etc. behave as specified in the extant standards.
       
  7275    Adapting to new standards and experimental algorithm heuristics for
       
  7276    improving performance will become much easier once the move to BLOAT
       
  7277    has been completed.
       
  7278 
       
  7279 1.4. Requirement Levels
       
  7280 
       
  7281    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
  7282    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
  7283    document are to be interpreted as described in BCP 14, RFC 2119
       
  7284    [RFC2119].
       
  7285 
       
  7286 2.   IPoXML
       
  7287 
       
  7288    This protocol MUST be implemented to be compliant with this RFC.
       
  7289    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
  7290    (section 3.) and higher-level application protocols.
       
  7291 
       
  7292    The DTD for this document type can be found in section 7.1.
       
  7293 
       
  7294    The routing of IPoXML can be easily implemented on hosts with an XML
       
  7295    parser, as the regular structure lends itself handily to parsing and
       
  7296    validation of the document/datagram and then processing the
       
  7297    destination address, TTL, and checksum before sending it on to its
       
  7298    next-hop.
       
  7299 
       
  7300    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
  7301    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
  7302    would have exceeded the 1500 byte Ethernet MTU.
       
  7303 
       
  7304 
       
  7305 
       
  7306 Kennedy                      Informational                      [Page 2]
       
  7307 
       
  7308 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  7309 
       
  7310 
       
  7311    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
  7312    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
  7313    formed and include the XMLDecl.
       
  7314 
       
  7315 2.1. IP Description
       
  7316 
       
  7317    A number of items have changed (for the better) from the original IP
       
  7318    specification.  Bit-masks, where present have been converted into
       
  7319    human-readable values.  IP addresses are listed in their dotted-
       
  7320    decimal notation [RFC1123].  Length and checksum values are present
       
  7321    as decimal integers.
       
  7322 
       
  7323    To calculate the length and checksum fields of the IP element, a
       
  7324    canonicalized form of the element MUST be used.  The canonical form
       
  7325    SHALL have no whitespace (including newline characters) between
       
  7326    elements and only one space character between attributes.  There
       
  7327    SHALL NOT be a space following the last attribute in an element.
       
  7328 
       
  7329    An iterative method SHOULD be used to calculate checksums, as the
       
  7330    length field will vary based on the size of the checksum.
       
  7331 
       
  7332    The payload element bears special attention.  Due to the character
       
  7333    set restrictions of XML, the payload of IP datagrams (which MAY
       
  7334    contain arbitrary data) MUST be encoded for transport. This RFC
       
  7335    REQUIRES the contents of the payload to be encoded in the base-64
       
  7336    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
  7337    encoded output MUST be wrapped on 76-character lines.
       
  7338 
       
  7339 
       
  7340 
       
  7341 
       
  7342 
       
  7343 
       
  7344 
       
  7345 
       
  7346 
       
  7347 
       
  7348 
       
  7349 
       
  7350 
       
  7351 
       
  7352 
       
  7353 
       
  7354 
       
  7355 
       
  7356 
       
  7357 
       
  7358 
       
  7359 
       
  7360 
       
  7361 
       
  7362 Kennedy                      Informational                      [Page 3]
       
  7363 
       
  7364 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  7365 
       
  7366 
       
  7367 2.2. Example Datagram
       
  7368 
       
  7369    The following is an example IPoXML datagram with an empty payload:
       
  7370 
       
  7371    <?xml version="1.0" encoding="UTF-8"?>
       
  7372    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  7373    <ip>
       
  7374    <header length="474">
       
  7375    <version value="4"/>
       
  7376    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
  7377         relibility="Normal" reserved="0"/>
       
  7378    <total.length value="461"/>
       
  7379    <id value="1"/>
       
  7380    <flags reserved="0" df="dont" mf="last"/>
       
  7381    <offset value="0"/>
       
  7382    <ttl value="255"/>
       
  7383    <protocol value="6"/>
       
  7384    <checksum value="8707"/>
       
  7385    <source address="10.0.0.22"/>
       
  7386    <destination address="10.0.0.1"/>
       
  7387    <options>
       
  7388    <end copied="0" class="0" number="0"/>
       
  7389    </options>
       
  7390    <padding pad="0"/>
       
  7391    </header>
       
  7392    <payload>
       
  7393    </payload>
       
  7394    </ip>
       
  7395 
       
  7396 3.   TCPoXML
       
  7397 
       
  7398    This protocol MUST be implemented to be compliant with this RFC.  The
       
  7399    DTD for this document type can be found in section 7.2.
       
  7400 
       
  7401 3.1. TCP Description
       
  7402 
       
  7403    A number of items have changed from the original TCP specification.
       
  7404    Bit-masks, where present have been converted into human-readable
       
  7405    values.  Length and checksum and port values are present as decimal
       
  7406    integers.
       
  7407 
       
  7408    To calculate the length and checksum fields of the TCP element, a
       
  7409    canonicalized form of the element MUST be used as in section 2.1.
       
  7410 
       
  7411    An iterative method SHOULD be used to calculate checksums as in
       
  7412    section 2.1.
       
  7413 
       
  7414    The payload element MUST be encoded as in section 2.1.
       
  7415 
       
  7416 
       
  7417 
       
  7418 Kennedy                      Informational                      [Page 4]
       
  7419 
       
  7420 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  7421 
       
  7422 
       
  7423    The TCP offset element was expanded to a maximum of 255 from 16 to
       
  7424    allow for the increased size of the header in XML.
       
  7425 
       
  7426    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  7427    as well as the <!DOCTYPE> declaration.
       
  7428 
       
  7429 3.2. Example Datagram
       
  7430 
       
  7431    The following is an example TCPoXML datagram with an empty payload:
       
  7432 
       
  7433    <?xml version="1.0" encoding="UTF-8"?>
       
  7434    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  7435    <tcp>
       
  7436    <tcp.header>
       
  7437    <src port="31415"/>
       
  7438    <dest port="42424"/>
       
  7439    <sequence number="322622954"/>
       
  7440    <acknowledgement number="689715995"/>
       
  7441    <offset number=""/>
       
  7442    <reserved value="0"/>
       
  7443    <control syn="1" ack="1"/>
       
  7444    <window size="1"/>
       
  7445    <urgent pointer="0"/>
       
  7446    <checksum value="2988"/>
       
  7447    <tcp.options>
       
  7448    <tcp.end kind="0"/>
       
  7449    </tcp.options>
       
  7450    <padding pad="0"/>
       
  7451    </tcp.header>
       
  7452    <payload>
       
  7453    </payload>
       
  7454    </tcp>
       
  7455 
       
  7456 4.   UDPoXML
       
  7457 
       
  7458    This protocol MUST be implemented to be compliant with this RFC.  The
       
  7459    DTD for this document type can be found in section 7.3.
       
  7460 
       
  7461 4.1. UDP Description
       
  7462 
       
  7463    A number of items have changed from the original UDP specification.
       
  7464    Bit-masks, where present have been converted into human-readable
       
  7465    values.  Length and checksum and port values are present as decimal
       
  7466    integers.
       
  7467 
       
  7468 
       
  7469 
       
  7470 
       
  7471 
       
  7472 
       
  7473 
       
  7474 Kennedy                      Informational                      [Page 5]
       
  7475 
       
  7476 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  7477 
       
  7478 
       
  7479    To calculate the length and checksum fields of the UDP element, a
       
  7480    canonicalized form of the element MUST be used as in section 2.1.  An
       
  7481    iterative method SHOULD be used to calculate checksums as in section
       
  7482    2.1.
       
  7483 
       
  7484    The payload element MUST be encoded as in section 2.1.
       
  7485 
       
  7486    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  7487    as well as the <!DOCTYPE> declaration.
       
  7488 
       
  7489 4.2. Example Datagram
       
  7490 
       
  7491    The following is an example UDPoXML datagram with an empty payload:
       
  7492 
       
  7493    <?xml version="1.0" encoding="UTF-8"?>
       
  7494    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  7495    <udp>
       
  7496    <udp.header>
       
  7497    <src port="31415"/>
       
  7498    <dest port="42424"/>
       
  7499    <udp.length value="143"/>
       
  7500    <checksum value="2988"/>
       
  7501    </udp.header>
       
  7502    <payload>
       
  7503    </payload>
       
  7504    </udp>
       
  7505 
       
  7506 5.   Network Transport
       
  7507 
       
  7508    This document provides for the transmission of BLOAT datagrams over
       
  7509    two common families of physical layer transport.  Future RFCs will
       
  7510    address additional transports as routing vendors catch up to the
       
  7511    specification, and we begin to see BLOAT routed across the Internet
       
  7512    backbone.
       
  7513 
       
  7514 5.1. Ethernet
       
  7515 
       
  7516    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
  7517    exception that the type field of the Ethernet frame MUST contain the
       
  7518    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
  7519    be 0x3c 3f 78 6d 6c ("<?xml".)
       
  7520 
       
  7521 5.2. IEEE 802
       
  7522 
       
  7523    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
  7524    that the protocol type code for IPoXML is 0xBEEF.
       
  7525 
       
  7526 
       
  7527 
       
  7528 
       
  7529 
       
  7530 Kennedy                      Informational                      [Page 6]
       
  7531 
       
  7532 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  7533 
       
  7534 
       
  7535 6. Gatewaying over IP
       
  7536 
       
  7537    In order to facilitate the gradual introduction of BLOAT into the
       
  7538    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
  7539    gateway between networks that run BLOAT natively on their LANs.
       
  7540 
       
  7541 7. DTDs
       
  7542 
       
  7543    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
  7544    Network DTD (7.1.)
       
  7545 
       
  7546    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
  7547    [XML]) although it is understood that most IPoXML implementations
       
  7548    will not need to pull down the DTD, as it will normally be embedded
       
  7549    in the implementation, and presents something of a catch-22 if you
       
  7550    need to load part of your network protocol over the network.
       
  7551 
       
  7552 7.1.  IPoXML DTD
       
  7553 
       
  7554    <!--
       
  7555     DTD for IP over XML.
       
  7556     Refer to this DTD as:
       
  7557 
       
  7558     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  7559    -->
       
  7560    <!--
       
  7561     DTD data types:
       
  7562 
       
  7563       Digits      [0..9]+
       
  7564 
       
  7565       Precedence  "NetworkControl | InternetworkControl |
       
  7566                    CRITIC | FlashOverride | Flash | Immediate |
       
  7567                    Priority | Routine"
       
  7568 
       
  7569       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
  7570 
       
  7571       Class       [0..3]
       
  7572 
       
  7573       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
  7574                     Restricted | Secret | Top Secret | Reserved"
       
  7575 
       
  7576       Compartments [0..65535]
       
  7577 
       
  7578       Handling     [0..65535]
       
  7579 
       
  7580       TCC          [0..16777216]
       
  7581 
       
  7582    -->
       
  7583 
       
  7584 
       
  7585 
       
  7586 Kennedy                      Informational                      [Page 7]
       
  7587 
       
  7588 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  7589 
       
  7590 
       
  7591    <!ENTITY % Digits "CDATA">
       
  7592    <!ENTITY % Precedence "CDATA">
       
  7593    <!ENTITY % IP4Addr "CDATA">
       
  7594    <!ENTITY % Class "CDATA">
       
  7595    <!ENTITY % Sec "CDATA">
       
  7596    <!ENTITY % Compartments "CDATA">
       
  7597    <!ENTITY % Handling "CDATA">
       
  7598    <!ENTITY % TCC "CDATA">
       
  7599 
       
  7600    <!ELEMENT ip (header, payload)>
       
  7601 
       
  7602    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
  7603                     protocol, checksum, source, destination, options,
       
  7604                     padding)>
       
  7605    <!-- length of header in 32-bit words -->
       
  7606    <!ATTLIST header
       
  7607              length %Digits; #REQUIRED>
       
  7608 
       
  7609    <!ELEMENT version EMPTY>
       
  7610    <!-- ip version. SHOULD be "4" -->
       
  7611    <!ATTLIST version
       
  7612              value   %Digits;  #REQUIRED>
       
  7613 
       
  7614    <!ELEMENT tos EMPTY>
       
  7615    <!ATTLIST tos
       
  7616              precedence   %Precedence;    #REQUIRED
       
  7617              delay    (normal | low)  #REQUIRED
       
  7618              throughput   (normal | high) #REQUIRED
       
  7619              relibility   (normal | high) #REQUIRED
       
  7620              reserved     CDATA #FIXED "0">
       
  7621 
       
  7622    <!ELEMENT total.length EMPTY>
       
  7623    <!--
       
  7624     total length of datagram (header and payload) in octets, MUST be
       
  7625     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
  7626     ethernets).
       
  7627    -->
       
  7628    <!ATTLIST total.length
       
  7629              value %Digits; #REQUIRED>
       
  7630 
       
  7631    <!ELEMENT id EMPTY>
       
  7632    <!-- 0 <= id <= 65,535  -->
       
  7633    <!ATTLIST id
       
  7634              value %Digits; #REQUIRED>
       
  7635 
       
  7636    <!ELEMENT flags EMPTY>
       
  7637    <!-- df = don't fragment, mf = more fragments  -->
       
  7638    <!ATTLIST flags
       
  7639 
       
  7640 
       
  7641 
       
  7642 Kennedy                      Informational                      [Page 8]
       
  7643 
       
  7644 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  7645 
       
  7646 
       
  7647           reserved CDATA  #FIXED "0"
       
  7648           df (may|dont)   #REQUIRED
       
  7649           mf (last|more)  #REQUIRED>
       
  7650 
       
  7651    <!ELEMENT offset EMPTY>
       
  7652    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
  7653    <!ATTLIST offset
       
  7654              value %Digits; #REQUIRED>
       
  7655 
       
  7656    <!ELEMENT ttl EMPTY>
       
  7657    <!-- 0 <= ttl <= 255 -->
       
  7658    <!ATTLIST ttl
       
  7659              value %Digits; #REQUIRED>
       
  7660 
       
  7661    <!ELEMENT protocol EMPTY>
       
  7662    <!-- 0 <= protocol <= 255 (per IANA) -->
       
  7663    <!ATTLIST protocol
       
  7664              value %Digits; #REQUIRED>
       
  7665 
       
  7666    <!ELEMENT checksum EMPTY>
       
  7667    <!-- 0 <= checksum <= 65535 (over header only) -->
       
  7668    <!ATTLIST checksum
       
  7669              value %Digits; #REQUIRED>
       
  7670 
       
  7671    <!ELEMENT source EMPTY>
       
  7672    <!ATTLIST source
       
  7673              address %IP4Addr; #REQUIRED>
       
  7674 
       
  7675    <!ELEMENT destination EMPTY>
       
  7676    <!ATTLIST destination
       
  7677              address %IP4Addr; #REQUIRED>
       
  7678 
       
  7679    <!ELEMENT options ( end | noop | security | loose | strict | record
       
  7680                      | stream | timestamp )*>
       
  7681 
       
  7682    <!ELEMENT end EMPTY>
       
  7683    <!ATTLIST end
       
  7684              copied (0|1) #REQUIRED
       
  7685              class  CDATA #FIXED "0"
       
  7686              number CDATA #FIXED "0">
       
  7687 
       
  7688    <!ELEMENT noop EMPTY>
       
  7689    <!ATTLIST noop
       
  7690              copied (0|1) #REQUIRED
       
  7691              class  CDATA #FIXED "0"
       
  7692              number CDATA #FIXED "1">
       
  7693 
       
  7694    <!ELEMENT security EMPTY>
       
  7695 
       
  7696 
       
  7697 
       
  7698 Kennedy                      Informational                      [Page 9]
       
  7699 
       
  7700 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  7701 
       
  7702 
       
  7703    <!ATTLIST security
       
  7704              copied CDATA #FIXED "1"
       
  7705              class  CDATA #FIXED "0"
       
  7706              number CDATA #FIXED "2"
       
  7707              length CDATA #FIXED "11"
       
  7708              security %Sec; #REQUIRED
       
  7709              compartments %Compartments; #REQUIRED
       
  7710              handling %Handling; #REQUIRED
       
  7711              tcc %TCC; #REQUIRED>
       
  7712    <!ELEMENT loose (hop)+>
       
  7713    <!ATTLIST loose
       
  7714              copied CDATA #FIXED "1"
       
  7715              class  CDATA #FIXED "0"
       
  7716              number CDATA #FIXED "3"
       
  7717              length %Digits; #REQUIRED
       
  7718              pointer %Digits; #REQUIRED>
       
  7719 
       
  7720    <!ELEMENT hop EMPTY>
       
  7721    <!ATTLIST hop
       
  7722              address %IP4Addr; #REQUIRED>
       
  7723 
       
  7724    <!ELEMENT strict (hop)+>
       
  7725    <!ATTLIST strict
       
  7726              copied CDATA #FIXED "1"
       
  7727              class  CDATA #FIXED "0"
       
  7728              number CDATA #FIXED "9"
       
  7729              length %Digits; #REQUIRED
       
  7730              pointer %Digits; #REQUIRED>
       
  7731 
       
  7732    <!ELEMENT record (hop)+>
       
  7733    <!ATTLIST record
       
  7734              copied CDATA #FIXED "0"
       
  7735              class  CDATA #FIXED "0"
       
  7736              number CDATA #FIXED "7"
       
  7737              length %Digits; #REQUIRED
       
  7738              pointer %Digits; #REQUIRED>
       
  7739 
       
  7740    <!ELEMENT stream EMPTY>
       
  7741    <!-- 0 <= id <= 65,535 -->
       
  7742    <!ATTLIST stream
       
  7743              copied CDATA #FIXED "1"
       
  7744              class  CDATA #FIXED "0"
       
  7745              number CDATA #FIXED "8"
       
  7746              length CDATA #FIXED "4"
       
  7747              id %Digits; #REQUIRED>
       
  7748 
       
  7749    <!ELEMENT timestamp (tstamp)+>
       
  7750    <!-- 0 <= oflw <=15 -->
       
  7751 
       
  7752 
       
  7753 
       
  7754 Kennedy                      Informational                     [Page 10]
       
  7755 
       
  7756 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  7757 
       
  7758 
       
  7759    <!ATTLIST timestamp
       
  7760              copied CDATA #FIXED "0"
       
  7761              class  CDATA #FIXED "2"
       
  7762              number CDATA #FIXED "4"
       
  7763              length %Digits;  #REQUIRED
       
  7764              pointer %Digits; #REQUIRED
       
  7765              oflw %Digits;    #REQUIRED
       
  7766              flag (0 | 1 | 3)  #REQUIRED>
       
  7767 
       
  7768    <!ELEMENT tstamp EMPTY>
       
  7769    <!ATTLIST tstamp
       
  7770              time %Digits;   #REQUIRED
       
  7771              address %IP4Addr; #IMPLIED>
       
  7772    <!--
       
  7773        padding to bring header to 32-bit boundary.
       
  7774        pad MUST be "0"*
       
  7775     -->
       
  7776    <!ELEMENT padding EMPTY>
       
  7777    <!ATTLIST padding
       
  7778              pad CDATA #REQUIRED>
       
  7779 
       
  7780    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
  7781         by section 2.1 of this RFC -->
       
  7782    <!ELEMENT payload (CDATA)>
       
  7783 
       
  7784 7.2.  TCPoXML DTD
       
  7785 
       
  7786    <!--
       
  7787       DTD for TCP over XML.
       
  7788       Refer to this DTD as:
       
  7789 
       
  7790       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  7791    -->
       
  7792 
       
  7793    <!-- the pseudoheader is only included for checksum calculations -->
       
  7794    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
  7795 
       
  7796    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
  7797                          reserved, control, window, checksum, urgent,
       
  7798                          tcp.options, padding)>
       
  7799 
       
  7800    <!ELEMENT src EMPTY>
       
  7801    <!-- 0 <= port <= 65,535 -->
       
  7802    <!ATTLIST src
       
  7803              port %Digits; #REQUIRED>
       
  7804 
       
  7805    <!ELEMENT dest EMPTY>
       
  7806    <!-- 0 <= port <= 65,535 -->
       
  7807 
       
  7808 
       
  7809 
       
  7810 Kennedy                      Informational                     [Page 11]
       
  7811 
       
  7812 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  7813 
       
  7814 
       
  7815    <!ATTLIST dest
       
  7816              port %Digits; #REQUIRED>
       
  7817 
       
  7818    <!ELEMENT sequence EMPTY>
       
  7819    <!-- 0 <= number <= 4294967295 -->
       
  7820    <!ATTLIST sequence
       
  7821              number %Digits; #REQUIRED>
       
  7822 
       
  7823    <!ELEMENT acknowledgement EMPTY>
       
  7824    <!-- 0 <= number <= 4294967295 -->
       
  7825    <!ATTLIST acknowledgement
       
  7826              number %Digits; #REQUIRED>
       
  7827 
       
  7828    <!ELEMENT offset EMPTY>
       
  7829    <!-- 0 <= number <= 255 -->
       
  7830    <!ATTLIST offset
       
  7831              number %Digits; #REQUIRED>
       
  7832 
       
  7833    <!ELEMENT reserved EMPTY>
       
  7834    <!ATTLIST reserved
       
  7835              value CDATA #FIXED "0">
       
  7836 
       
  7837    <!ELEMENT control EMPTY>
       
  7838    <!ATTLIST control
       
  7839              urg (0|1) #IMPLIED
       
  7840              ack (0|1) #IMPLIED
       
  7841              psh (0|1) #IMPLIED
       
  7842              rst (0|1) #IMPLIED
       
  7843              syn (0|1) #IMPLIED
       
  7844              fin (0|1) #IMPLIED>
       
  7845 
       
  7846    <!ELEMENT window EMPTY>
       
  7847    <!-- 0 <= size <= 65,535 -->
       
  7848    <!ATTLIST window
       
  7849              size %Digits; #REQUIRED>
       
  7850 
       
  7851    <!--
       
  7852       checksum as in ip, but with
       
  7853       the following pseudo-header added into the tcp element:
       
  7854      -->
       
  7855    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
  7856                                tcp.length)>
       
  7857 
       
  7858    <!--
       
  7859       tcp header + data length in octets. does not include the size of
       
  7860 
       
  7861       the pseudoheader.
       
  7862     -->
       
  7863 
       
  7864 
       
  7865 
       
  7866 Kennedy                      Informational                     [Page 12]
       
  7867 
       
  7868 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  7869 
       
  7870 
       
  7871    <!ELEMENT tcp.length EMPTY>
       
  7872    <!ATTLIST tcp.length
       
  7873              value %Digits; #REQUIRED>
       
  7874 
       
  7875    <!ELEMENT urgent EMPTY>
       
  7876    <!-- 0 <= pointer <= 65,535 -->
       
  7877    <!ATTLIST urgent
       
  7878              pointer %Digits; #REQUIRED>
       
  7879 
       
  7880    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
  7881 
       
  7882    <!ELEMENT tcp.end EMPTY>
       
  7883    <!ATTLIST tcp.end
       
  7884              kind CDATA #FIXED "0">
       
  7885 
       
  7886    <!ELEMENT tcp.noop EMPTY>
       
  7887    <!ATTLIST tcp.noop
       
  7888              kind CDATA #FIXED "1">
       
  7889 
       
  7890    <!ELEMENT tcp.mss EMPTY>
       
  7891    <!ATTLIST tcp.mss
       
  7892              kind CDATA #FIXED "2"
       
  7893              length CDATA #FIXED "4"
       
  7894              size %Digits; #REQUIRED>
       
  7895 
       
  7896 7.3.  UDPoXML DTD
       
  7897 
       
  7898    <!--
       
  7899       DTD for UDP over XML.
       
  7900       Refer to this DTD as:
       
  7901 
       
  7902       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  7903    -->
       
  7904 
       
  7905    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
  7906 
       
  7907    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
  7908 
       
  7909    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
  7910                                udp.length)>
       
  7911 
       
  7912    <!--
       
  7913       udp header + data length in octets. does not include the size of
       
  7914       the pseudoheader.
       
  7915     -->
       
  7916    <!ELEMENT udp.length EMPTY>
       
  7917    <!ATTLIST udp.length
       
  7918              value %Digits; #REQUIRED>
       
  7919 
       
  7920 
       
  7921 
       
  7922 Kennedy                      Informational                     [Page 13]
       
  7923 
       
  7924 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  7925 
       
  7926 
       
  7927 8. Security Considerations
       
  7928 
       
  7929    XML, as a subset of SGML, has the same security considerations as
       
  7930    specified in SGML Media Types [RFC1874].  Security considerations
       
  7931    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
  7932    not attempt to correct for issues not related to message format.
       
  7933 
       
  7934 9.   References
       
  7935 
       
  7936    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
  7937                February 2002. (Work in Progress)
       
  7938 
       
  7939    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
  7940                August 1980.
       
  7941 
       
  7942    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
  7943                September 1981.
       
  7944 
       
  7945    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
  7946                793, September 1981.
       
  7947 
       
  7948    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
  7949                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
  7950 
       
  7951    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
  7952                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
  7953                43, RFC 1042, February 1988.
       
  7954 
       
  7955    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
  7956                Application and Support", RFC 1123, October 1989.
       
  7957 
       
  7958    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
  7959                1995.
       
  7960 
       
  7961    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
  7962                October 1996.
       
  7963 
       
  7964    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
  7965                Extensions (MIME) Part One: Format of Internet Message
       
  7966                Bodies", RFC 2045, November 1996.
       
  7967 
       
  7968    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
  7969                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
  7970 
       
  7971    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
  7972                10646", RFC 2279, January 1998.
       
  7973 
       
  7974 
       
  7975 
       
  7976 
       
  7977 
       
  7978 Kennedy                      Informational                     [Page 14]
       
  7979 
       
  7980 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  7981 
       
  7982 
       
  7983    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
  7984                (IPv6) Specification", RFC 2460, December 1998.
       
  7985 
       
  7986    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
  7987                RFC 3080, March 2001.
       
  7988 
       
  7989    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
  7990                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
  7991                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
  7992                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
  7993 
       
  7994    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
  7995                Markup Language (XML)" World Wide Web Consortium
       
  7996                Recommendation REC- xml-19980210.
       
  7997                http://www.w3.org/TR/1998/REC-xml-19980210
       
  7998 
       
  7999 10.  Author's Address
       
  8000 
       
  8001    Hugh Kennedy
       
  8002    Mimezine
       
  8003    1060 West Addison
       
  8004    Chicago, IL 60613
       
  8005    USA
       
  8006 
       
  8007    EMail: kennedyh@engin.umich.edu
       
  8008 
       
  8009 
       
  8010 
       
  8011 
       
  8012 
       
  8013 
       
  8014 
       
  8015 
       
  8016 
       
  8017 
       
  8018 
       
  8019 
       
  8020 
       
  8021 
       
  8022 
       
  8023 
       
  8024 
       
  8025 
       
  8026 
       
  8027 
       
  8028 
       
  8029 
       
  8030 
       
  8031 
       
  8032 
       
  8033 
       
  8034 Kennedy                      Informational                     [Page 15]
       
  8035 
       
  8036 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  8037 
       
  8038 
       
  8039 11.  Full Copyright Statement
       
  8040 
       
  8041    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  8042 
       
  8043    This document and translations of it may be copied and furnished to
       
  8044    others, and derivative works that comment on or otherwise explain it
       
  8045    or assist in its implementation may be prepared, copied, published
       
  8046    and distributed, in whole or in part, without restriction of any
       
  8047    kind, provided that the above copyright notice and this paragraph are
       
  8048    included on all such copies and derivative works.  However, this
       
  8049    document itself may not be modified in any way, such as by removing
       
  8050    the copyright notice or references to the Internet Society or other
       
  8051    Internet organizations, except as needed for the purpose of
       
  8052    developing Internet standards in which case the procedures for
       
  8053    copyrights defined in the Internet Standards process must be
       
  8054    followed, or as required to translate it into languages other than
       
  8055    English.
       
  8056 
       
  8057    The limited permissions granted above are perpetual and will not be
       
  8058    revoked by the Internet Society or its successors or assigns.
       
  8059 
       
  8060    This document and the information contained herein is provided on an
       
  8061    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
  8062    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
  8063    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
  8064    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
  8065    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
  8066 
       
  8067 Acknowledgement
       
  8068 
       
  8069    Funding for the RFC Editor function is currently provided by the
       
  8070    Internet Society.
       
  8071 
       
  8072 
       
  8073 
       
  8074 
       
  8075 
       
  8076 
       
  8077 
       
  8078 
       
  8079 
       
  8080 
       
  8081 
       
  8082 
       
  8083 
       
  8084 
       
  8085 
       
  8086 
       
  8087 
       
  8088 
       
  8089 
       
  8090 Kennedy                      Informational                     [Page 16]
       
  8091 
       
  8092 
       
  8093 
       
  8094 
       
  8095 
       
  8096 
       
  8097 
       
  8098 Network Working Group                                         H. Kennedy
       
  8099 Request for Comments: 3252                                      Mimezine
       
  8100 Category: Informational                                     1 April 2002
       
  8101 
       
  8102 
       
  8103                  Binary Lexical Octet Ad-hoc Transport
       
  8104 
       
  8105 Status of this Memo
       
  8106 
       
  8107    This memo provides information for the Internet community.  It does
       
  8108    not specify an Internet standard of any kind.  Distribution of this
       
  8109    memo is unlimited.
       
  8110 
       
  8111 Copyright Notice
       
  8112 
       
  8113    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  8114 
       
  8115 Abstract
       
  8116 
       
  8117    This document defines a reformulation of IP and two transport layer
       
  8118    protocols (TCP and UDP) as XML applications.
       
  8119 
       
  8120 1.   Introduction
       
  8121 
       
  8122 1.1. Overview
       
  8123 
       
  8124    This document describes the Binary Lexical Octet Ad-hoc Transport
       
  8125    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
  8126    (IP [RFC791]), and two associated transport layer protocols (TCP
       
  8127    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
  8128    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
  8129    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
  8130    across the public Internet.
       
  8131 
       
  8132 1.2. Motivation
       
  8133 
       
  8134    The wild popularity of XML as a basis for application-level protocols
       
  8135    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
  8136    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
  8137    investigation into the possibility of extending the use of XML in the
       
  8138    protocol stack.  Using XML at both the transport and network layer in
       
  8139    addition to the application layer would provide for an amazing amount
       
  8140    of power and flexibility while removing dependencies on proprietary
       
  8141    and hard-to-understand binary protocols.  This protocol unification
       
  8142    would also allow applications to use a single XML parser for all
       
  8143    aspects of their operation, eliminating developer time spent figuring
       
  8144    out the intricacies of each new protocol, and moving the hard work of
       
  8145 
       
  8146 
       
  8147 
       
  8148 
       
  8149 Kennedy                      Informational                      [Page 1]
       
  8150 
       
  8151 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  8152 
       
  8153 
       
  8154    parsing to the XML toolset.  The use of XML also mitigates concerns
       
  8155    over "network vs. host" byte ordering which is at the root of many
       
  8156    network application bugs.
       
  8157 
       
  8158 1.3. Relation to Existing Protocols
       
  8159 
       
  8160    The reformulations specified in this RFC follow as closely as
       
  8161    possible the spirit of the RFCs on which they are based, and so MAY
       
  8162    contain elements or attributes that would not be needed in a pure
       
  8163    reworking (e.g. length attributes, which are implicit in XML.)
       
  8164 
       
  8165    The layering of network and transport protocols are maintained in
       
  8166    this RFC despite the optimizations that could be made if the line
       
  8167    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
  8168    element in the DTD) in order to foster future use of this protocol as
       
  8169    a basis for reformulating other protocols (such as ICMP.)
       
  8170 
       
  8171    Other than the encoding, the behavioral aspects of each of the
       
  8172    existing protocols remain unchanged.  Routing, address spaces, TCP
       
  8173    congestion control, etc. behave as specified in the extant standards.
       
  8174    Adapting to new standards and experimental algorithm heuristics for
       
  8175    improving performance will become much easier once the move to BLOAT
       
  8176    has been completed.
       
  8177 
       
  8178 1.4. Requirement Levels
       
  8179 
       
  8180    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
  8181    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
  8182    document are to be interpreted as described in BCP 14, RFC 2119
       
  8183    [RFC2119].
       
  8184 
       
  8185 2.   IPoXML
       
  8186 
       
  8187    This protocol MUST be implemented to be compliant with this RFC.
       
  8188    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
  8189    (section 3.) and higher-level application protocols.
       
  8190 
       
  8191    The DTD for this document type can be found in section 7.1.
       
  8192 
       
  8193    The routing of IPoXML can be easily implemented on hosts with an XML
       
  8194    parser, as the regular structure lends itself handily to parsing and
       
  8195    validation of the document/datagram and then processing the
       
  8196    destination address, TTL, and checksum before sending it on to its
       
  8197    next-hop.
       
  8198 
       
  8199    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
  8200    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
  8201    would have exceeded the 1500 byte Ethernet MTU.
       
  8202 
       
  8203 
       
  8204 
       
  8205 Kennedy                      Informational                      [Page 2]
       
  8206 
       
  8207 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  8208 
       
  8209 
       
  8210    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
  8211    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
  8212    formed and include the XMLDecl.
       
  8213 
       
  8214 2.1. IP Description
       
  8215 
       
  8216    A number of items have changed (for the better) from the original IP
       
  8217    specification.  Bit-masks, where present have been converted into
       
  8218    human-readable values.  IP addresses are listed in their dotted-
       
  8219    decimal notation [RFC1123].  Length and checksum values are present
       
  8220    as decimal integers.
       
  8221 
       
  8222    To calculate the length and checksum fields of the IP element, a
       
  8223    canonicalized form of the element MUST be used.  The canonical form
       
  8224    SHALL have no whitespace (including newline characters) between
       
  8225    elements and only one space character between attributes.  There
       
  8226    SHALL NOT be a space following the last attribute in an element.
       
  8227 
       
  8228    An iterative method SHOULD be used to calculate checksums, as the
       
  8229    length field will vary based on the size of the checksum.
       
  8230 
       
  8231    The payload element bears special attention.  Due to the character
       
  8232    set restrictions of XML, the payload of IP datagrams (which MAY
       
  8233    contain arbitrary data) MUST be encoded for transport. This RFC
       
  8234    REQUIRES the contents of the payload to be encoded in the base-64
       
  8235    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
  8236    encoded output MUST be wrapped on 76-character lines.
       
  8237 
       
  8238 
       
  8239 
       
  8240 
       
  8241 
       
  8242 
       
  8243 
       
  8244 
       
  8245 
       
  8246 
       
  8247 
       
  8248 
       
  8249 
       
  8250 
       
  8251 
       
  8252 
       
  8253 
       
  8254 
       
  8255 
       
  8256 
       
  8257 
       
  8258 
       
  8259 
       
  8260 
       
  8261 Kennedy                      Informational                      [Page 3]
       
  8262 
       
  8263 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  8264 
       
  8265 
       
  8266 2.2. Example Datagram
       
  8267 
       
  8268    The following is an example IPoXML datagram with an empty payload:
       
  8269 
       
  8270    <?xml version="1.0" encoding="UTF-8"?>
       
  8271    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  8272    <ip>
       
  8273    <header length="474">
       
  8274    <version value="4"/>
       
  8275    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
  8276         relibility="Normal" reserved="0"/>
       
  8277    <total.length value="461"/>
       
  8278    <id value="1"/>
       
  8279    <flags reserved="0" df="dont" mf="last"/>
       
  8280    <offset value="0"/>
       
  8281    <ttl value="255"/>
       
  8282    <protocol value="6"/>
       
  8283    <checksum value="8707"/>
       
  8284    <source address="10.0.0.22"/>
       
  8285    <destination address="10.0.0.1"/>
       
  8286    <options>
       
  8287    <end copied="0" class="0" number="0"/>
       
  8288    </options>
       
  8289    <padding pad="0"/>
       
  8290    </header>
       
  8291    <payload>
       
  8292    </payload>
       
  8293    </ip>
       
  8294 
       
  8295 3.   TCPoXML
       
  8296 
       
  8297    This protocol MUST be implemented to be compliant with this RFC.  The
       
  8298    DTD for this document type can be found in section 7.2.
       
  8299 
       
  8300 3.1. TCP Description
       
  8301 
       
  8302    A number of items have changed from the original TCP specification.
       
  8303    Bit-masks, where present have been converted into human-readable
       
  8304    values.  Length and checksum and port values are present as decimal
       
  8305    integers.
       
  8306 
       
  8307    To calculate the length and checksum fields of the TCP element, a
       
  8308    canonicalized form of the element MUST be used as in section 2.1.
       
  8309 
       
  8310    An iterative method SHOULD be used to calculate checksums as in
       
  8311    section 2.1.
       
  8312 
       
  8313    The payload element MUST be encoded as in section 2.1.
       
  8314 
       
  8315 
       
  8316 
       
  8317 Kennedy                      Informational                      [Page 4]
       
  8318 
       
  8319 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  8320 
       
  8321 
       
  8322    The TCP offset element was expanded to a maximum of 255 from 16 to
       
  8323    allow for the increased size of the header in XML.
       
  8324 
       
  8325    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  8326    as well as the <!DOCTYPE> declaration.
       
  8327 
       
  8328 3.2. Example Datagram
       
  8329 
       
  8330    The following is an example TCPoXML datagram with an empty payload:
       
  8331 
       
  8332    <?xml version="1.0" encoding="UTF-8"?>
       
  8333    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  8334    <tcp>
       
  8335    <tcp.header>
       
  8336    <src port="31415"/>
       
  8337    <dest port="42424"/>
       
  8338    <sequence number="322622954"/>
       
  8339    <acknowledgement number="689715995"/>
       
  8340    <offset number=""/>
       
  8341    <reserved value="0"/>
       
  8342    <control syn="1" ack="1"/>
       
  8343    <window size="1"/>
       
  8344    <urgent pointer="0"/>
       
  8345    <checksum value="2988"/>
       
  8346    <tcp.options>
       
  8347    <tcp.end kind="0"/>
       
  8348    </tcp.options>
       
  8349    <padding pad="0"/>
       
  8350    </tcp.header>
       
  8351    <payload>
       
  8352    </payload>
       
  8353    </tcp>
       
  8354 
       
  8355 4.   UDPoXML
       
  8356 
       
  8357    This protocol MUST be implemented to be compliant with this RFC.  The
       
  8358    DTD for this document type can be found in section 7.3.
       
  8359 
       
  8360 4.1. UDP Description
       
  8361 
       
  8362    A number of items have changed from the original UDP specification.
       
  8363    Bit-masks, where present have been converted into human-readable
       
  8364    values.  Length and checksum and port values are present as decimal
       
  8365    integers.
       
  8366 
       
  8367 
       
  8368 
       
  8369 
       
  8370 
       
  8371 
       
  8372 
       
  8373 Kennedy                      Informational                      [Page 5]
       
  8374 
       
  8375 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  8376 
       
  8377 
       
  8378    To calculate the length and checksum fields of the UDP element, a
       
  8379    canonicalized form of the element MUST be used as in section 2.1.  An
       
  8380    iterative method SHOULD be used to calculate checksums as in section
       
  8381    2.1.
       
  8382 
       
  8383    The payload element MUST be encoded as in section 2.1.
       
  8384 
       
  8385    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  8386    as well as the <!DOCTYPE> declaration.
       
  8387 
       
  8388 4.2. Example Datagram
       
  8389 
       
  8390    The following is an example UDPoXML datagram with an empty payload:
       
  8391 
       
  8392    <?xml version="1.0" encoding="UTF-8"?>
       
  8393    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  8394    <udp>
       
  8395    <udp.header>
       
  8396    <src port="31415"/>
       
  8397    <dest port="42424"/>
       
  8398    <udp.length value="143"/>
       
  8399    <checksum value="2988"/>
       
  8400    </udp.header>
       
  8401    <payload>
       
  8402    </payload>
       
  8403    </udp>
       
  8404 
       
  8405 5.   Network Transport
       
  8406 
       
  8407    This document provides for the transmission of BLOAT datagrams over
       
  8408    two common families of physical layer transport.  Future RFCs will
       
  8409    address additional transports as routing vendors catch up to the
       
  8410    specification, and we begin to see BLOAT routed across the Internet
       
  8411    backbone.
       
  8412 
       
  8413 5.1. Ethernet
       
  8414 
       
  8415    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
  8416    exception that the type field of the Ethernet frame MUST contain the
       
  8417    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
  8418    be 0x3c 3f 78 6d 6c ("<?xml".)
       
  8419 
       
  8420 5.2. IEEE 802
       
  8421 
       
  8422    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
  8423    that the protocol type code for IPoXML is 0xBEEF.
       
  8424 
       
  8425 
       
  8426 
       
  8427 
       
  8428 
       
  8429 Kennedy                      Informational                      [Page 6]
       
  8430 
       
  8431 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  8432 
       
  8433 
       
  8434 6. Gatewaying over IP
       
  8435 
       
  8436    In order to facilitate the gradual introduction of BLOAT into the
       
  8437    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
  8438    gateway between networks that run BLOAT natively on their LANs.
       
  8439 
       
  8440 7. DTDs
       
  8441 
       
  8442    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
  8443    Network DTD (7.1.)
       
  8444 
       
  8445    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
  8446    [XML]) although it is understood that most IPoXML implementations
       
  8447    will not need to pull down the DTD, as it will normally be embedded
       
  8448    in the implementation, and presents something of a catch-22 if you
       
  8449    need to load part of your network protocol over the network.
       
  8450 
       
  8451 7.1.  IPoXML DTD
       
  8452 
       
  8453    <!--
       
  8454     DTD for IP over XML.
       
  8455     Refer to this DTD as:
       
  8456 
       
  8457     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  8458    -->
       
  8459    <!--
       
  8460     DTD data types:
       
  8461 
       
  8462       Digits      [0..9]+
       
  8463 
       
  8464       Precedence  "NetworkControl | InternetworkControl |
       
  8465                    CRITIC | FlashOverride | Flash | Immediate |
       
  8466                    Priority | Routine"
       
  8467 
       
  8468       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
  8469 
       
  8470       Class       [0..3]
       
  8471 
       
  8472       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
  8473                     Restricted | Secret | Top Secret | Reserved"
       
  8474 
       
  8475       Compartments [0..65535]
       
  8476 
       
  8477       Handling     [0..65535]
       
  8478 
       
  8479       TCC          [0..16777216]
       
  8480 
       
  8481    -->
       
  8482 
       
  8483 
       
  8484 
       
  8485 Kennedy                      Informational                      [Page 7]
       
  8486 
       
  8487 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  8488 
       
  8489 
       
  8490    <!ENTITY % Digits "CDATA">
       
  8491    <!ENTITY % Precedence "CDATA">
       
  8492    <!ENTITY % IP4Addr "CDATA">
       
  8493    <!ENTITY % Class "CDATA">
       
  8494    <!ENTITY % Sec "CDATA">
       
  8495    <!ENTITY % Compartments "CDATA">
       
  8496    <!ENTITY % Handling "CDATA">
       
  8497    <!ENTITY % TCC "CDATA">
       
  8498 
       
  8499    <!ELEMENT ip (header, payload)>
       
  8500 
       
  8501    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
  8502                     protocol, checksum, source, destination, options,
       
  8503                     padding)>
       
  8504    <!-- length of header in 32-bit words -->
       
  8505    <!ATTLIST header
       
  8506              length %Digits; #REQUIRED>
       
  8507 
       
  8508    <!ELEMENT version EMPTY>
       
  8509    <!-- ip version. SHOULD be "4" -->
       
  8510    <!ATTLIST version
       
  8511              value   %Digits;  #REQUIRED>
       
  8512 
       
  8513    <!ELEMENT tos EMPTY>
       
  8514    <!ATTLIST tos
       
  8515              precedence   %Precedence;    #REQUIRED
       
  8516              delay    (normal | low)  #REQUIRED
       
  8517              throughput   (normal | high) #REQUIRED
       
  8518              relibility   (normal | high) #REQUIRED
       
  8519              reserved     CDATA #FIXED "0">
       
  8520 
       
  8521    <!ELEMENT total.length EMPTY>
       
  8522    <!--
       
  8523     total length of datagram (header and payload) in octets, MUST be
       
  8524     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
  8525     ethernets).
       
  8526    -->
       
  8527    <!ATTLIST total.length
       
  8528              value %Digits; #REQUIRED>
       
  8529 
       
  8530    <!ELEMENT id EMPTY>
       
  8531    <!-- 0 <= id <= 65,535  -->
       
  8532    <!ATTLIST id
       
  8533              value %Digits; #REQUIRED>
       
  8534 
       
  8535    <!ELEMENT flags EMPTY>
       
  8536    <!-- df = don't fragment, mf = more fragments  -->
       
  8537    <!ATTLIST flags
       
  8538 
       
  8539 
       
  8540 
       
  8541 Kennedy                      Informational                      [Page 8]
       
  8542 
       
  8543 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  8544 
       
  8545 
       
  8546           reserved CDATA  #FIXED "0"
       
  8547           df (may|dont)   #REQUIRED
       
  8548           mf (last|more)  #REQUIRED>
       
  8549 
       
  8550    <!ELEMENT offset EMPTY>
       
  8551    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
  8552    <!ATTLIST offset
       
  8553              value %Digits; #REQUIRED>
       
  8554 
       
  8555    <!ELEMENT ttl EMPTY>
       
  8556    <!-- 0 <= ttl <= 255 -->
       
  8557    <!ATTLIST ttl
       
  8558              value %Digits; #REQUIRED>
       
  8559 
       
  8560    <!ELEMENT protocol EMPTY>
       
  8561    <!-- 0 <= protocol <= 255 (per IANA) -->
       
  8562    <!ATTLIST protocol
       
  8563              value %Digits; #REQUIRED>
       
  8564 
       
  8565    <!ELEMENT checksum EMPTY>
       
  8566    <!-- 0 <= checksum <= 65535 (over header only) -->
       
  8567    <!ATTLIST checksum
       
  8568              value %Digits; #REQUIRED>
       
  8569 
       
  8570    <!ELEMENT source EMPTY>
       
  8571    <!ATTLIST source
       
  8572              address %IP4Addr; #REQUIRED>
       
  8573 
       
  8574    <!ELEMENT destination EMPTY>
       
  8575    <!ATTLIST destination
       
  8576              address %IP4Addr; #REQUIRED>
       
  8577 
       
  8578    <!ELEMENT options ( end | noop | security | loose | strict | record
       
  8579                      | stream | timestamp )*>
       
  8580 
       
  8581    <!ELEMENT end EMPTY>
       
  8582    <!ATTLIST end
       
  8583              copied (0|1) #REQUIRED
       
  8584              class  CDATA #FIXED "0"
       
  8585              number CDATA #FIXED "0">
       
  8586 
       
  8587    <!ELEMENT noop EMPTY>
       
  8588    <!ATTLIST noop
       
  8589              copied (0|1) #REQUIRED
       
  8590              class  CDATA #FIXED "0"
       
  8591              number CDATA #FIXED "1">
       
  8592 
       
  8593    <!ELEMENT security EMPTY>
       
  8594 
       
  8595 
       
  8596 
       
  8597 Kennedy                      Informational                      [Page 9]
       
  8598 
       
  8599 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  8600 
       
  8601 
       
  8602    <!ATTLIST security
       
  8603              copied CDATA #FIXED "1"
       
  8604              class  CDATA #FIXED "0"
       
  8605              number CDATA #FIXED "2"
       
  8606              length CDATA #FIXED "11"
       
  8607              security %Sec; #REQUIRED
       
  8608              compartments %Compartments; #REQUIRED
       
  8609              handling %Handling; #REQUIRED
       
  8610              tcc %TCC; #REQUIRED>
       
  8611    <!ELEMENT loose (hop)+>
       
  8612    <!ATTLIST loose
       
  8613              copied CDATA #FIXED "1"
       
  8614              class  CDATA #FIXED "0"
       
  8615              number CDATA #FIXED "3"
       
  8616              length %Digits; #REQUIRED
       
  8617              pointer %Digits; #REQUIRED>
       
  8618 
       
  8619    <!ELEMENT hop EMPTY>
       
  8620    <!ATTLIST hop
       
  8621              address %IP4Addr; #REQUIRED>
       
  8622 
       
  8623    <!ELEMENT strict (hop)+>
       
  8624    <!ATTLIST strict
       
  8625              copied CDATA #FIXED "1"
       
  8626              class  CDATA #FIXED "0"
       
  8627              number CDATA #FIXED "9"
       
  8628              length %Digits; #REQUIRED
       
  8629              pointer %Digits; #REQUIRED>
       
  8630 
       
  8631    <!ELEMENT record (hop)+>
       
  8632    <!ATTLIST record
       
  8633              copied CDATA #FIXED "0"
       
  8634              class  CDATA #FIXED "0"
       
  8635              number CDATA #FIXED "7"
       
  8636              length %Digits; #REQUIRED
       
  8637              pointer %Digits; #REQUIRED>
       
  8638 
       
  8639    <!ELEMENT stream EMPTY>
       
  8640    <!-- 0 <= id <= 65,535 -->
       
  8641    <!ATTLIST stream
       
  8642              copied CDATA #FIXED "1"
       
  8643              class  CDATA #FIXED "0"
       
  8644              number CDATA #FIXED "8"
       
  8645              length CDATA #FIXED "4"
       
  8646              id %Digits; #REQUIRED>
       
  8647 
       
  8648    <!ELEMENT timestamp (tstamp)+>
       
  8649    <!-- 0 <= oflw <=15 -->
       
  8650 
       
  8651 
       
  8652 
       
  8653 Kennedy                      Informational                     [Page 10]
       
  8654 
       
  8655 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  8656 
       
  8657 
       
  8658    <!ATTLIST timestamp
       
  8659              copied CDATA #FIXED "0"
       
  8660              class  CDATA #FIXED "2"
       
  8661              number CDATA #FIXED "4"
       
  8662              length %Digits;  #REQUIRED
       
  8663              pointer %Digits; #REQUIRED
       
  8664              oflw %Digits;    #REQUIRED
       
  8665              flag (0 | 1 | 3)  #REQUIRED>
       
  8666 
       
  8667    <!ELEMENT tstamp EMPTY>
       
  8668    <!ATTLIST tstamp
       
  8669              time %Digits;   #REQUIRED
       
  8670              address %IP4Addr; #IMPLIED>
       
  8671    <!--
       
  8672        padding to bring header to 32-bit boundary.
       
  8673        pad MUST be "0"*
       
  8674     -->
       
  8675    <!ELEMENT padding EMPTY>
       
  8676    <!ATTLIST padding
       
  8677              pad CDATA #REQUIRED>
       
  8678 
       
  8679    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
  8680         by section 2.1 of this RFC -->
       
  8681    <!ELEMENT payload (CDATA)>
       
  8682 
       
  8683 7.2.  TCPoXML DTD
       
  8684 
       
  8685    <!--
       
  8686       DTD for TCP over XML.
       
  8687       Refer to this DTD as:
       
  8688 
       
  8689       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  8690    -->
       
  8691 
       
  8692    <!-- the pseudoheader is only included for checksum calculations -->
       
  8693    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
  8694 
       
  8695    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
  8696                          reserved, control, window, checksum, urgent,
       
  8697                          tcp.options, padding)>
       
  8698 
       
  8699    <!ELEMENT src EMPTY>
       
  8700    <!-- 0 <= port <= 65,535 -->
       
  8701    <!ATTLIST src
       
  8702              port %Digits; #REQUIRED>
       
  8703 
       
  8704    <!ELEMENT dest EMPTY>
       
  8705    <!-- 0 <= port <= 65,535 -->
       
  8706 
       
  8707 
       
  8708 
       
  8709 Kennedy                      Informational                     [Page 11]
       
  8710 
       
  8711 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  8712 
       
  8713 
       
  8714    <!ATTLIST dest
       
  8715              port %Digits; #REQUIRED>
       
  8716 
       
  8717    <!ELEMENT sequence EMPTY>
       
  8718    <!-- 0 <= number <= 4294967295 -->
       
  8719    <!ATTLIST sequence
       
  8720              number %Digits; #REQUIRED>
       
  8721 
       
  8722    <!ELEMENT acknowledgement EMPTY>
       
  8723    <!-- 0 <= number <= 4294967295 -->
       
  8724    <!ATTLIST acknowledgement
       
  8725              number %Digits; #REQUIRED>
       
  8726 
       
  8727    <!ELEMENT offset EMPTY>
       
  8728    <!-- 0 <= number <= 255 -->
       
  8729    <!ATTLIST offset
       
  8730              number %Digits; #REQUIRED>
       
  8731 
       
  8732    <!ELEMENT reserved EMPTY>
       
  8733    <!ATTLIST reserved
       
  8734              value CDATA #FIXED "0">
       
  8735 
       
  8736    <!ELEMENT control EMPTY>
       
  8737    <!ATTLIST control
       
  8738              urg (0|1) #IMPLIED
       
  8739              ack (0|1) #IMPLIED
       
  8740              psh (0|1) #IMPLIED
       
  8741              rst (0|1) #IMPLIED
       
  8742              syn (0|1) #IMPLIED
       
  8743              fin (0|1) #IMPLIED>
       
  8744 
       
  8745    <!ELEMENT window EMPTY>
       
  8746    <!-- 0 <= size <= 65,535 -->
       
  8747    <!ATTLIST window
       
  8748              size %Digits; #REQUIRED>
       
  8749 
       
  8750    <!--
       
  8751       checksum as in ip, but with
       
  8752       the following pseudo-header added into the tcp element:
       
  8753      -->
       
  8754    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
  8755                                tcp.length)>
       
  8756 
       
  8757    <!--
       
  8758       tcp header + data length in octets. does not include the size of
       
  8759 
       
  8760       the pseudoheader.
       
  8761     -->
       
  8762 
       
  8763 
       
  8764 
       
  8765 Kennedy                      Informational                     [Page 12]
       
  8766 
       
  8767 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  8768 
       
  8769 
       
  8770    <!ELEMENT tcp.length EMPTY>
       
  8771    <!ATTLIST tcp.length
       
  8772              value %Digits; #REQUIRED>
       
  8773 
       
  8774    <!ELEMENT urgent EMPTY>
       
  8775    <!-- 0 <= pointer <= 65,535 -->
       
  8776    <!ATTLIST urgent
       
  8777              pointer %Digits; #REQUIRED>
       
  8778 
       
  8779    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
  8780 
       
  8781    <!ELEMENT tcp.end EMPTY>
       
  8782    <!ATTLIST tcp.end
       
  8783              kind CDATA #FIXED "0">
       
  8784 
       
  8785    <!ELEMENT tcp.noop EMPTY>
       
  8786    <!ATTLIST tcp.noop
       
  8787              kind CDATA #FIXED "1">
       
  8788 
       
  8789    <!ELEMENT tcp.mss EMPTY>
       
  8790    <!ATTLIST tcp.mss
       
  8791              kind CDATA #FIXED "2"
       
  8792              length CDATA #FIXED "4"
       
  8793              size %Digits; #REQUIRED>
       
  8794 
       
  8795 7.3.  UDPoXML DTD
       
  8796 
       
  8797    <!--
       
  8798       DTD for UDP over XML.
       
  8799       Refer to this DTD as:
       
  8800 
       
  8801       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  8802    -->
       
  8803 
       
  8804    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
  8805 
       
  8806    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
  8807 
       
  8808    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
  8809                                udp.length)>
       
  8810 
       
  8811    <!--
       
  8812       udp header + data length in octets. does not include the size of
       
  8813       the pseudoheader.
       
  8814     -->
       
  8815    <!ELEMENT udp.length EMPTY>
       
  8816    <!ATTLIST udp.length
       
  8817              value %Digits; #REQUIRED>
       
  8818 
       
  8819 
       
  8820 
       
  8821 Kennedy                      Informational                     [Page 13]
       
  8822 
       
  8823 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  8824 
       
  8825 
       
  8826 8. Security Considerations
       
  8827 
       
  8828    XML, as a subset of SGML, has the same security considerations as
       
  8829    specified in SGML Media Types [RFC1874].  Security considerations
       
  8830    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
  8831    not attempt to correct for issues not related to message format.
       
  8832 
       
  8833 9.   References
       
  8834 
       
  8835    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
  8836                February 2002. (Work in Progress)
       
  8837 
       
  8838    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
  8839                August 1980.
       
  8840 
       
  8841    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
  8842                September 1981.
       
  8843 
       
  8844    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
  8845                793, September 1981.
       
  8846 
       
  8847    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
  8848                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
  8849 
       
  8850    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
  8851                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
  8852                43, RFC 1042, February 1988.
       
  8853 
       
  8854    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
  8855                Application and Support", RFC 1123, October 1989.
       
  8856 
       
  8857    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
  8858                1995.
       
  8859 
       
  8860    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
  8861                October 1996.
       
  8862 
       
  8863    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
  8864                Extensions (MIME) Part One: Format of Internet Message
       
  8865                Bodies", RFC 2045, November 1996.
       
  8866 
       
  8867    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
  8868                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
  8869 
       
  8870    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
  8871                10646", RFC 2279, January 1998.
       
  8872 
       
  8873 
       
  8874 
       
  8875 
       
  8876 
       
  8877 Kennedy                      Informational                     [Page 14]
       
  8878 
       
  8879 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  8880 
       
  8881 
       
  8882    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
  8883                (IPv6) Specification", RFC 2460, December 1998.
       
  8884 
       
  8885    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
  8886                RFC 3080, March 2001.
       
  8887 
       
  8888    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
  8889                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
  8890                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
  8891                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
  8892 
       
  8893    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
  8894                Markup Language (XML)" World Wide Web Consortium
       
  8895                Recommendation REC- xml-19980210.
       
  8896                http://www.w3.org/TR/1998/REC-xml-19980210
       
  8897 
       
  8898 10.  Author's Address
       
  8899 
       
  8900    Hugh Kennedy
       
  8901    Mimezine
       
  8902    1060 West Addison
       
  8903    Chicago, IL 60613
       
  8904    USA
       
  8905 
       
  8906    EMail: kennedyh@engin.umich.edu
       
  8907 
       
  8908 
       
  8909 
       
  8910 
       
  8911 
       
  8912 
       
  8913 
       
  8914 
       
  8915 
       
  8916 
       
  8917 
       
  8918 
       
  8919 
       
  8920 
       
  8921 
       
  8922 
       
  8923 
       
  8924 
       
  8925 
       
  8926 
       
  8927 
       
  8928 
       
  8929 
       
  8930 
       
  8931 
       
  8932 
       
  8933 Kennedy                      Informational                     [Page 15]
       
  8934 
       
  8935 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  8936 
       
  8937 
       
  8938 11.  Full Copyright Statement
       
  8939 
       
  8940    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  8941 
       
  8942    This document and translations of it may be copied and furnished to
       
  8943    others, and derivative works that comment on or otherwise explain it
       
  8944    or assist in its implementation may be prepared, copied, published
       
  8945    and distributed, in whole or in part, without restriction of any
       
  8946    kind, provided that the above copyright notice and this paragraph are
       
  8947    included on all such copies and derivative works.  However, this
       
  8948    document itself may not be modified in any way, such as by removing
       
  8949    the copyright notice or references to the Internet Society or other
       
  8950    Internet organizations, except as needed for the purpose of
       
  8951    developing Internet standards in which case the procedures for
       
  8952    copyrights defined in the Internet Standards process must be
       
  8953    followed, or as required to translate it into languages other than
       
  8954    English.
       
  8955 
       
  8956    The limited permissions granted above are perpetual and will not be
       
  8957    revoked by the Internet Society or its successors or assigns.
       
  8958 
       
  8959    This document and the information contained herein is provided on an
       
  8960    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
  8961    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
  8962    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
  8963    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
  8964    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
  8965 
       
  8966 Acknowledgement
       
  8967 
       
  8968    Funding for the RFC Editor function is currently provided by the
       
  8969    Internet Society.
       
  8970 
       
  8971 
       
  8972 
       
  8973 
       
  8974 
       
  8975 
       
  8976 
       
  8977 
       
  8978 
       
  8979 
       
  8980 
       
  8981 
       
  8982 
       
  8983 
       
  8984 
       
  8985 
       
  8986 
       
  8987 
       
  8988 
       
  8989 Kennedy                      Informational                     [Page 16]
       
  8990 
       
  8991 
       
  8992 
       
  8993 
       
  8994 
       
  8995 
       
  8996 
       
  8997 Network Working Group                                         H. Kennedy
       
  8998 Request for Comments: 3252                                      Mimezine
       
  8999 Category: Informational                                     1 April 2002
       
  9000 
       
  9001 
       
  9002                  Binary Lexical Octet Ad-hoc Transport
       
  9003 
       
  9004 Status of this Memo
       
  9005 
       
  9006    This memo provides information for the Internet community.  It does
       
  9007    not specify an Internet standard of any kind.  Distribution of this
       
  9008    memo is unlimited.
       
  9009 
       
  9010 Copyright Notice
       
  9011 
       
  9012    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  9013 
       
  9014 Abstract
       
  9015 
       
  9016    This document defines a reformulation of IP and two transport layer
       
  9017    protocols (TCP and UDP) as XML applications.
       
  9018 
       
  9019 1.   Introduction
       
  9020 
       
  9021 1.1. Overview
       
  9022 
       
  9023    This document describes the Binary Lexical Octet Ad-hoc Transport
       
  9024    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
  9025    (IP [RFC791]), and two associated transport layer protocols (TCP
       
  9026    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
  9027    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
  9028    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
  9029    across the public Internet.
       
  9030 
       
  9031 1.2. Motivation
       
  9032 
       
  9033    The wild popularity of XML as a basis for application-level protocols
       
  9034    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
  9035    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
  9036    investigation into the possibility of extending the use of XML in the
       
  9037    protocol stack.  Using XML at both the transport and network layer in
       
  9038    addition to the application layer would provide for an amazing amount
       
  9039    of power and flexibility while removing dependencies on proprietary
       
  9040    and hard-to-understand binary protocols.  This protocol unification
       
  9041    would also allow applications to use a single XML parser for all
       
  9042    aspects of their operation, eliminating developer time spent figuring
       
  9043    out the intricacies of each new protocol, and moving the hard work of
       
  9044 
       
  9045 
       
  9046 
       
  9047 
       
  9048 Kennedy                      Informational                      [Page 1]
       
  9049 
       
  9050 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  9051 
       
  9052 
       
  9053    parsing to the XML toolset.  The use of XML also mitigates concerns
       
  9054    over "network vs. host" byte ordering which is at the root of many
       
  9055    network application bugs.
       
  9056 
       
  9057 1.3. Relation to Existing Protocols
       
  9058 
       
  9059    The reformulations specified in this RFC follow as closely as
       
  9060    possible the spirit of the RFCs on which they are based, and so MAY
       
  9061    contain elements or attributes that would not be needed in a pure
       
  9062    reworking (e.g. length attributes, which are implicit in XML.)
       
  9063 
       
  9064    The layering of network and transport protocols are maintained in
       
  9065    this RFC despite the optimizations that could be made if the line
       
  9066    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
  9067    element in the DTD) in order to foster future use of this protocol as
       
  9068    a basis for reformulating other protocols (such as ICMP.)
       
  9069 
       
  9070    Other than the encoding, the behavioral aspects of each of the
       
  9071    existing protocols remain unchanged.  Routing, address spaces, TCP
       
  9072    congestion control, etc. behave as specified in the extant standards.
       
  9073    Adapting to new standards and experimental algorithm heuristics for
       
  9074    improving performance will become much easier once the move to BLOAT
       
  9075    has been completed.
       
  9076 
       
  9077 1.4. Requirement Levels
       
  9078 
       
  9079    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
  9080    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
  9081    document are to be interpreted as described in BCP 14, RFC 2119
       
  9082    [RFC2119].
       
  9083 
       
  9084 2.   IPoXML
       
  9085 
       
  9086    This protocol MUST be implemented to be compliant with this RFC.
       
  9087    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
  9088    (section 3.) and higher-level application protocols.
       
  9089 
       
  9090    The DTD for this document type can be found in section 7.1.
       
  9091 
       
  9092    The routing of IPoXML can be easily implemented on hosts with an XML
       
  9093    parser, as the regular structure lends itself handily to parsing and
       
  9094    validation of the document/datagram and then processing the
       
  9095    destination address, TTL, and checksum before sending it on to its
       
  9096    next-hop.
       
  9097 
       
  9098    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
  9099    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
  9100    would have exceeded the 1500 byte Ethernet MTU.
       
  9101 
       
  9102 
       
  9103 
       
  9104 Kennedy                      Informational                      [Page 2]
       
  9105 
       
  9106 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  9107 
       
  9108 
       
  9109    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
  9110    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
  9111    formed and include the XMLDecl.
       
  9112 
       
  9113 2.1. IP Description
       
  9114 
       
  9115    A number of items have changed (for the better) from the original IP
       
  9116    specification.  Bit-masks, where present have been converted into
       
  9117    human-readable values.  IP addresses are listed in their dotted-
       
  9118    decimal notation [RFC1123].  Length and checksum values are present
       
  9119    as decimal integers.
       
  9120 
       
  9121    To calculate the length and checksum fields of the IP element, a
       
  9122    canonicalized form of the element MUST be used.  The canonical form
       
  9123    SHALL have no whitespace (including newline characters) between
       
  9124    elements and only one space character between attributes.  There
       
  9125    SHALL NOT be a space following the last attribute in an element.
       
  9126 
       
  9127    An iterative method SHOULD be used to calculate checksums, as the
       
  9128    length field will vary based on the size of the checksum.
       
  9129 
       
  9130    The payload element bears special attention.  Due to the character
       
  9131    set restrictions of XML, the payload of IP datagrams (which MAY
       
  9132    contain arbitrary data) MUST be encoded for transport. This RFC
       
  9133    REQUIRES the contents of the payload to be encoded in the base-64
       
  9134    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
  9135    encoded output MUST be wrapped on 76-character lines.
       
  9136 
       
  9137 
       
  9138 
       
  9139 
       
  9140 
       
  9141 
       
  9142 
       
  9143 
       
  9144 
       
  9145 
       
  9146 
       
  9147 
       
  9148 
       
  9149 
       
  9150 
       
  9151 
       
  9152 
       
  9153 
       
  9154 
       
  9155 
       
  9156 
       
  9157 
       
  9158 
       
  9159 
       
  9160 Kennedy                      Informational                      [Page 3]
       
  9161 
       
  9162 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  9163 
       
  9164 
       
  9165 2.2. Example Datagram
       
  9166 
       
  9167    The following is an example IPoXML datagram with an empty payload:
       
  9168 
       
  9169    <?xml version="1.0" encoding="UTF-8"?>
       
  9170    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  9171    <ip>
       
  9172    <header length="474">
       
  9173    <version value="4"/>
       
  9174    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
  9175         relibility="Normal" reserved="0"/>
       
  9176    <total.length value="461"/>
       
  9177    <id value="1"/>
       
  9178    <flags reserved="0" df="dont" mf="last"/>
       
  9179    <offset value="0"/>
       
  9180    <ttl value="255"/>
       
  9181    <protocol value="6"/>
       
  9182    <checksum value="8707"/>
       
  9183    <source address="10.0.0.22"/>
       
  9184    <destination address="10.0.0.1"/>
       
  9185    <options>
       
  9186    <end copied="0" class="0" number="0"/>
       
  9187    </options>
       
  9188    <padding pad="0"/>
       
  9189    </header>
       
  9190    <payload>
       
  9191    </payload>
       
  9192    </ip>
       
  9193 
       
  9194 3.   TCPoXML
       
  9195 
       
  9196    This protocol MUST be implemented to be compliant with this RFC.  The
       
  9197    DTD for this document type can be found in section 7.2.
       
  9198 
       
  9199 3.1. TCP Description
       
  9200 
       
  9201    A number of items have changed from the original TCP specification.
       
  9202    Bit-masks, where present have been converted into human-readable
       
  9203    values.  Length and checksum and port values are present as decimal
       
  9204    integers.
       
  9205 
       
  9206    To calculate the length and checksum fields of the TCP element, a
       
  9207    canonicalized form of the element MUST be used as in section 2.1.
       
  9208 
       
  9209    An iterative method SHOULD be used to calculate checksums as in
       
  9210    section 2.1.
       
  9211 
       
  9212    The payload element MUST be encoded as in section 2.1.
       
  9213 
       
  9214 
       
  9215 
       
  9216 Kennedy                      Informational                      [Page 4]
       
  9217 
       
  9218 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  9219 
       
  9220 
       
  9221    The TCP offset element was expanded to a maximum of 255 from 16 to
       
  9222    allow for the increased size of the header in XML.
       
  9223 
       
  9224    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  9225    as well as the <!DOCTYPE> declaration.
       
  9226 
       
  9227 3.2. Example Datagram
       
  9228 
       
  9229    The following is an example TCPoXML datagram with an empty payload:
       
  9230 
       
  9231    <?xml version="1.0" encoding="UTF-8"?>
       
  9232    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  9233    <tcp>
       
  9234    <tcp.header>
       
  9235    <src port="31415"/>
       
  9236    <dest port="42424"/>
       
  9237    <sequence number="322622954"/>
       
  9238    <acknowledgement number="689715995"/>
       
  9239    <offset number=""/>
       
  9240    <reserved value="0"/>
       
  9241    <control syn="1" ack="1"/>
       
  9242    <window size="1"/>
       
  9243    <urgent pointer="0"/>
       
  9244    <checksum value="2988"/>
       
  9245    <tcp.options>
       
  9246    <tcp.end kind="0"/>
       
  9247    </tcp.options>
       
  9248    <padding pad="0"/>
       
  9249    </tcp.header>
       
  9250    <payload>
       
  9251    </payload>
       
  9252    </tcp>
       
  9253 
       
  9254 4.   UDPoXML
       
  9255 
       
  9256    This protocol MUST be implemented to be compliant with this RFC.  The
       
  9257    DTD for this document type can be found in section 7.3.
       
  9258 
       
  9259 4.1. UDP Description
       
  9260 
       
  9261    A number of items have changed from the original UDP specification.
       
  9262    Bit-masks, where present have been converted into human-readable
       
  9263    values.  Length and checksum and port values are present as decimal
       
  9264    integers.
       
  9265 
       
  9266 
       
  9267 
       
  9268 
       
  9269 
       
  9270 
       
  9271 
       
  9272 Kennedy                      Informational                      [Page 5]
       
  9273 
       
  9274 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  9275 
       
  9276 
       
  9277    To calculate the length and checksum fields of the UDP element, a
       
  9278    canonicalized form of the element MUST be used as in section 2.1.  An
       
  9279    iterative method SHOULD be used to calculate checksums as in section
       
  9280    2.1.
       
  9281 
       
  9282    The payload element MUST be encoded as in section 2.1.
       
  9283 
       
  9284    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
  9285    as well as the <!DOCTYPE> declaration.
       
  9286 
       
  9287 4.2. Example Datagram
       
  9288 
       
  9289    The following is an example UDPoXML datagram with an empty payload:
       
  9290 
       
  9291    <?xml version="1.0" encoding="UTF-8"?>
       
  9292    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  9293    <udp>
       
  9294    <udp.header>
       
  9295    <src port="31415"/>
       
  9296    <dest port="42424"/>
       
  9297    <udp.length value="143"/>
       
  9298    <checksum value="2988"/>
       
  9299    </udp.header>
       
  9300    <payload>
       
  9301    </payload>
       
  9302    </udp>
       
  9303 
       
  9304 5.   Network Transport
       
  9305 
       
  9306    This document provides for the transmission of BLOAT datagrams over
       
  9307    two common families of physical layer transport.  Future RFCs will
       
  9308    address additional transports as routing vendors catch up to the
       
  9309    specification, and we begin to see BLOAT routed across the Internet
       
  9310    backbone.
       
  9311 
       
  9312 5.1. Ethernet
       
  9313 
       
  9314    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
  9315    exception that the type field of the Ethernet frame MUST contain the
       
  9316    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
  9317    be 0x3c 3f 78 6d 6c ("<?xml".)
       
  9318 
       
  9319 5.2. IEEE 802
       
  9320 
       
  9321    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
  9322    that the protocol type code for IPoXML is 0xBEEF.
       
  9323 
       
  9324 
       
  9325 
       
  9326 
       
  9327 
       
  9328 Kennedy                      Informational                      [Page 6]
       
  9329 
       
  9330 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  9331 
       
  9332 
       
  9333 6. Gatewaying over IP
       
  9334 
       
  9335    In order to facilitate the gradual introduction of BLOAT into the
       
  9336    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
  9337    gateway between networks that run BLOAT natively on their LANs.
       
  9338 
       
  9339 7. DTDs
       
  9340 
       
  9341    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
  9342    Network DTD (7.1.)
       
  9343 
       
  9344    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
  9345    [XML]) although it is understood that most IPoXML implementations
       
  9346    will not need to pull down the DTD, as it will normally be embedded
       
  9347    in the implementation, and presents something of a catch-22 if you
       
  9348    need to load part of your network protocol over the network.
       
  9349 
       
  9350 7.1.  IPoXML DTD
       
  9351 
       
  9352    <!--
       
  9353     DTD for IP over XML.
       
  9354     Refer to this DTD as:
       
  9355 
       
  9356     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
  9357    -->
       
  9358    <!--
       
  9359     DTD data types:
       
  9360 
       
  9361       Digits      [0..9]+
       
  9362 
       
  9363       Precedence  "NetworkControl | InternetworkControl |
       
  9364                    CRITIC | FlashOverride | Flash | Immediate |
       
  9365                    Priority | Routine"
       
  9366 
       
  9367       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
  9368 
       
  9369       Class       [0..3]
       
  9370 
       
  9371       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
  9372                     Restricted | Secret | Top Secret | Reserved"
       
  9373 
       
  9374       Compartments [0..65535]
       
  9375 
       
  9376       Handling     [0..65535]
       
  9377 
       
  9378       TCC          [0..16777216]
       
  9379 
       
  9380    -->
       
  9381 
       
  9382 
       
  9383 
       
  9384 Kennedy                      Informational                      [Page 7]
       
  9385 
       
  9386 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  9387 
       
  9388 
       
  9389    <!ENTITY % Digits "CDATA">
       
  9390    <!ENTITY % Precedence "CDATA">
       
  9391    <!ENTITY % IP4Addr "CDATA">
       
  9392    <!ENTITY % Class "CDATA">
       
  9393    <!ENTITY % Sec "CDATA">
       
  9394    <!ENTITY % Compartments "CDATA">
       
  9395    <!ENTITY % Handling "CDATA">
       
  9396    <!ENTITY % TCC "CDATA">
       
  9397 
       
  9398    <!ELEMENT ip (header, payload)>
       
  9399 
       
  9400    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
  9401                     protocol, checksum, source, destination, options,
       
  9402                     padding)>
       
  9403    <!-- length of header in 32-bit words -->
       
  9404    <!ATTLIST header
       
  9405              length %Digits; #REQUIRED>
       
  9406 
       
  9407    <!ELEMENT version EMPTY>
       
  9408    <!-- ip version. SHOULD be "4" -->
       
  9409    <!ATTLIST version
       
  9410              value   %Digits;  #REQUIRED>
       
  9411 
       
  9412    <!ELEMENT tos EMPTY>
       
  9413    <!ATTLIST tos
       
  9414              precedence   %Precedence;    #REQUIRED
       
  9415              delay    (normal | low)  #REQUIRED
       
  9416              throughput   (normal | high) #REQUIRED
       
  9417              relibility   (normal | high) #REQUIRED
       
  9418              reserved     CDATA #FIXED "0">
       
  9419 
       
  9420    <!ELEMENT total.length EMPTY>
       
  9421    <!--
       
  9422     total length of datagram (header and payload) in octets, MUST be
       
  9423     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
  9424     ethernets).
       
  9425    -->
       
  9426    <!ATTLIST total.length
       
  9427              value %Digits; #REQUIRED>
       
  9428 
       
  9429    <!ELEMENT id EMPTY>
       
  9430    <!-- 0 <= id <= 65,535  -->
       
  9431    <!ATTLIST id
       
  9432              value %Digits; #REQUIRED>
       
  9433 
       
  9434    <!ELEMENT flags EMPTY>
       
  9435    <!-- df = don't fragment, mf = more fragments  -->
       
  9436    <!ATTLIST flags
       
  9437 
       
  9438 
       
  9439 
       
  9440 Kennedy                      Informational                      [Page 8]
       
  9441 
       
  9442 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  9443 
       
  9444 
       
  9445           reserved CDATA  #FIXED "0"
       
  9446           df (may|dont)   #REQUIRED
       
  9447           mf (last|more)  #REQUIRED>
       
  9448 
       
  9449    <!ELEMENT offset EMPTY>
       
  9450    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
  9451    <!ATTLIST offset
       
  9452              value %Digits; #REQUIRED>
       
  9453 
       
  9454    <!ELEMENT ttl EMPTY>
       
  9455    <!-- 0 <= ttl <= 255 -->
       
  9456    <!ATTLIST ttl
       
  9457              value %Digits; #REQUIRED>
       
  9458 
       
  9459    <!ELEMENT protocol EMPTY>
       
  9460    <!-- 0 <= protocol <= 255 (per IANA) -->
       
  9461    <!ATTLIST protocol
       
  9462              value %Digits; #REQUIRED>
       
  9463 
       
  9464    <!ELEMENT checksum EMPTY>
       
  9465    <!-- 0 <= checksum <= 65535 (over header only) -->
       
  9466    <!ATTLIST checksum
       
  9467              value %Digits; #REQUIRED>
       
  9468 
       
  9469    <!ELEMENT source EMPTY>
       
  9470    <!ATTLIST source
       
  9471              address %IP4Addr; #REQUIRED>
       
  9472 
       
  9473    <!ELEMENT destination EMPTY>
       
  9474    <!ATTLIST destination
       
  9475              address %IP4Addr; #REQUIRED>
       
  9476 
       
  9477    <!ELEMENT options ( end | noop | security | loose | strict | record
       
  9478                      | stream | timestamp )*>
       
  9479 
       
  9480    <!ELEMENT end EMPTY>
       
  9481    <!ATTLIST end
       
  9482              copied (0|1) #REQUIRED
       
  9483              class  CDATA #FIXED "0"
       
  9484              number CDATA #FIXED "0">
       
  9485 
       
  9486    <!ELEMENT noop EMPTY>
       
  9487    <!ATTLIST noop
       
  9488              copied (0|1) #REQUIRED
       
  9489              class  CDATA #FIXED "0"
       
  9490              number CDATA #FIXED "1">
       
  9491 
       
  9492    <!ELEMENT security EMPTY>
       
  9493 
       
  9494 
       
  9495 
       
  9496 Kennedy                      Informational                      [Page 9]
       
  9497 
       
  9498 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  9499 
       
  9500 
       
  9501    <!ATTLIST security
       
  9502              copied CDATA #FIXED "1"
       
  9503              class  CDATA #FIXED "0"
       
  9504              number CDATA #FIXED "2"
       
  9505              length CDATA #FIXED "11"
       
  9506              security %Sec; #REQUIRED
       
  9507              compartments %Compartments; #REQUIRED
       
  9508              handling %Handling; #REQUIRED
       
  9509              tcc %TCC; #REQUIRED>
       
  9510    <!ELEMENT loose (hop)+>
       
  9511    <!ATTLIST loose
       
  9512              copied CDATA #FIXED "1"
       
  9513              class  CDATA #FIXED "0"
       
  9514              number CDATA #FIXED "3"
       
  9515              length %Digits; #REQUIRED
       
  9516              pointer %Digits; #REQUIRED>
       
  9517 
       
  9518    <!ELEMENT hop EMPTY>
       
  9519    <!ATTLIST hop
       
  9520              address %IP4Addr; #REQUIRED>
       
  9521 
       
  9522    <!ELEMENT strict (hop)+>
       
  9523    <!ATTLIST strict
       
  9524              copied CDATA #FIXED "1"
       
  9525              class  CDATA #FIXED "0"
       
  9526              number CDATA #FIXED "9"
       
  9527              length %Digits; #REQUIRED
       
  9528              pointer %Digits; #REQUIRED>
       
  9529 
       
  9530    <!ELEMENT record (hop)+>
       
  9531    <!ATTLIST record
       
  9532              copied CDATA #FIXED "0"
       
  9533              class  CDATA #FIXED "0"
       
  9534              number CDATA #FIXED "7"
       
  9535              length %Digits; #REQUIRED
       
  9536              pointer %Digits; #REQUIRED>
       
  9537 
       
  9538    <!ELEMENT stream EMPTY>
       
  9539    <!-- 0 <= id <= 65,535 -->
       
  9540    <!ATTLIST stream
       
  9541              copied CDATA #FIXED "1"
       
  9542              class  CDATA #FIXED "0"
       
  9543              number CDATA #FIXED "8"
       
  9544              length CDATA #FIXED "4"
       
  9545              id %Digits; #REQUIRED>
       
  9546 
       
  9547    <!ELEMENT timestamp (tstamp)+>
       
  9548    <!-- 0 <= oflw <=15 -->
       
  9549 
       
  9550 
       
  9551 
       
  9552 Kennedy                      Informational                     [Page 10]
       
  9553 
       
  9554 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  9555 
       
  9556 
       
  9557    <!ATTLIST timestamp
       
  9558              copied CDATA #FIXED "0"
       
  9559              class  CDATA #FIXED "2"
       
  9560              number CDATA #FIXED "4"
       
  9561              length %Digits;  #REQUIRED
       
  9562              pointer %Digits; #REQUIRED
       
  9563              oflw %Digits;    #REQUIRED
       
  9564              flag (0 | 1 | 3)  #REQUIRED>
       
  9565 
       
  9566    <!ELEMENT tstamp EMPTY>
       
  9567    <!ATTLIST tstamp
       
  9568              time %Digits;   #REQUIRED
       
  9569              address %IP4Addr; #IMPLIED>
       
  9570    <!--
       
  9571        padding to bring header to 32-bit boundary.
       
  9572        pad MUST be "0"*
       
  9573     -->
       
  9574    <!ELEMENT padding EMPTY>
       
  9575    <!ATTLIST padding
       
  9576              pad CDATA #REQUIRED>
       
  9577 
       
  9578    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
  9579         by section 2.1 of this RFC -->
       
  9580    <!ELEMENT payload (CDATA)>
       
  9581 
       
  9582 7.2.  TCPoXML DTD
       
  9583 
       
  9584    <!--
       
  9585       DTD for TCP over XML.
       
  9586       Refer to this DTD as:
       
  9587 
       
  9588       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
  9589    -->
       
  9590 
       
  9591    <!-- the pseudoheader is only included for checksum calculations -->
       
  9592    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
  9593 
       
  9594    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
  9595                          reserved, control, window, checksum, urgent,
       
  9596                          tcp.options, padding)>
       
  9597 
       
  9598    <!ELEMENT src EMPTY>
       
  9599    <!-- 0 <= port <= 65,535 -->
       
  9600    <!ATTLIST src
       
  9601              port %Digits; #REQUIRED>
       
  9602 
       
  9603    <!ELEMENT dest EMPTY>
       
  9604    <!-- 0 <= port <= 65,535 -->
       
  9605 
       
  9606 
       
  9607 
       
  9608 Kennedy                      Informational                     [Page 11]
       
  9609 
       
  9610 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  9611 
       
  9612 
       
  9613    <!ATTLIST dest
       
  9614              port %Digits; #REQUIRED>
       
  9615 
       
  9616    <!ELEMENT sequence EMPTY>
       
  9617    <!-- 0 <= number <= 4294967295 -->
       
  9618    <!ATTLIST sequence
       
  9619              number %Digits; #REQUIRED>
       
  9620 
       
  9621    <!ELEMENT acknowledgement EMPTY>
       
  9622    <!-- 0 <= number <= 4294967295 -->
       
  9623    <!ATTLIST acknowledgement
       
  9624              number %Digits; #REQUIRED>
       
  9625 
       
  9626    <!ELEMENT offset EMPTY>
       
  9627    <!-- 0 <= number <= 255 -->
       
  9628    <!ATTLIST offset
       
  9629              number %Digits; #REQUIRED>
       
  9630 
       
  9631    <!ELEMENT reserved EMPTY>
       
  9632    <!ATTLIST reserved
       
  9633              value CDATA #FIXED "0">
       
  9634 
       
  9635    <!ELEMENT control EMPTY>
       
  9636    <!ATTLIST control
       
  9637              urg (0|1) #IMPLIED
       
  9638              ack (0|1) #IMPLIED
       
  9639              psh (0|1) #IMPLIED
       
  9640              rst (0|1) #IMPLIED
       
  9641              syn (0|1) #IMPLIED
       
  9642              fin (0|1) #IMPLIED>
       
  9643 
       
  9644    <!ELEMENT window EMPTY>
       
  9645    <!-- 0 <= size <= 65,535 -->
       
  9646    <!ATTLIST window
       
  9647              size %Digits; #REQUIRED>
       
  9648 
       
  9649    <!--
       
  9650       checksum as in ip, but with
       
  9651       the following pseudo-header added into the tcp element:
       
  9652      -->
       
  9653    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
  9654                                tcp.length)>
       
  9655 
       
  9656    <!--
       
  9657       tcp header + data length in octets. does not include the size of
       
  9658 
       
  9659       the pseudoheader.
       
  9660     -->
       
  9661 
       
  9662 
       
  9663 
       
  9664 Kennedy                      Informational                     [Page 12]
       
  9665 
       
  9666 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  9667 
       
  9668 
       
  9669    <!ELEMENT tcp.length EMPTY>
       
  9670    <!ATTLIST tcp.length
       
  9671              value %Digits; #REQUIRED>
       
  9672 
       
  9673    <!ELEMENT urgent EMPTY>
       
  9674    <!-- 0 <= pointer <= 65,535 -->
       
  9675    <!ATTLIST urgent
       
  9676              pointer %Digits; #REQUIRED>
       
  9677 
       
  9678    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
  9679 
       
  9680    <!ELEMENT tcp.end EMPTY>
       
  9681    <!ATTLIST tcp.end
       
  9682              kind CDATA #FIXED "0">
       
  9683 
       
  9684    <!ELEMENT tcp.noop EMPTY>
       
  9685    <!ATTLIST tcp.noop
       
  9686              kind CDATA #FIXED "1">
       
  9687 
       
  9688    <!ELEMENT tcp.mss EMPTY>
       
  9689    <!ATTLIST tcp.mss
       
  9690              kind CDATA #FIXED "2"
       
  9691              length CDATA #FIXED "4"
       
  9692              size %Digits; #REQUIRED>
       
  9693 
       
  9694 7.3.  UDPoXML DTD
       
  9695 
       
  9696    <!--
       
  9697       DTD for UDP over XML.
       
  9698       Refer to this DTD as:
       
  9699 
       
  9700       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
  9701    -->
       
  9702 
       
  9703    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
  9704 
       
  9705    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
  9706 
       
  9707    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
  9708                                udp.length)>
       
  9709 
       
  9710    <!--
       
  9711       udp header + data length in octets. does not include the size of
       
  9712       the pseudoheader.
       
  9713     -->
       
  9714    <!ELEMENT udp.length EMPTY>
       
  9715    <!ATTLIST udp.length
       
  9716              value %Digits; #REQUIRED>
       
  9717 
       
  9718 
       
  9719 
       
  9720 Kennedy                      Informational                     [Page 13]
       
  9721 
       
  9722 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  9723 
       
  9724 
       
  9725 8. Security Considerations
       
  9726 
       
  9727    XML, as a subset of SGML, has the same security considerations as
       
  9728    specified in SGML Media Types [RFC1874].  Security considerations
       
  9729    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
  9730    not attempt to correct for issues not related to message format.
       
  9731 
       
  9732 9.   References
       
  9733 
       
  9734    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
  9735                February 2002. (Work in Progress)
       
  9736 
       
  9737    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
  9738                August 1980.
       
  9739 
       
  9740    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
  9741                September 1981.
       
  9742 
       
  9743    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
  9744                793, September 1981.
       
  9745 
       
  9746    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
  9747                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
  9748 
       
  9749    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
  9750                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
  9751                43, RFC 1042, February 1988.
       
  9752 
       
  9753    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
  9754                Application and Support", RFC 1123, October 1989.
       
  9755 
       
  9756    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
  9757                1995.
       
  9758 
       
  9759    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
  9760                October 1996.
       
  9761 
       
  9762    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
  9763                Extensions (MIME) Part One: Format of Internet Message
       
  9764                Bodies", RFC 2045, November 1996.
       
  9765 
       
  9766    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
  9767                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
  9768 
       
  9769    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
  9770                10646", RFC 2279, January 1998.
       
  9771 
       
  9772 
       
  9773 
       
  9774 
       
  9775 
       
  9776 Kennedy                      Informational                     [Page 14]
       
  9777 
       
  9778 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  9779 
       
  9780 
       
  9781    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
  9782                (IPv6) Specification", RFC 2460, December 1998.
       
  9783 
       
  9784    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
  9785                RFC 3080, March 2001.
       
  9786 
       
  9787    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
  9788                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
  9789                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
  9790                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
  9791 
       
  9792    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
  9793                Markup Language (XML)" World Wide Web Consortium
       
  9794                Recommendation REC- xml-19980210.
       
  9795                http://www.w3.org/TR/1998/REC-xml-19980210
       
  9796 
       
  9797 10.  Author's Address
       
  9798 
       
  9799    Hugh Kennedy
       
  9800    Mimezine
       
  9801    1060 West Addison
       
  9802    Chicago, IL 60613
       
  9803    USA
       
  9804 
       
  9805    EMail: kennedyh@engin.umich.edu
       
  9806 
       
  9807 
       
  9808 
       
  9809 
       
  9810 
       
  9811 
       
  9812 
       
  9813 
       
  9814 
       
  9815 
       
  9816 
       
  9817 
       
  9818 
       
  9819 
       
  9820 
       
  9821 
       
  9822 
       
  9823 
       
  9824 
       
  9825 
       
  9826 
       
  9827 
       
  9828 
       
  9829 
       
  9830 
       
  9831 
       
  9832 Kennedy                      Informational                     [Page 15]
       
  9833 
       
  9834 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  9835 
       
  9836 
       
  9837 11.  Full Copyright Statement
       
  9838 
       
  9839    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  9840 
       
  9841    This document and translations of it may be copied and furnished to
       
  9842    others, and derivative works that comment on or otherwise explain it
       
  9843    or assist in its implementation may be prepared, copied, published
       
  9844    and distributed, in whole or in part, without restriction of any
       
  9845    kind, provided that the above copyright notice and this paragraph are
       
  9846    included on all such copies and derivative works.  However, this
       
  9847    document itself may not be modified in any way, such as by removing
       
  9848    the copyright notice or references to the Internet Society or other
       
  9849    Internet organizations, except as needed for the purpose of
       
  9850    developing Internet standards in which case the procedures for
       
  9851    copyrights defined in the Internet Standards process must be
       
  9852    followed, or as required to translate it into languages other than
       
  9853    English.
       
  9854 
       
  9855    The limited permissions granted above are perpetual and will not be
       
  9856    revoked by the Internet Society or its successors or assigns.
       
  9857 
       
  9858    This document and the information contained herein is provided on an
       
  9859    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
  9860    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
  9861    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
  9862    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
  9863    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
  9864 
       
  9865 Acknowledgement
       
  9866 
       
  9867    Funding for the RFC Editor function is currently provided by the
       
  9868    Internet Society.
       
  9869 
       
  9870 
       
  9871 
       
  9872 
       
  9873 
       
  9874 
       
  9875 
       
  9876 
       
  9877 
       
  9878 
       
  9879 
       
  9880 
       
  9881 
       
  9882 
       
  9883 
       
  9884 
       
  9885 
       
  9886 
       
  9887 
       
  9888 Kennedy                      Informational                     [Page 16]
       
  9889 
       
  9890 
       
  9891 
       
  9892 
       
  9893 
       
  9894 
       
  9895 
       
  9896 Network Working Group                                         H. Kennedy
       
  9897 Request for Comments: 3252                                      Mimezine
       
  9898 Category: Informational                                     1 April 2002
       
  9899 
       
  9900 
       
  9901                  Binary Lexical Octet Ad-hoc Transport
       
  9902 
       
  9903 Status of this Memo
       
  9904 
       
  9905    This memo provides information for the Internet community.  It does
       
  9906    not specify an Internet standard of any kind.  Distribution of this
       
  9907    memo is unlimited.
       
  9908 
       
  9909 Copyright Notice
       
  9910 
       
  9911    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
  9912 
       
  9913 Abstract
       
  9914 
       
  9915    This document defines a reformulation of IP and two transport layer
       
  9916    protocols (TCP and UDP) as XML applications.
       
  9917 
       
  9918 1.   Introduction
       
  9919 
       
  9920 1.1. Overview
       
  9921 
       
  9922    This document describes the Binary Lexical Octet Ad-hoc Transport
       
  9923    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
  9924    (IP [RFC791]), and two associated transport layer protocols (TCP
       
  9925    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
  9926    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
  9927    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
  9928    across the public Internet.
       
  9929 
       
  9930 1.2. Motivation
       
  9931 
       
  9932    The wild popularity of XML as a basis for application-level protocols
       
  9933    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
  9934    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
  9935    investigation into the possibility of extending the use of XML in the
       
  9936    protocol stack.  Using XML at both the transport and network layer in
       
  9937    addition to the application layer would provide for an amazing amount
       
  9938    of power and flexibility while removing dependencies on proprietary
       
  9939    and hard-to-understand binary protocols.  This protocol unification
       
  9940    would also allow applications to use a single XML parser for all
       
  9941    aspects of their operation, eliminating developer time spent figuring
       
  9942    out the intricacies of each new protocol, and moving the hard work of
       
  9943 
       
  9944 
       
  9945 
       
  9946 
       
  9947 Kennedy                      Informational                      [Page 1]
       
  9948 
       
  9949 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
  9950 
       
  9951 
       
  9952    parsing to the XML toolset.  The use of XML also mitigates concerns
       
  9953    over "network vs. host" byte ordering which is at the root of many
       
  9954    network application bugs.
       
  9955 
       
  9956 1.3. Relation to Existing Protocols
       
  9957 
       
  9958    The reformulations specified in this RFC follow as closely as
       
  9959    possible the spirit of the RFCs on which they are based, and so MAY
       
  9960    contain elements or attributes that would not be needed in a pure
       
  9961    reworking (e.g. length attributes, which are implicit in XML.)
       
  9962 
       
  9963    The layering of network and transport protocols are maintained in
       
  9964    this RFC despite the optimizations that could be made if the line
       
  9965    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
  9966    element in the DTD) in order to foster future use of this protocol as
       
  9967    a basis for reformulating other protocols (such as ICMP.)
       
  9968 
       
  9969    Other than the encoding, the behavioral aspects of each of the
       
  9970    existing protocols remain unchanged.  Routing, address spaces, TCP
       
  9971    congestion control, etc. behave as specified in the extant standards.
       
  9972    Adapting to new standards and experimental algorithm heuristics for
       
  9973    improving performance will become much easier once the move to BLOAT
       
  9974    has been completed.
       
  9975 
       
  9976 1.4. Requirement Levels
       
  9977 
       
  9978    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
  9979    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
  9980    document are to be interpreted as described in BCP 14, RFC 2119
       
  9981    [RFC2119].
       
  9982 
       
  9983 2.   IPoXML
       
  9984 
       
  9985    This protocol MUST be implemented to be compliant with this RFC.
       
  9986    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
  9987    (section 3.) and higher-level application protocols.
       
  9988 
       
  9989    The DTD for this document type can be found in section 7.1.
       
  9990 
       
  9991    The routing of IPoXML can be easily implemented on hosts with an XML
       
  9992    parser, as the regular structure lends itself handily to parsing and
       
  9993    validation of the document/datagram and then processing the
       
  9994    destination address, TTL, and checksum before sending it on to its
       
  9995    next-hop.
       
  9996 
       
  9997    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
  9998    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
  9999    would have exceeded the 1500 byte Ethernet MTU.
       
 10000 
       
 10001 
       
 10002 
       
 10003 Kennedy                      Informational                      [Page 2]
       
 10004 
       
 10005 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 10006 
       
 10007 
       
 10008    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
 10009    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
 10010    formed and include the XMLDecl.
       
 10011 
       
 10012 2.1. IP Description
       
 10013 
       
 10014    A number of items have changed (for the better) from the original IP
       
 10015    specification.  Bit-masks, where present have been converted into
       
 10016    human-readable values.  IP addresses are listed in their dotted-
       
 10017    decimal notation [RFC1123].  Length and checksum values are present
       
 10018    as decimal integers.
       
 10019 
       
 10020    To calculate the length and checksum fields of the IP element, a
       
 10021    canonicalized form of the element MUST be used.  The canonical form
       
 10022    SHALL have no whitespace (including newline characters) between
       
 10023    elements and only one space character between attributes.  There
       
 10024    SHALL NOT be a space following the last attribute in an element.
       
 10025 
       
 10026    An iterative method SHOULD be used to calculate checksums, as the
       
 10027    length field will vary based on the size of the checksum.
       
 10028 
       
 10029    The payload element bears special attention.  Due to the character
       
 10030    set restrictions of XML, the payload of IP datagrams (which MAY
       
 10031    contain arbitrary data) MUST be encoded for transport. This RFC
       
 10032    REQUIRES the contents of the payload to be encoded in the base-64
       
 10033    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
 10034    encoded output MUST be wrapped on 76-character lines.
       
 10035 
       
 10036 
       
 10037 
       
 10038 
       
 10039 
       
 10040 
       
 10041 
       
 10042 
       
 10043 
       
 10044 
       
 10045 
       
 10046 
       
 10047 
       
 10048 
       
 10049 
       
 10050 
       
 10051 
       
 10052 
       
 10053 
       
 10054 
       
 10055 
       
 10056 
       
 10057 
       
 10058 
       
 10059 Kennedy                      Informational                      [Page 3]
       
 10060 
       
 10061 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 10062 
       
 10063 
       
 10064 2.2. Example Datagram
       
 10065 
       
 10066    The following is an example IPoXML datagram with an empty payload:
       
 10067 
       
 10068    <?xml version="1.0" encoding="UTF-8"?>
       
 10069    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 10070    <ip>
       
 10071    <header length="474">
       
 10072    <version value="4"/>
       
 10073    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
 10074         relibility="Normal" reserved="0"/>
       
 10075    <total.length value="461"/>
       
 10076    <id value="1"/>
       
 10077    <flags reserved="0" df="dont" mf="last"/>
       
 10078    <offset value="0"/>
       
 10079    <ttl value="255"/>
       
 10080    <protocol value="6"/>
       
 10081    <checksum value="8707"/>
       
 10082    <source address="10.0.0.22"/>
       
 10083    <destination address="10.0.0.1"/>
       
 10084    <options>
       
 10085    <end copied="0" class="0" number="0"/>
       
 10086    </options>
       
 10087    <padding pad="0"/>
       
 10088    </header>
       
 10089    <payload>
       
 10090    </payload>
       
 10091    </ip>
       
 10092 
       
 10093 3.   TCPoXML
       
 10094 
       
 10095    This protocol MUST be implemented to be compliant with this RFC.  The
       
 10096    DTD for this document type can be found in section 7.2.
       
 10097 
       
 10098 3.1. TCP Description
       
 10099 
       
 10100    A number of items have changed from the original TCP specification.
       
 10101    Bit-masks, where present have been converted into human-readable
       
 10102    values.  Length and checksum and port values are present as decimal
       
 10103    integers.
       
 10104 
       
 10105    To calculate the length and checksum fields of the TCP element, a
       
 10106    canonicalized form of the element MUST be used as in section 2.1.
       
 10107 
       
 10108    An iterative method SHOULD be used to calculate checksums as in
       
 10109    section 2.1.
       
 10110 
       
 10111    The payload element MUST be encoded as in section 2.1.
       
 10112 
       
 10113 
       
 10114 
       
 10115 Kennedy                      Informational                      [Page 4]
       
 10116 
       
 10117 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 10118 
       
 10119 
       
 10120    The TCP offset element was expanded to a maximum of 255 from 16 to
       
 10121    allow for the increased size of the header in XML.
       
 10122 
       
 10123    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 10124    as well as the <!DOCTYPE> declaration.
       
 10125 
       
 10126 3.2. Example Datagram
       
 10127 
       
 10128    The following is an example TCPoXML datagram with an empty payload:
       
 10129 
       
 10130    <?xml version="1.0" encoding="UTF-8"?>
       
 10131    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 10132    <tcp>
       
 10133    <tcp.header>
       
 10134    <src port="31415"/>
       
 10135    <dest port="42424"/>
       
 10136    <sequence number="322622954"/>
       
 10137    <acknowledgement number="689715995"/>
       
 10138    <offset number=""/>
       
 10139    <reserved value="0"/>
       
 10140    <control syn="1" ack="1"/>
       
 10141    <window size="1"/>
       
 10142    <urgent pointer="0"/>
       
 10143    <checksum value="2988"/>
       
 10144    <tcp.options>
       
 10145    <tcp.end kind="0"/>
       
 10146    </tcp.options>
       
 10147    <padding pad="0"/>
       
 10148    </tcp.header>
       
 10149    <payload>
       
 10150    </payload>
       
 10151    </tcp>
       
 10152 
       
 10153 4.   UDPoXML
       
 10154 
       
 10155    This protocol MUST be implemented to be compliant with this RFC.  The
       
 10156    DTD for this document type can be found in section 7.3.
       
 10157 
       
 10158 4.1. UDP Description
       
 10159 
       
 10160    A number of items have changed from the original UDP specification.
       
 10161    Bit-masks, where present have been converted into human-readable
       
 10162    values.  Length and checksum and port values are present as decimal
       
 10163    integers.
       
 10164 
       
 10165 
       
 10166 
       
 10167 
       
 10168 
       
 10169 
       
 10170 
       
 10171 Kennedy                      Informational                      [Page 5]
       
 10172 
       
 10173 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 10174 
       
 10175 
       
 10176    To calculate the length and checksum fields of the UDP element, a
       
 10177    canonicalized form of the element MUST be used as in section 2.1.  An
       
 10178    iterative method SHOULD be used to calculate checksums as in section
       
 10179    2.1.
       
 10180 
       
 10181    The payload element MUST be encoded as in section 2.1.
       
 10182 
       
 10183    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 10184    as well as the <!DOCTYPE> declaration.
       
 10185 
       
 10186 4.2. Example Datagram
       
 10187 
       
 10188    The following is an example UDPoXML datagram with an empty payload:
       
 10189 
       
 10190    <?xml version="1.0" encoding="UTF-8"?>
       
 10191    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 10192    <udp>
       
 10193    <udp.header>
       
 10194    <src port="31415"/>
       
 10195    <dest port="42424"/>
       
 10196    <udp.length value="143"/>
       
 10197    <checksum value="2988"/>
       
 10198    </udp.header>
       
 10199    <payload>
       
 10200    </payload>
       
 10201    </udp>
       
 10202 
       
 10203 5.   Network Transport
       
 10204 
       
 10205    This document provides for the transmission of BLOAT datagrams over
       
 10206    two common families of physical layer transport.  Future RFCs will
       
 10207    address additional transports as routing vendors catch up to the
       
 10208    specification, and we begin to see BLOAT routed across the Internet
       
 10209    backbone.
       
 10210 
       
 10211 5.1. Ethernet
       
 10212 
       
 10213    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
 10214    exception that the type field of the Ethernet frame MUST contain the
       
 10215    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
 10216    be 0x3c 3f 78 6d 6c ("<?xml".)
       
 10217 
       
 10218 5.2. IEEE 802
       
 10219 
       
 10220    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
 10221    that the protocol type code for IPoXML is 0xBEEF.
       
 10222 
       
 10223 
       
 10224 
       
 10225 
       
 10226 
       
 10227 Kennedy                      Informational                      [Page 6]
       
 10228 
       
 10229 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 10230 
       
 10231 
       
 10232 6. Gatewaying over IP
       
 10233 
       
 10234    In order to facilitate the gradual introduction of BLOAT into the
       
 10235    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
 10236    gateway between networks that run BLOAT natively on their LANs.
       
 10237 
       
 10238 7. DTDs
       
 10239 
       
 10240    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
 10241    Network DTD (7.1.)
       
 10242 
       
 10243    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
 10244    [XML]) although it is understood that most IPoXML implementations
       
 10245    will not need to pull down the DTD, as it will normally be embedded
       
 10246    in the implementation, and presents something of a catch-22 if you
       
 10247    need to load part of your network protocol over the network.
       
 10248 
       
 10249 7.1.  IPoXML DTD
       
 10250 
       
 10251    <!--
       
 10252     DTD for IP over XML.
       
 10253     Refer to this DTD as:
       
 10254 
       
 10255     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 10256    -->
       
 10257    <!--
       
 10258     DTD data types:
       
 10259 
       
 10260       Digits      [0..9]+
       
 10261 
       
 10262       Precedence  "NetworkControl | InternetworkControl |
       
 10263                    CRITIC | FlashOverride | Flash | Immediate |
       
 10264                    Priority | Routine"
       
 10265 
       
 10266       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
 10267 
       
 10268       Class       [0..3]
       
 10269 
       
 10270       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
 10271                     Restricted | Secret | Top Secret | Reserved"
       
 10272 
       
 10273       Compartments [0..65535]
       
 10274 
       
 10275       Handling     [0..65535]
       
 10276 
       
 10277       TCC          [0..16777216]
       
 10278 
       
 10279    -->
       
 10280 
       
 10281 
       
 10282 
       
 10283 Kennedy                      Informational                      [Page 7]
       
 10284 
       
 10285 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 10286 
       
 10287 
       
 10288    <!ENTITY % Digits "CDATA">
       
 10289    <!ENTITY % Precedence "CDATA">
       
 10290    <!ENTITY % IP4Addr "CDATA">
       
 10291    <!ENTITY % Class "CDATA">
       
 10292    <!ENTITY % Sec "CDATA">
       
 10293    <!ENTITY % Compartments "CDATA">
       
 10294    <!ENTITY % Handling "CDATA">
       
 10295    <!ENTITY % TCC "CDATA">
       
 10296 
       
 10297    <!ELEMENT ip (header, payload)>
       
 10298 
       
 10299    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
 10300                     protocol, checksum, source, destination, options,
       
 10301                     padding)>
       
 10302    <!-- length of header in 32-bit words -->
       
 10303    <!ATTLIST header
       
 10304              length %Digits; #REQUIRED>
       
 10305 
       
 10306    <!ELEMENT version EMPTY>
       
 10307    <!-- ip version. SHOULD be "4" -->
       
 10308    <!ATTLIST version
       
 10309              value   %Digits;  #REQUIRED>
       
 10310 
       
 10311    <!ELEMENT tos EMPTY>
       
 10312    <!ATTLIST tos
       
 10313              precedence   %Precedence;    #REQUIRED
       
 10314              delay    (normal | low)  #REQUIRED
       
 10315              throughput   (normal | high) #REQUIRED
       
 10316              relibility   (normal | high) #REQUIRED
       
 10317              reserved     CDATA #FIXED "0">
       
 10318 
       
 10319    <!ELEMENT total.length EMPTY>
       
 10320    <!--
       
 10321     total length of datagram (header and payload) in octets, MUST be
       
 10322     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
 10323     ethernets).
       
 10324    -->
       
 10325    <!ATTLIST total.length
       
 10326              value %Digits; #REQUIRED>
       
 10327 
       
 10328    <!ELEMENT id EMPTY>
       
 10329    <!-- 0 <= id <= 65,535  -->
       
 10330    <!ATTLIST id
       
 10331              value %Digits; #REQUIRED>
       
 10332 
       
 10333    <!ELEMENT flags EMPTY>
       
 10334    <!-- df = don't fragment, mf = more fragments  -->
       
 10335    <!ATTLIST flags
       
 10336 
       
 10337 
       
 10338 
       
 10339 Kennedy                      Informational                      [Page 8]
       
 10340 
       
 10341 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 10342 
       
 10343 
       
 10344           reserved CDATA  #FIXED "0"
       
 10345           df (may|dont)   #REQUIRED
       
 10346           mf (last|more)  #REQUIRED>
       
 10347 
       
 10348    <!ELEMENT offset EMPTY>
       
 10349    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
 10350    <!ATTLIST offset
       
 10351              value %Digits; #REQUIRED>
       
 10352 
       
 10353    <!ELEMENT ttl EMPTY>
       
 10354    <!-- 0 <= ttl <= 255 -->
       
 10355    <!ATTLIST ttl
       
 10356              value %Digits; #REQUIRED>
       
 10357 
       
 10358    <!ELEMENT protocol EMPTY>
       
 10359    <!-- 0 <= protocol <= 255 (per IANA) -->
       
 10360    <!ATTLIST protocol
       
 10361              value %Digits; #REQUIRED>
       
 10362 
       
 10363    <!ELEMENT checksum EMPTY>
       
 10364    <!-- 0 <= checksum <= 65535 (over header only) -->
       
 10365    <!ATTLIST checksum
       
 10366              value %Digits; #REQUIRED>
       
 10367 
       
 10368    <!ELEMENT source EMPTY>
       
 10369    <!ATTLIST source
       
 10370              address %IP4Addr; #REQUIRED>
       
 10371 
       
 10372    <!ELEMENT destination EMPTY>
       
 10373    <!ATTLIST destination
       
 10374              address %IP4Addr; #REQUIRED>
       
 10375 
       
 10376    <!ELEMENT options ( end | noop | security | loose | strict | record
       
 10377                      | stream | timestamp )*>
       
 10378 
       
 10379    <!ELEMENT end EMPTY>
       
 10380    <!ATTLIST end
       
 10381              copied (0|1) #REQUIRED
       
 10382              class  CDATA #FIXED "0"
       
 10383              number CDATA #FIXED "0">
       
 10384 
       
 10385    <!ELEMENT noop EMPTY>
       
 10386    <!ATTLIST noop
       
 10387              copied (0|1) #REQUIRED
       
 10388              class  CDATA #FIXED "0"
       
 10389              number CDATA #FIXED "1">
       
 10390 
       
 10391    <!ELEMENT security EMPTY>
       
 10392 
       
 10393 
       
 10394 
       
 10395 Kennedy                      Informational                      [Page 9]
       
 10396 
       
 10397 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 10398 
       
 10399 
       
 10400    <!ATTLIST security
       
 10401              copied CDATA #FIXED "1"
       
 10402              class  CDATA #FIXED "0"
       
 10403              number CDATA #FIXED "2"
       
 10404              length CDATA #FIXED "11"
       
 10405              security %Sec; #REQUIRED
       
 10406              compartments %Compartments; #REQUIRED
       
 10407              handling %Handling; #REQUIRED
       
 10408              tcc %TCC; #REQUIRED>
       
 10409    <!ELEMENT loose (hop)+>
       
 10410    <!ATTLIST loose
       
 10411              copied CDATA #FIXED "1"
       
 10412              class  CDATA #FIXED "0"
       
 10413              number CDATA #FIXED "3"
       
 10414              length %Digits; #REQUIRED
       
 10415              pointer %Digits; #REQUIRED>
       
 10416 
       
 10417    <!ELEMENT hop EMPTY>
       
 10418    <!ATTLIST hop
       
 10419              address %IP4Addr; #REQUIRED>
       
 10420 
       
 10421    <!ELEMENT strict (hop)+>
       
 10422    <!ATTLIST strict
       
 10423              copied CDATA #FIXED "1"
       
 10424              class  CDATA #FIXED "0"
       
 10425              number CDATA #FIXED "9"
       
 10426              length %Digits; #REQUIRED
       
 10427              pointer %Digits; #REQUIRED>
       
 10428 
       
 10429    <!ELEMENT record (hop)+>
       
 10430    <!ATTLIST record
       
 10431              copied CDATA #FIXED "0"
       
 10432              class  CDATA #FIXED "0"
       
 10433              number CDATA #FIXED "7"
       
 10434              length %Digits; #REQUIRED
       
 10435              pointer %Digits; #REQUIRED>
       
 10436 
       
 10437    <!ELEMENT stream EMPTY>
       
 10438    <!-- 0 <= id <= 65,535 -->
       
 10439    <!ATTLIST stream
       
 10440              copied CDATA #FIXED "1"
       
 10441              class  CDATA #FIXED "0"
       
 10442              number CDATA #FIXED "8"
       
 10443              length CDATA #FIXED "4"
       
 10444              id %Digits; #REQUIRED>
       
 10445 
       
 10446    <!ELEMENT timestamp (tstamp)+>
       
 10447    <!-- 0 <= oflw <=15 -->
       
 10448 
       
 10449 
       
 10450 
       
 10451 Kennedy                      Informational                     [Page 10]
       
 10452 
       
 10453 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 10454 
       
 10455 
       
 10456    <!ATTLIST timestamp
       
 10457              copied CDATA #FIXED "0"
       
 10458              class  CDATA #FIXED "2"
       
 10459              number CDATA #FIXED "4"
       
 10460              length %Digits;  #REQUIRED
       
 10461              pointer %Digits; #REQUIRED
       
 10462              oflw %Digits;    #REQUIRED
       
 10463              flag (0 | 1 | 3)  #REQUIRED>
       
 10464 
       
 10465    <!ELEMENT tstamp EMPTY>
       
 10466    <!ATTLIST tstamp
       
 10467              time %Digits;   #REQUIRED
       
 10468              address %IP4Addr; #IMPLIED>
       
 10469    <!--
       
 10470        padding to bring header to 32-bit boundary.
       
 10471        pad MUST be "0"*
       
 10472     -->
       
 10473    <!ELEMENT padding EMPTY>
       
 10474    <!ATTLIST padding
       
 10475              pad CDATA #REQUIRED>
       
 10476 
       
 10477    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
 10478         by section 2.1 of this RFC -->
       
 10479    <!ELEMENT payload (CDATA)>
       
 10480 
       
 10481 7.2.  TCPoXML DTD
       
 10482 
       
 10483    <!--
       
 10484       DTD for TCP over XML.
       
 10485       Refer to this DTD as:
       
 10486 
       
 10487       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 10488    -->
       
 10489 
       
 10490    <!-- the pseudoheader is only included for checksum calculations -->
       
 10491    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
 10492 
       
 10493    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
 10494                          reserved, control, window, checksum, urgent,
       
 10495                          tcp.options, padding)>
       
 10496 
       
 10497    <!ELEMENT src EMPTY>
       
 10498    <!-- 0 <= port <= 65,535 -->
       
 10499    <!ATTLIST src
       
 10500              port %Digits; #REQUIRED>
       
 10501 
       
 10502    <!ELEMENT dest EMPTY>
       
 10503    <!-- 0 <= port <= 65,535 -->
       
 10504 
       
 10505 
       
 10506 
       
 10507 Kennedy                      Informational                     [Page 11]
       
 10508 
       
 10509 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 10510 
       
 10511 
       
 10512    <!ATTLIST dest
       
 10513              port %Digits; #REQUIRED>
       
 10514 
       
 10515    <!ELEMENT sequence EMPTY>
       
 10516    <!-- 0 <= number <= 4294967295 -->
       
 10517    <!ATTLIST sequence
       
 10518              number %Digits; #REQUIRED>
       
 10519 
       
 10520    <!ELEMENT acknowledgement EMPTY>
       
 10521    <!-- 0 <= number <= 4294967295 -->
       
 10522    <!ATTLIST acknowledgement
       
 10523              number %Digits; #REQUIRED>
       
 10524 
       
 10525    <!ELEMENT offset EMPTY>
       
 10526    <!-- 0 <= number <= 255 -->
       
 10527    <!ATTLIST offset
       
 10528              number %Digits; #REQUIRED>
       
 10529 
       
 10530    <!ELEMENT reserved EMPTY>
       
 10531    <!ATTLIST reserved
       
 10532              value CDATA #FIXED "0">
       
 10533 
       
 10534    <!ELEMENT control EMPTY>
       
 10535    <!ATTLIST control
       
 10536              urg (0|1) #IMPLIED
       
 10537              ack (0|1) #IMPLIED
       
 10538              psh (0|1) #IMPLIED
       
 10539              rst (0|1) #IMPLIED
       
 10540              syn (0|1) #IMPLIED
       
 10541              fin (0|1) #IMPLIED>
       
 10542 
       
 10543    <!ELEMENT window EMPTY>
       
 10544    <!-- 0 <= size <= 65,535 -->
       
 10545    <!ATTLIST window
       
 10546              size %Digits; #REQUIRED>
       
 10547 
       
 10548    <!--
       
 10549       checksum as in ip, but with
       
 10550       the following pseudo-header added into the tcp element:
       
 10551      -->
       
 10552    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
 10553                                tcp.length)>
       
 10554 
       
 10555    <!--
       
 10556       tcp header + data length in octets. does not include the size of
       
 10557 
       
 10558       the pseudoheader.
       
 10559     -->
       
 10560 
       
 10561 
       
 10562 
       
 10563 Kennedy                      Informational                     [Page 12]
       
 10564 
       
 10565 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 10566 
       
 10567 
       
 10568    <!ELEMENT tcp.length EMPTY>
       
 10569    <!ATTLIST tcp.length
       
 10570              value %Digits; #REQUIRED>
       
 10571 
       
 10572    <!ELEMENT urgent EMPTY>
       
 10573    <!-- 0 <= pointer <= 65,535 -->
       
 10574    <!ATTLIST urgent
       
 10575              pointer %Digits; #REQUIRED>
       
 10576 
       
 10577    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
 10578 
       
 10579    <!ELEMENT tcp.end EMPTY>
       
 10580    <!ATTLIST tcp.end
       
 10581              kind CDATA #FIXED "0">
       
 10582 
       
 10583    <!ELEMENT tcp.noop EMPTY>
       
 10584    <!ATTLIST tcp.noop
       
 10585              kind CDATA #FIXED "1">
       
 10586 
       
 10587    <!ELEMENT tcp.mss EMPTY>
       
 10588    <!ATTLIST tcp.mss
       
 10589              kind CDATA #FIXED "2"
       
 10590              length CDATA #FIXED "4"
       
 10591              size %Digits; #REQUIRED>
       
 10592 
       
 10593 7.3.  UDPoXML DTD
       
 10594 
       
 10595    <!--
       
 10596       DTD for UDP over XML.
       
 10597       Refer to this DTD as:
       
 10598 
       
 10599       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 10600    -->
       
 10601 
       
 10602    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
 10603 
       
 10604    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
 10605 
       
 10606    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
 10607                                udp.length)>
       
 10608 
       
 10609    <!--
       
 10610       udp header + data length in octets. does not include the size of
       
 10611       the pseudoheader.
       
 10612     -->
       
 10613    <!ELEMENT udp.length EMPTY>
       
 10614    <!ATTLIST udp.length
       
 10615              value %Digits; #REQUIRED>
       
 10616 
       
 10617 
       
 10618 
       
 10619 Kennedy                      Informational                     [Page 13]
       
 10620 
       
 10621 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 10622 
       
 10623 
       
 10624 8. Security Considerations
       
 10625 
       
 10626    XML, as a subset of SGML, has the same security considerations as
       
 10627    specified in SGML Media Types [RFC1874].  Security considerations
       
 10628    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
 10629    not attempt to correct for issues not related to message format.
       
 10630 
       
 10631 9.   References
       
 10632 
       
 10633    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
 10634                February 2002. (Work in Progress)
       
 10635 
       
 10636    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
 10637                August 1980.
       
 10638 
       
 10639    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
 10640                September 1981.
       
 10641 
       
 10642    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
 10643                793, September 1981.
       
 10644 
       
 10645    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
 10646                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
 10647 
       
 10648    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
 10649                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
 10650                43, RFC 1042, February 1988.
       
 10651 
       
 10652    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
 10653                Application and Support", RFC 1123, October 1989.
       
 10654 
       
 10655    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
 10656                1995.
       
 10657 
       
 10658    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
 10659                October 1996.
       
 10660 
       
 10661    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
 10662                Extensions (MIME) Part One: Format of Internet Message
       
 10663                Bodies", RFC 2045, November 1996.
       
 10664 
       
 10665    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
 10666                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
 10667 
       
 10668    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
 10669                10646", RFC 2279, January 1998.
       
 10670 
       
 10671 
       
 10672 
       
 10673 
       
 10674 
       
 10675 Kennedy                      Informational                     [Page 14]
       
 10676 
       
 10677 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 10678 
       
 10679 
       
 10680    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
 10681                (IPv6) Specification", RFC 2460, December 1998.
       
 10682 
       
 10683    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
 10684                RFC 3080, March 2001.
       
 10685 
       
 10686    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
 10687                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
 10688                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
 10689                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
 10690 
       
 10691    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
 10692                Markup Language (XML)" World Wide Web Consortium
       
 10693                Recommendation REC- xml-19980210.
       
 10694                http://www.w3.org/TR/1998/REC-xml-19980210
       
 10695 
       
 10696 10.  Author's Address
       
 10697 
       
 10698    Hugh Kennedy
       
 10699    Mimezine
       
 10700    1060 West Addison
       
 10701    Chicago, IL 60613
       
 10702    USA
       
 10703 
       
 10704    EMail: kennedyh@engin.umich.edu
       
 10705 
       
 10706 
       
 10707 
       
 10708 
       
 10709 
       
 10710 
       
 10711 
       
 10712 
       
 10713 
       
 10714 
       
 10715 
       
 10716 
       
 10717 
       
 10718 
       
 10719 
       
 10720 
       
 10721 
       
 10722 
       
 10723 
       
 10724 
       
 10725 
       
 10726 
       
 10727 
       
 10728 
       
 10729 
       
 10730 
       
 10731 Kennedy                      Informational                     [Page 15]
       
 10732 
       
 10733 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 10734 
       
 10735 
       
 10736 11.  Full Copyright Statement
       
 10737 
       
 10738    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
 10739 
       
 10740    This document and translations of it may be copied and furnished to
       
 10741    others, and derivative works that comment on or otherwise explain it
       
 10742    or assist in its implementation may be prepared, copied, published
       
 10743    and distributed, in whole or in part, without restriction of any
       
 10744    kind, provided that the above copyright notice and this paragraph are
       
 10745    included on all such copies and derivative works.  However, this
       
 10746    document itself may not be modified in any way, such as by removing
       
 10747    the copyright notice or references to the Internet Society or other
       
 10748    Internet organizations, except as needed for the purpose of
       
 10749    developing Internet standards in which case the procedures for
       
 10750    copyrights defined in the Internet Standards process must be
       
 10751    followed, or as required to translate it into languages other than
       
 10752    English.
       
 10753 
       
 10754    The limited permissions granted above are perpetual and will not be
       
 10755    revoked by the Internet Society or its successors or assigns.
       
 10756 
       
 10757    This document and the information contained herein is provided on an
       
 10758    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
 10759    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
 10760    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
 10761    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
 10762    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
 10763 
       
 10764 Acknowledgement
       
 10765 
       
 10766    Funding for the RFC Editor function is currently provided by the
       
 10767    Internet Society.
       
 10768 
       
 10769 
       
 10770 
       
 10771 
       
 10772 
       
 10773 
       
 10774 
       
 10775 
       
 10776 
       
 10777 
       
 10778 
       
 10779 
       
 10780 
       
 10781 
       
 10782 
       
 10783 
       
 10784 
       
 10785 
       
 10786 
       
 10787 Kennedy                      Informational                     [Page 16]
       
 10788 
       
 10789 
       
 10790 
       
 10791 
       
 10792 
       
 10793 
       
 10794 
       
 10795 Network Working Group                                         H. Kennedy
       
 10796 Request for Comments: 3252                                      Mimezine
       
 10797 Category: Informational                                     1 April 2002
       
 10798 
       
 10799 
       
 10800                  Binary Lexical Octet Ad-hoc Transport
       
 10801 
       
 10802 Status of this Memo
       
 10803 
       
 10804    This memo provides information for the Internet community.  It does
       
 10805    not specify an Internet standard of any kind.  Distribution of this
       
 10806    memo is unlimited.
       
 10807 
       
 10808 Copyright Notice
       
 10809 
       
 10810    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
 10811 
       
 10812 Abstract
       
 10813 
       
 10814    This document defines a reformulation of IP and two transport layer
       
 10815    protocols (TCP and UDP) as XML applications.
       
 10816 
       
 10817 1.   Introduction
       
 10818 
       
 10819 1.1. Overview
       
 10820 
       
 10821    This document describes the Binary Lexical Octet Ad-hoc Transport
       
 10822    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
 10823    (IP [RFC791]), and two associated transport layer protocols (TCP
       
 10824    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
 10825    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
 10826    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
 10827    across the public Internet.
       
 10828 
       
 10829 1.2. Motivation
       
 10830 
       
 10831    The wild popularity of XML as a basis for application-level protocols
       
 10832    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
 10833    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
 10834    investigation into the possibility of extending the use of XML in the
       
 10835    protocol stack.  Using XML at both the transport and network layer in
       
 10836    addition to the application layer would provide for an amazing amount
       
 10837    of power and flexibility while removing dependencies on proprietary
       
 10838    and hard-to-understand binary protocols.  This protocol unification
       
 10839    would also allow applications to use a single XML parser for all
       
 10840    aspects of their operation, eliminating developer time spent figuring
       
 10841    out the intricacies of each new protocol, and moving the hard work of
       
 10842 
       
 10843 
       
 10844 
       
 10845 
       
 10846 Kennedy                      Informational                      [Page 1]
       
 10847 
       
 10848 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 10849 
       
 10850 
       
 10851    parsing to the XML toolset.  The use of XML also mitigates concerns
       
 10852    over "network vs. host" byte ordering which is at the root of many
       
 10853    network application bugs.
       
 10854 
       
 10855 1.3. Relation to Existing Protocols
       
 10856 
       
 10857    The reformulations specified in this RFC follow as closely as
       
 10858    possible the spirit of the RFCs on which they are based, and so MAY
       
 10859    contain elements or attributes that would not be needed in a pure
       
 10860    reworking (e.g. length attributes, which are implicit in XML.)
       
 10861 
       
 10862    The layering of network and transport protocols are maintained in
       
 10863    this RFC despite the optimizations that could be made if the line
       
 10864    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
 10865    element in the DTD) in order to foster future use of this protocol as
       
 10866    a basis for reformulating other protocols (such as ICMP.)
       
 10867 
       
 10868    Other than the encoding, the behavioral aspects of each of the
       
 10869    existing protocols remain unchanged.  Routing, address spaces, TCP
       
 10870    congestion control, etc. behave as specified in the extant standards.
       
 10871    Adapting to new standards and experimental algorithm heuristics for
       
 10872    improving performance will become much easier once the move to BLOAT
       
 10873    has been completed.
       
 10874 
       
 10875 1.4. Requirement Levels
       
 10876 
       
 10877    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
 10878    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
 10879    document are to be interpreted as described in BCP 14, RFC 2119
       
 10880    [RFC2119].
       
 10881 
       
 10882 2.   IPoXML
       
 10883 
       
 10884    This protocol MUST be implemented to be compliant with this RFC.
       
 10885    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
 10886    (section 3.) and higher-level application protocols.
       
 10887 
       
 10888    The DTD for this document type can be found in section 7.1.
       
 10889 
       
 10890    The routing of IPoXML can be easily implemented on hosts with an XML
       
 10891    parser, as the regular structure lends itself handily to parsing and
       
 10892    validation of the document/datagram and then processing the
       
 10893    destination address, TTL, and checksum before sending it on to its
       
 10894    next-hop.
       
 10895 
       
 10896    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
 10897    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
 10898    would have exceeded the 1500 byte Ethernet MTU.
       
 10899 
       
 10900 
       
 10901 
       
 10902 Kennedy                      Informational                      [Page 2]
       
 10903 
       
 10904 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 10905 
       
 10906 
       
 10907    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
 10908    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
 10909    formed and include the XMLDecl.
       
 10910 
       
 10911 2.1. IP Description
       
 10912 
       
 10913    A number of items have changed (for the better) from the original IP
       
 10914    specification.  Bit-masks, where present have been converted into
       
 10915    human-readable values.  IP addresses are listed in their dotted-
       
 10916    decimal notation [RFC1123].  Length and checksum values are present
       
 10917    as decimal integers.
       
 10918 
       
 10919    To calculate the length and checksum fields of the IP element, a
       
 10920    canonicalized form of the element MUST be used.  The canonical form
       
 10921    SHALL have no whitespace (including newline characters) between
       
 10922    elements and only one space character between attributes.  There
       
 10923    SHALL NOT be a space following the last attribute in an element.
       
 10924 
       
 10925    An iterative method SHOULD be used to calculate checksums, as the
       
 10926    length field will vary based on the size of the checksum.
       
 10927 
       
 10928    The payload element bears special attention.  Due to the character
       
 10929    set restrictions of XML, the payload of IP datagrams (which MAY
       
 10930    contain arbitrary data) MUST be encoded for transport. This RFC
       
 10931    REQUIRES the contents of the payload to be encoded in the base-64
       
 10932    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
 10933    encoded output MUST be wrapped on 76-character lines.
       
 10934 
       
 10935 
       
 10936 
       
 10937 
       
 10938 
       
 10939 
       
 10940 
       
 10941 
       
 10942 
       
 10943 
       
 10944 
       
 10945 
       
 10946 
       
 10947 
       
 10948 
       
 10949 
       
 10950 
       
 10951 
       
 10952 
       
 10953 
       
 10954 
       
 10955 
       
 10956 
       
 10957 
       
 10958 Kennedy                      Informational                      [Page 3]
       
 10959 
       
 10960 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 10961 
       
 10962 
       
 10963 2.2. Example Datagram
       
 10964 
       
 10965    The following is an example IPoXML datagram with an empty payload:
       
 10966 
       
 10967    <?xml version="1.0" encoding="UTF-8"?>
       
 10968    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 10969    <ip>
       
 10970    <header length="474">
       
 10971    <version value="4"/>
       
 10972    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
 10973         relibility="Normal" reserved="0"/>
       
 10974    <total.length value="461"/>
       
 10975    <id value="1"/>
       
 10976    <flags reserved="0" df="dont" mf="last"/>
       
 10977    <offset value="0"/>
       
 10978    <ttl value="255"/>
       
 10979    <protocol value="6"/>
       
 10980    <checksum value="8707"/>
       
 10981    <source address="10.0.0.22"/>
       
 10982    <destination address="10.0.0.1"/>
       
 10983    <options>
       
 10984    <end copied="0" class="0" number="0"/>
       
 10985    </options>
       
 10986    <padding pad="0"/>
       
 10987    </header>
       
 10988    <payload>
       
 10989    </payload>
       
 10990    </ip>
       
 10991 
       
 10992 3.   TCPoXML
       
 10993 
       
 10994    This protocol MUST be implemented to be compliant with this RFC.  The
       
 10995    DTD for this document type can be found in section 7.2.
       
 10996 
       
 10997 3.1. TCP Description
       
 10998 
       
 10999    A number of items have changed from the original TCP specification.
       
 11000    Bit-masks, where present have been converted into human-readable
       
 11001    values.  Length and checksum and port values are present as decimal
       
 11002    integers.
       
 11003 
       
 11004    To calculate the length and checksum fields of the TCP element, a
       
 11005    canonicalized form of the element MUST be used as in section 2.1.
       
 11006 
       
 11007    An iterative method SHOULD be used to calculate checksums as in
       
 11008    section 2.1.
       
 11009 
       
 11010    The payload element MUST be encoded as in section 2.1.
       
 11011 
       
 11012 
       
 11013 
       
 11014 Kennedy                      Informational                      [Page 4]
       
 11015 
       
 11016 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 11017 
       
 11018 
       
 11019    The TCP offset element was expanded to a maximum of 255 from 16 to
       
 11020    allow for the increased size of the header in XML.
       
 11021 
       
 11022    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 11023    as well as the <!DOCTYPE> declaration.
       
 11024 
       
 11025 3.2. Example Datagram
       
 11026 
       
 11027    The following is an example TCPoXML datagram with an empty payload:
       
 11028 
       
 11029    <?xml version="1.0" encoding="UTF-8"?>
       
 11030    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 11031    <tcp>
       
 11032    <tcp.header>
       
 11033    <src port="31415"/>
       
 11034    <dest port="42424"/>
       
 11035    <sequence number="322622954"/>
       
 11036    <acknowledgement number="689715995"/>
       
 11037    <offset number=""/>
       
 11038    <reserved value="0"/>
       
 11039    <control syn="1" ack="1"/>
       
 11040    <window size="1"/>
       
 11041    <urgent pointer="0"/>
       
 11042    <checksum value="2988"/>
       
 11043    <tcp.options>
       
 11044    <tcp.end kind="0"/>
       
 11045    </tcp.options>
       
 11046    <padding pad="0"/>
       
 11047    </tcp.header>
       
 11048    <payload>
       
 11049    </payload>
       
 11050    </tcp>
       
 11051 
       
 11052 4.   UDPoXML
       
 11053 
       
 11054    This protocol MUST be implemented to be compliant with this RFC.  The
       
 11055    DTD for this document type can be found in section 7.3.
       
 11056 
       
 11057 4.1. UDP Description
       
 11058 
       
 11059    A number of items have changed from the original UDP specification.
       
 11060    Bit-masks, where present have been converted into human-readable
       
 11061    values.  Length and checksum and port values are present as decimal
       
 11062    integers.
       
 11063 
       
 11064 
       
 11065 
       
 11066 
       
 11067 
       
 11068 
       
 11069 
       
 11070 Kennedy                      Informational                      [Page 5]
       
 11071 
       
 11072 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 11073 
       
 11074 
       
 11075    To calculate the length and checksum fields of the UDP element, a
       
 11076    canonicalized form of the element MUST be used as in section 2.1.  An
       
 11077    iterative method SHOULD be used to calculate checksums as in section
       
 11078    2.1.
       
 11079 
       
 11080    The payload element MUST be encoded as in section 2.1.
       
 11081 
       
 11082    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 11083    as well as the <!DOCTYPE> declaration.
       
 11084 
       
 11085 4.2. Example Datagram
       
 11086 
       
 11087    The following is an example UDPoXML datagram with an empty payload:
       
 11088 
       
 11089    <?xml version="1.0" encoding="UTF-8"?>
       
 11090    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 11091    <udp>
       
 11092    <udp.header>
       
 11093    <src port="31415"/>
       
 11094    <dest port="42424"/>
       
 11095    <udp.length value="143"/>
       
 11096    <checksum value="2988"/>
       
 11097    </udp.header>
       
 11098    <payload>
       
 11099    </payload>
       
 11100    </udp>
       
 11101 
       
 11102 5.   Network Transport
       
 11103 
       
 11104    This document provides for the transmission of BLOAT datagrams over
       
 11105    two common families of physical layer transport.  Future RFCs will
       
 11106    address additional transports as routing vendors catch up to the
       
 11107    specification, and we begin to see BLOAT routed across the Internet
       
 11108    backbone.
       
 11109 
       
 11110 5.1. Ethernet
       
 11111 
       
 11112    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
 11113    exception that the type field of the Ethernet frame MUST contain the
       
 11114    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
 11115    be 0x3c 3f 78 6d 6c ("<?xml".)
       
 11116 
       
 11117 5.2. IEEE 802
       
 11118 
       
 11119    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
 11120    that the protocol type code for IPoXML is 0xBEEF.
       
 11121 
       
 11122 
       
 11123 
       
 11124 
       
 11125 
       
 11126 Kennedy                      Informational                      [Page 6]
       
 11127 
       
 11128 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 11129 
       
 11130 
       
 11131 6. Gatewaying over IP
       
 11132 
       
 11133    In order to facilitate the gradual introduction of BLOAT into the
       
 11134    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
 11135    gateway between networks that run BLOAT natively on their LANs.
       
 11136 
       
 11137 7. DTDs
       
 11138 
       
 11139    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
 11140    Network DTD (7.1.)
       
 11141 
       
 11142    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
 11143    [XML]) although it is understood that most IPoXML implementations
       
 11144    will not need to pull down the DTD, as it will normally be embedded
       
 11145    in the implementation, and presents something of a catch-22 if you
       
 11146    need to load part of your network protocol over the network.
       
 11147 
       
 11148 7.1.  IPoXML DTD
       
 11149 
       
 11150    <!--
       
 11151     DTD for IP over XML.
       
 11152     Refer to this DTD as:
       
 11153 
       
 11154     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 11155    -->
       
 11156    <!--
       
 11157     DTD data types:
       
 11158 
       
 11159       Digits      [0..9]+
       
 11160 
       
 11161       Precedence  "NetworkControl | InternetworkControl |
       
 11162                    CRITIC | FlashOverride | Flash | Immediate |
       
 11163                    Priority | Routine"
       
 11164 
       
 11165       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
 11166 
       
 11167       Class       [0..3]
       
 11168 
       
 11169       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
 11170                     Restricted | Secret | Top Secret | Reserved"
       
 11171 
       
 11172       Compartments [0..65535]
       
 11173 
       
 11174       Handling     [0..65535]
       
 11175 
       
 11176       TCC          [0..16777216]
       
 11177 
       
 11178    -->
       
 11179 
       
 11180 
       
 11181 
       
 11182 Kennedy                      Informational                      [Page 7]
       
 11183 
       
 11184 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 11185 
       
 11186 
       
 11187    <!ENTITY % Digits "CDATA">
       
 11188    <!ENTITY % Precedence "CDATA">
       
 11189    <!ENTITY % IP4Addr "CDATA">
       
 11190    <!ENTITY % Class "CDATA">
       
 11191    <!ENTITY % Sec "CDATA">
       
 11192    <!ENTITY % Compartments "CDATA">
       
 11193    <!ENTITY % Handling "CDATA">
       
 11194    <!ENTITY % TCC "CDATA">
       
 11195 
       
 11196    <!ELEMENT ip (header, payload)>
       
 11197 
       
 11198    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
 11199                     protocol, checksum, source, destination, options,
       
 11200                     padding)>
       
 11201    <!-- length of header in 32-bit words -->
       
 11202    <!ATTLIST header
       
 11203              length %Digits; #REQUIRED>
       
 11204 
       
 11205    <!ELEMENT version EMPTY>
       
 11206    <!-- ip version. SHOULD be "4" -->
       
 11207    <!ATTLIST version
       
 11208              value   %Digits;  #REQUIRED>
       
 11209 
       
 11210    <!ELEMENT tos EMPTY>
       
 11211    <!ATTLIST tos
       
 11212              precedence   %Precedence;    #REQUIRED
       
 11213              delay    (normal | low)  #REQUIRED
       
 11214              throughput   (normal | high) #REQUIRED
       
 11215              relibility   (normal | high) #REQUIRED
       
 11216              reserved     CDATA #FIXED "0">
       
 11217 
       
 11218    <!ELEMENT total.length EMPTY>
       
 11219    <!--
       
 11220     total length of datagram (header and payload) in octets, MUST be
       
 11221     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
 11222     ethernets).
       
 11223    -->
       
 11224    <!ATTLIST total.length
       
 11225              value %Digits; #REQUIRED>
       
 11226 
       
 11227    <!ELEMENT id EMPTY>
       
 11228    <!-- 0 <= id <= 65,535  -->
       
 11229    <!ATTLIST id
       
 11230              value %Digits; #REQUIRED>
       
 11231 
       
 11232    <!ELEMENT flags EMPTY>
       
 11233    <!-- df = don't fragment, mf = more fragments  -->
       
 11234    <!ATTLIST flags
       
 11235 
       
 11236 
       
 11237 
       
 11238 Kennedy                      Informational                      [Page 8]
       
 11239 
       
 11240 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 11241 
       
 11242 
       
 11243           reserved CDATA  #FIXED "0"
       
 11244           df (may|dont)   #REQUIRED
       
 11245           mf (last|more)  #REQUIRED>
       
 11246 
       
 11247    <!ELEMENT offset EMPTY>
       
 11248    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
 11249    <!ATTLIST offset
       
 11250              value %Digits; #REQUIRED>
       
 11251 
       
 11252    <!ELEMENT ttl EMPTY>
       
 11253    <!-- 0 <= ttl <= 255 -->
       
 11254    <!ATTLIST ttl
       
 11255              value %Digits; #REQUIRED>
       
 11256 
       
 11257    <!ELEMENT protocol EMPTY>
       
 11258    <!-- 0 <= protocol <= 255 (per IANA) -->
       
 11259    <!ATTLIST protocol
       
 11260              value %Digits; #REQUIRED>
       
 11261 
       
 11262    <!ELEMENT checksum EMPTY>
       
 11263    <!-- 0 <= checksum <= 65535 (over header only) -->
       
 11264    <!ATTLIST checksum
       
 11265              value %Digits; #REQUIRED>
       
 11266 
       
 11267    <!ELEMENT source EMPTY>
       
 11268    <!ATTLIST source
       
 11269              address %IP4Addr; #REQUIRED>
       
 11270 
       
 11271    <!ELEMENT destination EMPTY>
       
 11272    <!ATTLIST destination
       
 11273              address %IP4Addr; #REQUIRED>
       
 11274 
       
 11275    <!ELEMENT options ( end | noop | security | loose | strict | record
       
 11276                      | stream | timestamp )*>
       
 11277 
       
 11278    <!ELEMENT end EMPTY>
       
 11279    <!ATTLIST end
       
 11280              copied (0|1) #REQUIRED
       
 11281              class  CDATA #FIXED "0"
       
 11282              number CDATA #FIXED "0">
       
 11283 
       
 11284    <!ELEMENT noop EMPTY>
       
 11285    <!ATTLIST noop
       
 11286              copied (0|1) #REQUIRED
       
 11287              class  CDATA #FIXED "0"
       
 11288              number CDATA #FIXED "1">
       
 11289 
       
 11290    <!ELEMENT security EMPTY>
       
 11291 
       
 11292 
       
 11293 
       
 11294 Kennedy                      Informational                      [Page 9]
       
 11295 
       
 11296 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 11297 
       
 11298 
       
 11299    <!ATTLIST security
       
 11300              copied CDATA #FIXED "1"
       
 11301              class  CDATA #FIXED "0"
       
 11302              number CDATA #FIXED "2"
       
 11303              length CDATA #FIXED "11"
       
 11304              security %Sec; #REQUIRED
       
 11305              compartments %Compartments; #REQUIRED
       
 11306              handling %Handling; #REQUIRED
       
 11307              tcc %TCC; #REQUIRED>
       
 11308    <!ELEMENT loose (hop)+>
       
 11309    <!ATTLIST loose
       
 11310              copied CDATA #FIXED "1"
       
 11311              class  CDATA #FIXED "0"
       
 11312              number CDATA #FIXED "3"
       
 11313              length %Digits; #REQUIRED
       
 11314              pointer %Digits; #REQUIRED>
       
 11315 
       
 11316    <!ELEMENT hop EMPTY>
       
 11317    <!ATTLIST hop
       
 11318              address %IP4Addr; #REQUIRED>
       
 11319 
       
 11320    <!ELEMENT strict (hop)+>
       
 11321    <!ATTLIST strict
       
 11322              copied CDATA #FIXED "1"
       
 11323              class  CDATA #FIXED "0"
       
 11324              number CDATA #FIXED "9"
       
 11325              length %Digits; #REQUIRED
       
 11326              pointer %Digits; #REQUIRED>
       
 11327 
       
 11328    <!ELEMENT record (hop)+>
       
 11329    <!ATTLIST record
       
 11330              copied CDATA #FIXED "0"
       
 11331              class  CDATA #FIXED "0"
       
 11332              number CDATA #FIXED "7"
       
 11333              length %Digits; #REQUIRED
       
 11334              pointer %Digits; #REQUIRED>
       
 11335 
       
 11336    <!ELEMENT stream EMPTY>
       
 11337    <!-- 0 <= id <= 65,535 -->
       
 11338    <!ATTLIST stream
       
 11339              copied CDATA #FIXED "1"
       
 11340              class  CDATA #FIXED "0"
       
 11341              number CDATA #FIXED "8"
       
 11342              length CDATA #FIXED "4"
       
 11343              id %Digits; #REQUIRED>
       
 11344 
       
 11345    <!ELEMENT timestamp (tstamp)+>
       
 11346    <!-- 0 <= oflw <=15 -->
       
 11347 
       
 11348 
       
 11349 
       
 11350 Kennedy                      Informational                     [Page 10]
       
 11351 
       
 11352 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 11353 
       
 11354 
       
 11355    <!ATTLIST timestamp
       
 11356              copied CDATA #FIXED "0"
       
 11357              class  CDATA #FIXED "2"
       
 11358              number CDATA #FIXED "4"
       
 11359              length %Digits;  #REQUIRED
       
 11360              pointer %Digits; #REQUIRED
       
 11361              oflw %Digits;    #REQUIRED
       
 11362              flag (0 | 1 | 3)  #REQUIRED>
       
 11363 
       
 11364    <!ELEMENT tstamp EMPTY>
       
 11365    <!ATTLIST tstamp
       
 11366              time %Digits;   #REQUIRED
       
 11367              address %IP4Addr; #IMPLIED>
       
 11368    <!--
       
 11369        padding to bring header to 32-bit boundary.
       
 11370        pad MUST be "0"*
       
 11371     -->
       
 11372    <!ELEMENT padding EMPTY>
       
 11373    <!ATTLIST padding
       
 11374              pad CDATA #REQUIRED>
       
 11375 
       
 11376    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
 11377         by section 2.1 of this RFC -->
       
 11378    <!ELEMENT payload (CDATA)>
       
 11379 
       
 11380 7.2.  TCPoXML DTD
       
 11381 
       
 11382    <!--
       
 11383       DTD for TCP over XML.
       
 11384       Refer to this DTD as:
       
 11385 
       
 11386       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 11387    -->
       
 11388 
       
 11389    <!-- the pseudoheader is only included for checksum calculations -->
       
 11390    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
 11391 
       
 11392    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
 11393                          reserved, control, window, checksum, urgent,
       
 11394                          tcp.options, padding)>
       
 11395 
       
 11396    <!ELEMENT src EMPTY>
       
 11397    <!-- 0 <= port <= 65,535 -->
       
 11398    <!ATTLIST src
       
 11399              port %Digits; #REQUIRED>
       
 11400 
       
 11401    <!ELEMENT dest EMPTY>
       
 11402    <!-- 0 <= port <= 65,535 -->
       
 11403 
       
 11404 
       
 11405 
       
 11406 Kennedy                      Informational                     [Page 11]
       
 11407 
       
 11408 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 11409 
       
 11410 
       
 11411    <!ATTLIST dest
       
 11412              port %Digits; #REQUIRED>
       
 11413 
       
 11414    <!ELEMENT sequence EMPTY>
       
 11415    <!-- 0 <= number <= 4294967295 -->
       
 11416    <!ATTLIST sequence
       
 11417              number %Digits; #REQUIRED>
       
 11418 
       
 11419    <!ELEMENT acknowledgement EMPTY>
       
 11420    <!-- 0 <= number <= 4294967295 -->
       
 11421    <!ATTLIST acknowledgement
       
 11422              number %Digits; #REQUIRED>
       
 11423 
       
 11424    <!ELEMENT offset EMPTY>
       
 11425    <!-- 0 <= number <= 255 -->
       
 11426    <!ATTLIST offset
       
 11427              number %Digits; #REQUIRED>
       
 11428 
       
 11429    <!ELEMENT reserved EMPTY>
       
 11430    <!ATTLIST reserved
       
 11431              value CDATA #FIXED "0">
       
 11432 
       
 11433    <!ELEMENT control EMPTY>
       
 11434    <!ATTLIST control
       
 11435              urg (0|1) #IMPLIED
       
 11436              ack (0|1) #IMPLIED
       
 11437              psh (0|1) #IMPLIED
       
 11438              rst (0|1) #IMPLIED
       
 11439              syn (0|1) #IMPLIED
       
 11440              fin (0|1) #IMPLIED>
       
 11441 
       
 11442    <!ELEMENT window EMPTY>
       
 11443    <!-- 0 <= size <= 65,535 -->
       
 11444    <!ATTLIST window
       
 11445              size %Digits; #REQUIRED>
       
 11446 
       
 11447    <!--
       
 11448       checksum as in ip, but with
       
 11449       the following pseudo-header added into the tcp element:
       
 11450      -->
       
 11451    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
 11452                                tcp.length)>
       
 11453 
       
 11454    <!--
       
 11455       tcp header + data length in octets. does not include the size of
       
 11456 
       
 11457       the pseudoheader.
       
 11458     -->
       
 11459 
       
 11460 
       
 11461 
       
 11462 Kennedy                      Informational                     [Page 12]
       
 11463 
       
 11464 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 11465 
       
 11466 
       
 11467    <!ELEMENT tcp.length EMPTY>
       
 11468    <!ATTLIST tcp.length
       
 11469              value %Digits; #REQUIRED>
       
 11470 
       
 11471    <!ELEMENT urgent EMPTY>
       
 11472    <!-- 0 <= pointer <= 65,535 -->
       
 11473    <!ATTLIST urgent
       
 11474              pointer %Digits; #REQUIRED>
       
 11475 
       
 11476    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
 11477 
       
 11478    <!ELEMENT tcp.end EMPTY>
       
 11479    <!ATTLIST tcp.end
       
 11480              kind CDATA #FIXED "0">
       
 11481 
       
 11482    <!ELEMENT tcp.noop EMPTY>
       
 11483    <!ATTLIST tcp.noop
       
 11484              kind CDATA #FIXED "1">
       
 11485 
       
 11486    <!ELEMENT tcp.mss EMPTY>
       
 11487    <!ATTLIST tcp.mss
       
 11488              kind CDATA #FIXED "2"
       
 11489              length CDATA #FIXED "4"
       
 11490              size %Digits; #REQUIRED>
       
 11491 
       
 11492 7.3.  UDPoXML DTD
       
 11493 
       
 11494    <!--
       
 11495       DTD for UDP over XML.
       
 11496       Refer to this DTD as:
       
 11497 
       
 11498       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 11499    -->
       
 11500 
       
 11501    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
 11502 
       
 11503    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
 11504 
       
 11505    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
 11506                                udp.length)>
       
 11507 
       
 11508    <!--
       
 11509       udp header + data length in octets. does not include the size of
       
 11510       the pseudoheader.
       
 11511     -->
       
 11512    <!ELEMENT udp.length EMPTY>
       
 11513    <!ATTLIST udp.length
       
 11514              value %Digits; #REQUIRED>
       
 11515 
       
 11516 
       
 11517 
       
 11518 Kennedy                      Informational                     [Page 13]
       
 11519 
       
 11520 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 11521 
       
 11522 
       
 11523 8. Security Considerations
       
 11524 
       
 11525    XML, as a subset of SGML, has the same security considerations as
       
 11526    specified in SGML Media Types [RFC1874].  Security considerations
       
 11527    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
 11528    not attempt to correct for issues not related to message format.
       
 11529 
       
 11530 9.   References
       
 11531 
       
 11532    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
 11533                February 2002. (Work in Progress)
       
 11534 
       
 11535    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
 11536                August 1980.
       
 11537 
       
 11538    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
 11539                September 1981.
       
 11540 
       
 11541    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
 11542                793, September 1981.
       
 11543 
       
 11544    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
 11545                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
 11546 
       
 11547    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
 11548                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
 11549                43, RFC 1042, February 1988.
       
 11550 
       
 11551    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
 11552                Application and Support", RFC 1123, October 1989.
       
 11553 
       
 11554    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
 11555                1995.
       
 11556 
       
 11557    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
 11558                October 1996.
       
 11559 
       
 11560    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
 11561                Extensions (MIME) Part One: Format of Internet Message
       
 11562                Bodies", RFC 2045, November 1996.
       
 11563 
       
 11564    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
 11565                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
 11566 
       
 11567    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
 11568                10646", RFC 2279, January 1998.
       
 11569 
       
 11570 
       
 11571 
       
 11572 
       
 11573 
       
 11574 Kennedy                      Informational                     [Page 14]
       
 11575 
       
 11576 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 11577 
       
 11578 
       
 11579    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
 11580                (IPv6) Specification", RFC 2460, December 1998.
       
 11581 
       
 11582    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
 11583                RFC 3080, March 2001.
       
 11584 
       
 11585    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
 11586                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
 11587                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
 11588                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
 11589 
       
 11590    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
 11591                Markup Language (XML)" World Wide Web Consortium
       
 11592                Recommendation REC- xml-19980210.
       
 11593                http://www.w3.org/TR/1998/REC-xml-19980210
       
 11594 
       
 11595 10.  Author's Address
       
 11596 
       
 11597    Hugh Kennedy
       
 11598    Mimezine
       
 11599    1060 West Addison
       
 11600    Chicago, IL 60613
       
 11601    USA
       
 11602 
       
 11603    EMail: kennedyh@engin.umich.edu
       
 11604 
       
 11605 
       
 11606 
       
 11607 
       
 11608 
       
 11609 
       
 11610 
       
 11611 
       
 11612 
       
 11613 
       
 11614 
       
 11615 
       
 11616 
       
 11617 
       
 11618 
       
 11619 
       
 11620 
       
 11621 
       
 11622 
       
 11623 
       
 11624 
       
 11625 
       
 11626 
       
 11627 
       
 11628 
       
 11629 
       
 11630 Kennedy                      Informational                     [Page 15]
       
 11631 
       
 11632 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 11633 
       
 11634 
       
 11635 11.  Full Copyright Statement
       
 11636 
       
 11637    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
 11638 
       
 11639    This document and translations of it may be copied and furnished to
       
 11640    others, and derivative works that comment on or otherwise explain it
       
 11641    or assist in its implementation may be prepared, copied, published
       
 11642    and distributed, in whole or in part, without restriction of any
       
 11643    kind, provided that the above copyright notice and this paragraph are
       
 11644    included on all such copies and derivative works.  However, this
       
 11645    document itself may not be modified in any way, such as by removing
       
 11646    the copyright notice or references to the Internet Society or other
       
 11647    Internet organizations, except as needed for the purpose of
       
 11648    developing Internet standards in which case the procedures for
       
 11649    copyrights defined in the Internet Standards process must be
       
 11650    followed, or as required to translate it into languages other than
       
 11651    English.
       
 11652 
       
 11653    The limited permissions granted above are perpetual and will not be
       
 11654    revoked by the Internet Society or its successors or assigns.
       
 11655 
       
 11656    This document and the information contained herein is provided on an
       
 11657    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
 11658    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
 11659    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
 11660    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
 11661    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
 11662 
       
 11663 Acknowledgement
       
 11664 
       
 11665    Funding for the RFC Editor function is currently provided by the
       
 11666    Internet Society.
       
 11667 
       
 11668 
       
 11669 
       
 11670 
       
 11671 
       
 11672 
       
 11673 
       
 11674 
       
 11675 
       
 11676 
       
 11677 
       
 11678 
       
 11679 
       
 11680 
       
 11681 
       
 11682 
       
 11683 
       
 11684 
       
 11685 
       
 11686 Kennedy                      Informational                     [Page 16]
       
 11687 
       
 11688 
       
 11689 
       
 11690 
       
 11691 
       
 11692 
       
 11693 
       
 11694 Network Working Group                                         H. Kennedy
       
 11695 Request for Comments: 3252                                      Mimezine
       
 11696 Category: Informational                                     1 April 2002
       
 11697 
       
 11698 
       
 11699                  Binary Lexical Octet Ad-hoc Transport
       
 11700 
       
 11701 Status of this Memo
       
 11702 
       
 11703    This memo provides information for the Internet community.  It does
       
 11704    not specify an Internet standard of any kind.  Distribution of this
       
 11705    memo is unlimited.
       
 11706 
       
 11707 Copyright Notice
       
 11708 
       
 11709    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
 11710 
       
 11711 Abstract
       
 11712 
       
 11713    This document defines a reformulation of IP and two transport layer
       
 11714    protocols (TCP and UDP) as XML applications.
       
 11715 
       
 11716 1.   Introduction
       
 11717 
       
 11718 1.1. Overview
       
 11719 
       
 11720    This document describes the Binary Lexical Octet Ad-hoc Transport
       
 11721    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
 11722    (IP [RFC791]), and two associated transport layer protocols (TCP
       
 11723    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
 11724    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
 11725    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
 11726    across the public Internet.
       
 11727 
       
 11728 1.2. Motivation
       
 11729 
       
 11730    The wild popularity of XML as a basis for application-level protocols
       
 11731    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
 11732    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
 11733    investigation into the possibility of extending the use of XML in the
       
 11734    protocol stack.  Using XML at both the transport and network layer in
       
 11735    addition to the application layer would provide for an amazing amount
       
 11736    of power and flexibility while removing dependencies on proprietary
       
 11737    and hard-to-understand binary protocols.  This protocol unification
       
 11738    would also allow applications to use a single XML parser for all
       
 11739    aspects of their operation, eliminating developer time spent figuring
       
 11740    out the intricacies of each new protocol, and moving the hard work of
       
 11741 
       
 11742 
       
 11743 
       
 11744 
       
 11745 Kennedy                      Informational                      [Page 1]
       
 11746 
       
 11747 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 11748 
       
 11749 
       
 11750    parsing to the XML toolset.  The use of XML also mitigates concerns
       
 11751    over "network vs. host" byte ordering which is at the root of many
       
 11752    network application bugs.
       
 11753 
       
 11754 1.3. Relation to Existing Protocols
       
 11755 
       
 11756    The reformulations specified in this RFC follow as closely as
       
 11757    possible the spirit of the RFCs on which they are based, and so MAY
       
 11758    contain elements or attributes that would not be needed in a pure
       
 11759    reworking (e.g. length attributes, which are implicit in XML.)
       
 11760 
       
 11761    The layering of network and transport protocols are maintained in
       
 11762    this RFC despite the optimizations that could be made if the line
       
 11763    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
 11764    element in the DTD) in order to foster future use of this protocol as
       
 11765    a basis for reformulating other protocols (such as ICMP.)
       
 11766 
       
 11767    Other than the encoding, the behavioral aspects of each of the
       
 11768    existing protocols remain unchanged.  Routing, address spaces, TCP
       
 11769    congestion control, etc. behave as specified in the extant standards.
       
 11770    Adapting to new standards and experimental algorithm heuristics for
       
 11771    improving performance will become much easier once the move to BLOAT
       
 11772    has been completed.
       
 11773 
       
 11774 1.4. Requirement Levels
       
 11775 
       
 11776    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
 11777    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
 11778    document are to be interpreted as described in BCP 14, RFC 2119
       
 11779    [RFC2119].
       
 11780 
       
 11781 2.   IPoXML
       
 11782 
       
 11783    This protocol MUST be implemented to be compliant with this RFC.
       
 11784    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
 11785    (section 3.) and higher-level application protocols.
       
 11786 
       
 11787    The DTD for this document type can be found in section 7.1.
       
 11788 
       
 11789    The routing of IPoXML can be easily implemented on hosts with an XML
       
 11790    parser, as the regular structure lends itself handily to parsing and
       
 11791    validation of the document/datagram and then processing the
       
 11792    destination address, TTL, and checksum before sending it on to its
       
 11793    next-hop.
       
 11794 
       
 11795    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
 11796    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
 11797    would have exceeded the 1500 byte Ethernet MTU.
       
 11798 
       
 11799 
       
 11800 
       
 11801 Kennedy                      Informational                      [Page 2]
       
 11802 
       
 11803 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 11804 
       
 11805 
       
 11806    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
 11807    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
 11808    formed and include the XMLDecl.
       
 11809 
       
 11810 2.1. IP Description
       
 11811 
       
 11812    A number of items have changed (for the better) from the original IP
       
 11813    specification.  Bit-masks, where present have been converted into
       
 11814    human-readable values.  IP addresses are listed in their dotted-
       
 11815    decimal notation [RFC1123].  Length and checksum values are present
       
 11816    as decimal integers.
       
 11817 
       
 11818    To calculate the length and checksum fields of the IP element, a
       
 11819    canonicalized form of the element MUST be used.  The canonical form
       
 11820    SHALL have no whitespace (including newline characters) between
       
 11821    elements and only one space character between attributes.  There
       
 11822    SHALL NOT be a space following the last attribute in an element.
       
 11823 
       
 11824    An iterative method SHOULD be used to calculate checksums, as the
       
 11825    length field will vary based on the size of the checksum.
       
 11826 
       
 11827    The payload element bears special attention.  Due to the character
       
 11828    set restrictions of XML, the payload of IP datagrams (which MAY
       
 11829    contain arbitrary data) MUST be encoded for transport. This RFC
       
 11830    REQUIRES the contents of the payload to be encoded in the base-64
       
 11831    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
 11832    encoded output MUST be wrapped on 76-character lines.
       
 11833 
       
 11834 
       
 11835 
       
 11836 
       
 11837 
       
 11838 
       
 11839 
       
 11840 
       
 11841 
       
 11842 
       
 11843 
       
 11844 
       
 11845 
       
 11846 
       
 11847 
       
 11848 
       
 11849 
       
 11850 
       
 11851 
       
 11852 
       
 11853 
       
 11854 
       
 11855 
       
 11856 
       
 11857 Kennedy                      Informational                      [Page 3]
       
 11858 
       
 11859 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 11860 
       
 11861 
       
 11862 2.2. Example Datagram
       
 11863 
       
 11864    The following is an example IPoXML datagram with an empty payload:
       
 11865 
       
 11866    <?xml version="1.0" encoding="UTF-8"?>
       
 11867    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 11868    <ip>
       
 11869    <header length="474">
       
 11870    <version value="4"/>
       
 11871    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
 11872         relibility="Normal" reserved="0"/>
       
 11873    <total.length value="461"/>
       
 11874    <id value="1"/>
       
 11875    <flags reserved="0" df="dont" mf="last"/>
       
 11876    <offset value="0"/>
       
 11877    <ttl value="255"/>
       
 11878    <protocol value="6"/>
       
 11879    <checksum value="8707"/>
       
 11880    <source address="10.0.0.22"/>
       
 11881    <destination address="10.0.0.1"/>
       
 11882    <options>
       
 11883    <end copied="0" class="0" number="0"/>
       
 11884    </options>
       
 11885    <padding pad="0"/>
       
 11886    </header>
       
 11887    <payload>
       
 11888    </payload>
       
 11889    </ip>
       
 11890 
       
 11891 3.   TCPoXML
       
 11892 
       
 11893    This protocol MUST be implemented to be compliant with this RFC.  The
       
 11894    DTD for this document type can be found in section 7.2.
       
 11895 
       
 11896 3.1. TCP Description
       
 11897 
       
 11898    A number of items have changed from the original TCP specification.
       
 11899    Bit-masks, where present have been converted into human-readable
       
 11900    values.  Length and checksum and port values are present as decimal
       
 11901    integers.
       
 11902 
       
 11903    To calculate the length and checksum fields of the TCP element, a
       
 11904    canonicalized form of the element MUST be used as in section 2.1.
       
 11905 
       
 11906    An iterative method SHOULD be used to calculate checksums as in
       
 11907    section 2.1.
       
 11908 
       
 11909    The payload element MUST be encoded as in section 2.1.
       
 11910 
       
 11911 
       
 11912 
       
 11913 Kennedy                      Informational                      [Page 4]
       
 11914 
       
 11915 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 11916 
       
 11917 
       
 11918    The TCP offset element was expanded to a maximum of 255 from 16 to
       
 11919    allow for the increased size of the header in XML.
       
 11920 
       
 11921    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 11922    as well as the <!DOCTYPE> declaration.
       
 11923 
       
 11924 3.2. Example Datagram
       
 11925 
       
 11926    The following is an example TCPoXML datagram with an empty payload:
       
 11927 
       
 11928    <?xml version="1.0" encoding="UTF-8"?>
       
 11929    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 11930    <tcp>
       
 11931    <tcp.header>
       
 11932    <src port="31415"/>
       
 11933    <dest port="42424"/>
       
 11934    <sequence number="322622954"/>
       
 11935    <acknowledgement number="689715995"/>
       
 11936    <offset number=""/>
       
 11937    <reserved value="0"/>
       
 11938    <control syn="1" ack="1"/>
       
 11939    <window size="1"/>
       
 11940    <urgent pointer="0"/>
       
 11941    <checksum value="2988"/>
       
 11942    <tcp.options>
       
 11943    <tcp.end kind="0"/>
       
 11944    </tcp.options>
       
 11945    <padding pad="0"/>
       
 11946    </tcp.header>
       
 11947    <payload>
       
 11948    </payload>
       
 11949    </tcp>
       
 11950 
       
 11951 4.   UDPoXML
       
 11952 
       
 11953    This protocol MUST be implemented to be compliant with this RFC.  The
       
 11954    DTD for this document type can be found in section 7.3.
       
 11955 
       
 11956 4.1. UDP Description
       
 11957 
       
 11958    A number of items have changed from the original UDP specification.
       
 11959    Bit-masks, where present have been converted into human-readable
       
 11960    values.  Length and checksum and port values are present as decimal
       
 11961    integers.
       
 11962 
       
 11963 
       
 11964 
       
 11965 
       
 11966 
       
 11967 
       
 11968 
       
 11969 Kennedy                      Informational                      [Page 5]
       
 11970 
       
 11971 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 11972 
       
 11973 
       
 11974    To calculate the length and checksum fields of the UDP element, a
       
 11975    canonicalized form of the element MUST be used as in section 2.1.  An
       
 11976    iterative method SHOULD be used to calculate checksums as in section
       
 11977    2.1.
       
 11978 
       
 11979    The payload element MUST be encoded as in section 2.1.
       
 11980 
       
 11981    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 11982    as well as the <!DOCTYPE> declaration.
       
 11983 
       
 11984 4.2. Example Datagram
       
 11985 
       
 11986    The following is an example UDPoXML datagram with an empty payload:
       
 11987 
       
 11988    <?xml version="1.0" encoding="UTF-8"?>
       
 11989    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 11990    <udp>
       
 11991    <udp.header>
       
 11992    <src port="31415"/>
       
 11993    <dest port="42424"/>
       
 11994    <udp.length value="143"/>
       
 11995    <checksum value="2988"/>
       
 11996    </udp.header>
       
 11997    <payload>
       
 11998    </payload>
       
 11999    </udp>
       
 12000 
       
 12001 5.   Network Transport
       
 12002 
       
 12003    This document provides for the transmission of BLOAT datagrams over
       
 12004    two common families of physical layer transport.  Future RFCs will
       
 12005    address additional transports as routing vendors catch up to the
       
 12006    specification, and we begin to see BLOAT routed across the Internet
       
 12007    backbone.
       
 12008 
       
 12009 5.1. Ethernet
       
 12010 
       
 12011    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
 12012    exception that the type field of the Ethernet frame MUST contain the
       
 12013    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
 12014    be 0x3c 3f 78 6d 6c ("<?xml".)
       
 12015 
       
 12016 5.2. IEEE 802
       
 12017 
       
 12018    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
 12019    that the protocol type code for IPoXML is 0xBEEF.
       
 12020 
       
 12021 
       
 12022 
       
 12023 
       
 12024 
       
 12025 Kennedy                      Informational                      [Page 6]
       
 12026 
       
 12027 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 12028 
       
 12029 
       
 12030 6. Gatewaying over IP
       
 12031 
       
 12032    In order to facilitate the gradual introduction of BLOAT into the
       
 12033    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
 12034    gateway between networks that run BLOAT natively on their LANs.
       
 12035 
       
 12036 7. DTDs
       
 12037 
       
 12038    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
 12039    Network DTD (7.1.)
       
 12040 
       
 12041    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
 12042    [XML]) although it is understood that most IPoXML implementations
       
 12043    will not need to pull down the DTD, as it will normally be embedded
       
 12044    in the implementation, and presents something of a catch-22 if you
       
 12045    need to load part of your network protocol over the network.
       
 12046 
       
 12047 7.1.  IPoXML DTD
       
 12048 
       
 12049    <!--
       
 12050     DTD for IP over XML.
       
 12051     Refer to this DTD as:
       
 12052 
       
 12053     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 12054    -->
       
 12055    <!--
       
 12056     DTD data types:
       
 12057 
       
 12058       Digits      [0..9]+
       
 12059 
       
 12060       Precedence  "NetworkControl | InternetworkControl |
       
 12061                    CRITIC | FlashOverride | Flash | Immediate |
       
 12062                    Priority | Routine"
       
 12063 
       
 12064       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
 12065 
       
 12066       Class       [0..3]
       
 12067 
       
 12068       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
 12069                     Restricted | Secret | Top Secret | Reserved"
       
 12070 
       
 12071       Compartments [0..65535]
       
 12072 
       
 12073       Handling     [0..65535]
       
 12074 
       
 12075       TCC          [0..16777216]
       
 12076 
       
 12077    -->
       
 12078 
       
 12079 
       
 12080 
       
 12081 Kennedy                      Informational                      [Page 7]
       
 12082 
       
 12083 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 12084 
       
 12085 
       
 12086    <!ENTITY % Digits "CDATA">
       
 12087    <!ENTITY % Precedence "CDATA">
       
 12088    <!ENTITY % IP4Addr "CDATA">
       
 12089    <!ENTITY % Class "CDATA">
       
 12090    <!ENTITY % Sec "CDATA">
       
 12091    <!ENTITY % Compartments "CDATA">
       
 12092    <!ENTITY % Handling "CDATA">
       
 12093    <!ENTITY % TCC "CDATA">
       
 12094 
       
 12095    <!ELEMENT ip (header, payload)>
       
 12096 
       
 12097    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
 12098                     protocol, checksum, source, destination, options,
       
 12099                     padding)>
       
 12100    <!-- length of header in 32-bit words -->
       
 12101    <!ATTLIST header
       
 12102              length %Digits; #REQUIRED>
       
 12103 
       
 12104    <!ELEMENT version EMPTY>
       
 12105    <!-- ip version. SHOULD be "4" -->
       
 12106    <!ATTLIST version
       
 12107              value   %Digits;  #REQUIRED>
       
 12108 
       
 12109    <!ELEMENT tos EMPTY>
       
 12110    <!ATTLIST tos
       
 12111              precedence   %Precedence;    #REQUIRED
       
 12112              delay    (normal | low)  #REQUIRED
       
 12113              throughput   (normal | high) #REQUIRED
       
 12114              relibility   (normal | high) #REQUIRED
       
 12115              reserved     CDATA #FIXED "0">
       
 12116 
       
 12117    <!ELEMENT total.length EMPTY>
       
 12118    <!--
       
 12119     total length of datagram (header and payload) in octets, MUST be
       
 12120     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
 12121     ethernets).
       
 12122    -->
       
 12123    <!ATTLIST total.length
       
 12124              value %Digits; #REQUIRED>
       
 12125 
       
 12126    <!ELEMENT id EMPTY>
       
 12127    <!-- 0 <= id <= 65,535  -->
       
 12128    <!ATTLIST id
       
 12129              value %Digits; #REQUIRED>
       
 12130 
       
 12131    <!ELEMENT flags EMPTY>
       
 12132    <!-- df = don't fragment, mf = more fragments  -->
       
 12133    <!ATTLIST flags
       
 12134 
       
 12135 
       
 12136 
       
 12137 Kennedy                      Informational                      [Page 8]
       
 12138 
       
 12139 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 12140 
       
 12141 
       
 12142           reserved CDATA  #FIXED "0"
       
 12143           df (may|dont)   #REQUIRED
       
 12144           mf (last|more)  #REQUIRED>
       
 12145 
       
 12146    <!ELEMENT offset EMPTY>
       
 12147    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
 12148    <!ATTLIST offset
       
 12149              value %Digits; #REQUIRED>
       
 12150 
       
 12151    <!ELEMENT ttl EMPTY>
       
 12152    <!-- 0 <= ttl <= 255 -->
       
 12153    <!ATTLIST ttl
       
 12154              value %Digits; #REQUIRED>
       
 12155 
       
 12156    <!ELEMENT protocol EMPTY>
       
 12157    <!-- 0 <= protocol <= 255 (per IANA) -->
       
 12158    <!ATTLIST protocol
       
 12159              value %Digits; #REQUIRED>
       
 12160 
       
 12161    <!ELEMENT checksum EMPTY>
       
 12162    <!-- 0 <= checksum <= 65535 (over header only) -->
       
 12163    <!ATTLIST checksum
       
 12164              value %Digits; #REQUIRED>
       
 12165 
       
 12166    <!ELEMENT source EMPTY>
       
 12167    <!ATTLIST source
       
 12168              address %IP4Addr; #REQUIRED>
       
 12169 
       
 12170    <!ELEMENT destination EMPTY>
       
 12171    <!ATTLIST destination
       
 12172              address %IP4Addr; #REQUIRED>
       
 12173 
       
 12174    <!ELEMENT options ( end | noop | security | loose | strict | record
       
 12175                      | stream | timestamp )*>
       
 12176 
       
 12177    <!ELEMENT end EMPTY>
       
 12178    <!ATTLIST end
       
 12179              copied (0|1) #REQUIRED
       
 12180              class  CDATA #FIXED "0"
       
 12181              number CDATA #FIXED "0">
       
 12182 
       
 12183    <!ELEMENT noop EMPTY>
       
 12184    <!ATTLIST noop
       
 12185              copied (0|1) #REQUIRED
       
 12186              class  CDATA #FIXED "0"
       
 12187              number CDATA #FIXED "1">
       
 12188 
       
 12189    <!ELEMENT security EMPTY>
       
 12190 
       
 12191 
       
 12192 
       
 12193 Kennedy                      Informational                      [Page 9]
       
 12194 
       
 12195 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 12196 
       
 12197 
       
 12198    <!ATTLIST security
       
 12199              copied CDATA #FIXED "1"
       
 12200              class  CDATA #FIXED "0"
       
 12201              number CDATA #FIXED "2"
       
 12202              length CDATA #FIXED "11"
       
 12203              security %Sec; #REQUIRED
       
 12204              compartments %Compartments; #REQUIRED
       
 12205              handling %Handling; #REQUIRED
       
 12206              tcc %TCC; #REQUIRED>
       
 12207    <!ELEMENT loose (hop)+>
       
 12208    <!ATTLIST loose
       
 12209              copied CDATA #FIXED "1"
       
 12210              class  CDATA #FIXED "0"
       
 12211              number CDATA #FIXED "3"
       
 12212              length %Digits; #REQUIRED
       
 12213              pointer %Digits; #REQUIRED>
       
 12214 
       
 12215    <!ELEMENT hop EMPTY>
       
 12216    <!ATTLIST hop
       
 12217              address %IP4Addr; #REQUIRED>
       
 12218 
       
 12219    <!ELEMENT strict (hop)+>
       
 12220    <!ATTLIST strict
       
 12221              copied CDATA #FIXED "1"
       
 12222              class  CDATA #FIXED "0"
       
 12223              number CDATA #FIXED "9"
       
 12224              length %Digits; #REQUIRED
       
 12225              pointer %Digits; #REQUIRED>
       
 12226 
       
 12227    <!ELEMENT record (hop)+>
       
 12228    <!ATTLIST record
       
 12229              copied CDATA #FIXED "0"
       
 12230              class  CDATA #FIXED "0"
       
 12231              number CDATA #FIXED "7"
       
 12232              length %Digits; #REQUIRED
       
 12233              pointer %Digits; #REQUIRED>
       
 12234 
       
 12235    <!ELEMENT stream EMPTY>
       
 12236    <!-- 0 <= id <= 65,535 -->
       
 12237    <!ATTLIST stream
       
 12238              copied CDATA #FIXED "1"
       
 12239              class  CDATA #FIXED "0"
       
 12240              number CDATA #FIXED "8"
       
 12241              length CDATA #FIXED "4"
       
 12242              id %Digits; #REQUIRED>
       
 12243 
       
 12244    <!ELEMENT timestamp (tstamp)+>
       
 12245    <!-- 0 <= oflw <=15 -->
       
 12246 
       
 12247 
       
 12248 
       
 12249 Kennedy                      Informational                     [Page 10]
       
 12250 
       
 12251 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 12252 
       
 12253 
       
 12254    <!ATTLIST timestamp
       
 12255              copied CDATA #FIXED "0"
       
 12256              class  CDATA #FIXED "2"
       
 12257              number CDATA #FIXED "4"
       
 12258              length %Digits;  #REQUIRED
       
 12259              pointer %Digits; #REQUIRED
       
 12260              oflw %Digits;    #REQUIRED
       
 12261              flag (0 | 1 | 3)  #REQUIRED>
       
 12262 
       
 12263    <!ELEMENT tstamp EMPTY>
       
 12264    <!ATTLIST tstamp
       
 12265              time %Digits;   #REQUIRED
       
 12266              address %IP4Addr; #IMPLIED>
       
 12267    <!--
       
 12268        padding to bring header to 32-bit boundary.
       
 12269        pad MUST be "0"*
       
 12270     -->
       
 12271    <!ELEMENT padding EMPTY>
       
 12272    <!ATTLIST padding
       
 12273              pad CDATA #REQUIRED>
       
 12274 
       
 12275    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
 12276         by section 2.1 of this RFC -->
       
 12277    <!ELEMENT payload (CDATA)>
       
 12278 
       
 12279 7.2.  TCPoXML DTD
       
 12280 
       
 12281    <!--
       
 12282       DTD for TCP over XML.
       
 12283       Refer to this DTD as:
       
 12284 
       
 12285       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 12286    -->
       
 12287 
       
 12288    <!-- the pseudoheader is only included for checksum calculations -->
       
 12289    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
 12290 
       
 12291    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
 12292                          reserved, control, window, checksum, urgent,
       
 12293                          tcp.options, padding)>
       
 12294 
       
 12295    <!ELEMENT src EMPTY>
       
 12296    <!-- 0 <= port <= 65,535 -->
       
 12297    <!ATTLIST src
       
 12298              port %Digits; #REQUIRED>
       
 12299 
       
 12300    <!ELEMENT dest EMPTY>
       
 12301    <!-- 0 <= port <= 65,535 -->
       
 12302 
       
 12303 
       
 12304 
       
 12305 Kennedy                      Informational                     [Page 11]
       
 12306 
       
 12307 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 12308 
       
 12309 
       
 12310    <!ATTLIST dest
       
 12311              port %Digits; #REQUIRED>
       
 12312 
       
 12313    <!ELEMENT sequence EMPTY>
       
 12314    <!-- 0 <= number <= 4294967295 -->
       
 12315    <!ATTLIST sequence
       
 12316              number %Digits; #REQUIRED>
       
 12317 
       
 12318    <!ELEMENT acknowledgement EMPTY>
       
 12319    <!-- 0 <= number <= 4294967295 -->
       
 12320    <!ATTLIST acknowledgement
       
 12321              number %Digits; #REQUIRED>
       
 12322 
       
 12323    <!ELEMENT offset EMPTY>
       
 12324    <!-- 0 <= number <= 255 -->
       
 12325    <!ATTLIST offset
       
 12326              number %Digits; #REQUIRED>
       
 12327 
       
 12328    <!ELEMENT reserved EMPTY>
       
 12329    <!ATTLIST reserved
       
 12330              value CDATA #FIXED "0">
       
 12331 
       
 12332    <!ELEMENT control EMPTY>
       
 12333    <!ATTLIST control
       
 12334              urg (0|1) #IMPLIED
       
 12335              ack (0|1) #IMPLIED
       
 12336              psh (0|1) #IMPLIED
       
 12337              rst (0|1) #IMPLIED
       
 12338              syn (0|1) #IMPLIED
       
 12339              fin (0|1) #IMPLIED>
       
 12340 
       
 12341    <!ELEMENT window EMPTY>
       
 12342    <!-- 0 <= size <= 65,535 -->
       
 12343    <!ATTLIST window
       
 12344              size %Digits; #REQUIRED>
       
 12345 
       
 12346    <!--
       
 12347       checksum as in ip, but with
       
 12348       the following pseudo-header added into the tcp element:
       
 12349      -->
       
 12350    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
 12351                                tcp.length)>
       
 12352 
       
 12353    <!--
       
 12354       tcp header + data length in octets. does not include the size of
       
 12355 
       
 12356       the pseudoheader.
       
 12357     -->
       
 12358 
       
 12359 
       
 12360 
       
 12361 Kennedy                      Informational                     [Page 12]
       
 12362 
       
 12363 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 12364 
       
 12365 
       
 12366    <!ELEMENT tcp.length EMPTY>
       
 12367    <!ATTLIST tcp.length
       
 12368              value %Digits; #REQUIRED>
       
 12369 
       
 12370    <!ELEMENT urgent EMPTY>
       
 12371    <!-- 0 <= pointer <= 65,535 -->
       
 12372    <!ATTLIST urgent
       
 12373              pointer %Digits; #REQUIRED>
       
 12374 
       
 12375    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
 12376 
       
 12377    <!ELEMENT tcp.end EMPTY>
       
 12378    <!ATTLIST tcp.end
       
 12379              kind CDATA #FIXED "0">
       
 12380 
       
 12381    <!ELEMENT tcp.noop EMPTY>
       
 12382    <!ATTLIST tcp.noop
       
 12383              kind CDATA #FIXED "1">
       
 12384 
       
 12385    <!ELEMENT tcp.mss EMPTY>
       
 12386    <!ATTLIST tcp.mss
       
 12387              kind CDATA #FIXED "2"
       
 12388              length CDATA #FIXED "4"
       
 12389              size %Digits; #REQUIRED>
       
 12390 
       
 12391 7.3.  UDPoXML DTD
       
 12392 
       
 12393    <!--
       
 12394       DTD for UDP over XML.
       
 12395       Refer to this DTD as:
       
 12396 
       
 12397       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 12398    -->
       
 12399 
       
 12400    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
 12401 
       
 12402    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
 12403 
       
 12404    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
 12405                                udp.length)>
       
 12406 
       
 12407    <!--
       
 12408       udp header + data length in octets. does not include the size of
       
 12409       the pseudoheader.
       
 12410     -->
       
 12411    <!ELEMENT udp.length EMPTY>
       
 12412    <!ATTLIST udp.length
       
 12413              value %Digits; #REQUIRED>
       
 12414 
       
 12415 
       
 12416 
       
 12417 Kennedy                      Informational                     [Page 13]
       
 12418 
       
 12419 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 12420 
       
 12421 
       
 12422 8. Security Considerations
       
 12423 
       
 12424    XML, as a subset of SGML, has the same security considerations as
       
 12425    specified in SGML Media Types [RFC1874].  Security considerations
       
 12426    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
 12427    not attempt to correct for issues not related to message format.
       
 12428 
       
 12429 9.   References
       
 12430 
       
 12431    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
 12432                February 2002. (Work in Progress)
       
 12433 
       
 12434    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
 12435                August 1980.
       
 12436 
       
 12437    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
 12438                September 1981.
       
 12439 
       
 12440    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
 12441                793, September 1981.
       
 12442 
       
 12443    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
 12444                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
 12445 
       
 12446    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
 12447                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
 12448                43, RFC 1042, February 1988.
       
 12449 
       
 12450    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
 12451                Application and Support", RFC 1123, October 1989.
       
 12452 
       
 12453    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
 12454                1995.
       
 12455 
       
 12456    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
 12457                October 1996.
       
 12458 
       
 12459    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
 12460                Extensions (MIME) Part One: Format of Internet Message
       
 12461                Bodies", RFC 2045, November 1996.
       
 12462 
       
 12463    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
 12464                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
 12465 
       
 12466    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
 12467                10646", RFC 2279, January 1998.
       
 12468 
       
 12469 
       
 12470 
       
 12471 
       
 12472 
       
 12473 Kennedy                      Informational                     [Page 14]
       
 12474 
       
 12475 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 12476 
       
 12477 
       
 12478    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
 12479                (IPv6) Specification", RFC 2460, December 1998.
       
 12480 
       
 12481    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
 12482                RFC 3080, March 2001.
       
 12483 
       
 12484    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
 12485                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
 12486                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
 12487                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
 12488 
       
 12489    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
 12490                Markup Language (XML)" World Wide Web Consortium
       
 12491                Recommendation REC- xml-19980210.
       
 12492                http://www.w3.org/TR/1998/REC-xml-19980210
       
 12493 
       
 12494 10.  Author's Address
       
 12495 
       
 12496    Hugh Kennedy
       
 12497    Mimezine
       
 12498    1060 West Addison
       
 12499    Chicago, IL 60613
       
 12500    USA
       
 12501 
       
 12502    EMail: kennedyh@engin.umich.edu
       
 12503 
       
 12504 
       
 12505 
       
 12506 
       
 12507 
       
 12508 
       
 12509 
       
 12510 
       
 12511 
       
 12512 
       
 12513 
       
 12514 
       
 12515 
       
 12516 
       
 12517 
       
 12518 
       
 12519 
       
 12520 
       
 12521 
       
 12522 
       
 12523 
       
 12524 
       
 12525 
       
 12526 
       
 12527 
       
 12528 
       
 12529 Kennedy                      Informational                     [Page 15]
       
 12530 
       
 12531 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 12532 
       
 12533 
       
 12534 11.  Full Copyright Statement
       
 12535 
       
 12536    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
 12537 
       
 12538    This document and translations of it may be copied and furnished to
       
 12539    others, and derivative works that comment on or otherwise explain it
       
 12540    or assist in its implementation may be prepared, copied, published
       
 12541    and distributed, in whole or in part, without restriction of any
       
 12542    kind, provided that the above copyright notice and this paragraph are
       
 12543    included on all such copies and derivative works.  However, this
       
 12544    document itself may not be modified in any way, such as by removing
       
 12545    the copyright notice or references to the Internet Society or other
       
 12546    Internet organizations, except as needed for the purpose of
       
 12547    developing Internet standards in which case the procedures for
       
 12548    copyrights defined in the Internet Standards process must be
       
 12549    followed, or as required to translate it into languages other than
       
 12550    English.
       
 12551 
       
 12552    The limited permissions granted above are perpetual and will not be
       
 12553    revoked by the Internet Society or its successors or assigns.
       
 12554 
       
 12555    This document and the information contained herein is provided on an
       
 12556    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
 12557    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
 12558    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
 12559    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
 12560    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
 12561 
       
 12562 Acknowledgement
       
 12563 
       
 12564    Funding for the RFC Editor function is currently provided by the
       
 12565    Internet Society.
       
 12566 
       
 12567 
       
 12568 
       
 12569 
       
 12570 
       
 12571 
       
 12572 
       
 12573 
       
 12574 
       
 12575 
       
 12576 
       
 12577 
       
 12578 
       
 12579 
       
 12580 
       
 12581 
       
 12582 
       
 12583 
       
 12584 
       
 12585 Kennedy                      Informational                     [Page 16]
       
 12586 
       
 12587 
       
 12588 
       
 12589 
       
 12590 
       
 12591 
       
 12592 
       
 12593 Network Working Group                                         H. Kennedy
       
 12594 Request for Comments: 3252                                      Mimezine
       
 12595 Category: Informational                                     1 April 2002
       
 12596 
       
 12597 
       
 12598                  Binary Lexical Octet Ad-hoc Transport
       
 12599 
       
 12600 Status of this Memo
       
 12601 
       
 12602    This memo provides information for the Internet community.  It does
       
 12603    not specify an Internet standard of any kind.  Distribution of this
       
 12604    memo is unlimited.
       
 12605 
       
 12606 Copyright Notice
       
 12607 
       
 12608    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
 12609 
       
 12610 Abstract
       
 12611 
       
 12612    This document defines a reformulation of IP and two transport layer
       
 12613    protocols (TCP and UDP) as XML applications.
       
 12614 
       
 12615 1.   Introduction
       
 12616 
       
 12617 1.1. Overview
       
 12618 
       
 12619    This document describes the Binary Lexical Octet Ad-hoc Transport
       
 12620    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
 12621    (IP [RFC791]), and two associated transport layer protocols (TCP
       
 12622    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
 12623    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
 12624    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
 12625    across the public Internet.
       
 12626 
       
 12627 1.2. Motivation
       
 12628 
       
 12629    The wild popularity of XML as a basis for application-level protocols
       
 12630    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
 12631    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
 12632    investigation into the possibility of extending the use of XML in the
       
 12633    protocol stack.  Using XML at both the transport and network layer in
       
 12634    addition to the application layer would provide for an amazing amount
       
 12635    of power and flexibility while removing dependencies on proprietary
       
 12636    and hard-to-understand binary protocols.  This protocol unification
       
 12637    would also allow applications to use a single XML parser for all
       
 12638    aspects of their operation, eliminating developer time spent figuring
       
 12639    out the intricacies of each new protocol, and moving the hard work of
       
 12640 
       
 12641 
       
 12642 
       
 12643 
       
 12644 Kennedy                      Informational                      [Page 1]
       
 12645 
       
 12646 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 12647 
       
 12648 
       
 12649    parsing to the XML toolset.  The use of XML also mitigates concerns
       
 12650    over "network vs. host" byte ordering which is at the root of many
       
 12651    network application bugs.
       
 12652 
       
 12653 1.3. Relation to Existing Protocols
       
 12654 
       
 12655    The reformulations specified in this RFC follow as closely as
       
 12656    possible the spirit of the RFCs on which they are based, and so MAY
       
 12657    contain elements or attributes that would not be needed in a pure
       
 12658    reworking (e.g. length attributes, which are implicit in XML.)
       
 12659 
       
 12660    The layering of network and transport protocols are maintained in
       
 12661    this RFC despite the optimizations that could be made if the line
       
 12662    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
 12663    element in the DTD) in order to foster future use of this protocol as
       
 12664    a basis for reformulating other protocols (such as ICMP.)
       
 12665 
       
 12666    Other than the encoding, the behavioral aspects of each of the
       
 12667    existing protocols remain unchanged.  Routing, address spaces, TCP
       
 12668    congestion control, etc. behave as specified in the extant standards.
       
 12669    Adapting to new standards and experimental algorithm heuristics for
       
 12670    improving performance will become much easier once the move to BLOAT
       
 12671    has been completed.
       
 12672 
       
 12673 1.4. Requirement Levels
       
 12674 
       
 12675    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
 12676    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
 12677    document are to be interpreted as described in BCP 14, RFC 2119
       
 12678    [RFC2119].
       
 12679 
       
 12680 2.   IPoXML
       
 12681 
       
 12682    This protocol MUST be implemented to be compliant with this RFC.
       
 12683    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
 12684    (section 3.) and higher-level application protocols.
       
 12685 
       
 12686    The DTD for this document type can be found in section 7.1.
       
 12687 
       
 12688    The routing of IPoXML can be easily implemented on hosts with an XML
       
 12689    parser, as the regular structure lends itself handily to parsing and
       
 12690    validation of the document/datagram and then processing the
       
 12691    destination address, TTL, and checksum before sending it on to its
       
 12692    next-hop.
       
 12693 
       
 12694    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
 12695    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
 12696    would have exceeded the 1500 byte Ethernet MTU.
       
 12697 
       
 12698 
       
 12699 
       
 12700 Kennedy                      Informational                      [Page 2]
       
 12701 
       
 12702 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 12703 
       
 12704 
       
 12705    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
 12706    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
 12707    formed and include the XMLDecl.
       
 12708 
       
 12709 2.1. IP Description
       
 12710 
       
 12711    A number of items have changed (for the better) from the original IP
       
 12712    specification.  Bit-masks, where present have been converted into
       
 12713    human-readable values.  IP addresses are listed in their dotted-
       
 12714    decimal notation [RFC1123].  Length and checksum values are present
       
 12715    as decimal integers.
       
 12716 
       
 12717    To calculate the length and checksum fields of the IP element, a
       
 12718    canonicalized form of the element MUST be used.  The canonical form
       
 12719    SHALL have no whitespace (including newline characters) between
       
 12720    elements and only one space character between attributes.  There
       
 12721    SHALL NOT be a space following the last attribute in an element.
       
 12722 
       
 12723    An iterative method SHOULD be used to calculate checksums, as the
       
 12724    length field will vary based on the size of the checksum.
       
 12725 
       
 12726    The payload element bears special attention.  Due to the character
       
 12727    set restrictions of XML, the payload of IP datagrams (which MAY
       
 12728    contain arbitrary data) MUST be encoded for transport. This RFC
       
 12729    REQUIRES the contents of the payload to be encoded in the base-64
       
 12730    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
 12731    encoded output MUST be wrapped on 76-character lines.
       
 12732 
       
 12733 
       
 12734 
       
 12735 
       
 12736 
       
 12737 
       
 12738 
       
 12739 
       
 12740 
       
 12741 
       
 12742 
       
 12743 
       
 12744 
       
 12745 
       
 12746 
       
 12747 
       
 12748 
       
 12749 
       
 12750 
       
 12751 
       
 12752 
       
 12753 
       
 12754 
       
 12755 
       
 12756 Kennedy                      Informational                      [Page 3]
       
 12757 
       
 12758 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 12759 
       
 12760 
       
 12761 2.2. Example Datagram
       
 12762 
       
 12763    The following is an example IPoXML datagram with an empty payload:
       
 12764 
       
 12765    <?xml version="1.0" encoding="UTF-8"?>
       
 12766    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 12767    <ip>
       
 12768    <header length="474">
       
 12769    <version value="4"/>
       
 12770    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
 12771         relibility="Normal" reserved="0"/>
       
 12772    <total.length value="461"/>
       
 12773    <id value="1"/>
       
 12774    <flags reserved="0" df="dont" mf="last"/>
       
 12775    <offset value="0"/>
       
 12776    <ttl value="255"/>
       
 12777    <protocol value="6"/>
       
 12778    <checksum value="8707"/>
       
 12779    <source address="10.0.0.22"/>
       
 12780    <destination address="10.0.0.1"/>
       
 12781    <options>
       
 12782    <end copied="0" class="0" number="0"/>
       
 12783    </options>
       
 12784    <padding pad="0"/>
       
 12785    </header>
       
 12786    <payload>
       
 12787    </payload>
       
 12788    </ip>
       
 12789 
       
 12790 3.   TCPoXML
       
 12791 
       
 12792    This protocol MUST be implemented to be compliant with this RFC.  The
       
 12793    DTD for this document type can be found in section 7.2.
       
 12794 
       
 12795 3.1. TCP Description
       
 12796 
       
 12797    A number of items have changed from the original TCP specification.
       
 12798    Bit-masks, where present have been converted into human-readable
       
 12799    values.  Length and checksum and port values are present as decimal
       
 12800    integers.
       
 12801 
       
 12802    To calculate the length and checksum fields of the TCP element, a
       
 12803    canonicalized form of the element MUST be used as in section 2.1.
       
 12804 
       
 12805    An iterative method SHOULD be used to calculate checksums as in
       
 12806    section 2.1.
       
 12807 
       
 12808    The payload element MUST be encoded as in section 2.1.
       
 12809 
       
 12810 
       
 12811 
       
 12812 Kennedy                      Informational                      [Page 4]
       
 12813 
       
 12814 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 12815 
       
 12816 
       
 12817    The TCP offset element was expanded to a maximum of 255 from 16 to
       
 12818    allow for the increased size of the header in XML.
       
 12819 
       
 12820    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 12821    as well as the <!DOCTYPE> declaration.
       
 12822 
       
 12823 3.2. Example Datagram
       
 12824 
       
 12825    The following is an example TCPoXML datagram with an empty payload:
       
 12826 
       
 12827    <?xml version="1.0" encoding="UTF-8"?>
       
 12828    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 12829    <tcp>
       
 12830    <tcp.header>
       
 12831    <src port="31415"/>
       
 12832    <dest port="42424"/>
       
 12833    <sequence number="322622954"/>
       
 12834    <acknowledgement number="689715995"/>
       
 12835    <offset number=""/>
       
 12836    <reserved value="0"/>
       
 12837    <control syn="1" ack="1"/>
       
 12838    <window size="1"/>
       
 12839    <urgent pointer="0"/>
       
 12840    <checksum value="2988"/>
       
 12841    <tcp.options>
       
 12842    <tcp.end kind="0"/>
       
 12843    </tcp.options>
       
 12844    <padding pad="0"/>
       
 12845    </tcp.header>
       
 12846    <payload>
       
 12847    </payload>
       
 12848    </tcp>
       
 12849 
       
 12850 4.   UDPoXML
       
 12851 
       
 12852    This protocol MUST be implemented to be compliant with this RFC.  The
       
 12853    DTD for this document type can be found in section 7.3.
       
 12854 
       
 12855 4.1. UDP Description
       
 12856 
       
 12857    A number of items have changed from the original UDP specification.
       
 12858    Bit-masks, where present have been converted into human-readable
       
 12859    values.  Length and checksum and port values are present as decimal
       
 12860    integers.
       
 12861 
       
 12862 
       
 12863 
       
 12864 
       
 12865 
       
 12866 
       
 12867 
       
 12868 Kennedy                      Informational                      [Page 5]
       
 12869 
       
 12870 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 12871 
       
 12872 
       
 12873    To calculate the length and checksum fields of the UDP element, a
       
 12874    canonicalized form of the element MUST be used as in section 2.1.  An
       
 12875    iterative method SHOULD be used to calculate checksums as in section
       
 12876    2.1.
       
 12877 
       
 12878    The payload element MUST be encoded as in section 2.1.
       
 12879 
       
 12880    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 12881    as well as the <!DOCTYPE> declaration.
       
 12882 
       
 12883 4.2. Example Datagram
       
 12884 
       
 12885    The following is an example UDPoXML datagram with an empty payload:
       
 12886 
       
 12887    <?xml version="1.0" encoding="UTF-8"?>
       
 12888    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 12889    <udp>
       
 12890    <udp.header>
       
 12891    <src port="31415"/>
       
 12892    <dest port="42424"/>
       
 12893    <udp.length value="143"/>
       
 12894    <checksum value="2988"/>
       
 12895    </udp.header>
       
 12896    <payload>
       
 12897    </payload>
       
 12898    </udp>
       
 12899 
       
 12900 5.   Network Transport
       
 12901 
       
 12902    This document provides for the transmission of BLOAT datagrams over
       
 12903    two common families of physical layer transport.  Future RFCs will
       
 12904    address additional transports as routing vendors catch up to the
       
 12905    specification, and we begin to see BLOAT routed across the Internet
       
 12906    backbone.
       
 12907 
       
 12908 5.1. Ethernet
       
 12909 
       
 12910    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
 12911    exception that the type field of the Ethernet frame MUST contain the
       
 12912    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
 12913    be 0x3c 3f 78 6d 6c ("<?xml".)
       
 12914 
       
 12915 5.2. IEEE 802
       
 12916 
       
 12917    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
 12918    that the protocol type code for IPoXML is 0xBEEF.
       
 12919 
       
 12920 
       
 12921 
       
 12922 
       
 12923 
       
 12924 Kennedy                      Informational                      [Page 6]
       
 12925 
       
 12926 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 12927 
       
 12928 
       
 12929 6. Gatewaying over IP
       
 12930 
       
 12931    In order to facilitate the gradual introduction of BLOAT into the
       
 12932    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
 12933    gateway between networks that run BLOAT natively on their LANs.
       
 12934 
       
 12935 7. DTDs
       
 12936 
       
 12937    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
 12938    Network DTD (7.1.)
       
 12939 
       
 12940    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
 12941    [XML]) although it is understood that most IPoXML implementations
       
 12942    will not need to pull down the DTD, as it will normally be embedded
       
 12943    in the implementation, and presents something of a catch-22 if you
       
 12944    need to load part of your network protocol over the network.
       
 12945 
       
 12946 7.1.  IPoXML DTD
       
 12947 
       
 12948    <!--
       
 12949     DTD for IP over XML.
       
 12950     Refer to this DTD as:
       
 12951 
       
 12952     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 12953    -->
       
 12954    <!--
       
 12955     DTD data types:
       
 12956 
       
 12957       Digits      [0..9]+
       
 12958 
       
 12959       Precedence  "NetworkControl | InternetworkControl |
       
 12960                    CRITIC | FlashOverride | Flash | Immediate |
       
 12961                    Priority | Routine"
       
 12962 
       
 12963       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
 12964 
       
 12965       Class       [0..3]
       
 12966 
       
 12967       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
 12968                     Restricted | Secret | Top Secret | Reserved"
       
 12969 
       
 12970       Compartments [0..65535]
       
 12971 
       
 12972       Handling     [0..65535]
       
 12973 
       
 12974       TCC          [0..16777216]
       
 12975 
       
 12976    -->
       
 12977 
       
 12978 
       
 12979 
       
 12980 Kennedy                      Informational                      [Page 7]
       
 12981 
       
 12982 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 12983 
       
 12984 
       
 12985    <!ENTITY % Digits "CDATA">
       
 12986    <!ENTITY % Precedence "CDATA">
       
 12987    <!ENTITY % IP4Addr "CDATA">
       
 12988    <!ENTITY % Class "CDATA">
       
 12989    <!ENTITY % Sec "CDATA">
       
 12990    <!ENTITY % Compartments "CDATA">
       
 12991    <!ENTITY % Handling "CDATA">
       
 12992    <!ENTITY % TCC "CDATA">
       
 12993 
       
 12994    <!ELEMENT ip (header, payload)>
       
 12995 
       
 12996    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
 12997                     protocol, checksum, source, destination, options,
       
 12998                     padding)>
       
 12999    <!-- length of header in 32-bit words -->
       
 13000    <!ATTLIST header
       
 13001              length %Digits; #REQUIRED>
       
 13002 
       
 13003    <!ELEMENT version EMPTY>
       
 13004    <!-- ip version. SHOULD be "4" -->
       
 13005    <!ATTLIST version
       
 13006              value   %Digits;  #REQUIRED>
       
 13007 
       
 13008    <!ELEMENT tos EMPTY>
       
 13009    <!ATTLIST tos
       
 13010              precedence   %Precedence;    #REQUIRED
       
 13011              delay    (normal | low)  #REQUIRED
       
 13012              throughput   (normal | high) #REQUIRED
       
 13013              relibility   (normal | high) #REQUIRED
       
 13014              reserved     CDATA #FIXED "0">
       
 13015 
       
 13016    <!ELEMENT total.length EMPTY>
       
 13017    <!--
       
 13018     total length of datagram (header and payload) in octets, MUST be
       
 13019     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
 13020     ethernets).
       
 13021    -->
       
 13022    <!ATTLIST total.length
       
 13023              value %Digits; #REQUIRED>
       
 13024 
       
 13025    <!ELEMENT id EMPTY>
       
 13026    <!-- 0 <= id <= 65,535  -->
       
 13027    <!ATTLIST id
       
 13028              value %Digits; #REQUIRED>
       
 13029 
       
 13030    <!ELEMENT flags EMPTY>
       
 13031    <!-- df = don't fragment, mf = more fragments  -->
       
 13032    <!ATTLIST flags
       
 13033 
       
 13034 
       
 13035 
       
 13036 Kennedy                      Informational                      [Page 8]
       
 13037 
       
 13038 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 13039 
       
 13040 
       
 13041           reserved CDATA  #FIXED "0"
       
 13042           df (may|dont)   #REQUIRED
       
 13043           mf (last|more)  #REQUIRED>
       
 13044 
       
 13045    <!ELEMENT offset EMPTY>
       
 13046    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
 13047    <!ATTLIST offset
       
 13048              value %Digits; #REQUIRED>
       
 13049 
       
 13050    <!ELEMENT ttl EMPTY>
       
 13051    <!-- 0 <= ttl <= 255 -->
       
 13052    <!ATTLIST ttl
       
 13053              value %Digits; #REQUIRED>
       
 13054 
       
 13055    <!ELEMENT protocol EMPTY>
       
 13056    <!-- 0 <= protocol <= 255 (per IANA) -->
       
 13057    <!ATTLIST protocol
       
 13058              value %Digits; #REQUIRED>
       
 13059 
       
 13060    <!ELEMENT checksum EMPTY>
       
 13061    <!-- 0 <= checksum <= 65535 (over header only) -->
       
 13062    <!ATTLIST checksum
       
 13063              value %Digits; #REQUIRED>
       
 13064 
       
 13065    <!ELEMENT source EMPTY>
       
 13066    <!ATTLIST source
       
 13067              address %IP4Addr; #REQUIRED>
       
 13068 
       
 13069    <!ELEMENT destination EMPTY>
       
 13070    <!ATTLIST destination
       
 13071              address %IP4Addr; #REQUIRED>
       
 13072 
       
 13073    <!ELEMENT options ( end | noop | security | loose | strict | record
       
 13074                      | stream | timestamp )*>
       
 13075 
       
 13076    <!ELEMENT end EMPTY>
       
 13077    <!ATTLIST end
       
 13078              copied (0|1) #REQUIRED
       
 13079              class  CDATA #FIXED "0"
       
 13080              number CDATA #FIXED "0">
       
 13081 
       
 13082    <!ELEMENT noop EMPTY>
       
 13083    <!ATTLIST noop
       
 13084              copied (0|1) #REQUIRED
       
 13085              class  CDATA #FIXED "0"
       
 13086              number CDATA #FIXED "1">
       
 13087 
       
 13088    <!ELEMENT security EMPTY>
       
 13089 
       
 13090 
       
 13091 
       
 13092 Kennedy                      Informational                      [Page 9]
       
 13093 
       
 13094 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 13095 
       
 13096 
       
 13097    <!ATTLIST security
       
 13098              copied CDATA #FIXED "1"
       
 13099              class  CDATA #FIXED "0"
       
 13100              number CDATA #FIXED "2"
       
 13101              length CDATA #FIXED "11"
       
 13102              security %Sec; #REQUIRED
       
 13103              compartments %Compartments; #REQUIRED
       
 13104              handling %Handling; #REQUIRED
       
 13105              tcc %TCC; #REQUIRED>
       
 13106    <!ELEMENT loose (hop)+>
       
 13107    <!ATTLIST loose
       
 13108              copied CDATA #FIXED "1"
       
 13109              class  CDATA #FIXED "0"
       
 13110              number CDATA #FIXED "3"
       
 13111              length %Digits; #REQUIRED
       
 13112              pointer %Digits; #REQUIRED>
       
 13113 
       
 13114    <!ELEMENT hop EMPTY>
       
 13115    <!ATTLIST hop
       
 13116              address %IP4Addr; #REQUIRED>
       
 13117 
       
 13118    <!ELEMENT strict (hop)+>
       
 13119    <!ATTLIST strict
       
 13120              copied CDATA #FIXED "1"
       
 13121              class  CDATA #FIXED "0"
       
 13122              number CDATA #FIXED "9"
       
 13123              length %Digits; #REQUIRED
       
 13124              pointer %Digits; #REQUIRED>
       
 13125 
       
 13126    <!ELEMENT record (hop)+>
       
 13127    <!ATTLIST record
       
 13128              copied CDATA #FIXED "0"
       
 13129              class  CDATA #FIXED "0"
       
 13130              number CDATA #FIXED "7"
       
 13131              length %Digits; #REQUIRED
       
 13132              pointer %Digits; #REQUIRED>
       
 13133 
       
 13134    <!ELEMENT stream EMPTY>
       
 13135    <!-- 0 <= id <= 65,535 -->
       
 13136    <!ATTLIST stream
       
 13137              copied CDATA #FIXED "1"
       
 13138              class  CDATA #FIXED "0"
       
 13139              number CDATA #FIXED "8"
       
 13140              length CDATA #FIXED "4"
       
 13141              id %Digits; #REQUIRED>
       
 13142 
       
 13143    <!ELEMENT timestamp (tstamp)+>
       
 13144    <!-- 0 <= oflw <=15 -->
       
 13145 
       
 13146 
       
 13147 
       
 13148 Kennedy                      Informational                     [Page 10]
       
 13149 
       
 13150 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 13151 
       
 13152 
       
 13153    <!ATTLIST timestamp
       
 13154              copied CDATA #FIXED "0"
       
 13155              class  CDATA #FIXED "2"
       
 13156              number CDATA #FIXED "4"
       
 13157              length %Digits;  #REQUIRED
       
 13158              pointer %Digits; #REQUIRED
       
 13159              oflw %Digits;    #REQUIRED
       
 13160              flag (0 | 1 | 3)  #REQUIRED>
       
 13161 
       
 13162    <!ELEMENT tstamp EMPTY>
       
 13163    <!ATTLIST tstamp
       
 13164              time %Digits;   #REQUIRED
       
 13165              address %IP4Addr; #IMPLIED>
       
 13166    <!--
       
 13167        padding to bring header to 32-bit boundary.
       
 13168        pad MUST be "0"*
       
 13169     -->
       
 13170    <!ELEMENT padding EMPTY>
       
 13171    <!ATTLIST padding
       
 13172              pad CDATA #REQUIRED>
       
 13173 
       
 13174    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
 13175         by section 2.1 of this RFC -->
       
 13176    <!ELEMENT payload (CDATA)>
       
 13177 
       
 13178 7.2.  TCPoXML DTD
       
 13179 
       
 13180    <!--
       
 13181       DTD for TCP over XML.
       
 13182       Refer to this DTD as:
       
 13183 
       
 13184       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 13185    -->
       
 13186 
       
 13187    <!-- the pseudoheader is only included for checksum calculations -->
       
 13188    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
 13189 
       
 13190    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
 13191                          reserved, control, window, checksum, urgent,
       
 13192                          tcp.options, padding)>
       
 13193 
       
 13194    <!ELEMENT src EMPTY>
       
 13195    <!-- 0 <= port <= 65,535 -->
       
 13196    <!ATTLIST src
       
 13197              port %Digits; #REQUIRED>
       
 13198 
       
 13199    <!ELEMENT dest EMPTY>
       
 13200    <!-- 0 <= port <= 65,535 -->
       
 13201 
       
 13202 
       
 13203 
       
 13204 Kennedy                      Informational                     [Page 11]
       
 13205 
       
 13206 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 13207 
       
 13208 
       
 13209    <!ATTLIST dest
       
 13210              port %Digits; #REQUIRED>
       
 13211 
       
 13212    <!ELEMENT sequence EMPTY>
       
 13213    <!-- 0 <= number <= 4294967295 -->
       
 13214    <!ATTLIST sequence
       
 13215              number %Digits; #REQUIRED>
       
 13216 
       
 13217    <!ELEMENT acknowledgement EMPTY>
       
 13218    <!-- 0 <= number <= 4294967295 -->
       
 13219    <!ATTLIST acknowledgement
       
 13220              number %Digits; #REQUIRED>
       
 13221 
       
 13222    <!ELEMENT offset EMPTY>
       
 13223    <!-- 0 <= number <= 255 -->
       
 13224    <!ATTLIST offset
       
 13225              number %Digits; #REQUIRED>
       
 13226 
       
 13227    <!ELEMENT reserved EMPTY>
       
 13228    <!ATTLIST reserved
       
 13229              value CDATA #FIXED "0">
       
 13230 
       
 13231    <!ELEMENT control EMPTY>
       
 13232    <!ATTLIST control
       
 13233              urg (0|1) #IMPLIED
       
 13234              ack (0|1) #IMPLIED
       
 13235              psh (0|1) #IMPLIED
       
 13236              rst (0|1) #IMPLIED
       
 13237              syn (0|1) #IMPLIED
       
 13238              fin (0|1) #IMPLIED>
       
 13239 
       
 13240    <!ELEMENT window EMPTY>
       
 13241    <!-- 0 <= size <= 65,535 -->
       
 13242    <!ATTLIST window
       
 13243              size %Digits; #REQUIRED>
       
 13244 
       
 13245    <!--
       
 13246       checksum as in ip, but with
       
 13247       the following pseudo-header added into the tcp element:
       
 13248      -->
       
 13249    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
 13250                                tcp.length)>
       
 13251 
       
 13252    <!--
       
 13253       tcp header + data length in octets. does not include the size of
       
 13254 
       
 13255       the pseudoheader.
       
 13256     -->
       
 13257 
       
 13258 
       
 13259 
       
 13260 Kennedy                      Informational                     [Page 12]
       
 13261 
       
 13262 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 13263 
       
 13264 
       
 13265    <!ELEMENT tcp.length EMPTY>
       
 13266    <!ATTLIST tcp.length
       
 13267              value %Digits; #REQUIRED>
       
 13268 
       
 13269    <!ELEMENT urgent EMPTY>
       
 13270    <!-- 0 <= pointer <= 65,535 -->
       
 13271    <!ATTLIST urgent
       
 13272              pointer %Digits; #REQUIRED>
       
 13273 
       
 13274    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
 13275 
       
 13276    <!ELEMENT tcp.end EMPTY>
       
 13277    <!ATTLIST tcp.end
       
 13278              kind CDATA #FIXED "0">
       
 13279 
       
 13280    <!ELEMENT tcp.noop EMPTY>
       
 13281    <!ATTLIST tcp.noop
       
 13282              kind CDATA #FIXED "1">
       
 13283 
       
 13284    <!ELEMENT tcp.mss EMPTY>
       
 13285    <!ATTLIST tcp.mss
       
 13286              kind CDATA #FIXED "2"
       
 13287              length CDATA #FIXED "4"
       
 13288              size %Digits; #REQUIRED>
       
 13289 
       
 13290 7.3.  UDPoXML DTD
       
 13291 
       
 13292    <!--
       
 13293       DTD for UDP over XML.
       
 13294       Refer to this DTD as:
       
 13295 
       
 13296       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 13297    -->
       
 13298 
       
 13299    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
 13300 
       
 13301    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
 13302 
       
 13303    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
 13304                                udp.length)>
       
 13305 
       
 13306    <!--
       
 13307       udp header + data length in octets. does not include the size of
       
 13308       the pseudoheader.
       
 13309     -->
       
 13310    <!ELEMENT udp.length EMPTY>
       
 13311    <!ATTLIST udp.length
       
 13312              value %Digits; #REQUIRED>
       
 13313 
       
 13314 
       
 13315 
       
 13316 Kennedy                      Informational                     [Page 13]
       
 13317 
       
 13318 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 13319 
       
 13320 
       
 13321 8. Security Considerations
       
 13322 
       
 13323    XML, as a subset of SGML, has the same security considerations as
       
 13324    specified in SGML Media Types [RFC1874].  Security considerations
       
 13325    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
 13326    not attempt to correct for issues not related to message format.
       
 13327 
       
 13328 9.   References
       
 13329 
       
 13330    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
 13331                February 2002. (Work in Progress)
       
 13332 
       
 13333    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
 13334                August 1980.
       
 13335 
       
 13336    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
 13337                September 1981.
       
 13338 
       
 13339    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
 13340                793, September 1981.
       
 13341 
       
 13342    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
 13343                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
 13344 
       
 13345    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
 13346                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
 13347                43, RFC 1042, February 1988.
       
 13348 
       
 13349    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
 13350                Application and Support", RFC 1123, October 1989.
       
 13351 
       
 13352    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
 13353                1995.
       
 13354 
       
 13355    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
 13356                October 1996.
       
 13357 
       
 13358    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
 13359                Extensions (MIME) Part One: Format of Internet Message
       
 13360                Bodies", RFC 2045, November 1996.
       
 13361 
       
 13362    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
 13363                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
 13364 
       
 13365    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
 13366                10646", RFC 2279, January 1998.
       
 13367 
       
 13368 
       
 13369 
       
 13370 
       
 13371 
       
 13372 Kennedy                      Informational                     [Page 14]
       
 13373 
       
 13374 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 13375 
       
 13376 
       
 13377    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
 13378                (IPv6) Specification", RFC 2460, December 1998.
       
 13379 
       
 13380    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
 13381                RFC 3080, March 2001.
       
 13382 
       
 13383    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
 13384                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
 13385                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
 13386                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
 13387 
       
 13388    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
 13389                Markup Language (XML)" World Wide Web Consortium
       
 13390                Recommendation REC- xml-19980210.
       
 13391                http://www.w3.org/TR/1998/REC-xml-19980210
       
 13392 
       
 13393 10.  Author's Address
       
 13394 
       
 13395    Hugh Kennedy
       
 13396    Mimezine
       
 13397    1060 West Addison
       
 13398    Chicago, IL 60613
       
 13399    USA
       
 13400 
       
 13401    EMail: kennedyh@engin.umich.edu
       
 13402 
       
 13403 
       
 13404 
       
 13405 
       
 13406 
       
 13407 
       
 13408 
       
 13409 
       
 13410 
       
 13411 
       
 13412 
       
 13413 
       
 13414 
       
 13415 
       
 13416 
       
 13417 
       
 13418 
       
 13419 
       
 13420 
       
 13421 
       
 13422 
       
 13423 
       
 13424 
       
 13425 
       
 13426 
       
 13427 
       
 13428 Kennedy                      Informational                     [Page 15]
       
 13429 
       
 13430 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 13431 
       
 13432 
       
 13433 11.  Full Copyright Statement
       
 13434 
       
 13435    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
 13436 
       
 13437    This document and translations of it may be copied and furnished to
       
 13438    others, and derivative works that comment on or otherwise explain it
       
 13439    or assist in its implementation may be prepared, copied, published
       
 13440    and distributed, in whole or in part, without restriction of any
       
 13441    kind, provided that the above copyright notice and this paragraph are
       
 13442    included on all such copies and derivative works.  However, this
       
 13443    document itself may not be modified in any way, such as by removing
       
 13444    the copyright notice or references to the Internet Society or other
       
 13445    Internet organizations, except as needed for the purpose of
       
 13446    developing Internet standards in which case the procedures for
       
 13447    copyrights defined in the Internet Standards process must be
       
 13448    followed, or as required to translate it into languages other than
       
 13449    English.
       
 13450 
       
 13451    The limited permissions granted above are perpetual and will not be
       
 13452    revoked by the Internet Society or its successors or assigns.
       
 13453 
       
 13454    This document and the information contained herein is provided on an
       
 13455    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
 13456    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
 13457    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
 13458    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
 13459    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
 13460 
       
 13461 Acknowledgement
       
 13462 
       
 13463    Funding for the RFC Editor function is currently provided by the
       
 13464    Internet Society.
       
 13465 
       
 13466 
       
 13467 
       
 13468 
       
 13469 
       
 13470 
       
 13471 
       
 13472 
       
 13473 
       
 13474 
       
 13475 
       
 13476 
       
 13477 
       
 13478 
       
 13479 
       
 13480 
       
 13481 
       
 13482 
       
 13483 
       
 13484 Kennedy                      Informational                     [Page 16]
       
 13485 
       
 13486 
       
 13487 
       
 13488 
       
 13489 
       
 13490 
       
 13491 
       
 13492 Network Working Group                                         H. Kennedy
       
 13493 Request for Comments: 3252                                      Mimezine
       
 13494 Category: Informational                                     1 April 2002
       
 13495 
       
 13496 
       
 13497                  Binary Lexical Octet Ad-hoc Transport
       
 13498 
       
 13499 Status of this Memo
       
 13500 
       
 13501    This memo provides information for the Internet community.  It does
       
 13502    not specify an Internet standard of any kind.  Distribution of this
       
 13503    memo is unlimited.
       
 13504 
       
 13505 Copyright Notice
       
 13506 
       
 13507    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
 13508 
       
 13509 Abstract
       
 13510 
       
 13511    This document defines a reformulation of IP and two transport layer
       
 13512    protocols (TCP and UDP) as XML applications.
       
 13513 
       
 13514 1.   Introduction
       
 13515 
       
 13516 1.1. Overview
       
 13517 
       
 13518    This document describes the Binary Lexical Octet Ad-hoc Transport
       
 13519    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
 13520    (IP [RFC791]), and two associated transport layer protocols (TCP
       
 13521    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
 13522    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
 13523    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
 13524    across the public Internet.
       
 13525 
       
 13526 1.2. Motivation
       
 13527 
       
 13528    The wild popularity of XML as a basis for application-level protocols
       
 13529    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
 13530    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
 13531    investigation into the possibility of extending the use of XML in the
       
 13532    protocol stack.  Using XML at both the transport and network layer in
       
 13533    addition to the application layer would provide for an amazing amount
       
 13534    of power and flexibility while removing dependencies on proprietary
       
 13535    and hard-to-understand binary protocols.  This protocol unification
       
 13536    would also allow applications to use a single XML parser for all
       
 13537    aspects of their operation, eliminating developer time spent figuring
       
 13538    out the intricacies of each new protocol, and moving the hard work of
       
 13539 
       
 13540 
       
 13541 
       
 13542 
       
 13543 Kennedy                      Informational                      [Page 1]
       
 13544 
       
 13545 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 13546 
       
 13547 
       
 13548    parsing to the XML toolset.  The use of XML also mitigates concerns
       
 13549    over "network vs. host" byte ordering which is at the root of many
       
 13550    network application bugs.
       
 13551 
       
 13552 1.3. Relation to Existing Protocols
       
 13553 
       
 13554    The reformulations specified in this RFC follow as closely as
       
 13555    possible the spirit of the RFCs on which they are based, and so MAY
       
 13556    contain elements or attributes that would not be needed in a pure
       
 13557    reworking (e.g. length attributes, which are implicit in XML.)
       
 13558 
       
 13559    The layering of network and transport protocols are maintained in
       
 13560    this RFC despite the optimizations that could be made if the line
       
 13561    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
 13562    element in the DTD) in order to foster future use of this protocol as
       
 13563    a basis for reformulating other protocols (such as ICMP.)
       
 13564 
       
 13565    Other than the encoding, the behavioral aspects of each of the
       
 13566    existing protocols remain unchanged.  Routing, address spaces, TCP
       
 13567    congestion control, etc. behave as specified in the extant standards.
       
 13568    Adapting to new standards and experimental algorithm heuristics for
       
 13569    improving performance will become much easier once the move to BLOAT
       
 13570    has been completed.
       
 13571 
       
 13572 1.4. Requirement Levels
       
 13573 
       
 13574    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
 13575    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
 13576    document are to be interpreted as described in BCP 14, RFC 2119
       
 13577    [RFC2119].
       
 13578 
       
 13579 2.   IPoXML
       
 13580 
       
 13581    This protocol MUST be implemented to be compliant with this RFC.
       
 13582    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
 13583    (section 3.) and higher-level application protocols.
       
 13584 
       
 13585    The DTD for this document type can be found in section 7.1.
       
 13586 
       
 13587    The routing of IPoXML can be easily implemented on hosts with an XML
       
 13588    parser, as the regular structure lends itself handily to parsing and
       
 13589    validation of the document/datagram and then processing the
       
 13590    destination address, TTL, and checksum before sending it on to its
       
 13591    next-hop.
       
 13592 
       
 13593    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
 13594    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
 13595    would have exceeded the 1500 byte Ethernet MTU.
       
 13596 
       
 13597 
       
 13598 
       
 13599 Kennedy                      Informational                      [Page 2]
       
 13600 
       
 13601 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 13602 
       
 13603 
       
 13604    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
 13605    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
 13606    formed and include the XMLDecl.
       
 13607 
       
 13608 2.1. IP Description
       
 13609 
       
 13610    A number of items have changed (for the better) from the original IP
       
 13611    specification.  Bit-masks, where present have been converted into
       
 13612    human-readable values.  IP addresses are listed in their dotted-
       
 13613    decimal notation [RFC1123].  Length and checksum values are present
       
 13614    as decimal integers.
       
 13615 
       
 13616    To calculate the length and checksum fields of the IP element, a
       
 13617    canonicalized form of the element MUST be used.  The canonical form
       
 13618    SHALL have no whitespace (including newline characters) between
       
 13619    elements and only one space character between attributes.  There
       
 13620    SHALL NOT be a space following the last attribute in an element.
       
 13621 
       
 13622    An iterative method SHOULD be used to calculate checksums, as the
       
 13623    length field will vary based on the size of the checksum.
       
 13624 
       
 13625    The payload element bears special attention.  Due to the character
       
 13626    set restrictions of XML, the payload of IP datagrams (which MAY
       
 13627    contain arbitrary data) MUST be encoded for transport. This RFC
       
 13628    REQUIRES the contents of the payload to be encoded in the base-64
       
 13629    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
 13630    encoded output MUST be wrapped on 76-character lines.
       
 13631 
       
 13632 
       
 13633 
       
 13634 
       
 13635 
       
 13636 
       
 13637 
       
 13638 
       
 13639 
       
 13640 
       
 13641 
       
 13642 
       
 13643 
       
 13644 
       
 13645 
       
 13646 
       
 13647 
       
 13648 
       
 13649 
       
 13650 
       
 13651 
       
 13652 
       
 13653 
       
 13654 
       
 13655 Kennedy                      Informational                      [Page 3]
       
 13656 
       
 13657 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 13658 
       
 13659 
       
 13660 2.2. Example Datagram
       
 13661 
       
 13662    The following is an example IPoXML datagram with an empty payload:
       
 13663 
       
 13664    <?xml version="1.0" encoding="UTF-8"?>
       
 13665    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 13666    <ip>
       
 13667    <header length="474">
       
 13668    <version value="4"/>
       
 13669    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
 13670         relibility="Normal" reserved="0"/>
       
 13671    <total.length value="461"/>
       
 13672    <id value="1"/>
       
 13673    <flags reserved="0" df="dont" mf="last"/>
       
 13674    <offset value="0"/>
       
 13675    <ttl value="255"/>
       
 13676    <protocol value="6"/>
       
 13677    <checksum value="8707"/>
       
 13678    <source address="10.0.0.22"/>
       
 13679    <destination address="10.0.0.1"/>
       
 13680    <options>
       
 13681    <end copied="0" class="0" number="0"/>
       
 13682    </options>
       
 13683    <padding pad="0"/>
       
 13684    </header>
       
 13685    <payload>
       
 13686    </payload>
       
 13687    </ip>
       
 13688 
       
 13689 3.   TCPoXML
       
 13690 
       
 13691    This protocol MUST be implemented to be compliant with this RFC.  The
       
 13692    DTD for this document type can be found in section 7.2.
       
 13693 
       
 13694 3.1. TCP Description
       
 13695 
       
 13696    A number of items have changed from the original TCP specification.
       
 13697    Bit-masks, where present have been converted into human-readable
       
 13698    values.  Length and checksum and port values are present as decimal
       
 13699    integers.
       
 13700 
       
 13701    To calculate the length and checksum fields of the TCP element, a
       
 13702    canonicalized form of the element MUST be used as in section 2.1.
       
 13703 
       
 13704    An iterative method SHOULD be used to calculate checksums as in
       
 13705    section 2.1.
       
 13706 
       
 13707    The payload element MUST be encoded as in section 2.1.
       
 13708 
       
 13709 
       
 13710 
       
 13711 Kennedy                      Informational                      [Page 4]
       
 13712 
       
 13713 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 13714 
       
 13715 
       
 13716    The TCP offset element was expanded to a maximum of 255 from 16 to
       
 13717    allow for the increased size of the header in XML.
       
 13718 
       
 13719    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 13720    as well as the <!DOCTYPE> declaration.
       
 13721 
       
 13722 3.2. Example Datagram
       
 13723 
       
 13724    The following is an example TCPoXML datagram with an empty payload:
       
 13725 
       
 13726    <?xml version="1.0" encoding="UTF-8"?>
       
 13727    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 13728    <tcp>
       
 13729    <tcp.header>
       
 13730    <src port="31415"/>
       
 13731    <dest port="42424"/>
       
 13732    <sequence number="322622954"/>
       
 13733    <acknowledgement number="689715995"/>
       
 13734    <offset number=""/>
       
 13735    <reserved value="0"/>
       
 13736    <control syn="1" ack="1"/>
       
 13737    <window size="1"/>
       
 13738    <urgent pointer="0"/>
       
 13739    <checksum value="2988"/>
       
 13740    <tcp.options>
       
 13741    <tcp.end kind="0"/>
       
 13742    </tcp.options>
       
 13743    <padding pad="0"/>
       
 13744    </tcp.header>
       
 13745    <payload>
       
 13746    </payload>
       
 13747    </tcp>
       
 13748 
       
 13749 4.   UDPoXML
       
 13750 
       
 13751    This protocol MUST be implemented to be compliant with this RFC.  The
       
 13752    DTD for this document type can be found in section 7.3.
       
 13753 
       
 13754 4.1. UDP Description
       
 13755 
       
 13756    A number of items have changed from the original UDP specification.
       
 13757    Bit-masks, where present have been converted into human-readable
       
 13758    values.  Length and checksum and port values are present as decimal
       
 13759    integers.
       
 13760 
       
 13761 
       
 13762 
       
 13763 
       
 13764 
       
 13765 
       
 13766 
       
 13767 Kennedy                      Informational                      [Page 5]
       
 13768 
       
 13769 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 13770 
       
 13771 
       
 13772    To calculate the length and checksum fields of the UDP element, a
       
 13773    canonicalized form of the element MUST be used as in section 2.1.  An
       
 13774    iterative method SHOULD be used to calculate checksums as in section
       
 13775    2.1.
       
 13776 
       
 13777    The payload element MUST be encoded as in section 2.1.
       
 13778 
       
 13779    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 13780    as well as the <!DOCTYPE> declaration.
       
 13781 
       
 13782 4.2. Example Datagram
       
 13783 
       
 13784    The following is an example UDPoXML datagram with an empty payload:
       
 13785 
       
 13786    <?xml version="1.0" encoding="UTF-8"?>
       
 13787    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 13788    <udp>
       
 13789    <udp.header>
       
 13790    <src port="31415"/>
       
 13791    <dest port="42424"/>
       
 13792    <udp.length value="143"/>
       
 13793    <checksum value="2988"/>
       
 13794    </udp.header>
       
 13795    <payload>
       
 13796    </payload>
       
 13797    </udp>
       
 13798 
       
 13799 5.   Network Transport
       
 13800 
       
 13801    This document provides for the transmission of BLOAT datagrams over
       
 13802    two common families of physical layer transport.  Future RFCs will
       
 13803    address additional transports as routing vendors catch up to the
       
 13804    specification, and we begin to see BLOAT routed across the Internet
       
 13805    backbone.
       
 13806 
       
 13807 5.1. Ethernet
       
 13808 
       
 13809    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
 13810    exception that the type field of the Ethernet frame MUST contain the
       
 13811    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
 13812    be 0x3c 3f 78 6d 6c ("<?xml".)
       
 13813 
       
 13814 5.2. IEEE 802
       
 13815 
       
 13816    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
 13817    that the protocol type code for IPoXML is 0xBEEF.
       
 13818 
       
 13819 
       
 13820 
       
 13821 
       
 13822 
       
 13823 Kennedy                      Informational                      [Page 6]
       
 13824 
       
 13825 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 13826 
       
 13827 
       
 13828 6. Gatewaying over IP
       
 13829 
       
 13830    In order to facilitate the gradual introduction of BLOAT into the
       
 13831    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
 13832    gateway between networks that run BLOAT natively on their LANs.
       
 13833 
       
 13834 7. DTDs
       
 13835 
       
 13836    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
 13837    Network DTD (7.1.)
       
 13838 
       
 13839    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
 13840    [XML]) although it is understood that most IPoXML implementations
       
 13841    will not need to pull down the DTD, as it will normally be embedded
       
 13842    in the implementation, and presents something of a catch-22 if you
       
 13843    need to load part of your network protocol over the network.
       
 13844 
       
 13845 7.1.  IPoXML DTD
       
 13846 
       
 13847    <!--
       
 13848     DTD for IP over XML.
       
 13849     Refer to this DTD as:
       
 13850 
       
 13851     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 13852    -->
       
 13853    <!--
       
 13854     DTD data types:
       
 13855 
       
 13856       Digits      [0..9]+
       
 13857 
       
 13858       Precedence  "NetworkControl | InternetworkControl |
       
 13859                    CRITIC | FlashOverride | Flash | Immediate |
       
 13860                    Priority | Routine"
       
 13861 
       
 13862       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
 13863 
       
 13864       Class       [0..3]
       
 13865 
       
 13866       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
 13867                     Restricted | Secret | Top Secret | Reserved"
       
 13868 
       
 13869       Compartments [0..65535]
       
 13870 
       
 13871       Handling     [0..65535]
       
 13872 
       
 13873       TCC          [0..16777216]
       
 13874 
       
 13875    -->
       
 13876 
       
 13877 
       
 13878 
       
 13879 Kennedy                      Informational                      [Page 7]
       
 13880 
       
 13881 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 13882 
       
 13883 
       
 13884    <!ENTITY % Digits "CDATA">
       
 13885    <!ENTITY % Precedence "CDATA">
       
 13886    <!ENTITY % IP4Addr "CDATA">
       
 13887    <!ENTITY % Class "CDATA">
       
 13888    <!ENTITY % Sec "CDATA">
       
 13889    <!ENTITY % Compartments "CDATA">
       
 13890    <!ENTITY % Handling "CDATA">
       
 13891    <!ENTITY % TCC "CDATA">
       
 13892 
       
 13893    <!ELEMENT ip (header, payload)>
       
 13894 
       
 13895    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
 13896                     protocol, checksum, source, destination, options,
       
 13897                     padding)>
       
 13898    <!-- length of header in 32-bit words -->
       
 13899    <!ATTLIST header
       
 13900              length %Digits; #REQUIRED>
       
 13901 
       
 13902    <!ELEMENT version EMPTY>
       
 13903    <!-- ip version. SHOULD be "4" -->
       
 13904    <!ATTLIST version
       
 13905              value   %Digits;  #REQUIRED>
       
 13906 
       
 13907    <!ELEMENT tos EMPTY>
       
 13908    <!ATTLIST tos
       
 13909              precedence   %Precedence;    #REQUIRED
       
 13910              delay    (normal | low)  #REQUIRED
       
 13911              throughput   (normal | high) #REQUIRED
       
 13912              relibility   (normal | high) #REQUIRED
       
 13913              reserved     CDATA #FIXED "0">
       
 13914 
       
 13915    <!ELEMENT total.length EMPTY>
       
 13916    <!--
       
 13917     total length of datagram (header and payload) in octets, MUST be
       
 13918     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
 13919     ethernets).
       
 13920    -->
       
 13921    <!ATTLIST total.length
       
 13922              value %Digits; #REQUIRED>
       
 13923 
       
 13924    <!ELEMENT id EMPTY>
       
 13925    <!-- 0 <= id <= 65,535  -->
       
 13926    <!ATTLIST id
       
 13927              value %Digits; #REQUIRED>
       
 13928 
       
 13929    <!ELEMENT flags EMPTY>
       
 13930    <!-- df = don't fragment, mf = more fragments  -->
       
 13931    <!ATTLIST flags
       
 13932 
       
 13933 
       
 13934 
       
 13935 Kennedy                      Informational                      [Page 8]
       
 13936 
       
 13937 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 13938 
       
 13939 
       
 13940           reserved CDATA  #FIXED "0"
       
 13941           df (may|dont)   #REQUIRED
       
 13942           mf (last|more)  #REQUIRED>
       
 13943 
       
 13944    <!ELEMENT offset EMPTY>
       
 13945    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
 13946    <!ATTLIST offset
       
 13947              value %Digits; #REQUIRED>
       
 13948 
       
 13949    <!ELEMENT ttl EMPTY>
       
 13950    <!-- 0 <= ttl <= 255 -->
       
 13951    <!ATTLIST ttl
       
 13952              value %Digits; #REQUIRED>
       
 13953 
       
 13954    <!ELEMENT protocol EMPTY>
       
 13955    <!-- 0 <= protocol <= 255 (per IANA) -->
       
 13956    <!ATTLIST protocol
       
 13957              value %Digits; #REQUIRED>
       
 13958 
       
 13959    <!ELEMENT checksum EMPTY>
       
 13960    <!-- 0 <= checksum <= 65535 (over header only) -->
       
 13961    <!ATTLIST checksum
       
 13962              value %Digits; #REQUIRED>
       
 13963 
       
 13964    <!ELEMENT source EMPTY>
       
 13965    <!ATTLIST source
       
 13966              address %IP4Addr; #REQUIRED>
       
 13967 
       
 13968    <!ELEMENT destination EMPTY>
       
 13969    <!ATTLIST destination
       
 13970              address %IP4Addr; #REQUIRED>
       
 13971 
       
 13972    <!ELEMENT options ( end | noop | security | loose | strict | record
       
 13973                      | stream | timestamp )*>
       
 13974 
       
 13975    <!ELEMENT end EMPTY>
       
 13976    <!ATTLIST end
       
 13977              copied (0|1) #REQUIRED
       
 13978              class  CDATA #FIXED "0"
       
 13979              number CDATA #FIXED "0">
       
 13980 
       
 13981    <!ELEMENT noop EMPTY>
       
 13982    <!ATTLIST noop
       
 13983              copied (0|1) #REQUIRED
       
 13984              class  CDATA #FIXED "0"
       
 13985              number CDATA #FIXED "1">
       
 13986 
       
 13987    <!ELEMENT security EMPTY>
       
 13988 
       
 13989 
       
 13990 
       
 13991 Kennedy                      Informational                      [Page 9]
       
 13992 
       
 13993 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 13994 
       
 13995 
       
 13996    <!ATTLIST security
       
 13997              copied CDATA #FIXED "1"
       
 13998              class  CDATA #FIXED "0"
       
 13999              number CDATA #FIXED "2"
       
 14000              length CDATA #FIXED "11"
       
 14001              security %Sec; #REQUIRED
       
 14002              compartments %Compartments; #REQUIRED
       
 14003              handling %Handling; #REQUIRED
       
 14004              tcc %TCC; #REQUIRED>
       
 14005    <!ELEMENT loose (hop)+>
       
 14006    <!ATTLIST loose
       
 14007              copied CDATA #FIXED "1"
       
 14008              class  CDATA #FIXED "0"
       
 14009              number CDATA #FIXED "3"
       
 14010              length %Digits; #REQUIRED
       
 14011              pointer %Digits; #REQUIRED>
       
 14012 
       
 14013    <!ELEMENT hop EMPTY>
       
 14014    <!ATTLIST hop
       
 14015              address %IP4Addr; #REQUIRED>
       
 14016 
       
 14017    <!ELEMENT strict (hop)+>
       
 14018    <!ATTLIST strict
       
 14019              copied CDATA #FIXED "1"
       
 14020              class  CDATA #FIXED "0"
       
 14021              number CDATA #FIXED "9"
       
 14022              length %Digits; #REQUIRED
       
 14023              pointer %Digits; #REQUIRED>
       
 14024 
       
 14025    <!ELEMENT record (hop)+>
       
 14026    <!ATTLIST record
       
 14027              copied CDATA #FIXED "0"
       
 14028              class  CDATA #FIXED "0"
       
 14029              number CDATA #FIXED "7"
       
 14030              length %Digits; #REQUIRED
       
 14031              pointer %Digits; #REQUIRED>
       
 14032 
       
 14033    <!ELEMENT stream EMPTY>
       
 14034    <!-- 0 <= id <= 65,535 -->
       
 14035    <!ATTLIST stream
       
 14036              copied CDATA #FIXED "1"
       
 14037              class  CDATA #FIXED "0"
       
 14038              number CDATA #FIXED "8"
       
 14039              length CDATA #FIXED "4"
       
 14040              id %Digits; #REQUIRED>
       
 14041 
       
 14042    <!ELEMENT timestamp (tstamp)+>
       
 14043    <!-- 0 <= oflw <=15 -->
       
 14044 
       
 14045 
       
 14046 
       
 14047 Kennedy                      Informational                     [Page 10]
       
 14048 
       
 14049 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 14050 
       
 14051 
       
 14052    <!ATTLIST timestamp
       
 14053              copied CDATA #FIXED "0"
       
 14054              class  CDATA #FIXED "2"
       
 14055              number CDATA #FIXED "4"
       
 14056              length %Digits;  #REQUIRED
       
 14057              pointer %Digits; #REQUIRED
       
 14058              oflw %Digits;    #REQUIRED
       
 14059              flag (0 | 1 | 3)  #REQUIRED>
       
 14060 
       
 14061    <!ELEMENT tstamp EMPTY>
       
 14062    <!ATTLIST tstamp
       
 14063              time %Digits;   #REQUIRED
       
 14064              address %IP4Addr; #IMPLIED>
       
 14065    <!--
       
 14066        padding to bring header to 32-bit boundary.
       
 14067        pad MUST be "0"*
       
 14068     -->
       
 14069    <!ELEMENT padding EMPTY>
       
 14070    <!ATTLIST padding
       
 14071              pad CDATA #REQUIRED>
       
 14072 
       
 14073    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
 14074         by section 2.1 of this RFC -->
       
 14075    <!ELEMENT payload (CDATA)>
       
 14076 
       
 14077 7.2.  TCPoXML DTD
       
 14078 
       
 14079    <!--
       
 14080       DTD for TCP over XML.
       
 14081       Refer to this DTD as:
       
 14082 
       
 14083       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 14084    -->
       
 14085 
       
 14086    <!-- the pseudoheader is only included for checksum calculations -->
       
 14087    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
 14088 
       
 14089    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
 14090                          reserved, control, window, checksum, urgent,
       
 14091                          tcp.options, padding)>
       
 14092 
       
 14093    <!ELEMENT src EMPTY>
       
 14094    <!-- 0 <= port <= 65,535 -->
       
 14095    <!ATTLIST src
       
 14096              port %Digits; #REQUIRED>
       
 14097 
       
 14098    <!ELEMENT dest EMPTY>
       
 14099    <!-- 0 <= port <= 65,535 -->
       
 14100 
       
 14101 
       
 14102 
       
 14103 Kennedy                      Informational                     [Page 11]
       
 14104 
       
 14105 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 14106 
       
 14107 
       
 14108    <!ATTLIST dest
       
 14109              port %Digits; #REQUIRED>
       
 14110 
       
 14111    <!ELEMENT sequence EMPTY>
       
 14112    <!-- 0 <= number <= 4294967295 -->
       
 14113    <!ATTLIST sequence
       
 14114              number %Digits; #REQUIRED>
       
 14115 
       
 14116    <!ELEMENT acknowledgement EMPTY>
       
 14117    <!-- 0 <= number <= 4294967295 -->
       
 14118    <!ATTLIST acknowledgement
       
 14119              number %Digits; #REQUIRED>
       
 14120 
       
 14121    <!ELEMENT offset EMPTY>
       
 14122    <!-- 0 <= number <= 255 -->
       
 14123    <!ATTLIST offset
       
 14124              number %Digits; #REQUIRED>
       
 14125 
       
 14126    <!ELEMENT reserved EMPTY>
       
 14127    <!ATTLIST reserved
       
 14128              value CDATA #FIXED "0">
       
 14129 
       
 14130    <!ELEMENT control EMPTY>
       
 14131    <!ATTLIST control
       
 14132              urg (0|1) #IMPLIED
       
 14133              ack (0|1) #IMPLIED
       
 14134              psh (0|1) #IMPLIED
       
 14135              rst (0|1) #IMPLIED
       
 14136              syn (0|1) #IMPLIED
       
 14137              fin (0|1) #IMPLIED>
       
 14138 
       
 14139    <!ELEMENT window EMPTY>
       
 14140    <!-- 0 <= size <= 65,535 -->
       
 14141    <!ATTLIST window
       
 14142              size %Digits; #REQUIRED>
       
 14143 
       
 14144    <!--
       
 14145       checksum as in ip, but with
       
 14146       the following pseudo-header added into the tcp element:
       
 14147      -->
       
 14148    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
 14149                                tcp.length)>
       
 14150 
       
 14151    <!--
       
 14152       tcp header + data length in octets. does not include the size of
       
 14153 
       
 14154       the pseudoheader.
       
 14155     -->
       
 14156 
       
 14157 
       
 14158 
       
 14159 Kennedy                      Informational                     [Page 12]
       
 14160 
       
 14161 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 14162 
       
 14163 
       
 14164    <!ELEMENT tcp.length EMPTY>
       
 14165    <!ATTLIST tcp.length
       
 14166              value %Digits; #REQUIRED>
       
 14167 
       
 14168    <!ELEMENT urgent EMPTY>
       
 14169    <!-- 0 <= pointer <= 65,535 -->
       
 14170    <!ATTLIST urgent
       
 14171              pointer %Digits; #REQUIRED>
       
 14172 
       
 14173    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
 14174 
       
 14175    <!ELEMENT tcp.end EMPTY>
       
 14176    <!ATTLIST tcp.end
       
 14177              kind CDATA #FIXED "0">
       
 14178 
       
 14179    <!ELEMENT tcp.noop EMPTY>
       
 14180    <!ATTLIST tcp.noop
       
 14181              kind CDATA #FIXED "1">
       
 14182 
       
 14183    <!ELEMENT tcp.mss EMPTY>
       
 14184    <!ATTLIST tcp.mss
       
 14185              kind CDATA #FIXED "2"
       
 14186              length CDATA #FIXED "4"
       
 14187              size %Digits; #REQUIRED>
       
 14188 
       
 14189 7.3.  UDPoXML DTD
       
 14190 
       
 14191    <!--
       
 14192       DTD for UDP over XML.
       
 14193       Refer to this DTD as:
       
 14194 
       
 14195       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 14196    -->
       
 14197 
       
 14198    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
 14199 
       
 14200    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
 14201 
       
 14202    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
 14203                                udp.length)>
       
 14204 
       
 14205    <!--
       
 14206       udp header + data length in octets. does not include the size of
       
 14207       the pseudoheader.
       
 14208     -->
       
 14209    <!ELEMENT udp.length EMPTY>
       
 14210    <!ATTLIST udp.length
       
 14211              value %Digits; #REQUIRED>
       
 14212 
       
 14213 
       
 14214 
       
 14215 Kennedy                      Informational                     [Page 13]
       
 14216 
       
 14217 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 14218 
       
 14219 
       
 14220 8. Security Considerations
       
 14221 
       
 14222    XML, as a subset of SGML, has the same security considerations as
       
 14223    specified in SGML Media Types [RFC1874].  Security considerations
       
 14224    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
 14225    not attempt to correct for issues not related to message format.
       
 14226 
       
 14227 9.   References
       
 14228 
       
 14229    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
 14230                February 2002. (Work in Progress)
       
 14231 
       
 14232    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
 14233                August 1980.
       
 14234 
       
 14235    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
 14236                September 1981.
       
 14237 
       
 14238    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
 14239                793, September 1981.
       
 14240 
       
 14241    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
 14242                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
 14243 
       
 14244    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
 14245                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
 14246                43, RFC 1042, February 1988.
       
 14247 
       
 14248    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
 14249                Application and Support", RFC 1123, October 1989.
       
 14250 
       
 14251    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
 14252                1995.
       
 14253 
       
 14254    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
 14255                October 1996.
       
 14256 
       
 14257    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
 14258                Extensions (MIME) Part One: Format of Internet Message
       
 14259                Bodies", RFC 2045, November 1996.
       
 14260 
       
 14261    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
 14262                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
 14263 
       
 14264    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
 14265                10646", RFC 2279, January 1998.
       
 14266 
       
 14267 
       
 14268 
       
 14269 
       
 14270 
       
 14271 Kennedy                      Informational                     [Page 14]
       
 14272 
       
 14273 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 14274 
       
 14275 
       
 14276    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
 14277                (IPv6) Specification", RFC 2460, December 1998.
       
 14278 
       
 14279    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
 14280                RFC 3080, March 2001.
       
 14281 
       
 14282    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
 14283                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
 14284                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
 14285                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
 14286 
       
 14287    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
 14288                Markup Language (XML)" World Wide Web Consortium
       
 14289                Recommendation REC- xml-19980210.
       
 14290                http://www.w3.org/TR/1998/REC-xml-19980210
       
 14291 
       
 14292 10.  Author's Address
       
 14293 
       
 14294    Hugh Kennedy
       
 14295    Mimezine
       
 14296    1060 West Addison
       
 14297    Chicago, IL 60613
       
 14298    USA
       
 14299 
       
 14300    EMail: kennedyh@engin.umich.edu
       
 14301 
       
 14302 
       
 14303 
       
 14304 
       
 14305 
       
 14306 
       
 14307 
       
 14308 
       
 14309 
       
 14310 
       
 14311 
       
 14312 
       
 14313 
       
 14314 
       
 14315 
       
 14316 
       
 14317 
       
 14318 
       
 14319 
       
 14320 
       
 14321 
       
 14322 
       
 14323 
       
 14324 
       
 14325 
       
 14326 
       
 14327 Kennedy                      Informational                     [Page 15]
       
 14328 
       
 14329 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 14330 
       
 14331 
       
 14332 11.  Full Copyright Statement
       
 14333 
       
 14334    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
 14335 
       
 14336    This document and translations of it may be copied and furnished to
       
 14337    others, and derivative works that comment on or otherwise explain it
       
 14338    or assist in its implementation may be prepared, copied, published
       
 14339    and distributed, in whole or in part, without restriction of any
       
 14340    kind, provided that the above copyright notice and this paragraph are
       
 14341    included on all such copies and derivative works.  However, this
       
 14342    document itself may not be modified in any way, such as by removing
       
 14343    the copyright notice or references to the Internet Society or other
       
 14344    Internet organizations, except as needed for the purpose of
       
 14345    developing Internet standards in which case the procedures for
       
 14346    copyrights defined in the Internet Standards process must be
       
 14347    followed, or as required to translate it into languages other than
       
 14348    English.
       
 14349 
       
 14350    The limited permissions granted above are perpetual and will not be
       
 14351    revoked by the Internet Society or its successors or assigns.
       
 14352 
       
 14353    This document and the information contained herein is provided on an
       
 14354    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
 14355    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
 14356    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
 14357    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
 14358    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
 14359 
       
 14360 Acknowledgement
       
 14361 
       
 14362    Funding for the RFC Editor function is currently provided by the
       
 14363    Internet Society.
       
 14364 
       
 14365 
       
 14366 
       
 14367 
       
 14368 
       
 14369 
       
 14370 
       
 14371 
       
 14372 
       
 14373 
       
 14374 
       
 14375 
       
 14376 
       
 14377 
       
 14378 
       
 14379 
       
 14380 
       
 14381 
       
 14382 
       
 14383 Kennedy                      Informational                     [Page 16]
       
 14384 
       
 14385 
       
 14386 
       
 14387 
       
 14388 
       
 14389 
       
 14390 
       
 14391 Network Working Group                                         H. Kennedy
       
 14392 Request for Comments: 3252                                      Mimezine
       
 14393 Category: Informational                                     1 April 2002
       
 14394 
       
 14395 
       
 14396                  Binary Lexical Octet Ad-hoc Transport
       
 14397 
       
 14398 Status of this Memo
       
 14399 
       
 14400    This memo provides information for the Internet community.  It does
       
 14401    not specify an Internet standard of any kind.  Distribution of this
       
 14402    memo is unlimited.
       
 14403 
       
 14404 Copyright Notice
       
 14405 
       
 14406    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
 14407 
       
 14408 Abstract
       
 14409 
       
 14410    This document defines a reformulation of IP and two transport layer
       
 14411    protocols (TCP and UDP) as XML applications.
       
 14412 
       
 14413 1.   Introduction
       
 14414 
       
 14415 1.1. Overview
       
 14416 
       
 14417    This document describes the Binary Lexical Octet Ad-hoc Transport
       
 14418    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
 14419    (IP [RFC791]), and two associated transport layer protocols (TCP
       
 14420    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
 14421    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
 14422    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
 14423    across the public Internet.
       
 14424 
       
 14425 1.2. Motivation
       
 14426 
       
 14427    The wild popularity of XML as a basis for application-level protocols
       
 14428    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
 14429    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
 14430    investigation into the possibility of extending the use of XML in the
       
 14431    protocol stack.  Using XML at both the transport and network layer in
       
 14432    addition to the application layer would provide for an amazing amount
       
 14433    of power and flexibility while removing dependencies on proprietary
       
 14434    and hard-to-understand binary protocols.  This protocol unification
       
 14435    would also allow applications to use a single XML parser for all
       
 14436    aspects of their operation, eliminating developer time spent figuring
       
 14437    out the intricacies of each new protocol, and moving the hard work of
       
 14438 
       
 14439 
       
 14440 
       
 14441 
       
 14442 Kennedy                      Informational                      [Page 1]
       
 14443 
       
 14444 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 14445 
       
 14446 
       
 14447    parsing to the XML toolset.  The use of XML also mitigates concerns
       
 14448    over "network vs. host" byte ordering which is at the root of many
       
 14449    network application bugs.
       
 14450 
       
 14451 1.3. Relation to Existing Protocols
       
 14452 
       
 14453    The reformulations specified in this RFC follow as closely as
       
 14454    possible the spirit of the RFCs on which they are based, and so MAY
       
 14455    contain elements or attributes that would not be needed in a pure
       
 14456    reworking (e.g. length attributes, which are implicit in XML.)
       
 14457 
       
 14458    The layering of network and transport protocols are maintained in
       
 14459    this RFC despite the optimizations that could be made if the line
       
 14460    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
 14461    element in the DTD) in order to foster future use of this protocol as
       
 14462    a basis for reformulating other protocols (such as ICMP.)
       
 14463 
       
 14464    Other than the encoding, the behavioral aspects of each of the
       
 14465    existing protocols remain unchanged.  Routing, address spaces, TCP
       
 14466    congestion control, etc. behave as specified in the extant standards.
       
 14467    Adapting to new standards and experimental algorithm heuristics for
       
 14468    improving performance will become much easier once the move to BLOAT
       
 14469    has been completed.
       
 14470 
       
 14471 1.4. Requirement Levels
       
 14472 
       
 14473    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
 14474    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
 14475    document are to be interpreted as described in BCP 14, RFC 2119
       
 14476    [RFC2119].
       
 14477 
       
 14478 2.   IPoXML
       
 14479 
       
 14480    This protocol MUST be implemented to be compliant with this RFC.
       
 14481    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
 14482    (section 3.) and higher-level application protocols.
       
 14483 
       
 14484    The DTD for this document type can be found in section 7.1.
       
 14485 
       
 14486    The routing of IPoXML can be easily implemented on hosts with an XML
       
 14487    parser, as the regular structure lends itself handily to parsing and
       
 14488    validation of the document/datagram and then processing the
       
 14489    destination address, TTL, and checksum before sending it on to its
       
 14490    next-hop.
       
 14491 
       
 14492    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
 14493    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
 14494    would have exceeded the 1500 byte Ethernet MTU.
       
 14495 
       
 14496 
       
 14497 
       
 14498 Kennedy                      Informational                      [Page 2]
       
 14499 
       
 14500 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 14501 
       
 14502 
       
 14503    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
 14504    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
 14505    formed and include the XMLDecl.
       
 14506 
       
 14507 2.1. IP Description
       
 14508 
       
 14509    A number of items have changed (for the better) from the original IP
       
 14510    specification.  Bit-masks, where present have been converted into
       
 14511    human-readable values.  IP addresses are listed in their dotted-
       
 14512    decimal notation [RFC1123].  Length and checksum values are present
       
 14513    as decimal integers.
       
 14514 
       
 14515    To calculate the length and checksum fields of the IP element, a
       
 14516    canonicalized form of the element MUST be used.  The canonical form
       
 14517    SHALL have no whitespace (including newline characters) between
       
 14518    elements and only one space character between attributes.  There
       
 14519    SHALL NOT be a space following the last attribute in an element.
       
 14520 
       
 14521    An iterative method SHOULD be used to calculate checksums, as the
       
 14522    length field will vary based on the size of the checksum.
       
 14523 
       
 14524    The payload element bears special attention.  Due to the character
       
 14525    set restrictions of XML, the payload of IP datagrams (which MAY
       
 14526    contain arbitrary data) MUST be encoded for transport. This RFC
       
 14527    REQUIRES the contents of the payload to be encoded in the base-64
       
 14528    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
 14529    encoded output MUST be wrapped on 76-character lines.
       
 14530 
       
 14531 
       
 14532 
       
 14533 
       
 14534 
       
 14535 
       
 14536 
       
 14537 
       
 14538 
       
 14539 
       
 14540 
       
 14541 
       
 14542 
       
 14543 
       
 14544 
       
 14545 
       
 14546 
       
 14547 
       
 14548 
       
 14549 
       
 14550 
       
 14551 
       
 14552 
       
 14553 
       
 14554 Kennedy                      Informational                      [Page 3]
       
 14555 
       
 14556 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 14557 
       
 14558 
       
 14559 2.2. Example Datagram
       
 14560 
       
 14561    The following is an example IPoXML datagram with an empty payload:
       
 14562 
       
 14563    <?xml version="1.0" encoding="UTF-8"?>
       
 14564    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 14565    <ip>
       
 14566    <header length="474">
       
 14567    <version value="4"/>
       
 14568    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
 14569         relibility="Normal" reserved="0"/>
       
 14570    <total.length value="461"/>
       
 14571    <id value="1"/>
       
 14572    <flags reserved="0" df="dont" mf="last"/>
       
 14573    <offset value="0"/>
       
 14574    <ttl value="255"/>
       
 14575    <protocol value="6"/>
       
 14576    <checksum value="8707"/>
       
 14577    <source address="10.0.0.22"/>
       
 14578    <destination address="10.0.0.1"/>
       
 14579    <options>
       
 14580    <end copied="0" class="0" number="0"/>
       
 14581    </options>
       
 14582    <padding pad="0"/>
       
 14583    </header>
       
 14584    <payload>
       
 14585    </payload>
       
 14586    </ip>
       
 14587 
       
 14588 3.   TCPoXML
       
 14589 
       
 14590    This protocol MUST be implemented to be compliant with this RFC.  The
       
 14591    DTD for this document type can be found in section 7.2.
       
 14592 
       
 14593 3.1. TCP Description
       
 14594 
       
 14595    A number of items have changed from the original TCP specification.
       
 14596    Bit-masks, where present have been converted into human-readable
       
 14597    values.  Length and checksum and port values are present as decimal
       
 14598    integers.
       
 14599 
       
 14600    To calculate the length and checksum fields of the TCP element, a
       
 14601    canonicalized form of the element MUST be used as in section 2.1.
       
 14602 
       
 14603    An iterative method SHOULD be used to calculate checksums as in
       
 14604    section 2.1.
       
 14605 
       
 14606    The payload element MUST be encoded as in section 2.1.
       
 14607 
       
 14608 
       
 14609 
       
 14610 Kennedy                      Informational                      [Page 4]
       
 14611 
       
 14612 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 14613 
       
 14614 
       
 14615    The TCP offset element was expanded to a maximum of 255 from 16 to
       
 14616    allow for the increased size of the header in XML.
       
 14617 
       
 14618    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 14619    as well as the <!DOCTYPE> declaration.
       
 14620 
       
 14621 3.2. Example Datagram
       
 14622 
       
 14623    The following is an example TCPoXML datagram with an empty payload:
       
 14624 
       
 14625    <?xml version="1.0" encoding="UTF-8"?>
       
 14626    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 14627    <tcp>
       
 14628    <tcp.header>
       
 14629    <src port="31415"/>
       
 14630    <dest port="42424"/>
       
 14631    <sequence number="322622954"/>
       
 14632    <acknowledgement number="689715995"/>
       
 14633    <offset number=""/>
       
 14634    <reserved value="0"/>
       
 14635    <control syn="1" ack="1"/>
       
 14636    <window size="1"/>
       
 14637    <urgent pointer="0"/>
       
 14638    <checksum value="2988"/>
       
 14639    <tcp.options>
       
 14640    <tcp.end kind="0"/>
       
 14641    </tcp.options>
       
 14642    <padding pad="0"/>
       
 14643    </tcp.header>
       
 14644    <payload>
       
 14645    </payload>
       
 14646    </tcp>
       
 14647 
       
 14648 4.   UDPoXML
       
 14649 
       
 14650    This protocol MUST be implemented to be compliant with this RFC.  The
       
 14651    DTD for this document type can be found in section 7.3.
       
 14652 
       
 14653 4.1. UDP Description
       
 14654 
       
 14655    A number of items have changed from the original UDP specification.
       
 14656    Bit-masks, where present have been converted into human-readable
       
 14657    values.  Length and checksum and port values are present as decimal
       
 14658    integers.
       
 14659 
       
 14660 
       
 14661 
       
 14662 
       
 14663 
       
 14664 
       
 14665 
       
 14666 Kennedy                      Informational                      [Page 5]
       
 14667 
       
 14668 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 14669 
       
 14670 
       
 14671    To calculate the length and checksum fields of the UDP element, a
       
 14672    canonicalized form of the element MUST be used as in section 2.1.  An
       
 14673    iterative method SHOULD be used to calculate checksums as in section
       
 14674    2.1.
       
 14675 
       
 14676    The payload element MUST be encoded as in section 2.1.
       
 14677 
       
 14678    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 14679    as well as the <!DOCTYPE> declaration.
       
 14680 
       
 14681 4.2. Example Datagram
       
 14682 
       
 14683    The following is an example UDPoXML datagram with an empty payload:
       
 14684 
       
 14685    <?xml version="1.0" encoding="UTF-8"?>
       
 14686    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 14687    <udp>
       
 14688    <udp.header>
       
 14689    <src port="31415"/>
       
 14690    <dest port="42424"/>
       
 14691    <udp.length value="143"/>
       
 14692    <checksum value="2988"/>
       
 14693    </udp.header>
       
 14694    <payload>
       
 14695    </payload>
       
 14696    </udp>
       
 14697 
       
 14698 5.   Network Transport
       
 14699 
       
 14700    This document provides for the transmission of BLOAT datagrams over
       
 14701    two common families of physical layer transport.  Future RFCs will
       
 14702    address additional transports as routing vendors catch up to the
       
 14703    specification, and we begin to see BLOAT routed across the Internet
       
 14704    backbone.
       
 14705 
       
 14706 5.1. Ethernet
       
 14707 
       
 14708    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
 14709    exception that the type field of the Ethernet frame MUST contain the
       
 14710    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
 14711    be 0x3c 3f 78 6d 6c ("<?xml".)
       
 14712 
       
 14713 5.2. IEEE 802
       
 14714 
       
 14715    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
 14716    that the protocol type code for IPoXML is 0xBEEF.
       
 14717 
       
 14718 
       
 14719 
       
 14720 
       
 14721 
       
 14722 Kennedy                      Informational                      [Page 6]
       
 14723 
       
 14724 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 14725 
       
 14726 
       
 14727 6. Gatewaying over IP
       
 14728 
       
 14729    In order to facilitate the gradual introduction of BLOAT into the
       
 14730    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
 14731    gateway between networks that run BLOAT natively on their LANs.
       
 14732 
       
 14733 7. DTDs
       
 14734 
       
 14735    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
 14736    Network DTD (7.1.)
       
 14737 
       
 14738    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
 14739    [XML]) although it is understood that most IPoXML implementations
       
 14740    will not need to pull down the DTD, as it will normally be embedded
       
 14741    in the implementation, and presents something of a catch-22 if you
       
 14742    need to load part of your network protocol over the network.
       
 14743 
       
 14744 7.1.  IPoXML DTD
       
 14745 
       
 14746    <!--
       
 14747     DTD for IP over XML.
       
 14748     Refer to this DTD as:
       
 14749 
       
 14750     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 14751    -->
       
 14752    <!--
       
 14753     DTD data types:
       
 14754 
       
 14755       Digits      [0..9]+
       
 14756 
       
 14757       Precedence  "NetworkControl | InternetworkControl |
       
 14758                    CRITIC | FlashOverride | Flash | Immediate |
       
 14759                    Priority | Routine"
       
 14760 
       
 14761       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
 14762 
       
 14763       Class       [0..3]
       
 14764 
       
 14765       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
 14766                     Restricted | Secret | Top Secret | Reserved"
       
 14767 
       
 14768       Compartments [0..65535]
       
 14769 
       
 14770       Handling     [0..65535]
       
 14771 
       
 14772       TCC          [0..16777216]
       
 14773 
       
 14774    -->
       
 14775 
       
 14776 
       
 14777 
       
 14778 Kennedy                      Informational                      [Page 7]
       
 14779 
       
 14780 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 14781 
       
 14782 
       
 14783    <!ENTITY % Digits "CDATA">
       
 14784    <!ENTITY % Precedence "CDATA">
       
 14785    <!ENTITY % IP4Addr "CDATA">
       
 14786    <!ENTITY % Class "CDATA">
       
 14787    <!ENTITY % Sec "CDATA">
       
 14788    <!ENTITY % Compartments "CDATA">
       
 14789    <!ENTITY % Handling "CDATA">
       
 14790    <!ENTITY % TCC "CDATA">
       
 14791 
       
 14792    <!ELEMENT ip (header, payload)>
       
 14793 
       
 14794    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
 14795                     protocol, checksum, source, destination, options,
       
 14796                     padding)>
       
 14797    <!-- length of header in 32-bit words -->
       
 14798    <!ATTLIST header
       
 14799              length %Digits; #REQUIRED>
       
 14800 
       
 14801    <!ELEMENT version EMPTY>
       
 14802    <!-- ip version. SHOULD be "4" -->
       
 14803    <!ATTLIST version
       
 14804              value   %Digits;  #REQUIRED>
       
 14805 
       
 14806    <!ELEMENT tos EMPTY>
       
 14807    <!ATTLIST tos
       
 14808              precedence   %Precedence;    #REQUIRED
       
 14809              delay    (normal | low)  #REQUIRED
       
 14810              throughput   (normal | high) #REQUIRED
       
 14811              relibility   (normal | high) #REQUIRED
       
 14812              reserved     CDATA #FIXED "0">
       
 14813 
       
 14814    <!ELEMENT total.length EMPTY>
       
 14815    <!--
       
 14816     total length of datagram (header and payload) in octets, MUST be
       
 14817     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
 14818     ethernets).
       
 14819    -->
       
 14820    <!ATTLIST total.length
       
 14821              value %Digits; #REQUIRED>
       
 14822 
       
 14823    <!ELEMENT id EMPTY>
       
 14824    <!-- 0 <= id <= 65,535  -->
       
 14825    <!ATTLIST id
       
 14826              value %Digits; #REQUIRED>
       
 14827 
       
 14828    <!ELEMENT flags EMPTY>
       
 14829    <!-- df = don't fragment, mf = more fragments  -->
       
 14830    <!ATTLIST flags
       
 14831 
       
 14832 
       
 14833 
       
 14834 Kennedy                      Informational                      [Page 8]
       
 14835 
       
 14836 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 14837 
       
 14838 
       
 14839           reserved CDATA  #FIXED "0"
       
 14840           df (may|dont)   #REQUIRED
       
 14841           mf (last|more)  #REQUIRED>
       
 14842 
       
 14843    <!ELEMENT offset EMPTY>
       
 14844    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
 14845    <!ATTLIST offset
       
 14846              value %Digits; #REQUIRED>
       
 14847 
       
 14848    <!ELEMENT ttl EMPTY>
       
 14849    <!-- 0 <= ttl <= 255 -->
       
 14850    <!ATTLIST ttl
       
 14851              value %Digits; #REQUIRED>
       
 14852 
       
 14853    <!ELEMENT protocol EMPTY>
       
 14854    <!-- 0 <= protocol <= 255 (per IANA) -->
       
 14855    <!ATTLIST protocol
       
 14856              value %Digits; #REQUIRED>
       
 14857 
       
 14858    <!ELEMENT checksum EMPTY>
       
 14859    <!-- 0 <= checksum <= 65535 (over header only) -->
       
 14860    <!ATTLIST checksum
       
 14861              value %Digits; #REQUIRED>
       
 14862 
       
 14863    <!ELEMENT source EMPTY>
       
 14864    <!ATTLIST source
       
 14865              address %IP4Addr; #REQUIRED>
       
 14866 
       
 14867    <!ELEMENT destination EMPTY>
       
 14868    <!ATTLIST destination
       
 14869              address %IP4Addr; #REQUIRED>
       
 14870 
       
 14871    <!ELEMENT options ( end | noop | security | loose | strict | record
       
 14872                      | stream | timestamp )*>
       
 14873 
       
 14874    <!ELEMENT end EMPTY>
       
 14875    <!ATTLIST end
       
 14876              copied (0|1) #REQUIRED
       
 14877              class  CDATA #FIXED "0"
       
 14878              number CDATA #FIXED "0">
       
 14879 
       
 14880    <!ELEMENT noop EMPTY>
       
 14881    <!ATTLIST noop
       
 14882              copied (0|1) #REQUIRED
       
 14883              class  CDATA #FIXED "0"
       
 14884              number CDATA #FIXED "1">
       
 14885 
       
 14886    <!ELEMENT security EMPTY>
       
 14887 
       
 14888 
       
 14889 
       
 14890 Kennedy                      Informational                      [Page 9]
       
 14891 
       
 14892 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 14893 
       
 14894 
       
 14895    <!ATTLIST security
       
 14896              copied CDATA #FIXED "1"
       
 14897              class  CDATA #FIXED "0"
       
 14898              number CDATA #FIXED "2"
       
 14899              length CDATA #FIXED "11"
       
 14900              security %Sec; #REQUIRED
       
 14901              compartments %Compartments; #REQUIRED
       
 14902              handling %Handling; #REQUIRED
       
 14903              tcc %TCC; #REQUIRED>
       
 14904    <!ELEMENT loose (hop)+>
       
 14905    <!ATTLIST loose
       
 14906              copied CDATA #FIXED "1"
       
 14907              class  CDATA #FIXED "0"
       
 14908              number CDATA #FIXED "3"
       
 14909              length %Digits; #REQUIRED
       
 14910              pointer %Digits; #REQUIRED>
       
 14911 
       
 14912    <!ELEMENT hop EMPTY>
       
 14913    <!ATTLIST hop
       
 14914              address %IP4Addr; #REQUIRED>
       
 14915 
       
 14916    <!ELEMENT strict (hop)+>
       
 14917    <!ATTLIST strict
       
 14918              copied CDATA #FIXED "1"
       
 14919              class  CDATA #FIXED "0"
       
 14920              number CDATA #FIXED "9"
       
 14921              length %Digits; #REQUIRED
       
 14922              pointer %Digits; #REQUIRED>
       
 14923 
       
 14924    <!ELEMENT record (hop)+>
       
 14925    <!ATTLIST record
       
 14926              copied CDATA #FIXED "0"
       
 14927              class  CDATA #FIXED "0"
       
 14928              number CDATA #FIXED "7"
       
 14929              length %Digits; #REQUIRED
       
 14930              pointer %Digits; #REQUIRED>
       
 14931 
       
 14932    <!ELEMENT stream EMPTY>
       
 14933    <!-- 0 <= id <= 65,535 -->
       
 14934    <!ATTLIST stream
       
 14935              copied CDATA #FIXED "1"
       
 14936              class  CDATA #FIXED "0"
       
 14937              number CDATA #FIXED "8"
       
 14938              length CDATA #FIXED "4"
       
 14939              id %Digits; #REQUIRED>
       
 14940 
       
 14941    <!ELEMENT timestamp (tstamp)+>
       
 14942    <!-- 0 <= oflw <=15 -->
       
 14943 
       
 14944 
       
 14945 
       
 14946 Kennedy                      Informational                     [Page 10]
       
 14947 
       
 14948 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 14949 
       
 14950 
       
 14951    <!ATTLIST timestamp
       
 14952              copied CDATA #FIXED "0"
       
 14953              class  CDATA #FIXED "2"
       
 14954              number CDATA #FIXED "4"
       
 14955              length %Digits;  #REQUIRED
       
 14956              pointer %Digits; #REQUIRED
       
 14957              oflw %Digits;    #REQUIRED
       
 14958              flag (0 | 1 | 3)  #REQUIRED>
       
 14959 
       
 14960    <!ELEMENT tstamp EMPTY>
       
 14961    <!ATTLIST tstamp
       
 14962              time %Digits;   #REQUIRED
       
 14963              address %IP4Addr; #IMPLIED>
       
 14964    <!--
       
 14965        padding to bring header to 32-bit boundary.
       
 14966        pad MUST be "0"*
       
 14967     -->
       
 14968    <!ELEMENT padding EMPTY>
       
 14969    <!ATTLIST padding
       
 14970              pad CDATA #REQUIRED>
       
 14971 
       
 14972    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
 14973         by section 2.1 of this RFC -->
       
 14974    <!ELEMENT payload (CDATA)>
       
 14975 
       
 14976 7.2.  TCPoXML DTD
       
 14977 
       
 14978    <!--
       
 14979       DTD for TCP over XML.
       
 14980       Refer to this DTD as:
       
 14981 
       
 14982       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 14983    -->
       
 14984 
       
 14985    <!-- the pseudoheader is only included for checksum calculations -->
       
 14986    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
 14987 
       
 14988    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
 14989                          reserved, control, window, checksum, urgent,
       
 14990                          tcp.options, padding)>
       
 14991 
       
 14992    <!ELEMENT src EMPTY>
       
 14993    <!-- 0 <= port <= 65,535 -->
       
 14994    <!ATTLIST src
       
 14995              port %Digits; #REQUIRED>
       
 14996 
       
 14997    <!ELEMENT dest EMPTY>
       
 14998    <!-- 0 <= port <= 65,535 -->
       
 14999 
       
 15000 
       
 15001 
       
 15002 Kennedy                      Informational                     [Page 11]
       
 15003 
       
 15004 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 15005 
       
 15006 
       
 15007    <!ATTLIST dest
       
 15008              port %Digits; #REQUIRED>
       
 15009 
       
 15010    <!ELEMENT sequence EMPTY>
       
 15011    <!-- 0 <= number <= 4294967295 -->
       
 15012    <!ATTLIST sequence
       
 15013              number %Digits; #REQUIRED>
       
 15014 
       
 15015    <!ELEMENT acknowledgement EMPTY>
       
 15016    <!-- 0 <= number <= 4294967295 -->
       
 15017    <!ATTLIST acknowledgement
       
 15018              number %Digits; #REQUIRED>
       
 15019 
       
 15020    <!ELEMENT offset EMPTY>
       
 15021    <!-- 0 <= number <= 255 -->
       
 15022    <!ATTLIST offset
       
 15023              number %Digits; #REQUIRED>
       
 15024 
       
 15025    <!ELEMENT reserved EMPTY>
       
 15026    <!ATTLIST reserved
       
 15027              value CDATA #FIXED "0">
       
 15028 
       
 15029    <!ELEMENT control EMPTY>
       
 15030    <!ATTLIST control
       
 15031              urg (0|1) #IMPLIED
       
 15032              ack (0|1) #IMPLIED
       
 15033              psh (0|1) #IMPLIED
       
 15034              rst (0|1) #IMPLIED
       
 15035              syn (0|1) #IMPLIED
       
 15036              fin (0|1) #IMPLIED>
       
 15037 
       
 15038    <!ELEMENT window EMPTY>
       
 15039    <!-- 0 <= size <= 65,535 -->
       
 15040    <!ATTLIST window
       
 15041              size %Digits; #REQUIRED>
       
 15042 
       
 15043    <!--
       
 15044       checksum as in ip, but with
       
 15045       the following pseudo-header added into the tcp element:
       
 15046      -->
       
 15047    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
 15048                                tcp.length)>
       
 15049 
       
 15050    <!--
       
 15051       tcp header + data length in octets. does not include the size of
       
 15052 
       
 15053       the pseudoheader.
       
 15054     -->
       
 15055 
       
 15056 
       
 15057 
       
 15058 Kennedy                      Informational                     [Page 12]
       
 15059 
       
 15060 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 15061 
       
 15062 
       
 15063    <!ELEMENT tcp.length EMPTY>
       
 15064    <!ATTLIST tcp.length
       
 15065              value %Digits; #REQUIRED>
       
 15066 
       
 15067    <!ELEMENT urgent EMPTY>
       
 15068    <!-- 0 <= pointer <= 65,535 -->
       
 15069    <!ATTLIST urgent
       
 15070              pointer %Digits; #REQUIRED>
       
 15071 
       
 15072    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
 15073 
       
 15074    <!ELEMENT tcp.end EMPTY>
       
 15075    <!ATTLIST tcp.end
       
 15076              kind CDATA #FIXED "0">
       
 15077 
       
 15078    <!ELEMENT tcp.noop EMPTY>
       
 15079    <!ATTLIST tcp.noop
       
 15080              kind CDATA #FIXED "1">
       
 15081 
       
 15082    <!ELEMENT tcp.mss EMPTY>
       
 15083    <!ATTLIST tcp.mss
       
 15084              kind CDATA #FIXED "2"
       
 15085              length CDATA #FIXED "4"
       
 15086              size %Digits; #REQUIRED>
       
 15087 
       
 15088 7.3.  UDPoXML DTD
       
 15089 
       
 15090    <!--
       
 15091       DTD for UDP over XML.
       
 15092       Refer to this DTD as:
       
 15093 
       
 15094       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 15095    -->
       
 15096 
       
 15097    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
 15098 
       
 15099    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
 15100 
       
 15101    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
 15102                                udp.length)>
       
 15103 
       
 15104    <!--
       
 15105       udp header + data length in octets. does not include the size of
       
 15106       the pseudoheader.
       
 15107     -->
       
 15108    <!ELEMENT udp.length EMPTY>
       
 15109    <!ATTLIST udp.length
       
 15110              value %Digits; #REQUIRED>
       
 15111 
       
 15112 
       
 15113 
       
 15114 Kennedy                      Informational                     [Page 13]
       
 15115 
       
 15116 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 15117 
       
 15118 
       
 15119 8. Security Considerations
       
 15120 
       
 15121    XML, as a subset of SGML, has the same security considerations as
       
 15122    specified in SGML Media Types [RFC1874].  Security considerations
       
 15123    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
 15124    not attempt to correct for issues not related to message format.
       
 15125 
       
 15126 9.   References
       
 15127 
       
 15128    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
 15129                February 2002. (Work in Progress)
       
 15130 
       
 15131    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
 15132                August 1980.
       
 15133 
       
 15134    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
 15135                September 1981.
       
 15136 
       
 15137    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
 15138                793, September 1981.
       
 15139 
       
 15140    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
 15141                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
 15142 
       
 15143    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
 15144                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
 15145                43, RFC 1042, February 1988.
       
 15146 
       
 15147    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
 15148                Application and Support", RFC 1123, October 1989.
       
 15149 
       
 15150    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
 15151                1995.
       
 15152 
       
 15153    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
 15154                October 1996.
       
 15155 
       
 15156    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
 15157                Extensions (MIME) Part One: Format of Internet Message
       
 15158                Bodies", RFC 2045, November 1996.
       
 15159 
       
 15160    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
 15161                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
 15162 
       
 15163    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
 15164                10646", RFC 2279, January 1998.
       
 15165 
       
 15166 
       
 15167 
       
 15168 
       
 15169 
       
 15170 Kennedy                      Informational                     [Page 14]
       
 15171 
       
 15172 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 15173 
       
 15174 
       
 15175    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
 15176                (IPv6) Specification", RFC 2460, December 1998.
       
 15177 
       
 15178    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
 15179                RFC 3080, March 2001.
       
 15180 
       
 15181    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
 15182                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
 15183                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
 15184                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
 15185 
       
 15186    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
 15187                Markup Language (XML)" World Wide Web Consortium
       
 15188                Recommendation REC- xml-19980210.
       
 15189                http://www.w3.org/TR/1998/REC-xml-19980210
       
 15190 
       
 15191 10.  Author's Address
       
 15192 
       
 15193    Hugh Kennedy
       
 15194    Mimezine
       
 15195    1060 West Addison
       
 15196    Chicago, IL 60613
       
 15197    USA
       
 15198 
       
 15199    EMail: kennedyh@engin.umich.edu
       
 15200 
       
 15201 
       
 15202 
       
 15203 
       
 15204 
       
 15205 
       
 15206 
       
 15207 
       
 15208 
       
 15209 
       
 15210 
       
 15211 
       
 15212 
       
 15213 
       
 15214 
       
 15215 
       
 15216 
       
 15217 
       
 15218 
       
 15219 
       
 15220 
       
 15221 
       
 15222 
       
 15223 
       
 15224 
       
 15225 
       
 15226 Kennedy                      Informational                     [Page 15]
       
 15227 
       
 15228 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 15229 
       
 15230 
       
 15231 11.  Full Copyright Statement
       
 15232 
       
 15233    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
 15234 
       
 15235    This document and translations of it may be copied and furnished to
       
 15236    others, and derivative works that comment on or otherwise explain it
       
 15237    or assist in its implementation may be prepared, copied, published
       
 15238    and distributed, in whole or in part, without restriction of any
       
 15239    kind, provided that the above copyright notice and this paragraph are
       
 15240    included on all such copies and derivative works.  However, this
       
 15241    document itself may not be modified in any way, such as by removing
       
 15242    the copyright notice or references to the Internet Society or other
       
 15243    Internet organizations, except as needed for the purpose of
       
 15244    developing Internet standards in which case the procedures for
       
 15245    copyrights defined in the Internet Standards process must be
       
 15246    followed, or as required to translate it into languages other than
       
 15247    English.
       
 15248 
       
 15249    The limited permissions granted above are perpetual and will not be
       
 15250    revoked by the Internet Society or its successors or assigns.
       
 15251 
       
 15252    This document and the information contained herein is provided on an
       
 15253    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
 15254    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
 15255    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
 15256    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
 15257    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
 15258 
       
 15259 Acknowledgement
       
 15260 
       
 15261    Funding for the RFC Editor function is currently provided by the
       
 15262    Internet Society.
       
 15263 
       
 15264 
       
 15265 
       
 15266 
       
 15267 
       
 15268 
       
 15269 
       
 15270 
       
 15271 
       
 15272 
       
 15273 
       
 15274 
       
 15275 
       
 15276 
       
 15277 
       
 15278 
       
 15279 
       
 15280 
       
 15281 
       
 15282 Kennedy                      Informational                     [Page 16]
       
 15283 
       
 15284 
       
 15285 
       
 15286 
       
 15287 
       
 15288 
       
 15289 
       
 15290 Network Working Group                                         H. Kennedy
       
 15291 Request for Comments: 3252                                      Mimezine
       
 15292 Category: Informational                                     1 April 2002
       
 15293 
       
 15294 
       
 15295                  Binary Lexical Octet Ad-hoc Transport
       
 15296 
       
 15297 Status of this Memo
       
 15298 
       
 15299    This memo provides information for the Internet community.  It does
       
 15300    not specify an Internet standard of any kind.  Distribution of this
       
 15301    memo is unlimited.
       
 15302 
       
 15303 Copyright Notice
       
 15304 
       
 15305    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
 15306 
       
 15307 Abstract
       
 15308 
       
 15309    This document defines a reformulation of IP and two transport layer
       
 15310    protocols (TCP and UDP) as XML applications.
       
 15311 
       
 15312 1.   Introduction
       
 15313 
       
 15314 1.1. Overview
       
 15315 
       
 15316    This document describes the Binary Lexical Octet Ad-hoc Transport
       
 15317    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
 15318    (IP [RFC791]), and two associated transport layer protocols (TCP
       
 15319    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
 15320    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
 15321    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
 15322    across the public Internet.
       
 15323 
       
 15324 1.2. Motivation
       
 15325 
       
 15326    The wild popularity of XML as a basis for application-level protocols
       
 15327    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
 15328    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
 15329    investigation into the possibility of extending the use of XML in the
       
 15330    protocol stack.  Using XML at both the transport and network layer in
       
 15331    addition to the application layer would provide for an amazing amount
       
 15332    of power and flexibility while removing dependencies on proprietary
       
 15333    and hard-to-understand binary protocols.  This protocol unification
       
 15334    would also allow applications to use a single XML parser for all
       
 15335    aspects of their operation, eliminating developer time spent figuring
       
 15336    out the intricacies of each new protocol, and moving the hard work of
       
 15337 
       
 15338 
       
 15339 
       
 15340 
       
 15341 Kennedy                      Informational                      [Page 1]
       
 15342 
       
 15343 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 15344 
       
 15345 
       
 15346    parsing to the XML toolset.  The use of XML also mitigates concerns
       
 15347    over "network vs. host" byte ordering which is at the root of many
       
 15348    network application bugs.
       
 15349 
       
 15350 1.3. Relation to Existing Protocols
       
 15351 
       
 15352    The reformulations specified in this RFC follow as closely as
       
 15353    possible the spirit of the RFCs on which they are based, and so MAY
       
 15354    contain elements or attributes that would not be needed in a pure
       
 15355    reworking (e.g. length attributes, which are implicit in XML.)
       
 15356 
       
 15357    The layering of network and transport protocols are maintained in
       
 15358    this RFC despite the optimizations that could be made if the line
       
 15359    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
 15360    element in the DTD) in order to foster future use of this protocol as
       
 15361    a basis for reformulating other protocols (such as ICMP.)
       
 15362 
       
 15363    Other than the encoding, the behavioral aspects of each of the
       
 15364    existing protocols remain unchanged.  Routing, address spaces, TCP
       
 15365    congestion control, etc. behave as specified in the extant standards.
       
 15366    Adapting to new standards and experimental algorithm heuristics for
       
 15367    improving performance will become much easier once the move to BLOAT
       
 15368    has been completed.
       
 15369 
       
 15370 1.4. Requirement Levels
       
 15371 
       
 15372    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
 15373    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
 15374    document are to be interpreted as described in BCP 14, RFC 2119
       
 15375    [RFC2119].
       
 15376 
       
 15377 2.   IPoXML
       
 15378 
       
 15379    This protocol MUST be implemented to be compliant with this RFC.
       
 15380    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
 15381    (section 3.) and higher-level application protocols.
       
 15382 
       
 15383    The DTD for this document type can be found in section 7.1.
       
 15384 
       
 15385    The routing of IPoXML can be easily implemented on hosts with an XML
       
 15386    parser, as the regular structure lends itself handily to parsing and
       
 15387    validation of the document/datagram and then processing the
       
 15388    destination address, TTL, and checksum before sending it on to its
       
 15389    next-hop.
       
 15390 
       
 15391    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
 15392    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
 15393    would have exceeded the 1500 byte Ethernet MTU.
       
 15394 
       
 15395 
       
 15396 
       
 15397 Kennedy                      Informational                      [Page 2]
       
 15398 
       
 15399 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 15400 
       
 15401 
       
 15402    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
 15403    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
 15404    formed and include the XMLDecl.
       
 15405 
       
 15406 2.1. IP Description
       
 15407 
       
 15408    A number of items have changed (for the better) from the original IP
       
 15409    specification.  Bit-masks, where present have been converted into
       
 15410    human-readable values.  IP addresses are listed in their dotted-
       
 15411    decimal notation [RFC1123].  Length and checksum values are present
       
 15412    as decimal integers.
       
 15413 
       
 15414    To calculate the length and checksum fields of the IP element, a
       
 15415    canonicalized form of the element MUST be used.  The canonical form
       
 15416    SHALL have no whitespace (including newline characters) between
       
 15417    elements and only one space character between attributes.  There
       
 15418    SHALL NOT be a space following the last attribute in an element.
       
 15419 
       
 15420    An iterative method SHOULD be used to calculate checksums, as the
       
 15421    length field will vary based on the size of the checksum.
       
 15422 
       
 15423    The payload element bears special attention.  Due to the character
       
 15424    set restrictions of XML, the payload of IP datagrams (which MAY
       
 15425    contain arbitrary data) MUST be encoded for transport. This RFC
       
 15426    REQUIRES the contents of the payload to be encoded in the base-64
       
 15427    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
 15428    encoded output MUST be wrapped on 76-character lines.
       
 15429 
       
 15430 
       
 15431 
       
 15432 
       
 15433 
       
 15434 
       
 15435 
       
 15436 
       
 15437 
       
 15438 
       
 15439 
       
 15440 
       
 15441 
       
 15442 
       
 15443 
       
 15444 
       
 15445 
       
 15446 
       
 15447 
       
 15448 
       
 15449 
       
 15450 
       
 15451 
       
 15452 
       
 15453 Kennedy                      Informational                      [Page 3]
       
 15454 
       
 15455 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 15456 
       
 15457 
       
 15458 2.2. Example Datagram
       
 15459 
       
 15460    The following is an example IPoXML datagram with an empty payload:
       
 15461 
       
 15462    <?xml version="1.0" encoding="UTF-8"?>
       
 15463    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 15464    <ip>
       
 15465    <header length="474">
       
 15466    <version value="4"/>
       
 15467    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
 15468         relibility="Normal" reserved="0"/>
       
 15469    <total.length value="461"/>
       
 15470    <id value="1"/>
       
 15471    <flags reserved="0" df="dont" mf="last"/>
       
 15472    <offset value="0"/>
       
 15473    <ttl value="255"/>
       
 15474    <protocol value="6"/>
       
 15475    <checksum value="8707"/>
       
 15476    <source address="10.0.0.22"/>
       
 15477    <destination address="10.0.0.1"/>
       
 15478    <options>
       
 15479    <end copied="0" class="0" number="0"/>
       
 15480    </options>
       
 15481    <padding pad="0"/>
       
 15482    </header>
       
 15483    <payload>
       
 15484    </payload>
       
 15485    </ip>
       
 15486 
       
 15487 3.   TCPoXML
       
 15488 
       
 15489    This protocol MUST be implemented to be compliant with this RFC.  The
       
 15490    DTD for this document type can be found in section 7.2.
       
 15491 
       
 15492 3.1. TCP Description
       
 15493 
       
 15494    A number of items have changed from the original TCP specification.
       
 15495    Bit-masks, where present have been converted into human-readable
       
 15496    values.  Length and checksum and port values are present as decimal
       
 15497    integers.
       
 15498 
       
 15499    To calculate the length and checksum fields of the TCP element, a
       
 15500    canonicalized form of the element MUST be used as in section 2.1.
       
 15501 
       
 15502    An iterative method SHOULD be used to calculate checksums as in
       
 15503    section 2.1.
       
 15504 
       
 15505    The payload element MUST be encoded as in section 2.1.
       
 15506 
       
 15507 
       
 15508 
       
 15509 Kennedy                      Informational                      [Page 4]
       
 15510 
       
 15511 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 15512 
       
 15513 
       
 15514    The TCP offset element was expanded to a maximum of 255 from 16 to
       
 15515    allow for the increased size of the header in XML.
       
 15516 
       
 15517    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 15518    as well as the <!DOCTYPE> declaration.
       
 15519 
       
 15520 3.2. Example Datagram
       
 15521 
       
 15522    The following is an example TCPoXML datagram with an empty payload:
       
 15523 
       
 15524    <?xml version="1.0" encoding="UTF-8"?>
       
 15525    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 15526    <tcp>
       
 15527    <tcp.header>
       
 15528    <src port="31415"/>
       
 15529    <dest port="42424"/>
       
 15530    <sequence number="322622954"/>
       
 15531    <acknowledgement number="689715995"/>
       
 15532    <offset number=""/>
       
 15533    <reserved value="0"/>
       
 15534    <control syn="1" ack="1"/>
       
 15535    <window size="1"/>
       
 15536    <urgent pointer="0"/>
       
 15537    <checksum value="2988"/>
       
 15538    <tcp.options>
       
 15539    <tcp.end kind="0"/>
       
 15540    </tcp.options>
       
 15541    <padding pad="0"/>
       
 15542    </tcp.header>
       
 15543    <payload>
       
 15544    </payload>
       
 15545    </tcp>
       
 15546 
       
 15547 4.   UDPoXML
       
 15548 
       
 15549    This protocol MUST be implemented to be compliant with this RFC.  The
       
 15550    DTD for this document type can be found in section 7.3.
       
 15551 
       
 15552 4.1. UDP Description
       
 15553 
       
 15554    A number of items have changed from the original UDP specification.
       
 15555    Bit-masks, where present have been converted into human-readable
       
 15556    values.  Length and checksum and port values are present as decimal
       
 15557    integers.
       
 15558 
       
 15559 
       
 15560 
       
 15561 
       
 15562 
       
 15563 
       
 15564 
       
 15565 Kennedy                      Informational                      [Page 5]
       
 15566 
       
 15567 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 15568 
       
 15569 
       
 15570    To calculate the length and checksum fields of the UDP element, a
       
 15571    canonicalized form of the element MUST be used as in section 2.1.  An
       
 15572    iterative method SHOULD be used to calculate checksums as in section
       
 15573    2.1.
       
 15574 
       
 15575    The payload element MUST be encoded as in section 2.1.
       
 15576 
       
 15577    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 15578    as well as the <!DOCTYPE> declaration.
       
 15579 
       
 15580 4.2. Example Datagram
       
 15581 
       
 15582    The following is an example UDPoXML datagram with an empty payload:
       
 15583 
       
 15584    <?xml version="1.0" encoding="UTF-8"?>
       
 15585    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 15586    <udp>
       
 15587    <udp.header>
       
 15588    <src port="31415"/>
       
 15589    <dest port="42424"/>
       
 15590    <udp.length value="143"/>
       
 15591    <checksum value="2988"/>
       
 15592    </udp.header>
       
 15593    <payload>
       
 15594    </payload>
       
 15595    </udp>
       
 15596 
       
 15597 5.   Network Transport
       
 15598 
       
 15599    This document provides for the transmission of BLOAT datagrams over
       
 15600    two common families of physical layer transport.  Future RFCs will
       
 15601    address additional transports as routing vendors catch up to the
       
 15602    specification, and we begin to see BLOAT routed across the Internet
       
 15603    backbone.
       
 15604 
       
 15605 5.1. Ethernet
       
 15606 
       
 15607    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
 15608    exception that the type field of the Ethernet frame MUST contain the
       
 15609    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
 15610    be 0x3c 3f 78 6d 6c ("<?xml".)
       
 15611 
       
 15612 5.2. IEEE 802
       
 15613 
       
 15614    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
 15615    that the protocol type code for IPoXML is 0xBEEF.
       
 15616 
       
 15617 
       
 15618 
       
 15619 
       
 15620 
       
 15621 Kennedy                      Informational                      [Page 6]
       
 15622 
       
 15623 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 15624 
       
 15625 
       
 15626 6. Gatewaying over IP
       
 15627 
       
 15628    In order to facilitate the gradual introduction of BLOAT into the
       
 15629    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
 15630    gateway between networks that run BLOAT natively on their LANs.
       
 15631 
       
 15632 7. DTDs
       
 15633 
       
 15634    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
 15635    Network DTD (7.1.)
       
 15636 
       
 15637    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
 15638    [XML]) although it is understood that most IPoXML implementations
       
 15639    will not need to pull down the DTD, as it will normally be embedded
       
 15640    in the implementation, and presents something of a catch-22 if you
       
 15641    need to load part of your network protocol over the network.
       
 15642 
       
 15643 7.1.  IPoXML DTD
       
 15644 
       
 15645    <!--
       
 15646     DTD for IP over XML.
       
 15647     Refer to this DTD as:
       
 15648 
       
 15649     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 15650    -->
       
 15651    <!--
       
 15652     DTD data types:
       
 15653 
       
 15654       Digits      [0..9]+
       
 15655 
       
 15656       Precedence  "NetworkControl | InternetworkControl |
       
 15657                    CRITIC | FlashOverride | Flash | Immediate |
       
 15658                    Priority | Routine"
       
 15659 
       
 15660       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
 15661 
       
 15662       Class       [0..3]
       
 15663 
       
 15664       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
 15665                     Restricted | Secret | Top Secret | Reserved"
       
 15666 
       
 15667       Compartments [0..65535]
       
 15668 
       
 15669       Handling     [0..65535]
       
 15670 
       
 15671       TCC          [0..16777216]
       
 15672 
       
 15673    -->
       
 15674 
       
 15675 
       
 15676 
       
 15677 Kennedy                      Informational                      [Page 7]
       
 15678 
       
 15679 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 15680 
       
 15681 
       
 15682    <!ENTITY % Digits "CDATA">
       
 15683    <!ENTITY % Precedence "CDATA">
       
 15684    <!ENTITY % IP4Addr "CDATA">
       
 15685    <!ENTITY % Class "CDATA">
       
 15686    <!ENTITY % Sec "CDATA">
       
 15687    <!ENTITY % Compartments "CDATA">
       
 15688    <!ENTITY % Handling "CDATA">
       
 15689    <!ENTITY % TCC "CDATA">
       
 15690 
       
 15691    <!ELEMENT ip (header, payload)>
       
 15692 
       
 15693    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
 15694                     protocol, checksum, source, destination, options,
       
 15695                     padding)>
       
 15696    <!-- length of header in 32-bit words -->
       
 15697    <!ATTLIST header
       
 15698              length %Digits; #REQUIRED>
       
 15699 
       
 15700    <!ELEMENT version EMPTY>
       
 15701    <!-- ip version. SHOULD be "4" -->
       
 15702    <!ATTLIST version
       
 15703              value   %Digits;  #REQUIRED>
       
 15704 
       
 15705    <!ELEMENT tos EMPTY>
       
 15706    <!ATTLIST tos
       
 15707              precedence   %Precedence;    #REQUIRED
       
 15708              delay    (normal | low)  #REQUIRED
       
 15709              throughput   (normal | high) #REQUIRED
       
 15710              relibility   (normal | high) #REQUIRED
       
 15711              reserved     CDATA #FIXED "0">
       
 15712 
       
 15713    <!ELEMENT total.length EMPTY>
       
 15714    <!--
       
 15715     total length of datagram (header and payload) in octets, MUST be
       
 15716     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
 15717     ethernets).
       
 15718    -->
       
 15719    <!ATTLIST total.length
       
 15720              value %Digits; #REQUIRED>
       
 15721 
       
 15722    <!ELEMENT id EMPTY>
       
 15723    <!-- 0 <= id <= 65,535  -->
       
 15724    <!ATTLIST id
       
 15725              value %Digits; #REQUIRED>
       
 15726 
       
 15727    <!ELEMENT flags EMPTY>
       
 15728    <!-- df = don't fragment, mf = more fragments  -->
       
 15729    <!ATTLIST flags
       
 15730 
       
 15731 
       
 15732 
       
 15733 Kennedy                      Informational                      [Page 8]
       
 15734 
       
 15735 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 15736 
       
 15737 
       
 15738           reserved CDATA  #FIXED "0"
       
 15739           df (may|dont)   #REQUIRED
       
 15740           mf (last|more)  #REQUIRED>
       
 15741 
       
 15742    <!ELEMENT offset EMPTY>
       
 15743    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
 15744    <!ATTLIST offset
       
 15745              value %Digits; #REQUIRED>
       
 15746 
       
 15747    <!ELEMENT ttl EMPTY>
       
 15748    <!-- 0 <= ttl <= 255 -->
       
 15749    <!ATTLIST ttl
       
 15750              value %Digits; #REQUIRED>
       
 15751 
       
 15752    <!ELEMENT protocol EMPTY>
       
 15753    <!-- 0 <= protocol <= 255 (per IANA) -->
       
 15754    <!ATTLIST protocol
       
 15755              value %Digits; #REQUIRED>
       
 15756 
       
 15757    <!ELEMENT checksum EMPTY>
       
 15758    <!-- 0 <= checksum <= 65535 (over header only) -->
       
 15759    <!ATTLIST checksum
       
 15760              value %Digits; #REQUIRED>
       
 15761 
       
 15762    <!ELEMENT source EMPTY>
       
 15763    <!ATTLIST source
       
 15764              address %IP4Addr; #REQUIRED>
       
 15765 
       
 15766    <!ELEMENT destination EMPTY>
       
 15767    <!ATTLIST destination
       
 15768              address %IP4Addr; #REQUIRED>
       
 15769 
       
 15770    <!ELEMENT options ( end | noop | security | loose | strict | record
       
 15771                      | stream | timestamp )*>
       
 15772 
       
 15773    <!ELEMENT end EMPTY>
       
 15774    <!ATTLIST end
       
 15775              copied (0|1) #REQUIRED
       
 15776              class  CDATA #FIXED "0"
       
 15777              number CDATA #FIXED "0">
       
 15778 
       
 15779    <!ELEMENT noop EMPTY>
       
 15780    <!ATTLIST noop
       
 15781              copied (0|1) #REQUIRED
       
 15782              class  CDATA #FIXED "0"
       
 15783              number CDATA #FIXED "1">
       
 15784 
       
 15785    <!ELEMENT security EMPTY>
       
 15786 
       
 15787 
       
 15788 
       
 15789 Kennedy                      Informational                      [Page 9]
       
 15790 
       
 15791 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 15792 
       
 15793 
       
 15794    <!ATTLIST security
       
 15795              copied CDATA #FIXED "1"
       
 15796              class  CDATA #FIXED "0"
       
 15797              number CDATA #FIXED "2"
       
 15798              length CDATA #FIXED "11"
       
 15799              security %Sec; #REQUIRED
       
 15800              compartments %Compartments; #REQUIRED
       
 15801              handling %Handling; #REQUIRED
       
 15802              tcc %TCC; #REQUIRED>
       
 15803    <!ELEMENT loose (hop)+>
       
 15804    <!ATTLIST loose
       
 15805              copied CDATA #FIXED "1"
       
 15806              class  CDATA #FIXED "0"
       
 15807              number CDATA #FIXED "3"
       
 15808              length %Digits; #REQUIRED
       
 15809              pointer %Digits; #REQUIRED>
       
 15810 
       
 15811    <!ELEMENT hop EMPTY>
       
 15812    <!ATTLIST hop
       
 15813              address %IP4Addr; #REQUIRED>
       
 15814 
       
 15815    <!ELEMENT strict (hop)+>
       
 15816    <!ATTLIST strict
       
 15817              copied CDATA #FIXED "1"
       
 15818              class  CDATA #FIXED "0"
       
 15819              number CDATA #FIXED "9"
       
 15820              length %Digits; #REQUIRED
       
 15821              pointer %Digits; #REQUIRED>
       
 15822 
       
 15823    <!ELEMENT record (hop)+>
       
 15824    <!ATTLIST record
       
 15825              copied CDATA #FIXED "0"
       
 15826              class  CDATA #FIXED "0"
       
 15827              number CDATA #FIXED "7"
       
 15828              length %Digits; #REQUIRED
       
 15829              pointer %Digits; #REQUIRED>
       
 15830 
       
 15831    <!ELEMENT stream EMPTY>
       
 15832    <!-- 0 <= id <= 65,535 -->
       
 15833    <!ATTLIST stream
       
 15834              copied CDATA #FIXED "1"
       
 15835              class  CDATA #FIXED "0"
       
 15836              number CDATA #FIXED "8"
       
 15837              length CDATA #FIXED "4"
       
 15838              id %Digits; #REQUIRED>
       
 15839 
       
 15840    <!ELEMENT timestamp (tstamp)+>
       
 15841    <!-- 0 <= oflw <=15 -->
       
 15842 
       
 15843 
       
 15844 
       
 15845 Kennedy                      Informational                     [Page 10]
       
 15846 
       
 15847 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 15848 
       
 15849 
       
 15850    <!ATTLIST timestamp
       
 15851              copied CDATA #FIXED "0"
       
 15852              class  CDATA #FIXED "2"
       
 15853              number CDATA #FIXED "4"
       
 15854              length %Digits;  #REQUIRED
       
 15855              pointer %Digits; #REQUIRED
       
 15856              oflw %Digits;    #REQUIRED
       
 15857              flag (0 | 1 | 3)  #REQUIRED>
       
 15858 
       
 15859    <!ELEMENT tstamp EMPTY>
       
 15860    <!ATTLIST tstamp
       
 15861              time %Digits;   #REQUIRED
       
 15862              address %IP4Addr; #IMPLIED>
       
 15863    <!--
       
 15864        padding to bring header to 32-bit boundary.
       
 15865        pad MUST be "0"*
       
 15866     -->
       
 15867    <!ELEMENT padding EMPTY>
       
 15868    <!ATTLIST padding
       
 15869              pad CDATA #REQUIRED>
       
 15870 
       
 15871    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
 15872         by section 2.1 of this RFC -->
       
 15873    <!ELEMENT payload (CDATA)>
       
 15874 
       
 15875 7.2.  TCPoXML DTD
       
 15876 
       
 15877    <!--
       
 15878       DTD for TCP over XML.
       
 15879       Refer to this DTD as:
       
 15880 
       
 15881       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 15882    -->
       
 15883 
       
 15884    <!-- the pseudoheader is only included for checksum calculations -->
       
 15885    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
 15886 
       
 15887    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
 15888                          reserved, control, window, checksum, urgent,
       
 15889                          tcp.options, padding)>
       
 15890 
       
 15891    <!ELEMENT src EMPTY>
       
 15892    <!-- 0 <= port <= 65,535 -->
       
 15893    <!ATTLIST src
       
 15894              port %Digits; #REQUIRED>
       
 15895 
       
 15896    <!ELEMENT dest EMPTY>
       
 15897    <!-- 0 <= port <= 65,535 -->
       
 15898 
       
 15899 
       
 15900 
       
 15901 Kennedy                      Informational                     [Page 11]
       
 15902 
       
 15903 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 15904 
       
 15905 
       
 15906    <!ATTLIST dest
       
 15907              port %Digits; #REQUIRED>
       
 15908 
       
 15909    <!ELEMENT sequence EMPTY>
       
 15910    <!-- 0 <= number <= 4294967295 -->
       
 15911    <!ATTLIST sequence
       
 15912              number %Digits; #REQUIRED>
       
 15913 
       
 15914    <!ELEMENT acknowledgement EMPTY>
       
 15915    <!-- 0 <= number <= 4294967295 -->
       
 15916    <!ATTLIST acknowledgement
       
 15917              number %Digits; #REQUIRED>
       
 15918 
       
 15919    <!ELEMENT offset EMPTY>
       
 15920    <!-- 0 <= number <= 255 -->
       
 15921    <!ATTLIST offset
       
 15922              number %Digits; #REQUIRED>
       
 15923 
       
 15924    <!ELEMENT reserved EMPTY>
       
 15925    <!ATTLIST reserved
       
 15926              value CDATA #FIXED "0">
       
 15927 
       
 15928    <!ELEMENT control EMPTY>
       
 15929    <!ATTLIST control
       
 15930              urg (0|1) #IMPLIED
       
 15931              ack (0|1) #IMPLIED
       
 15932              psh (0|1) #IMPLIED
       
 15933              rst (0|1) #IMPLIED
       
 15934              syn (0|1) #IMPLIED
       
 15935              fin (0|1) #IMPLIED>
       
 15936 
       
 15937    <!ELEMENT window EMPTY>
       
 15938    <!-- 0 <= size <= 65,535 -->
       
 15939    <!ATTLIST window
       
 15940              size %Digits; #REQUIRED>
       
 15941 
       
 15942    <!--
       
 15943       checksum as in ip, but with
       
 15944       the following pseudo-header added into the tcp element:
       
 15945      -->
       
 15946    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
 15947                                tcp.length)>
       
 15948 
       
 15949    <!--
       
 15950       tcp header + data length in octets. does not include the size of
       
 15951 
       
 15952       the pseudoheader.
       
 15953     -->
       
 15954 
       
 15955 
       
 15956 
       
 15957 Kennedy                      Informational                     [Page 12]
       
 15958 
       
 15959 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 15960 
       
 15961 
       
 15962    <!ELEMENT tcp.length EMPTY>
       
 15963    <!ATTLIST tcp.length
       
 15964              value %Digits; #REQUIRED>
       
 15965 
       
 15966    <!ELEMENT urgent EMPTY>
       
 15967    <!-- 0 <= pointer <= 65,535 -->
       
 15968    <!ATTLIST urgent
       
 15969              pointer %Digits; #REQUIRED>
       
 15970 
       
 15971    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
 15972 
       
 15973    <!ELEMENT tcp.end EMPTY>
       
 15974    <!ATTLIST tcp.end
       
 15975              kind CDATA #FIXED "0">
       
 15976 
       
 15977    <!ELEMENT tcp.noop EMPTY>
       
 15978    <!ATTLIST tcp.noop
       
 15979              kind CDATA #FIXED "1">
       
 15980 
       
 15981    <!ELEMENT tcp.mss EMPTY>
       
 15982    <!ATTLIST tcp.mss
       
 15983              kind CDATA #FIXED "2"
       
 15984              length CDATA #FIXED "4"
       
 15985              size %Digits; #REQUIRED>
       
 15986 
       
 15987 7.3.  UDPoXML DTD
       
 15988 
       
 15989    <!--
       
 15990       DTD for UDP over XML.
       
 15991       Refer to this DTD as:
       
 15992 
       
 15993       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 15994    -->
       
 15995 
       
 15996    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
 15997 
       
 15998    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
 15999 
       
 16000    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
 16001                                udp.length)>
       
 16002 
       
 16003    <!--
       
 16004       udp header + data length in octets. does not include the size of
       
 16005       the pseudoheader.
       
 16006     -->
       
 16007    <!ELEMENT udp.length EMPTY>
       
 16008    <!ATTLIST udp.length
       
 16009              value %Digits; #REQUIRED>
       
 16010 
       
 16011 
       
 16012 
       
 16013 Kennedy                      Informational                     [Page 13]
       
 16014 
       
 16015 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 16016 
       
 16017 
       
 16018 8. Security Considerations
       
 16019 
       
 16020    XML, as a subset of SGML, has the same security considerations as
       
 16021    specified in SGML Media Types [RFC1874].  Security considerations
       
 16022    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
 16023    not attempt to correct for issues not related to message format.
       
 16024 
       
 16025 9.   References
       
 16026 
       
 16027    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
 16028                February 2002. (Work in Progress)
       
 16029 
       
 16030    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
 16031                August 1980.
       
 16032 
       
 16033    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
 16034                September 1981.
       
 16035 
       
 16036    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
 16037                793, September 1981.
       
 16038 
       
 16039    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
 16040                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
 16041 
       
 16042    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
 16043                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
 16044                43, RFC 1042, February 1988.
       
 16045 
       
 16046    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
 16047                Application and Support", RFC 1123, October 1989.
       
 16048 
       
 16049    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
 16050                1995.
       
 16051 
       
 16052    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
 16053                October 1996.
       
 16054 
       
 16055    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
 16056                Extensions (MIME) Part One: Format of Internet Message
       
 16057                Bodies", RFC 2045, November 1996.
       
 16058 
       
 16059    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
 16060                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
 16061 
       
 16062    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
 16063                10646", RFC 2279, January 1998.
       
 16064 
       
 16065 
       
 16066 
       
 16067 
       
 16068 
       
 16069 Kennedy                      Informational                     [Page 14]
       
 16070 
       
 16071 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 16072 
       
 16073 
       
 16074    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
 16075                (IPv6) Specification", RFC 2460, December 1998.
       
 16076 
       
 16077    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
 16078                RFC 3080, March 2001.
       
 16079 
       
 16080    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
 16081                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
 16082                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
 16083                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
 16084 
       
 16085    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
 16086                Markup Language (XML)" World Wide Web Consortium
       
 16087                Recommendation REC- xml-19980210.
       
 16088                http://www.w3.org/TR/1998/REC-xml-19980210
       
 16089 
       
 16090 10.  Author's Address
       
 16091 
       
 16092    Hugh Kennedy
       
 16093    Mimezine
       
 16094    1060 West Addison
       
 16095    Chicago, IL 60613
       
 16096    USA
       
 16097 
       
 16098    EMail: kennedyh@engin.umich.edu
       
 16099 
       
 16100 
       
 16101 
       
 16102 
       
 16103 
       
 16104 
       
 16105 
       
 16106 
       
 16107 
       
 16108 
       
 16109 
       
 16110 
       
 16111 
       
 16112 
       
 16113 
       
 16114 
       
 16115 
       
 16116 
       
 16117 
       
 16118 
       
 16119 
       
 16120 
       
 16121 
       
 16122 
       
 16123 
       
 16124 
       
 16125 Kennedy                      Informational                     [Page 15]
       
 16126 
       
 16127 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 16128 
       
 16129 
       
 16130 11.  Full Copyright Statement
       
 16131 
       
 16132    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
 16133 
       
 16134    This document and translations of it may be copied and furnished to
       
 16135    others, and derivative works that comment on or otherwise explain it
       
 16136    or assist in its implementation may be prepared, copied, published
       
 16137    and distributed, in whole or in part, without restriction of any
       
 16138    kind, provided that the above copyright notice and this paragraph are
       
 16139    included on all such copies and derivative works.  However, this
       
 16140    document itself may not be modified in any way, such as by removing
       
 16141    the copyright notice or references to the Internet Society or other
       
 16142    Internet organizations, except as needed for the purpose of
       
 16143    developing Internet standards in which case the procedures for
       
 16144    copyrights defined in the Internet Standards process must be
       
 16145    followed, or as required to translate it into languages other than
       
 16146    English.
       
 16147 
       
 16148    The limited permissions granted above are perpetual and will not be
       
 16149    revoked by the Internet Society or its successors or assigns.
       
 16150 
       
 16151    This document and the information contained herein is provided on an
       
 16152    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
 16153    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
 16154    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
 16155    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
 16156    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
 16157 
       
 16158 Acknowledgement
       
 16159 
       
 16160    Funding for the RFC Editor function is currently provided by the
       
 16161    Internet Society.
       
 16162 
       
 16163 
       
 16164 
       
 16165 
       
 16166 
       
 16167 
       
 16168 
       
 16169 
       
 16170 
       
 16171 
       
 16172 
       
 16173 
       
 16174 
       
 16175 
       
 16176 
       
 16177 
       
 16178 
       
 16179 
       
 16180 
       
 16181 Kennedy                      Informational                     [Page 16]
       
 16182 
       
 16183 
       
 16184 
       
 16185 
       
 16186 
       
 16187 
       
 16188 
       
 16189 Network Working Group                                         H. Kennedy
       
 16190 Request for Comments: 3252                                      Mimezine
       
 16191 Category: Informational                                     1 April 2002
       
 16192 
       
 16193 
       
 16194                  Binary Lexical Octet Ad-hoc Transport
       
 16195 
       
 16196 Status of this Memo
       
 16197 
       
 16198    This memo provides information for the Internet community.  It does
       
 16199    not specify an Internet standard of any kind.  Distribution of this
       
 16200    memo is unlimited.
       
 16201 
       
 16202 Copyright Notice
       
 16203 
       
 16204    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
 16205 
       
 16206 Abstract
       
 16207 
       
 16208    This document defines a reformulation of IP and two transport layer
       
 16209    protocols (TCP and UDP) as XML applications.
       
 16210 
       
 16211 1.   Introduction
       
 16212 
       
 16213 1.1. Overview
       
 16214 
       
 16215    This document describes the Binary Lexical Octet Ad-hoc Transport
       
 16216    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
 16217    (IP [RFC791]), and two associated transport layer protocols (TCP
       
 16218    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
 16219    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
 16220    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
 16221    across the public Internet.
       
 16222 
       
 16223 1.2. Motivation
       
 16224 
       
 16225    The wild popularity of XML as a basis for application-level protocols
       
 16226    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
 16227    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
 16228    investigation into the possibility of extending the use of XML in the
       
 16229    protocol stack.  Using XML at both the transport and network layer in
       
 16230    addition to the application layer would provide for an amazing amount
       
 16231    of power and flexibility while removing dependencies on proprietary
       
 16232    and hard-to-understand binary protocols.  This protocol unification
       
 16233    would also allow applications to use a single XML parser for all
       
 16234    aspects of their operation, eliminating developer time spent figuring
       
 16235    out the intricacies of each new protocol, and moving the hard work of
       
 16236 
       
 16237 
       
 16238 
       
 16239 
       
 16240 Kennedy                      Informational                      [Page 1]
       
 16241 
       
 16242 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 16243 
       
 16244 
       
 16245    parsing to the XML toolset.  The use of XML also mitigates concerns
       
 16246    over "network vs. host" byte ordering which is at the root of many
       
 16247    network application bugs.
       
 16248 
       
 16249 1.3. Relation to Existing Protocols
       
 16250 
       
 16251    The reformulations specified in this RFC follow as closely as
       
 16252    possible the spirit of the RFCs on which they are based, and so MAY
       
 16253    contain elements or attributes that would not be needed in a pure
       
 16254    reworking (e.g. length attributes, which are implicit in XML.)
       
 16255 
       
 16256    The layering of network and transport protocols are maintained in
       
 16257    this RFC despite the optimizations that could be made if the line
       
 16258    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
 16259    element in the DTD) in order to foster future use of this protocol as
       
 16260    a basis for reformulating other protocols (such as ICMP.)
       
 16261 
       
 16262    Other than the encoding, the behavioral aspects of each of the
       
 16263    existing protocols remain unchanged.  Routing, address spaces, TCP
       
 16264    congestion control, etc. behave as specified in the extant standards.
       
 16265    Adapting to new standards and experimental algorithm heuristics for
       
 16266    improving performance will become much easier once the move to BLOAT
       
 16267    has been completed.
       
 16268 
       
 16269 1.4. Requirement Levels
       
 16270 
       
 16271    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
 16272    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
 16273    document are to be interpreted as described in BCP 14, RFC 2119
       
 16274    [RFC2119].
       
 16275 
       
 16276 2.   IPoXML
       
 16277 
       
 16278    This protocol MUST be implemented to be compliant with this RFC.
       
 16279    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
 16280    (section 3.) and higher-level application protocols.
       
 16281 
       
 16282    The DTD for this document type can be found in section 7.1.
       
 16283 
       
 16284    The routing of IPoXML can be easily implemented on hosts with an XML
       
 16285    parser, as the regular structure lends itself handily to parsing and
       
 16286    validation of the document/datagram and then processing the
       
 16287    destination address, TTL, and checksum before sending it on to its
       
 16288    next-hop.
       
 16289 
       
 16290    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
 16291    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
 16292    would have exceeded the 1500 byte Ethernet MTU.
       
 16293 
       
 16294 
       
 16295 
       
 16296 Kennedy                      Informational                      [Page 2]
       
 16297 
       
 16298 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 16299 
       
 16300 
       
 16301    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
 16302    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
 16303    formed and include the XMLDecl.
       
 16304 
       
 16305 2.1. IP Description
       
 16306 
       
 16307    A number of items have changed (for the better) from the original IP
       
 16308    specification.  Bit-masks, where present have been converted into
       
 16309    human-readable values.  IP addresses are listed in their dotted-
       
 16310    decimal notation [RFC1123].  Length and checksum values are present
       
 16311    as decimal integers.
       
 16312 
       
 16313    To calculate the length and checksum fields of the IP element, a
       
 16314    canonicalized form of the element MUST be used.  The canonical form
       
 16315    SHALL have no whitespace (including newline characters) between
       
 16316    elements and only one space character between attributes.  There
       
 16317    SHALL NOT be a space following the last attribute in an element.
       
 16318 
       
 16319    An iterative method SHOULD be used to calculate checksums, as the
       
 16320    length field will vary based on the size of the checksum.
       
 16321 
       
 16322    The payload element bears special attention.  Due to the character
       
 16323    set restrictions of XML, the payload of IP datagrams (which MAY
       
 16324    contain arbitrary data) MUST be encoded for transport. This RFC
       
 16325    REQUIRES the contents of the payload to be encoded in the base-64
       
 16326    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
 16327    encoded output MUST be wrapped on 76-character lines.
       
 16328 
       
 16329 
       
 16330 
       
 16331 
       
 16332 
       
 16333 
       
 16334 
       
 16335 
       
 16336 
       
 16337 
       
 16338 
       
 16339 
       
 16340 
       
 16341 
       
 16342 
       
 16343 
       
 16344 
       
 16345 
       
 16346 
       
 16347 
       
 16348 
       
 16349 
       
 16350 
       
 16351 
       
 16352 Kennedy                      Informational                      [Page 3]
       
 16353 
       
 16354 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 16355 
       
 16356 
       
 16357 2.2. Example Datagram
       
 16358 
       
 16359    The following is an example IPoXML datagram with an empty payload:
       
 16360 
       
 16361    <?xml version="1.0" encoding="UTF-8"?>
       
 16362    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 16363    <ip>
       
 16364    <header length="474">
       
 16365    <version value="4"/>
       
 16366    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
 16367         relibility="Normal" reserved="0"/>
       
 16368    <total.length value="461"/>
       
 16369    <id value="1"/>
       
 16370    <flags reserved="0" df="dont" mf="last"/>
       
 16371    <offset value="0"/>
       
 16372    <ttl value="255"/>
       
 16373    <protocol value="6"/>
       
 16374    <checksum value="8707"/>
       
 16375    <source address="10.0.0.22"/>
       
 16376    <destination address="10.0.0.1"/>
       
 16377    <options>
       
 16378    <end copied="0" class="0" number="0"/>
       
 16379    </options>
       
 16380    <padding pad="0"/>
       
 16381    </header>
       
 16382    <payload>
       
 16383    </payload>
       
 16384    </ip>
       
 16385 
       
 16386 3.   TCPoXML
       
 16387 
       
 16388    This protocol MUST be implemented to be compliant with this RFC.  The
       
 16389    DTD for this document type can be found in section 7.2.
       
 16390 
       
 16391 3.1. TCP Description
       
 16392 
       
 16393    A number of items have changed from the original TCP specification.
       
 16394    Bit-masks, where present have been converted into human-readable
       
 16395    values.  Length and checksum and port values are present as decimal
       
 16396    integers.
       
 16397 
       
 16398    To calculate the length and checksum fields of the TCP element, a
       
 16399    canonicalized form of the element MUST be used as in section 2.1.
       
 16400 
       
 16401    An iterative method SHOULD be used to calculate checksums as in
       
 16402    section 2.1.
       
 16403 
       
 16404    The payload element MUST be encoded as in section 2.1.
       
 16405 
       
 16406 
       
 16407 
       
 16408 Kennedy                      Informational                      [Page 4]
       
 16409 
       
 16410 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 16411 
       
 16412 
       
 16413    The TCP offset element was expanded to a maximum of 255 from 16 to
       
 16414    allow for the increased size of the header in XML.
       
 16415 
       
 16416    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 16417    as well as the <!DOCTYPE> declaration.
       
 16418 
       
 16419 3.2. Example Datagram
       
 16420 
       
 16421    The following is an example TCPoXML datagram with an empty payload:
       
 16422 
       
 16423    <?xml version="1.0" encoding="UTF-8"?>
       
 16424    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 16425    <tcp>
       
 16426    <tcp.header>
       
 16427    <src port="31415"/>
       
 16428    <dest port="42424"/>
       
 16429    <sequence number="322622954"/>
       
 16430    <acknowledgement number="689715995"/>
       
 16431    <offset number=""/>
       
 16432    <reserved value="0"/>
       
 16433    <control syn="1" ack="1"/>
       
 16434    <window size="1"/>
       
 16435    <urgent pointer="0"/>
       
 16436    <checksum value="2988"/>
       
 16437    <tcp.options>
       
 16438    <tcp.end kind="0"/>
       
 16439    </tcp.options>
       
 16440    <padding pad="0"/>
       
 16441    </tcp.header>
       
 16442    <payload>
       
 16443    </payload>
       
 16444    </tcp>
       
 16445 
       
 16446 4.   UDPoXML
       
 16447 
       
 16448    This protocol MUST be implemented to be compliant with this RFC.  The
       
 16449    DTD for this document type can be found in section 7.3.
       
 16450 
       
 16451 4.1. UDP Description
       
 16452 
       
 16453    A number of items have changed from the original UDP specification.
       
 16454    Bit-masks, where present have been converted into human-readable
       
 16455    values.  Length and checksum and port values are present as decimal
       
 16456    integers.
       
 16457 
       
 16458 
       
 16459 
       
 16460 
       
 16461 
       
 16462 
       
 16463 
       
 16464 Kennedy                      Informational                      [Page 5]
       
 16465 
       
 16466 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 16467 
       
 16468 
       
 16469    To calculate the length and checksum fields of the UDP element, a
       
 16470    canonicalized form of the element MUST be used as in section 2.1.  An
       
 16471    iterative method SHOULD be used to calculate checksums as in section
       
 16472    2.1.
       
 16473 
       
 16474    The payload element MUST be encoded as in section 2.1.
       
 16475 
       
 16476    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 16477    as well as the <!DOCTYPE> declaration.
       
 16478 
       
 16479 4.2. Example Datagram
       
 16480 
       
 16481    The following is an example UDPoXML datagram with an empty payload:
       
 16482 
       
 16483    <?xml version="1.0" encoding="UTF-8"?>
       
 16484    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 16485    <udp>
       
 16486    <udp.header>
       
 16487    <src port="31415"/>
       
 16488    <dest port="42424"/>
       
 16489    <udp.length value="143"/>
       
 16490    <checksum value="2988"/>
       
 16491    </udp.header>
       
 16492    <payload>
       
 16493    </payload>
       
 16494    </udp>
       
 16495 
       
 16496 5.   Network Transport
       
 16497 
       
 16498    This document provides for the transmission of BLOAT datagrams over
       
 16499    two common families of physical layer transport.  Future RFCs will
       
 16500    address additional transports as routing vendors catch up to the
       
 16501    specification, and we begin to see BLOAT routed across the Internet
       
 16502    backbone.
       
 16503 
       
 16504 5.1. Ethernet
       
 16505 
       
 16506    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
 16507    exception that the type field of the Ethernet frame MUST contain the
       
 16508    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
 16509    be 0x3c 3f 78 6d 6c ("<?xml".)
       
 16510 
       
 16511 5.2. IEEE 802
       
 16512 
       
 16513    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
 16514    that the protocol type code for IPoXML is 0xBEEF.
       
 16515 
       
 16516 
       
 16517 
       
 16518 
       
 16519 
       
 16520 Kennedy                      Informational                      [Page 6]
       
 16521 
       
 16522 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 16523 
       
 16524 
       
 16525 6. Gatewaying over IP
       
 16526 
       
 16527    In order to facilitate the gradual introduction of BLOAT into the
       
 16528    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
 16529    gateway between networks that run BLOAT natively on their LANs.
       
 16530 
       
 16531 7. DTDs
       
 16532 
       
 16533    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
 16534    Network DTD (7.1.)
       
 16535 
       
 16536    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
 16537    [XML]) although it is understood that most IPoXML implementations
       
 16538    will not need to pull down the DTD, as it will normally be embedded
       
 16539    in the implementation, and presents something of a catch-22 if you
       
 16540    need to load part of your network protocol over the network.
       
 16541 
       
 16542 7.1.  IPoXML DTD
       
 16543 
       
 16544    <!--
       
 16545     DTD for IP over XML.
       
 16546     Refer to this DTD as:
       
 16547 
       
 16548     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 16549    -->
       
 16550    <!--
       
 16551     DTD data types:
       
 16552 
       
 16553       Digits      [0..9]+
       
 16554 
       
 16555       Precedence  "NetworkControl | InternetworkControl |
       
 16556                    CRITIC | FlashOverride | Flash | Immediate |
       
 16557                    Priority | Routine"
       
 16558 
       
 16559       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
 16560 
       
 16561       Class       [0..3]
       
 16562 
       
 16563       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
 16564                     Restricted | Secret | Top Secret | Reserved"
       
 16565 
       
 16566       Compartments [0..65535]
       
 16567 
       
 16568       Handling     [0..65535]
       
 16569 
       
 16570       TCC          [0..16777216]
       
 16571 
       
 16572    -->
       
 16573 
       
 16574 
       
 16575 
       
 16576 Kennedy                      Informational                      [Page 7]
       
 16577 
       
 16578 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 16579 
       
 16580 
       
 16581    <!ENTITY % Digits "CDATA">
       
 16582    <!ENTITY % Precedence "CDATA">
       
 16583    <!ENTITY % IP4Addr "CDATA">
       
 16584    <!ENTITY % Class "CDATA">
       
 16585    <!ENTITY % Sec "CDATA">
       
 16586    <!ENTITY % Compartments "CDATA">
       
 16587    <!ENTITY % Handling "CDATA">
       
 16588    <!ENTITY % TCC "CDATA">
       
 16589 
       
 16590    <!ELEMENT ip (header, payload)>
       
 16591 
       
 16592    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
 16593                     protocol, checksum, source, destination, options,
       
 16594                     padding)>
       
 16595    <!-- length of header in 32-bit words -->
       
 16596    <!ATTLIST header
       
 16597              length %Digits; #REQUIRED>
       
 16598 
       
 16599    <!ELEMENT version EMPTY>
       
 16600    <!-- ip version. SHOULD be "4" -->
       
 16601    <!ATTLIST version
       
 16602              value   %Digits;  #REQUIRED>
       
 16603 
       
 16604    <!ELEMENT tos EMPTY>
       
 16605    <!ATTLIST tos
       
 16606              precedence   %Precedence;    #REQUIRED
       
 16607              delay    (normal | low)  #REQUIRED
       
 16608              throughput   (normal | high) #REQUIRED
       
 16609              relibility   (normal | high) #REQUIRED
       
 16610              reserved     CDATA #FIXED "0">
       
 16611 
       
 16612    <!ELEMENT total.length EMPTY>
       
 16613    <!--
       
 16614     total length of datagram (header and payload) in octets, MUST be
       
 16615     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
 16616     ethernets).
       
 16617    -->
       
 16618    <!ATTLIST total.length
       
 16619              value %Digits; #REQUIRED>
       
 16620 
       
 16621    <!ELEMENT id EMPTY>
       
 16622    <!-- 0 <= id <= 65,535  -->
       
 16623    <!ATTLIST id
       
 16624              value %Digits; #REQUIRED>
       
 16625 
       
 16626    <!ELEMENT flags EMPTY>
       
 16627    <!-- df = don't fragment, mf = more fragments  -->
       
 16628    <!ATTLIST flags
       
 16629 
       
 16630 
       
 16631 
       
 16632 Kennedy                      Informational                      [Page 8]
       
 16633 
       
 16634 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 16635 
       
 16636 
       
 16637           reserved CDATA  #FIXED "0"
       
 16638           df (may|dont)   #REQUIRED
       
 16639           mf (last|more)  #REQUIRED>
       
 16640 
       
 16641    <!ELEMENT offset EMPTY>
       
 16642    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
 16643    <!ATTLIST offset
       
 16644              value %Digits; #REQUIRED>
       
 16645 
       
 16646    <!ELEMENT ttl EMPTY>
       
 16647    <!-- 0 <= ttl <= 255 -->
       
 16648    <!ATTLIST ttl
       
 16649              value %Digits; #REQUIRED>
       
 16650 
       
 16651    <!ELEMENT protocol EMPTY>
       
 16652    <!-- 0 <= protocol <= 255 (per IANA) -->
       
 16653    <!ATTLIST protocol
       
 16654              value %Digits; #REQUIRED>
       
 16655 
       
 16656    <!ELEMENT checksum EMPTY>
       
 16657    <!-- 0 <= checksum <= 65535 (over header only) -->
       
 16658    <!ATTLIST checksum
       
 16659              value %Digits; #REQUIRED>
       
 16660 
       
 16661    <!ELEMENT source EMPTY>
       
 16662    <!ATTLIST source
       
 16663              address %IP4Addr; #REQUIRED>
       
 16664 
       
 16665    <!ELEMENT destination EMPTY>
       
 16666    <!ATTLIST destination
       
 16667              address %IP4Addr; #REQUIRED>
       
 16668 
       
 16669    <!ELEMENT options ( end | noop | security | loose | strict | record
       
 16670                      | stream | timestamp )*>
       
 16671 
       
 16672    <!ELEMENT end EMPTY>
       
 16673    <!ATTLIST end
       
 16674              copied (0|1) #REQUIRED
       
 16675              class  CDATA #FIXED "0"
       
 16676              number CDATA #FIXED "0">
       
 16677 
       
 16678    <!ELEMENT noop EMPTY>
       
 16679    <!ATTLIST noop
       
 16680              copied (0|1) #REQUIRED
       
 16681              class  CDATA #FIXED "0"
       
 16682              number CDATA #FIXED "1">
       
 16683 
       
 16684    <!ELEMENT security EMPTY>
       
 16685 
       
 16686 
       
 16687 
       
 16688 Kennedy                      Informational                      [Page 9]
       
 16689 
       
 16690 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 16691 
       
 16692 
       
 16693    <!ATTLIST security
       
 16694              copied CDATA #FIXED "1"
       
 16695              class  CDATA #FIXED "0"
       
 16696              number CDATA #FIXED "2"
       
 16697              length CDATA #FIXED "11"
       
 16698              security %Sec; #REQUIRED
       
 16699              compartments %Compartments; #REQUIRED
       
 16700              handling %Handling; #REQUIRED
       
 16701              tcc %TCC; #REQUIRED>
       
 16702    <!ELEMENT loose (hop)+>
       
 16703    <!ATTLIST loose
       
 16704              copied CDATA #FIXED "1"
       
 16705              class  CDATA #FIXED "0"
       
 16706              number CDATA #FIXED "3"
       
 16707              length %Digits; #REQUIRED
       
 16708              pointer %Digits; #REQUIRED>
       
 16709 
       
 16710    <!ELEMENT hop EMPTY>
       
 16711    <!ATTLIST hop
       
 16712              address %IP4Addr; #REQUIRED>
       
 16713 
       
 16714    <!ELEMENT strict (hop)+>
       
 16715    <!ATTLIST strict
       
 16716              copied CDATA #FIXED "1"
       
 16717              class  CDATA #FIXED "0"
       
 16718              number CDATA #FIXED "9"
       
 16719              length %Digits; #REQUIRED
       
 16720              pointer %Digits; #REQUIRED>
       
 16721 
       
 16722    <!ELEMENT record (hop)+>
       
 16723    <!ATTLIST record
       
 16724              copied CDATA #FIXED "0"
       
 16725              class  CDATA #FIXED "0"
       
 16726              number CDATA #FIXED "7"
       
 16727              length %Digits; #REQUIRED
       
 16728              pointer %Digits; #REQUIRED>
       
 16729 
       
 16730    <!ELEMENT stream EMPTY>
       
 16731    <!-- 0 <= id <= 65,535 -->
       
 16732    <!ATTLIST stream
       
 16733              copied CDATA #FIXED "1"
       
 16734              class  CDATA #FIXED "0"
       
 16735              number CDATA #FIXED "8"
       
 16736              length CDATA #FIXED "4"
       
 16737              id %Digits; #REQUIRED>
       
 16738 
       
 16739    <!ELEMENT timestamp (tstamp)+>
       
 16740    <!-- 0 <= oflw <=15 -->
       
 16741 
       
 16742 
       
 16743 
       
 16744 Kennedy                      Informational                     [Page 10]
       
 16745 
       
 16746 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 16747 
       
 16748 
       
 16749    <!ATTLIST timestamp
       
 16750              copied CDATA #FIXED "0"
       
 16751              class  CDATA #FIXED "2"
       
 16752              number CDATA #FIXED "4"
       
 16753              length %Digits;  #REQUIRED
       
 16754              pointer %Digits; #REQUIRED
       
 16755              oflw %Digits;    #REQUIRED
       
 16756              flag (0 | 1 | 3)  #REQUIRED>
       
 16757 
       
 16758    <!ELEMENT tstamp EMPTY>
       
 16759    <!ATTLIST tstamp
       
 16760              time %Digits;   #REQUIRED
       
 16761              address %IP4Addr; #IMPLIED>
       
 16762    <!--
       
 16763        padding to bring header to 32-bit boundary.
       
 16764        pad MUST be "0"*
       
 16765     -->
       
 16766    <!ELEMENT padding EMPTY>
       
 16767    <!ATTLIST padding
       
 16768              pad CDATA #REQUIRED>
       
 16769 
       
 16770    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
 16771         by section 2.1 of this RFC -->
       
 16772    <!ELEMENT payload (CDATA)>
       
 16773 
       
 16774 7.2.  TCPoXML DTD
       
 16775 
       
 16776    <!--
       
 16777       DTD for TCP over XML.
       
 16778       Refer to this DTD as:
       
 16779 
       
 16780       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 16781    -->
       
 16782 
       
 16783    <!-- the pseudoheader is only included for checksum calculations -->
       
 16784    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
 16785 
       
 16786    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
 16787                          reserved, control, window, checksum, urgent,
       
 16788                          tcp.options, padding)>
       
 16789 
       
 16790    <!ELEMENT src EMPTY>
       
 16791    <!-- 0 <= port <= 65,535 -->
       
 16792    <!ATTLIST src
       
 16793              port %Digits; #REQUIRED>
       
 16794 
       
 16795    <!ELEMENT dest EMPTY>
       
 16796    <!-- 0 <= port <= 65,535 -->
       
 16797 
       
 16798 
       
 16799 
       
 16800 Kennedy                      Informational                     [Page 11]
       
 16801 
       
 16802 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 16803 
       
 16804 
       
 16805    <!ATTLIST dest
       
 16806              port %Digits; #REQUIRED>
       
 16807 
       
 16808    <!ELEMENT sequence EMPTY>
       
 16809    <!-- 0 <= number <= 4294967295 -->
       
 16810    <!ATTLIST sequence
       
 16811              number %Digits; #REQUIRED>
       
 16812 
       
 16813    <!ELEMENT acknowledgement EMPTY>
       
 16814    <!-- 0 <= number <= 4294967295 -->
       
 16815    <!ATTLIST acknowledgement
       
 16816              number %Digits; #REQUIRED>
       
 16817 
       
 16818    <!ELEMENT offset EMPTY>
       
 16819    <!-- 0 <= number <= 255 -->
       
 16820    <!ATTLIST offset
       
 16821              number %Digits; #REQUIRED>
       
 16822 
       
 16823    <!ELEMENT reserved EMPTY>
       
 16824    <!ATTLIST reserved
       
 16825              value CDATA #FIXED "0">
       
 16826 
       
 16827    <!ELEMENT control EMPTY>
       
 16828    <!ATTLIST control
       
 16829              urg (0|1) #IMPLIED
       
 16830              ack (0|1) #IMPLIED
       
 16831              psh (0|1) #IMPLIED
       
 16832              rst (0|1) #IMPLIED
       
 16833              syn (0|1) #IMPLIED
       
 16834              fin (0|1) #IMPLIED>
       
 16835 
       
 16836    <!ELEMENT window EMPTY>
       
 16837    <!-- 0 <= size <= 65,535 -->
       
 16838    <!ATTLIST window
       
 16839              size %Digits; #REQUIRED>
       
 16840 
       
 16841    <!--
       
 16842       checksum as in ip, but with
       
 16843       the following pseudo-header added into the tcp element:
       
 16844      -->
       
 16845    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
 16846                                tcp.length)>
       
 16847 
       
 16848    <!--
       
 16849       tcp header + data length in octets. does not include the size of
       
 16850 
       
 16851       the pseudoheader.
       
 16852     -->
       
 16853 
       
 16854 
       
 16855 
       
 16856 Kennedy                      Informational                     [Page 12]
       
 16857 
       
 16858 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 16859 
       
 16860 
       
 16861    <!ELEMENT tcp.length EMPTY>
       
 16862    <!ATTLIST tcp.length
       
 16863              value %Digits; #REQUIRED>
       
 16864 
       
 16865    <!ELEMENT urgent EMPTY>
       
 16866    <!-- 0 <= pointer <= 65,535 -->
       
 16867    <!ATTLIST urgent
       
 16868              pointer %Digits; #REQUIRED>
       
 16869 
       
 16870    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
 16871 
       
 16872    <!ELEMENT tcp.end EMPTY>
       
 16873    <!ATTLIST tcp.end
       
 16874              kind CDATA #FIXED "0">
       
 16875 
       
 16876    <!ELEMENT tcp.noop EMPTY>
       
 16877    <!ATTLIST tcp.noop
       
 16878              kind CDATA #FIXED "1">
       
 16879 
       
 16880    <!ELEMENT tcp.mss EMPTY>
       
 16881    <!ATTLIST tcp.mss
       
 16882              kind CDATA #FIXED "2"
       
 16883              length CDATA #FIXED "4"
       
 16884              size %Digits; #REQUIRED>
       
 16885 
       
 16886 7.3.  UDPoXML DTD
       
 16887 
       
 16888    <!--
       
 16889       DTD for UDP over XML.
       
 16890       Refer to this DTD as:
       
 16891 
       
 16892       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 16893    -->
       
 16894 
       
 16895    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
 16896 
       
 16897    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
 16898 
       
 16899    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
 16900                                udp.length)>
       
 16901 
       
 16902    <!--
       
 16903       udp header + data length in octets. does not include the size of
       
 16904       the pseudoheader.
       
 16905     -->
       
 16906    <!ELEMENT udp.length EMPTY>
       
 16907    <!ATTLIST udp.length
       
 16908              value %Digits; #REQUIRED>
       
 16909 
       
 16910 
       
 16911 
       
 16912 Kennedy                      Informational                     [Page 13]
       
 16913 
       
 16914 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 16915 
       
 16916 
       
 16917 8. Security Considerations
       
 16918 
       
 16919    XML, as a subset of SGML, has the same security considerations as
       
 16920    specified in SGML Media Types [RFC1874].  Security considerations
       
 16921    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
 16922    not attempt to correct for issues not related to message format.
       
 16923 
       
 16924 9.   References
       
 16925 
       
 16926    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
 16927                February 2002. (Work in Progress)
       
 16928 
       
 16929    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
 16930                August 1980.
       
 16931 
       
 16932    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
 16933                September 1981.
       
 16934 
       
 16935    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
 16936                793, September 1981.
       
 16937 
       
 16938    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
 16939                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
 16940 
       
 16941    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
 16942                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
 16943                43, RFC 1042, February 1988.
       
 16944 
       
 16945    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
 16946                Application and Support", RFC 1123, October 1989.
       
 16947 
       
 16948    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
 16949                1995.
       
 16950 
       
 16951    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
 16952                October 1996.
       
 16953 
       
 16954    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
 16955                Extensions (MIME) Part One: Format of Internet Message
       
 16956                Bodies", RFC 2045, November 1996.
       
 16957 
       
 16958    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
 16959                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
 16960 
       
 16961    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
 16962                10646", RFC 2279, January 1998.
       
 16963 
       
 16964 
       
 16965 
       
 16966 
       
 16967 
       
 16968 Kennedy                      Informational                     [Page 14]
       
 16969 
       
 16970 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 16971 
       
 16972 
       
 16973    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
 16974                (IPv6) Specification", RFC 2460, December 1998.
       
 16975 
       
 16976    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
 16977                RFC 3080, March 2001.
       
 16978 
       
 16979    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
 16980                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
 16981                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
 16982                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
 16983 
       
 16984    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
 16985                Markup Language (XML)" World Wide Web Consortium
       
 16986                Recommendation REC- xml-19980210.
       
 16987                http://www.w3.org/TR/1998/REC-xml-19980210
       
 16988 
       
 16989 10.  Author's Address
       
 16990 
       
 16991    Hugh Kennedy
       
 16992    Mimezine
       
 16993    1060 West Addison
       
 16994    Chicago, IL 60613
       
 16995    USA
       
 16996 
       
 16997    EMail: kennedyh@engin.umich.edu
       
 16998 
       
 16999 
       
 17000 
       
 17001 
       
 17002 
       
 17003 
       
 17004 
       
 17005 
       
 17006 
       
 17007 
       
 17008 
       
 17009 
       
 17010 
       
 17011 
       
 17012 
       
 17013 
       
 17014 
       
 17015 
       
 17016 
       
 17017 
       
 17018 
       
 17019 
       
 17020 
       
 17021 
       
 17022 
       
 17023 
       
 17024 Kennedy                      Informational                     [Page 15]
       
 17025 
       
 17026 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 17027 
       
 17028 
       
 17029 11.  Full Copyright Statement
       
 17030 
       
 17031    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
 17032 
       
 17033    This document and translations of it may be copied and furnished to
       
 17034    others, and derivative works that comment on or otherwise explain it
       
 17035    or assist in its implementation may be prepared, copied, published
       
 17036    and distributed, in whole or in part, without restriction of any
       
 17037    kind, provided that the above copyright notice and this paragraph are
       
 17038    included on all such copies and derivative works.  However, this
       
 17039    document itself may not be modified in any way, such as by removing
       
 17040    the copyright notice or references to the Internet Society or other
       
 17041    Internet organizations, except as needed for the purpose of
       
 17042    developing Internet standards in which case the procedures for
       
 17043    copyrights defined in the Internet Standards process must be
       
 17044    followed, or as required to translate it into languages other than
       
 17045    English.
       
 17046 
       
 17047    The limited permissions granted above are perpetual and will not be
       
 17048    revoked by the Internet Society or its successors or assigns.
       
 17049 
       
 17050    This document and the information contained herein is provided on an
       
 17051    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
 17052    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
 17053    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
 17054    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
 17055    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
 17056 
       
 17057 Acknowledgement
       
 17058 
       
 17059    Funding for the RFC Editor function is currently provided by the
       
 17060    Internet Society.
       
 17061 
       
 17062 
       
 17063 
       
 17064 
       
 17065 
       
 17066 
       
 17067 
       
 17068 
       
 17069 
       
 17070 
       
 17071 
       
 17072 
       
 17073 
       
 17074 
       
 17075 
       
 17076 
       
 17077 
       
 17078 
       
 17079 
       
 17080 Kennedy                      Informational                     [Page 16]
       
 17081 
       
 17082 
       
 17083 
       
 17084 
       
 17085 
       
 17086 
       
 17087 
       
 17088 Network Working Group                                         H. Kennedy
       
 17089 Request for Comments: 3252                                      Mimezine
       
 17090 Category: Informational                                     1 April 2002
       
 17091 
       
 17092 
       
 17093                  Binary Lexical Octet Ad-hoc Transport
       
 17094 
       
 17095 Status of this Memo
       
 17096 
       
 17097    This memo provides information for the Internet community.  It does
       
 17098    not specify an Internet standard of any kind.  Distribution of this
       
 17099    memo is unlimited.
       
 17100 
       
 17101 Copyright Notice
       
 17102 
       
 17103    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
 17104 
       
 17105 Abstract
       
 17106 
       
 17107    This document defines a reformulation of IP and two transport layer
       
 17108    protocols (TCP and UDP) as XML applications.
       
 17109 
       
 17110 1.   Introduction
       
 17111 
       
 17112 1.1. Overview
       
 17113 
       
 17114    This document describes the Binary Lexical Octet Ad-hoc Transport
       
 17115    (BLOAT): a reformulation of a widely-deployed network-layer protocol
       
 17116    (IP [RFC791]), and two associated transport layer protocols (TCP
       
 17117    [RFC793] and UDP [RFC768]) as XML [XML] applications.  It also
       
 17118    describes methods for transporting BLOAT over Ethernet and IEEE 802
       
 17119    networks as well as encapsulating BLOAT in IP for gatewaying BLOAT
       
 17120    across the public Internet.
       
 17121 
       
 17122 1.2. Motivation
       
 17123 
       
 17124    The wild popularity of XML as a basis for application-level protocols
       
 17125    such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple
       
 17126    Object Access Protocol [SOAP], and Jabber [JABBER] prompted
       
 17127    investigation into the possibility of extending the use of XML in the
       
 17128    protocol stack.  Using XML at both the transport and network layer in
       
 17129    addition to the application layer would provide for an amazing amount
       
 17130    of power and flexibility while removing dependencies on proprietary
       
 17131    and hard-to-understand binary protocols.  This protocol unification
       
 17132    would also allow applications to use a single XML parser for all
       
 17133    aspects of their operation, eliminating developer time spent figuring
       
 17134    out the intricacies of each new protocol, and moving the hard work of
       
 17135 
       
 17136 
       
 17137 
       
 17138 
       
 17139 Kennedy                      Informational                      [Page 1]
       
 17140 
       
 17141 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 17142 
       
 17143 
       
 17144    parsing to the XML toolset.  The use of XML also mitigates concerns
       
 17145    over "network vs. host" byte ordering which is at the root of many
       
 17146    network application bugs.
       
 17147 
       
 17148 1.3. Relation to Existing Protocols
       
 17149 
       
 17150    The reformulations specified in this RFC follow as closely as
       
 17151    possible the spirit of the RFCs on which they are based, and so MAY
       
 17152    contain elements or attributes that would not be needed in a pure
       
 17153    reworking (e.g. length attributes, which are implicit in XML.)
       
 17154 
       
 17155    The layering of network and transport protocols are maintained in
       
 17156    this RFC despite the optimizations that could be made if the line
       
 17157    were somewhat blurred (i.e. merging TCP and IP into a single, larger
       
 17158    element in the DTD) in order to foster future use of this protocol as
       
 17159    a basis for reformulating other protocols (such as ICMP.)
       
 17160 
       
 17161    Other than the encoding, the behavioral aspects of each of the
       
 17162    existing protocols remain unchanged.  Routing, address spaces, TCP
       
 17163    congestion control, etc. behave as specified in the extant standards.
       
 17164    Adapting to new standards and experimental algorithm heuristics for
       
 17165    improving performance will become much easier once the move to BLOAT
       
 17166    has been completed.
       
 17167 
       
 17168 1.4. Requirement Levels
       
 17169 
       
 17170    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       
 17171    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       
 17172    document are to be interpreted as described in BCP 14, RFC 2119
       
 17173    [RFC2119].
       
 17174 
       
 17175 2.   IPoXML
       
 17176 
       
 17177    This protocol MUST be implemented to be compliant with this RFC.
       
 17178    IPoXML is the root protocol REQUIRED for effective use of TCPoXML
       
 17179    (section 3.) and higher-level application protocols.
       
 17180 
       
 17181    The DTD for this document type can be found in section 7.1.
       
 17182 
       
 17183    The routing of IPoXML can be easily implemented on hosts with an XML
       
 17184    parser, as the regular structure lends itself handily to parsing and
       
 17185    validation of the document/datagram and then processing the
       
 17186    destination address, TTL, and checksum before sending it on to its
       
 17187    next-hop.
       
 17188 
       
 17189    The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the
       
 17190    wider deployment of IPv4 and the fact that implementing IPv6 as XML
       
 17191    would have exceeded the 1500 byte Ethernet MTU.
       
 17192 
       
 17193 
       
 17194 
       
 17195 Kennedy                      Informational                      [Page 2]
       
 17196 
       
 17197 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 17198 
       
 17199 
       
 17200    All BLOAT implementations MUST use - and specify - the UTF-8 encoding
       
 17201    of RFC 2279 [RFC2279].  All BLOAT document/datagrams MUST be well-
       
 17202    formed and include the XMLDecl.
       
 17203 
       
 17204 2.1. IP Description
       
 17205 
       
 17206    A number of items have changed (for the better) from the original IP
       
 17207    specification.  Bit-masks, where present have been converted into
       
 17208    human-readable values.  IP addresses are listed in their dotted-
       
 17209    decimal notation [RFC1123].  Length and checksum values are present
       
 17210    as decimal integers.
       
 17211 
       
 17212    To calculate the length and checksum fields of the IP element, a
       
 17213    canonicalized form of the element MUST be used.  The canonical form
       
 17214    SHALL have no whitespace (including newline characters) between
       
 17215    elements and only one space character between attributes.  There
       
 17216    SHALL NOT be a space following the last attribute in an element.
       
 17217 
       
 17218    An iterative method SHOULD be used to calculate checksums, as the
       
 17219    length field will vary based on the size of the checksum.
       
 17220 
       
 17221    The payload element bears special attention.  Due to the character
       
 17222    set restrictions of XML, the payload of IP datagrams (which MAY
       
 17223    contain arbitrary data) MUST be encoded for transport. This RFC
       
 17224    REQUIRES the contents of the payload to be encoded in the base-64
       
 17225    encoding of RFC 2045 [RFC2045], but removes the requirement that the
       
 17226    encoded output MUST be wrapped on 76-character lines.
       
 17227 
       
 17228 
       
 17229 
       
 17230 
       
 17231 
       
 17232 
       
 17233 
       
 17234 
       
 17235 
       
 17236 
       
 17237 
       
 17238 
       
 17239 
       
 17240 
       
 17241 
       
 17242 
       
 17243 
       
 17244 
       
 17245 
       
 17246 
       
 17247 
       
 17248 
       
 17249 
       
 17250 
       
 17251 Kennedy                      Informational                      [Page 3]
       
 17252 
       
 17253 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 17254 
       
 17255 
       
 17256 2.2. Example Datagram
       
 17257 
       
 17258    The following is an example IPoXML datagram with an empty payload:
       
 17259 
       
 17260    <?xml version="1.0" encoding="UTF-8"?>
       
 17261    <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 17262    <ip>
       
 17263    <header length="474">
       
 17264    <version value="4"/>
       
 17265    <tos precedence="Routine" delay="Normal" throughput="Normal"
       
 17266         relibility="Normal" reserved="0"/>
       
 17267    <total.length value="461"/>
       
 17268    <id value="1"/>
       
 17269    <flags reserved="0" df="dont" mf="last"/>
       
 17270    <offset value="0"/>
       
 17271    <ttl value="255"/>
       
 17272    <protocol value="6"/>
       
 17273    <checksum value="8707"/>
       
 17274    <source address="10.0.0.22"/>
       
 17275    <destination address="10.0.0.1"/>
       
 17276    <options>
       
 17277    <end copied="0" class="0" number="0"/>
       
 17278    </options>
       
 17279    <padding pad="0"/>
       
 17280    </header>
       
 17281    <payload>
       
 17282    </payload>
       
 17283    </ip>
       
 17284 
       
 17285 3.   TCPoXML
       
 17286 
       
 17287    This protocol MUST be implemented to be compliant with this RFC.  The
       
 17288    DTD for this document type can be found in section 7.2.
       
 17289 
       
 17290 3.1. TCP Description
       
 17291 
       
 17292    A number of items have changed from the original TCP specification.
       
 17293    Bit-masks, where present have been converted into human-readable
       
 17294    values.  Length and checksum and port values are present as decimal
       
 17295    integers.
       
 17296 
       
 17297    To calculate the length and checksum fields of the TCP element, a
       
 17298    canonicalized form of the element MUST be used as in section 2.1.
       
 17299 
       
 17300    An iterative method SHOULD be used to calculate checksums as in
       
 17301    section 2.1.
       
 17302 
       
 17303    The payload element MUST be encoded as in section 2.1.
       
 17304 
       
 17305 
       
 17306 
       
 17307 Kennedy                      Informational                      [Page 4]
       
 17308 
       
 17309 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 17310 
       
 17311 
       
 17312    The TCP offset element was expanded to a maximum of 255 from 16 to
       
 17313    allow for the increased size of the header in XML.
       
 17314 
       
 17315    TCPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 17316    as well as the <!DOCTYPE> declaration.
       
 17317 
       
 17318 3.2. Example Datagram
       
 17319 
       
 17320    The following is an example TCPoXML datagram with an empty payload:
       
 17321 
       
 17322    <?xml version="1.0" encoding="UTF-8"?>
       
 17323    <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 17324    <tcp>
       
 17325    <tcp.header>
       
 17326    <src port="31415"/>
       
 17327    <dest port="42424"/>
       
 17328    <sequence number="322622954"/>
       
 17329    <acknowledgement number="689715995"/>
       
 17330    <offset number=""/>
       
 17331    <reserved value="0"/>
       
 17332    <control syn="1" ack="1"/>
       
 17333    <window size="1"/>
       
 17334    <urgent pointer="0"/>
       
 17335    <checksum value="2988"/>
       
 17336    <tcp.options>
       
 17337    <tcp.end kind="0"/>
       
 17338    </tcp.options>
       
 17339    <padding pad="0"/>
       
 17340    </tcp.header>
       
 17341    <payload>
       
 17342    </payload>
       
 17343    </tcp>
       
 17344 
       
 17345 4.   UDPoXML
       
 17346 
       
 17347    This protocol MUST be implemented to be compliant with this RFC.  The
       
 17348    DTD for this document type can be found in section 7.3.
       
 17349 
       
 17350 4.1. UDP Description
       
 17351 
       
 17352    A number of items have changed from the original UDP specification.
       
 17353    Bit-masks, where present have been converted into human-readable
       
 17354    values.  Length and checksum and port values are present as decimal
       
 17355    integers.
       
 17356 
       
 17357 
       
 17358 
       
 17359 
       
 17360 
       
 17361 
       
 17362 
       
 17363 Kennedy                      Informational                      [Page 5]
       
 17364 
       
 17365 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 17366 
       
 17367 
       
 17368    To calculate the length and checksum fields of the UDP element, a
       
 17369    canonicalized form of the element MUST be used as in section 2.1.  An
       
 17370    iterative method SHOULD be used to calculate checksums as in section
       
 17371    2.1.
       
 17372 
       
 17373    The payload element MUST be encoded as in section 2.1.
       
 17374 
       
 17375    UDPoXML datagrams encapsulated by IPoXML MAY omit the <?xml?> header
       
 17376    as well as the <!DOCTYPE> declaration.
       
 17377 
       
 17378 4.2. Example Datagram
       
 17379 
       
 17380    The following is an example UDPoXML datagram with an empty payload:
       
 17381 
       
 17382    <?xml version="1.0" encoding="UTF-8"?>
       
 17383    <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 17384    <udp>
       
 17385    <udp.header>
       
 17386    <src port="31415"/>
       
 17387    <dest port="42424"/>
       
 17388    <udp.length value="143"/>
       
 17389    <checksum value="2988"/>
       
 17390    </udp.header>
       
 17391    <payload>
       
 17392    </payload>
       
 17393    </udp>
       
 17394 
       
 17395 5.   Network Transport
       
 17396 
       
 17397    This document provides for the transmission of BLOAT datagrams over
       
 17398    two common families of physical layer transport.  Future RFCs will
       
 17399    address additional transports as routing vendors catch up to the
       
 17400    specification, and we begin to see BLOAT routed across the Internet
       
 17401    backbone.
       
 17402 
       
 17403 5.1. Ethernet
       
 17404 
       
 17405    BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the
       
 17406    exception that the type field of the Ethernet frame MUST contain the
       
 17407    value 0xBEEF.  The first 5 octets of the Ethernet frame payload will
       
 17408    be 0x3c 3f 78 6d 6c ("<?xml".)
       
 17409 
       
 17410 5.2. IEEE 802
       
 17411 
       
 17412    BLOAT is encapsulated in IEEE 802 Networks as in [RFC1042] except
       
 17413    that the protocol type code for IPoXML is 0xBEEF.
       
 17414 
       
 17415 
       
 17416 
       
 17417 
       
 17418 
       
 17419 Kennedy                      Informational                      [Page 6]
       
 17420 
       
 17421 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 17422 
       
 17423 
       
 17424 6. Gatewaying over IP
       
 17425 
       
 17426    In order to facilitate the gradual introduction of BLOAT into the
       
 17427    public Internet, BLOAT MAY be encapsulated in IP as in [RFC2003] to
       
 17428    gateway between networks that run BLOAT natively on their LANs.
       
 17429 
       
 17430 7. DTDs
       
 17431 
       
 17432    The Transport DTDs (7.2. and 7.3.) build on the definitions in the
       
 17433    Network DTD (7.1.)
       
 17434 
       
 17435    The DTDs are referenced by their PubidLiteral and SystemLiteral (from
       
 17436    [XML]) although it is understood that most IPoXML implementations
       
 17437    will not need to pull down the DTD, as it will normally be embedded
       
 17438    in the implementation, and presents something of a catch-22 if you
       
 17439    need to load part of your network protocol over the network.
       
 17440 
       
 17441 7.1.  IPoXML DTD
       
 17442 
       
 17443    <!--
       
 17444     DTD for IP over XML.
       
 17445     Refer to this DTD as:
       
 17446 
       
 17447     <!DOCTYPE ip PUBLIC "-//IETF//DTD BLOAT 1.0 IP//EN" "bloat.dtd">
       
 17448    -->
       
 17449    <!--
       
 17450     DTD data types:
       
 17451 
       
 17452       Digits      [0..9]+
       
 17453 
       
 17454       Precedence  "NetworkControl | InternetworkControl |
       
 17455                    CRITIC | FlashOverride | Flash | Immediate |
       
 17456                    Priority | Routine"
       
 17457 
       
 17458       IP4Addr     "dotted-decimal" notation of [RFC1123]
       
 17459 
       
 17460       Class       [0..3]
       
 17461 
       
 17462       Sec          "Unclassified | Confidential | EFTO | MMMM | PROG |
       
 17463                     Restricted | Secret | Top Secret | Reserved"
       
 17464 
       
 17465       Compartments [0..65535]
       
 17466 
       
 17467       Handling     [0..65535]
       
 17468 
       
 17469       TCC          [0..16777216]
       
 17470 
       
 17471    -->
       
 17472 
       
 17473 
       
 17474 
       
 17475 Kennedy                      Informational                      [Page 7]
       
 17476 
       
 17477 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 17478 
       
 17479 
       
 17480    <!ENTITY % Digits "CDATA">
       
 17481    <!ENTITY % Precedence "CDATA">
       
 17482    <!ENTITY % IP4Addr "CDATA">
       
 17483    <!ENTITY % Class "CDATA">
       
 17484    <!ENTITY % Sec "CDATA">
       
 17485    <!ENTITY % Compartments "CDATA">
       
 17486    <!ENTITY % Handling "CDATA">
       
 17487    <!ENTITY % TCC "CDATA">
       
 17488 
       
 17489    <!ELEMENT ip (header, payload)>
       
 17490 
       
 17491    <!ELEMENT header (version, tos, total.length, id, flags, offset, ttl,
       
 17492                     protocol, checksum, source, destination, options,
       
 17493                     padding)>
       
 17494    <!-- length of header in 32-bit words -->
       
 17495    <!ATTLIST header
       
 17496              length %Digits; #REQUIRED>
       
 17497 
       
 17498    <!ELEMENT version EMPTY>
       
 17499    <!-- ip version. SHOULD be "4" -->
       
 17500    <!ATTLIST version
       
 17501              value   %Digits;  #REQUIRED>
       
 17502 
       
 17503    <!ELEMENT tos EMPTY>
       
 17504    <!ATTLIST tos
       
 17505              precedence   %Precedence;    #REQUIRED
       
 17506              delay    (normal | low)  #REQUIRED
       
 17507              throughput   (normal | high) #REQUIRED
       
 17508              relibility   (normal | high) #REQUIRED
       
 17509              reserved     CDATA #FIXED "0">
       
 17510 
       
 17511    <!ELEMENT total.length EMPTY>
       
 17512    <!--
       
 17513     total length of datagram (header and payload) in octets, MUST be
       
 17514     less than 65,535 (and SHOULD be less than 1024 for IPoXML on local
       
 17515     ethernets).
       
 17516    -->
       
 17517    <!ATTLIST total.length
       
 17518              value %Digits; #REQUIRED>
       
 17519 
       
 17520    <!ELEMENT id EMPTY>
       
 17521    <!-- 0 <= id <= 65,535  -->
       
 17522    <!ATTLIST id
       
 17523              value %Digits; #REQUIRED>
       
 17524 
       
 17525    <!ELEMENT flags EMPTY>
       
 17526    <!-- df = don't fragment, mf = more fragments  -->
       
 17527    <!ATTLIST flags
       
 17528 
       
 17529 
       
 17530 
       
 17531 Kennedy                      Informational                      [Page 8]
       
 17532 
       
 17533 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 17534 
       
 17535 
       
 17536           reserved CDATA  #FIXED "0"
       
 17537           df (may|dont)   #REQUIRED
       
 17538           mf (last|more)  #REQUIRED>
       
 17539 
       
 17540    <!ELEMENT offset EMPTY>
       
 17541    <!-- 0 <= offset <= 8192 measured in 8 octet (64-bit) chunks -->
       
 17542    <!ATTLIST offset
       
 17543              value %Digits; #REQUIRED>
       
 17544 
       
 17545    <!ELEMENT ttl EMPTY>
       
 17546    <!-- 0 <= ttl <= 255 -->
       
 17547    <!ATTLIST ttl
       
 17548              value %Digits; #REQUIRED>
       
 17549 
       
 17550    <!ELEMENT protocol EMPTY>
       
 17551    <!-- 0 <= protocol <= 255 (per IANA) -->
       
 17552    <!ATTLIST protocol
       
 17553              value %Digits; #REQUIRED>
       
 17554 
       
 17555    <!ELEMENT checksum EMPTY>
       
 17556    <!-- 0 <= checksum <= 65535 (over header only) -->
       
 17557    <!ATTLIST checksum
       
 17558              value %Digits; #REQUIRED>
       
 17559 
       
 17560    <!ELEMENT source EMPTY>
       
 17561    <!ATTLIST source
       
 17562              address %IP4Addr; #REQUIRED>
       
 17563 
       
 17564    <!ELEMENT destination EMPTY>
       
 17565    <!ATTLIST destination
       
 17566              address %IP4Addr; #REQUIRED>
       
 17567 
       
 17568    <!ELEMENT options ( end | noop | security | loose | strict | record
       
 17569                      | stream | timestamp )*>
       
 17570 
       
 17571    <!ELEMENT end EMPTY>
       
 17572    <!ATTLIST end
       
 17573              copied (0|1) #REQUIRED
       
 17574              class  CDATA #FIXED "0"
       
 17575              number CDATA #FIXED "0">
       
 17576 
       
 17577    <!ELEMENT noop EMPTY>
       
 17578    <!ATTLIST noop
       
 17579              copied (0|1) #REQUIRED
       
 17580              class  CDATA #FIXED "0"
       
 17581              number CDATA #FIXED "1">
       
 17582 
       
 17583    <!ELEMENT security EMPTY>
       
 17584 
       
 17585 
       
 17586 
       
 17587 Kennedy                      Informational                      [Page 9]
       
 17588 
       
 17589 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 17590 
       
 17591 
       
 17592    <!ATTLIST security
       
 17593              copied CDATA #FIXED "1"
       
 17594              class  CDATA #FIXED "0"
       
 17595              number CDATA #FIXED "2"
       
 17596              length CDATA #FIXED "11"
       
 17597              security %Sec; #REQUIRED
       
 17598              compartments %Compartments; #REQUIRED
       
 17599              handling %Handling; #REQUIRED
       
 17600              tcc %TCC; #REQUIRED>
       
 17601    <!ELEMENT loose (hop)+>
       
 17602    <!ATTLIST loose
       
 17603              copied CDATA #FIXED "1"
       
 17604              class  CDATA #FIXED "0"
       
 17605              number CDATA #FIXED "3"
       
 17606              length %Digits; #REQUIRED
       
 17607              pointer %Digits; #REQUIRED>
       
 17608 
       
 17609    <!ELEMENT hop EMPTY>
       
 17610    <!ATTLIST hop
       
 17611              address %IP4Addr; #REQUIRED>
       
 17612 
       
 17613    <!ELEMENT strict (hop)+>
       
 17614    <!ATTLIST strict
       
 17615              copied CDATA #FIXED "1"
       
 17616              class  CDATA #FIXED "0"
       
 17617              number CDATA #FIXED "9"
       
 17618              length %Digits; #REQUIRED
       
 17619              pointer %Digits; #REQUIRED>
       
 17620 
       
 17621    <!ELEMENT record (hop)+>
       
 17622    <!ATTLIST record
       
 17623              copied CDATA #FIXED "0"
       
 17624              class  CDATA #FIXED "0"
       
 17625              number CDATA #FIXED "7"
       
 17626              length %Digits; #REQUIRED
       
 17627              pointer %Digits; #REQUIRED>
       
 17628 
       
 17629    <!ELEMENT stream EMPTY>
       
 17630    <!-- 0 <= id <= 65,535 -->
       
 17631    <!ATTLIST stream
       
 17632              copied CDATA #FIXED "1"
       
 17633              class  CDATA #FIXED "0"
       
 17634              number CDATA #FIXED "8"
       
 17635              length CDATA #FIXED "4"
       
 17636              id %Digits; #REQUIRED>
       
 17637 
       
 17638    <!ELEMENT timestamp (tstamp)+>
       
 17639    <!-- 0 <= oflw <=15 -->
       
 17640 
       
 17641 
       
 17642 
       
 17643 Kennedy                      Informational                     [Page 10]
       
 17644 
       
 17645 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 17646 
       
 17647 
       
 17648    <!ATTLIST timestamp
       
 17649              copied CDATA #FIXED "0"
       
 17650              class  CDATA #FIXED "2"
       
 17651              number CDATA #FIXED "4"
       
 17652              length %Digits;  #REQUIRED
       
 17653              pointer %Digits; #REQUIRED
       
 17654              oflw %Digits;    #REQUIRED
       
 17655              flag (0 | 1 | 3)  #REQUIRED>
       
 17656 
       
 17657    <!ELEMENT tstamp EMPTY>
       
 17658    <!ATTLIST tstamp
       
 17659              time %Digits;   #REQUIRED
       
 17660              address %IP4Addr; #IMPLIED>
       
 17661    <!--
       
 17662        padding to bring header to 32-bit boundary.
       
 17663        pad MUST be "0"*
       
 17664     -->
       
 17665    <!ELEMENT padding EMPTY>
       
 17666    <!ATTLIST padding
       
 17667              pad CDATA #REQUIRED>
       
 17668 
       
 17669    <!-- payload MUST be encoded as base-64 [RFC2045], as modified
       
 17670         by section 2.1 of this RFC -->
       
 17671    <!ELEMENT payload (CDATA)>
       
 17672 
       
 17673 7.2.  TCPoXML DTD
       
 17674 
       
 17675    <!--
       
 17676       DTD for TCP over XML.
       
 17677       Refer to this DTD as:
       
 17678 
       
 17679       <!DOCTYPE tcp PUBLIC "-//IETF//DTD BLOAT 1.0 TCP//EN" "bloat.dtd">
       
 17680    -->
       
 17681 
       
 17682    <!-- the pseudoheader is only included for checksum calculations -->
       
 17683    <!ELEMENT tcp (tcp.pseudoheader?, tcp.header, payload)>
       
 17684 
       
 17685    <!ELEMENT tcp.header (src, dest, sequence, acknowledgement, offset,
       
 17686                          reserved, control, window, checksum, urgent,
       
 17687                          tcp.options, padding)>
       
 17688 
       
 17689    <!ELEMENT src EMPTY>
       
 17690    <!-- 0 <= port <= 65,535 -->
       
 17691    <!ATTLIST src
       
 17692              port %Digits; #REQUIRED>
       
 17693 
       
 17694    <!ELEMENT dest EMPTY>
       
 17695    <!-- 0 <= port <= 65,535 -->
       
 17696 
       
 17697 
       
 17698 
       
 17699 Kennedy                      Informational                     [Page 11]
       
 17700 
       
 17701 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 17702 
       
 17703 
       
 17704    <!ATTLIST dest
       
 17705              port %Digits; #REQUIRED>
       
 17706 
       
 17707    <!ELEMENT sequence EMPTY>
       
 17708    <!-- 0 <= number <= 4294967295 -->
       
 17709    <!ATTLIST sequence
       
 17710              number %Digits; #REQUIRED>
       
 17711 
       
 17712    <!ELEMENT acknowledgement EMPTY>
       
 17713    <!-- 0 <= number <= 4294967295 -->
       
 17714    <!ATTLIST acknowledgement
       
 17715              number %Digits; #REQUIRED>
       
 17716 
       
 17717    <!ELEMENT offset EMPTY>
       
 17718    <!-- 0 <= number <= 255 -->
       
 17719    <!ATTLIST offset
       
 17720              number %Digits; #REQUIRED>
       
 17721 
       
 17722    <!ELEMENT reserved EMPTY>
       
 17723    <!ATTLIST reserved
       
 17724              value CDATA #FIXED "0">
       
 17725 
       
 17726    <!ELEMENT control EMPTY>
       
 17727    <!ATTLIST control
       
 17728              urg (0|1) #IMPLIED
       
 17729              ack (0|1) #IMPLIED
       
 17730              psh (0|1) #IMPLIED
       
 17731              rst (0|1) #IMPLIED
       
 17732              syn (0|1) #IMPLIED
       
 17733              fin (0|1) #IMPLIED>
       
 17734 
       
 17735    <!ELEMENT window EMPTY>
       
 17736    <!-- 0 <= size <= 65,535 -->
       
 17737    <!ATTLIST window
       
 17738              size %Digits; #REQUIRED>
       
 17739 
       
 17740    <!--
       
 17741       checksum as in ip, but with
       
 17742       the following pseudo-header added into the tcp element:
       
 17743      -->
       
 17744    <!ELEMENT tcp.pseudoheader (source, destination, protocol,
       
 17745                                tcp.length)>
       
 17746 
       
 17747    <!--
       
 17748       tcp header + data length in octets. does not include the size of
       
 17749 
       
 17750       the pseudoheader.
       
 17751     -->
       
 17752 
       
 17753 
       
 17754 
       
 17755 Kennedy                      Informational                     [Page 12]
       
 17756 
       
 17757 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 17758 
       
 17759 
       
 17760    <!ELEMENT tcp.length EMPTY>
       
 17761    <!ATTLIST tcp.length
       
 17762              value %Digits; #REQUIRED>
       
 17763 
       
 17764    <!ELEMENT urgent EMPTY>
       
 17765    <!-- 0 <= pointer <= 65,535 -->
       
 17766    <!ATTLIST urgent
       
 17767              pointer %Digits; #REQUIRED>
       
 17768 
       
 17769    <!ELEMENT tcp.options (tcp.end | tcp.noop | tcp.mss)+>
       
 17770 
       
 17771    <!ELEMENT tcp.end EMPTY>
       
 17772    <!ATTLIST tcp.end
       
 17773              kind CDATA #FIXED "0">
       
 17774 
       
 17775    <!ELEMENT tcp.noop EMPTY>
       
 17776    <!ATTLIST tcp.noop
       
 17777              kind CDATA #FIXED "1">
       
 17778 
       
 17779    <!ELEMENT tcp.mss EMPTY>
       
 17780    <!ATTLIST tcp.mss
       
 17781              kind CDATA #FIXED "2"
       
 17782              length CDATA #FIXED "4"
       
 17783              size %Digits; #REQUIRED>
       
 17784 
       
 17785 7.3.  UDPoXML DTD
       
 17786 
       
 17787    <!--
       
 17788       DTD for UDP over XML.
       
 17789       Refer to this DTD as:
       
 17790 
       
 17791       <!DOCTYPE udp PUBLIC "-//IETF//DTD BLOAT 1.0 UDP//EN" "bloat.dtd">
       
 17792    -->
       
 17793 
       
 17794    <!ELEMENT udp (udp.pseudoheader?, udp.header, payload)>
       
 17795 
       
 17796    <!ELEMENT udp.header (src, dest, udp.length, checksum)>
       
 17797 
       
 17798    <!ELEMENT udp.pseudoheader (source, destination, protocol,
       
 17799                                udp.length)>
       
 17800 
       
 17801    <!--
       
 17802       udp header + data length in octets. does not include the size of
       
 17803       the pseudoheader.
       
 17804     -->
       
 17805    <!ELEMENT udp.length EMPTY>
       
 17806    <!ATTLIST udp.length
       
 17807              value %Digits; #REQUIRED>
       
 17808 
       
 17809 
       
 17810 
       
 17811 Kennedy                      Informational                     [Page 13]
       
 17812 
       
 17813 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 17814 
       
 17815 
       
 17816 8. Security Considerations
       
 17817 
       
 17818    XML, as a subset of SGML, has the same security considerations as
       
 17819    specified in SGML Media Types [RFC1874].  Security considerations
       
 17820    that apply to IP, TCP and UDP also likely apply to BLOAT as it does
       
 17821    not attempt to correct for issues not related to message format.
       
 17822 
       
 17823 9.   References
       
 17824 
       
 17825    [JABBER]    Miller, J., "Jabber", draft-miller-jabber-00.txt,
       
 17826                February 2002. (Work in Progress)
       
 17827 
       
 17828    [RFC768]    Postel, J., "User Datagram Protocol", STD 6, RFC 768,
       
 17829                August 1980.
       
 17830 
       
 17831    [RFC791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
       
 17832                September 1981.
       
 17833 
       
 17834    [RFC793]    Postel, J., "Transmission Control Protocol", STD 7, RFC
       
 17835                793, September 1981.
       
 17836 
       
 17837    [RFC894]    Hornig, C., "Standard for the Transmission of IP
       
 17838                Datagrams over Ethernet Networks.", RFC 894, April 1984.
       
 17839 
       
 17840    [RFC1042]   Postel, J. and J. Reynolds, "Standard for the
       
 17841                Transmission of IP Datagrams Over IEEE 802 Networks", STD
       
 17842                43, RFC 1042, February 1988.
       
 17843 
       
 17844    [RFC1123]   Braden, R., "Requirements for Internet Hosts -
       
 17845                Application and Support", RFC 1123, October 1989.
       
 17846 
       
 17847    [RFC1874]   Levinson, E., "SGML Media Types", RFC 1874, December
       
 17848                1995.
       
 17849 
       
 17850    [RFC2003]   Perkins, C., "IP Encapsulation within IP", RFC 2003,
       
 17851                October 1996.
       
 17852 
       
 17853    [RFC2045]   Freed, N. and N. Borenstein, "Multipurpose Internet Mail
       
 17854                Extensions (MIME) Part One: Format of Internet Message
       
 17855                Bodies", RFC 2045, November 1996.
       
 17856 
       
 17857    [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
       
 17858                Requirement Levels", BCP 14, RFC 2119, March 1997.
       
 17859 
       
 17860    [RFC2279]   Yergeau, F., "UTF-8, a transformation format of ISO
       
 17861                10646", RFC 2279, January 1998.
       
 17862 
       
 17863 
       
 17864 
       
 17865 
       
 17866 
       
 17867 Kennedy                      Informational                     [Page 14]
       
 17868 
       
 17869 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 17870 
       
 17871 
       
 17872    [RFC2460]   Deering, S. and R. Hinden, "Internet Protocol, Version 6
       
 17873                (IPv6) Specification", RFC 2460, December 1998.
       
 17874 
       
 17875    [RFC3080]   Rose, M., "The Blocks Extensible Exchange Protocol Core",
       
 17876                RFC 3080, March 2001.
       
 17877 
       
 17878    [SOAP]      Box, D., Ehnebuske, D., Kakivaya, G., Layman, A.,
       
 17879                Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D.,
       
 17880                "Simple Object Access Protocol (SOAP) 1.1" World Wide Web
       
 17881                Consortium Note, May 2000 http://www.w3.org/TR/SOAP/
       
 17882 
       
 17883    [XML]       Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible
       
 17884                Markup Language (XML)" World Wide Web Consortium
       
 17885                Recommendation REC- xml-19980210.
       
 17886                http://www.w3.org/TR/1998/REC-xml-19980210
       
 17887 
       
 17888 10.  Author's Address
       
 17889 
       
 17890    Hugh Kennedy
       
 17891    Mimezine
       
 17892    1060 West Addison
       
 17893    Chicago, IL 60613
       
 17894    USA
       
 17895 
       
 17896    EMail: kennedyh@engin.umich.edu
       
 17897 
       
 17898 
       
 17899 
       
 17900 
       
 17901 
       
 17902 
       
 17903 
       
 17904 
       
 17905 
       
 17906 
       
 17907 
       
 17908 
       
 17909 
       
 17910 
       
 17911 
       
 17912 
       
 17913 
       
 17914 
       
 17915 
       
 17916 
       
 17917 
       
 17918 
       
 17919 
       
 17920 
       
 17921 
       
 17922 
       
 17923 Kennedy                      Informational                     [Page 15]
       
 17924 
       
 17925 RFC 3252         Binary Lexical Octet Ad-hoc Transport      1 April 2002
       
 17926 
       
 17927 
       
 17928 11.  Full Copyright Statement
       
 17929 
       
 17930    Copyright (C) The Internet Society (2002).  All Rights Reserved.
       
 17931 
       
 17932    This document and translations of it may be copied and furnished to
       
 17933    others, and derivative works that comment on or otherwise explain it
       
 17934    or assist in its implementation may be prepared, copied, published
       
 17935    and distributed, in whole or in part, without restriction of any
       
 17936    kind, provided that the above copyright notice and this paragraph are
       
 17937    included on all such copies and derivative works.  However, this
       
 17938    document itself may not be modified in any way, such as by removing
       
 17939    the copyright notice or references to the Internet Society or other
       
 17940    Internet organizations, except as needed for the purpose of
       
 17941    developing Internet standards in which case the procedures for
       
 17942    copyrights defined in the Internet Standards process must be
       
 17943    followed, or as required to translate it into languages other than
       
 17944    English.
       
 17945 
       
 17946    The limited permissions granted above are perpetual and will not be
       
 17947    revoked by the Internet Society or its successors or assigns.
       
 17948 
       
 17949    This document and the information contained herein is provided on an
       
 17950    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
       
 17951    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
       
 17952    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
       
 17953    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
       
 17954    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
       
 17955 
       
 17956 Acknowledgement
       
 17957 
       
 17958    Funding for the RFC Editor function is currently provided by the
       
 17959    Internet Society.
       
 17960 
       
 17961 
       
 17962 
       
 17963 
       
 17964 
       
 17965 
       
 17966 
       
 17967 
       
 17968 
       
 17969 
       
 17970 
       
 17971 
       
 17972 
       
 17973 
       
 17974 
       
 17975 
       
 17976 
       
 17977 
       
 17978 
       
 17979 Kennedy                      Informational                     [Page 16]
       
 17980