Internet DRAFT - draft-gothberg-micro-ip

draft-gothberg-micro-ip








INTERNET-DRAFT                                               D. Gothberg
Category: Experimental                                Computer Club West
<draft-gothberg-micro-ip-00.txt>
September 2000                                  Comments are welcome at:
Expires: March 2001                                   david@gothberg.com


                  Micro-IP for embedded systems


Status of this Memo

   This document is an Internet-Draft and is in full conformance 
   with all provisions of Section 10 of RFC2026.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF), its areas, and its working groups.  Note that
   other groups may also distribute working documents as
   Internet-Drafts.

   Internet-Drafts are draft documents valid for a maximum of six
   months and may be updated, replaced, or obsoleted by other
   documents at any time.  It is inappropriate to use Internet-
   Drafts as reference material or to cite them other than as
   "work in progress."

   The list of current Internet-Drafts can be accessed at
   http://www.ietf.org/ietf/1id-abstracts.txt

   The list of Internet-Draft Shadow Directories can be accessed at
   http://www.ietf.org/shadow.html.

Abstract

   This protocol is intended to provide easy communication between 
   small embedded nodes and between those nodes and the Internet. 
   Typically this means nodes in vehicles, home-appliances or nodes 
   on computerised machinery.














Gothberg                     Experimental                       [Page N]

INTERNET-DRAFT       Micro-IP for embedded systems              May 2000


Table of Contents

   0.   Some comments to this draft  . . . . . . . . . . . . . . . . N
   1.   Introduction . . . . . . . . . . . . . . . . . . . . . . . . N
   2.   Conventions of this document . . . . . . . . . . . . . . . . N
   3.   Protocol layers  . . . . . . . . . . . . . . . . . . . . . . N
   4.   Micro-IP datagram format . . . . . . . . . . . . . . . . . . N
   5.   Example network  . . . . . . . . . . . . . . . . . . . . .  NN
   6.   Addressing . . . . . . . . . . . . . . . . . . . . . . . .  NN
   7.   Protocols  . . . . . . . . . . . . . . . . . . . . . . . .  NN
   8.   Checksums  . . . . . . . . . . . . . . . . . . . . . . . .  NN
   9.   Connecting Micro-IP to the Internet  . . . . . . . . . . .  NN
   10.  UDP for Micro-IP . . . . . . . . . . . . . . . . . . . . .  NN
   11.  TCP for Micro-IP . . . . . . . . . . . . . . . . . . . . .  NN
   12.  ICMP for Micro-IP  . . . . . . . . . . . . . . . . . . . .  NN
   13.  ARP for Micro-IP . . . . . . . . . . . . . . . . . . . . .  NN
   14.  RARP, BOOTP and DHCP for Micro-IP  . . . . . . . . . . . .  NN
   15.  DNS for Micro-IP . . . . . . . . . . . . . . . . . . . . .  NN
   16.  Micro-IP over serial links . . . . . . . . . . . . . . . .  NN
   17.  Fragmenting Micro-IP datagrams . . . . . . . . . . . . . .  NN
   18.  Quality of Service for Micro-IP  . . . . . . . . . . . . .  NN
   19.  Security considerations  . . . . . . . . . . . . . . . . .  NN
   20.  Some comments  . . . . . . . . . . . . . . . . . . . . . .  NN
   21.  References . . . . . . . . . . . . . . . . . . . . . . . .  NN
   22.  Authors' addresses . . . . . . . . . . . . . . . . . . . .  NN
   23.  Full copyright statement . . . . . . . . . . . . . . . . .  NN



0.  Some comments to this draft

   We have chosen to call this protocol Micro-IP. We would not recommend 
   the use of the terms "embedded IP" or "mini IP" because they already 
   have other meaning in the networking industry.

   This document is specifying a whole new version of IP that might 
   become very widespread in the embedded world. We who build embedded 
   systems are in a need of this kind of minimalistic IP. Do not 
   condemn this protocol, instead help us get it right!



1.  Introduction

   This protocol is intended to provide internet-like communication 
   between small embedded nodes on the same or different buses. It is 
   also intended to provide those nodes with communication to and from 
   the Internet. Typically this means nodes in vehicles, home-appliances 
   or nodes on computerised machinery.

   This protocol is not intended to replace the real-time protocols used 
   in embedded systems. 

   Micro-IP much resembles IPv4. But all "unnecessary" functions have 
   been removed and some things have been simplified. Micro-IP uses
   one byte addressing thus limiting the number of nodes on a network 
   or group of networks to 252. (There are really 256 addresses but 
   some are reserved.) Micro-IP networks can be connected to the 
   Internet, both IPv4 and IPv6, using techniques such as proxying.
   Micro-IP also includes a technique we call "address mapping" that 
   makes Micro-IP nodes visible on the Internet. Thus making it possible 
   for an embedded node on a Micro-IP network to act as a full 
   fledged server towards the Internet.

   1.1  Why Micro-IP?

      We are now adding connectivity to ever-smaller computers. Some 
      cars of today (year 2000) have as much as 26 computerised nodes 
      connected together over three data buses. Homes are being built 
      where your dish washer can send status reports to your cellular 
      phone. Engines in power plants and bigger ships have up to three 
      data buses with multiple nodes and terminals. Now we are 
      connecting all those small nodes to bigger networks and even to 
      the Internet so that we can get status reports, remote control 
      them and even update their software. Today it is costly to make 
      all these nodes interoperate since all of these small networks use 
      different communication protocols.

      The IP suite of protocols have proven unbeatable when it comes to
      connecting many different nodes over many different network types.
      IP seams to be replacing all other internetworking protocols. 
      Because of that people have started to put IP into embedded nodes. 
      But IPv4 is to big for many embedded nodes. And now the Internet 
      is going towards IPv6 that takes up even more space. So we need a 
      lightweight IP protocol that fits into embedded systems but still 
      interoperates neatly with both IPv4 and IPv6. That's what Micro-IP 
      is all about.

   1.2  Designing the protocol

      When constructing a light weight IP-protocol there is a number of 
      things one should keep in mind. In IPv4 and IPv6 as much 
      intelligence as possible is put in the endpoints and as little as 
      possible in the routers. In embedded systems it is probably better 
      to move some of the intelligence to the routers since the nodes 
      are very small but the routers can be allowed to be big. Many 
      implementations of IPv4 for embedded systems are only partial 
      implementations. Actually, some parts of the functionality in IPv4 
      are not even used in bigger Internet hosts. So it should be ok to 
      leave out all the functionality that isn't normally used. What is 
      important is that the applications gets the services they need.

      All this boils down to some basic demands:

       *  The applications needs to connect to the real Internet.

       *  Preferably the applications should not need to be
          aware of that they are running on Micro-IP. That is, 
          they need something that looks like TCP and UDP.

       *  Micro-IP should take up very little code space and
          memory space in the nodes. It may demand more of
          the routers.

       *  If possible, Micro-IP should be easy to understand
          and easy to implement.



2.  Conventions of this document

   In this document one byte is always eight bits.

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 
   document are to be interpreted as described in RFC 2119.

   A note for the reader who is more familiar with embedded systems than 
   IP systems: Packet, frame, datagram, segment and message are almost 
   synonymous. In "Internet lingua" they use different words depending 
   on what type of protocol and what level the protocol works at. The 
   proper usage seems to be CAN frame, Ethernet frame, ICMP message, IP 
   datagram, UDP datagram and TCP segment.

   The diagrams in this document put the first transmitted byte in the 
   upper left corner of the diagrams:
                                   
      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |       First byte      |      Second byte      |
    +-----------------------+-----------------------+
    |       Third byte      |     Fourth byte       |
    +-----------------------+-----------------------+

   The diagrams also put the most significant bit on the left:
    
      0  1  2  3  4  5  6  7 
    +--+--+--+--+--+--+--+--+
    | 1  0  0  0  0  0  0  0|   = Decimal value 128.
    +-----------------------+

   The first transmitted byte is the most significant byte. That is, the 
   network byte order is "big endian".

      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    | 1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0|   = Decimal value 
    +-----------------------+-----------------------+     32768.
     First byte transmitted  Second byte transmitted



3.  Protocol layers

   The protocol layers of a Mini-IP stack is the same as for most
   other IP-protocols:

    +------+  +------+-----+  +-----+-----+--------+  
    | Ping |  | TFTP | Wap |  | Web | FTP | Telnet |   Application layer
    |      |  +------+-----+  +-----+-----+--------+
    +------+  |     UDP    |  |         TCP        |   Transport layer
    |      +--+------------+--+--------------------+
    | ICMP |                                       |
    +------+         Micro-IP                +-----+   Internet layer
    |                                        | ARP |
    +---------------+-------+----------------+-----+   
    |  PPP or SLIP  |       | Local network driver |   Network Interface 
    |               |       |                      |   layer
    +---------------+       +----------------------+
    | Serial device |       | Local network device |   Hardware layer
    +---------------+       +----------------------+


   Note that we have moved ARP up one layer compared to IPv4.



4.  Micro-IP datagram format
 
   Since this document is still very much "work in progress" the exact 
   format of the Micro-IP datagram is not yet decided. Instead there are 
   three slightly different suggestions.


   Suggested IP datagram format A:

      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |  Version  |   Hops    |     Total length      |
    +-----------+-----------+-----------------------+
    |     Source address    |  Destination address  |
    +-----------------------+-----------------------+
    |                   Checksum                    |
    +-----------------------+-----------------------+
    |       Protocol        |    Flags / Padding    |
    +-----------------------+-----------------------+
    |                     data                      |
                           ...
    |                   (N bytes)                   |
    +-----------------------------------------------+

   Suggested IP datagram format B:

      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |  Version  |   Hops    |     Total length      |
    +-----------+-----------+-----------------------+
    |     Source address    |  Destination address  |
    +-----------------------+-----------------------+
    |                   Checksum                    |
    +-----------------------+-----------------------+
    |       Protocol        |         Flow          |
    +-----------------------+-----------------------+
    |                     data                      |
                           ...
    |                   (N bytes)                   |
    +-----------------------------------------------+

   Suggested IP datagram format C:

      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |  Version  | Protocol  |     Total length      |
    +-----------+-----------+-----------------------+
    |     Source address    |  Destination address  |
    +-----------------------+-----------------------+
    |                   Checksum                    |
    +-----------------------------------------------+
    |                     data                      |
                           ...
    |                   (N bytes)                   |
    +-----------------------------------------------+


   An entire Micro-IP datagram including the header MUST NOT have a size 
   bigger than 255 bytes. The datagram header has several fields:

   Version             = 4 bits. Until IANA has assigned a version 
                         for Micro-IP this field SHOULD be set to 0.
                         When IANA have assigned a version the proper
                         value MUST be set.
   Hops                = 4 bits. Sender sets this field to 15. Each 
                         router MUST decrease it by 1. If hops reaches 0 
                         before the datagram has reached it's 
                         destination the datagram MUST be discarded.
   Total length        = 1 byte. Length of the entire datagram including 
                         both header and data.
   Destination address = 1 byte address of destination node.
   Source address      = 1 byte address of node who created the 
                         datagram.
   Protocol            = 1 byte or 4 bits. Specifies the transport layer 
                         protocol. That is, what kind of data is carried 
                         in the datagram. For-instance TCP=6 and UDP=17.
                         See section "Protocols" for more info.
   Flags / Padding     = 1 byte. To get the datagram header 16 bit 
                         aligned this padding byte is needed. It MAY be
                         used by the transport layer protocol (for 
                         instance TCP) for flags or other data.
   Flow                = 1 byte. If we decide to add Quality of Service 
                         to Micro-IP a flow byte is needed. The use of
                         this byte and QoS is discussed later on in this 
                         document.
   Checksum            = 2 bytes. The checksum is OPTIONAL. If there is 
                         no checksum the field MUST be set to 0. The 
                         checksum is calculated on the entire datagram. 
                         See section "Checksums" for more info.



5.  Example network

   Since this document is still very much "work in progress" the 
   addressing style to use in Micro-IP is not yet decided. Instead there 
   are two different suggestions. Suggestion B uses traditional 
   subnetting just like IPv4 does. (With one small difference: Default 
   gateways always respond to address 1 to make things slightly 
   simpler.) Suggestion A instead only uses ARP proxying. That means 
   nodes do not have to be subnet aware.


   Suggested addressing scheme A (routers use ARP proxying):

                  Link to the Internet <--------+
                                                |  185.15.7.2
                                                | (185.15.7.12)
       +-----+      +-----+                  +--+--+
       |     |      |     |                  |     | Internet
       |  7  +------+  5  |                  |  2  | proxy
       |     |      |     |                  |     |
       +-----+      +--+--+                  +--+--+
                       | (7)                    |
                       |      Micro-IP bus A    |
   ---+-------+--------+------------------------+-------------
      |       |
      |       | (11,12)
      |    +--+--+           +--+--+            +--+--+ This node
      |    |     |           |     |            |     | may be reachable
      |    | 10  | Router    | 11  |            | 12  | as 185.15.7.12
      |    |     |           |     |            |     | from the 
      |    +--+--+           +--+--+            +--+--+ Internet.
      |       |(2-9,20-22)      |                  |
      |       |                 |  Micro-IP bus B  |
      |    ---+-----------------+------------------+----------
      |
      |
      | (21,22)
   +--+--+            +--+--+              +--+--+
   |     |            |     |              |     |
   | 20  | Router     | 21  |              | 22  |
   |     |            |     |              |     |
   +--+--+            +--+--+              +--+--+
      | (2-19)           |                    |
      |                  |   Micro-IP bus C   |
   ---+------------------+--------------------+---------



   Suggested addressing scheme B (similar to the traditional approach):


                  Link to the Internet <--------+
                                                |  185.15.7.2
                                                | (185.15.7.12)
       +-----+      +-----+                  +--+--+
       |     |      |     |                  |     | Internet
       |   7 +------+     |                  |     | proxy
       |     |      |  5  |                  |  2  |
       +-----+      +--+--+                  +--+--+
                       | (7)                    |
                       |      Micro-IP bus A    |
   ---+-------+--------+------------------------+-------------
      |       |
      |       | (1)
      |    +--+--+           +--+--+            +--+--+ This node
      |    |  9  |           |     |            |     | may be reachable
      |    |     | Router    |     |            |     | as 185.15.7.12
      |    | 10  |           | 11  |            | 12  | from the 
      |    +--+--+           +--+--+            +--+--+ Internet.
      |       | (1)             |                  |
      |       |                 |  Micro-IP bus B  |
      |    ---+-----------------+------------------+----------
      |
      |
      | (21,22)
   +--+--+            +--+--+              +--+--+
   |  8  |            |     |              |     |
   |     | Router     |     |              |     |
   | 20  |            | 21  |              | 22  |
   +--+--+            +--+--+              +--+--+
      | (1)              |                    |
      |                  |   Micro-IP bus C   |
   ---+------------------+--------------------+---------


   Note that the traditional approach (suggestion B) is much more 
   complicated. It means nodes need to be subnet aware. It also means
   that routers sometimes have to use ICMP redirect to tell nodes where
   to send IP datagrams. An example: Node 2 want to send a datagram to
   node 22. Since node 22 is on another subnet node 2 will send the
   datagram to node 9 which is the default gateway for node 2. Node 9
   will forward the datagram to node 8 (since node 9 is a router it has
   more knowledge). Node 9 will also send an ICMP redirect message to
   to node 2 telling it that further datagrams to node 22 should be sent
   to node 8 instead.

   Suggestion A makes things much simpler. In this case node 2 does not 
   know about subnetting, instead it does an ARP request asking for 
   node 22. Since node 20 is the router that handles the datagrams for 
   node 22 node 20 answers the ARP request. Thus node 2 will send the 
   datagrams directly to node 20. This makes ICMP redirects obsolete.



6.  Addressing

   If we decide to use addressing scheme A: 
   A Micro-IP node responds to the same address on all it's devices. 
   Routers also responds on each device to all the addresses for which 
   it can forward datagrams to another subnet.

   If we decide to use addressing scheme B: 
   A Micro-IP node responds with different addresses on each device. 
   Each such address should fit into the range of the subnet to which 
   the device is connected. Routers should also respond to address 1 on 
   any device connected to a subnet on which the router is default 
   gateway.

   To make things simple this protocol uses several default addresses:

    0 = Internal loopback address. MUST never appear outside a node,
        except when a node is requesting information before it has 
        received an address. See section about "RARP, BOOTP and DHCP"
        for more info.
    1 = Default gateway. A node that is gateway on a subnet SHOULD 
        respond to it's own addresses on the respective devices. The 
        node SHOULD also respond to address 1 on the device that are 
        connected to the subnet. 
        NOTE! Address 1 is only necessary if we decide to use 
        traditional addressing (subnetting) instead of ARP proxying.
    2 = Internet proxy. The node that is gateway/proxy/bridge to 
        the "real" Internet MUST respond to address 2.
    3 = Reserved for future use.
    4-254 = Normal node addresses.
    255 = Broadcast.

   Note that the default addresses MUST NOT be used for any other 
   purpose than specified here. For instance, if there is no Internet 
   proxy the address 2 should not exist on the network.   

   Broadcasts should normally be retransmitted to all subnets. But if a
   router can handle the request that the broadcast contains the router
   may skip the retransmission to other subnets.



7.  Protocols

   The protocol numbers used in the datagram header SHOULD be the ones
   specified by IANA. See RFC 1700 "Assigned Numbers" in section 
   "Assigned Internet Protocol Numbers". Note that RFC 1700 now is 
   obsolete, to get the most recent information check www.iana.org.

   If we decide to use the Micro-IP datagram header with only a 4 bit 
   protocol field we of-course have to use other protocol numbers.

   Note that most protocols needs to be modified to behave well over 
   Micro-IP and to be resource efficient in embedded systems. Most of 
   all, each protocol must have a way to negotiate connections to the
   Internet through the Internet proxy.



8.  Checksums

   The checksum in the Micro-IP datagram header should be calculated on 
   the entire datagram with the Hops and Checksum fields considered to 
   be zero. The checksum field is the 16 bit one's complement of the 
   one's complement sum of all 16 bit words in the datagram. That's the 
   same type of checksum used in most other Internet protocols. It is
   a somewhat primitive checksum but it is fast, takes up very little 
   code space and has proven sufficient in most cases.

   Checksum rules:
    * A sender MAY add a checksum.
    * A router MAY add a checksum if there is none.
    * A router MAY check the checksum if there is one and discard the 
      datagram if it is erroneous.
    * The receiver SHOULD check the checksum and ignore (discard) the 
      datagram if it is erroneous.

   These rules allows nodes on error free networks to save processor 
   time by not calculating the checksum. Routers that is going to send
   the datagrams on to networks that are not error free can then add
   checksums to protect the datagrams. Thus demanding more of the 
   routers and less of the nodes. That's the right approach for embedded
   systems.


9.  Connecting Micro-IP to the Internet

   Addressing in Micro-IP datagrams isn't compatible with bigger 
   IP-networks. Therefor connection between such networks can not be 
   done at the internet layer. Instead the networks has to be connected 
   at the transport or application layer.

   There are at-least two ways to connect FROM a Micro-IP network TO a 
   bigger IP-network:

    A) Application layer proxying. That is, the node that has connection 
       to both the Internet and the Micro-IP network has proxy 
       applications/software. Applications on the Micro-IP network 
       addresses the proxy-applications and requests/leaves data and the 
       proxy application in turn connects to the Internet and 
       requests/leaves data.
         
    B) Transport layer proxying. That is, translation of data is done on 
       the transport layer. Similar to "socks-proxies". For-instance the 
       TCP protocol in the Micro-IP node connects to the Internet-proxy 
       and requests to be forwarded to a "real" Internet address. The 
       proxy opens a "real" TCP connection to the requested address and 
       then connects the two streams.

   There are at-least three ways to connect FROM a bigger IP-network TO 
   a Micro-IP network:

    A) Application layer proxying. As described above.

    B) Port mapping (transport layer). For instance the Internet-Proxy
       is set up in such a way that if it receives a TCP connection from 
       the Internet on a specific port the proxy in turn opens a 
       connection to a specific port on a specific Micro-IP node and 
       then connects the two streams.

    C) Address mapping (involves both transport and internet layer). 
       This means that the Micro-IP one-byte address is interpreted as 
       the last byte of the "real" IP-address. The Internet-proxy acts 
       as a router but also does protocol conversion since most 
       protocols will differ slightly between Micro-IP and the "real" 
       Internet. This means that the embedded node on the Micro-IP 
       network can act as a full fledged server towards the Internet.
       For the Micro-IP node this looks exactly the same as alternative 
       B, port mapping. It's only the proxy/router that needs to know 
       the difference. NOTE! Although address mapping is the neatest and 
       most compatible way to connect a node to the Internet this is 
       also the least secure way.



10.  UDP for Micro-IP

   The User Datagram Protocol provides an unreliable connectionless 
   delivery service. UDP uses port numbers to distinguish among multiple 
   services/programs running on the same node. UDP datagrams are 
   transported as data in IP datagrams.

   To support connection to the Internet Micro-IP UDP can handle 
   "extended addressing information". Nodes that do not need to 
   communicate with the Internet do not need to support extended 
   addressing.

   Internet applications that are Micro-IP aware should avoid sending 
   UDP messages larger than 200 bytes of data. 200 byte + 10 byte IP and 
   UDP headers = 45 bytes left for extended addressing information.

   Because UDP datagrams that comes from the Internet may carry much
   more than 200 bytes of data, Micro-IP UDP has a method to fragment 
   such messages and send them as several Micro-IP UDP datagrams. This 
   fragmenting capability is OPTIONAL since the fragmenting capability 
   uses too much memory for most embedded nodes. 


   Suggested UDP datagram format A:

                              8  9 10 11 12 13 14 15
                            +--+--+--+--+--+--+--+--+
     0  1  2  3  4  5  6  7 |Type |     Counter     |
    +--+--+--+--+--+--+--+--+-----+-----------------+
    |      Source port      |   Destination port    |
    +-----------------------+-----------------------+
    |                     data                      |
                           ...
    |                   (N bytes)                   |
    +-----------------------------------------------+

   Suggested UDP datagram format B:

      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |      Source port      |   Destination port    |
    +-----+-----------------+-----------------------+
    |Type |     Counter     |                       |
    +-----+-----------------+                       |
    |                     data                      |
                           ...
    |                   (N bytes)                   |
    +-----------------------------------------------+


   The UDP datagram header has several fields:

   Destination port = 1 byte address that identifies the service that
                      should receive the datagram.
   Source port      = 1 byte address that identifies the sending 
                      socket/thread.
   Type + counter   = 1 byte. (If the IP datagram has a Flags/Padding 
                      field: This is the Flags/Padding field from the IP 
                      datagram header.) This field is used to handle UDP 
                      addressing to and from the Internet and to handle 
                      UDP datagrams that exceeds the size Micro-IP can 
                      handle.

   The type field (two bits) tells what kind of UDP datagram it is. The 
   counter has different meaning depending on the type value.

   Type values:

    0 = Normal UDP datagram. The counter value has no meaning (should 
        be 0).
    1 = Extended UDP datagram. The datagram holds extended addressing 
        information and may be fragmented. The counter value tells how 
        many fragments to expect (including the first). If this is the 
        only fragment then counter = 1.
    2 = Succeeding fragment. Counter value tells which fragment this 
        is. First succeeding fragment should have counter = 1 and last
        fragment should have counter = (number of fragments - 1).

   10.1  Extended addressing information

      If a node wants to send a UDP datagram to the Internet it sends the
      UDP datagram to the Internet proxy. Since the datagram is not 
      intended for the Internet proxy the destination port number should 
      be set to 0. The real Internet address is put as the first bytes 
      in the data section followed by ASCII 13. Examples of valid 
      extended addressing information:

       www.ietf.org:80[ASCII 13]

       123.45.67.89.01:80[ASCII 13]

      Note that the extended addressing information may only be one line 
      of data and that IP numbers should be written in decimal using 
      ASCII. Also note that the extended addressing information is only 
      added to the first fragment (the fragment of type 1) if it is a 
      fragmented datagram.

      Incoming datagrams from the Internet works the same way. The 
      Internet proxy puts the source address (for instance 
      www.ietf.org:80) as extended address information in the UDP 
      datagram. Since the source port in the UDP datagram head has no 
      meaning the proxy may set it to 0. The Micro-IP node do not need 
      to understand the address information. The node simply copies the 
      information into the outgoing datagram when responding.

   10.2  Sending big UDP messages locally

      The fragmenting facility also makes it possible to send big UDP 
      messages between Micro-IP nodes. In that case there is no need for 
      extended addressing information. To indicate the lack of 
      addressing information an ASCII 13 should be put as the first byte 
      in the data area of the extended UDP datagram. Thus the receiving 
      node do not need to understand the lack of addressing information.

      NOTE! A receiving node MUST always use the senders source port as 
      destination port when responding. It's wrong to assume that the 
      port should be 0 just because there are extended addressing 
      information. For instance in the case where the extended address 
      is empty (local message) the source port definitely has a meaning.

   10.3  Error handling

      If a node does not support extended addressing or fragmented UDP 
      datagrams there are two ways it may respond to datagrams with type 
      values different from 0. The node can either simply ignore the 
      datagrams or it may send ICMP error messages indicating that it 
      does not support the features. If the sending node understands the 
      ICMP error message it may stop sending succeeding 
      datagrams/fragments.

   10.4  UDP Example

      Below is an example of a complete IP datagram and UDP datagram. It 
      is the first datagram of a fragmented message to node 12, port 
      119. It is a response to a call to the IETF web site. (Note that 
      web calls aren't really done with UDP.)

                                                         Example field 
      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15     values:
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |  Version  |   Hops    |     Total length      |    0, 15, 255
    +-----------+-----------+-----------------------+
    |     Source address    |  Destination address  |    2, 12
    +-----------------------+-----------------------+
    |                   Checksum                    |    0
    +-----------------------+--+--+--+--+--+--+--+--+
    |       Protocol        |Type |     Counter     |    17, 1, 40
    +-----------------------+-----+-----------------+
    |      Source port      |   Destination port    |    0, 119
    +-----------------------+-----------------------+
    |                                               |
           Extended address followed by ASCII 13         www.ietf.org:80
    |                  (N bytes)                    |    13
    +-----------------------------------------------+
    |                     data                      |    Content type:
                           ...                           text/html 
    |                   (N bytes)                   |    
    +-----------------------------------------------+



11.  TCP for Micro-IP

   The Transmission Control Protocol provides a reliable 
   connection-oriented delivery service. TCP uses port numbers to 
   distinguish among multiple services/programs running on the same node 
   and to distinguish among different connections to/from the same node. 
   TCP segments are transported as data in IP datagrams.

   The Micro-IP TCP is similar to the TCP used in IPv4. (See RFC 793 
   "Transmission Control Protocol".) But the Micro-IP TCP differs in 
   some ways:
   * It does not support out of band data (urgent pointer).
   * It uses two way handshakes instead of three way handshakes.
   * It may use extended addressing information to support connections
     to and from the Internet.

   It is strongly RECOMMENDED that implementations of Micro-IP TCP 
   includes techniques to handle such things as congestion and silly 
   window. Congestion can occur in any network that consists of more 
   than one physical network.


   Suggested TCP segment format A:

                              8  9 10 11 12 13 14 15
                            +--+--+--+--+--+--+--+--+
     0  1  2  3  4  5  6  7 |    Flags / Padding    |
    +--+--+--+--+--+--+--+--+-----------------------+
    |      Source port      |   Destination port    |
    +-----------------------+-----------------------+
    |                Sequence number                |
    +-----------------------------------------------+
    |                  ACK number                   |
    +-----------------------------------------------+
    |                  Window size                  |
    +-----------------------------------------------+
    |                     data                      |
                           ...
    |                   (N bytes)                   |
    +-----------------------------------------------+

   Suggested TCP segment format B:

      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |      Source port      |   Destination port    |
    +-----------------------+-----------------------+
    |                Sequence number                |
    +-----------------------------------------------+
    |                  ACK number                   |
    +-----------------------------------------------+
    |                  Window size                  |
    +-----------------------------------------------+
    |         Flags         |                       |
    +-----------------------+                       |
    |                     data                      |
                           ...
    |                   (N bytes)                   |
    +-----------------------------------------------+

   Suggested TCP segment format C:

      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |      Source port      |   Destination port    |
    +-----------------------+-----------------------+
    |                Sequence number                |
    +-----------------------------------------------+
    |                  ACK number                   |
    +-----------------------------------+-----------+
    |                  Window size      |   Flags   |
    +-----------------------------------+-----------+
    |                     data                      |
                           ...
    |                   (N bytes)                   |
    +-----------------------------------------------+


   The TCP segment header has several fields:

   Destination port = 1 byte address that identifies the service that
                      should receive the segment.
   Source port      = 1 byte address that identifies the sending 
                      socket/thread.

   **** Not written yet ****



12.  ICMP for Micro-IP

   **** Not written yet ****

   (The protocol should preferable be designed in such a way that ICMP
   messages will not be necessary.)



13.  ARP for Micro-IP

   The Address Resolution Protocol ...

   **** Not written yet ****

   Note that Micro-IP runs ARP on the Internet layer instead of the 
   Network Interface layer. Thus Micro-IP ARP uses IP broadcast.
   The reason we have chosen to move ARP one layer up compared to other
   IP protocols is to become more independent of the network type and
   to not unnecessarily use up addressing space in the local network.
   Having ARP running on the Internet layer even makes it work well over
   serial connections!



14.  RARP, BOOTP and DHCP for Micro-IP

   **** Not written yet ****

   (When requesting "boot data" the source address has no meaning so it 
   should be set to 0.)



15.  DNS for Micro-IP

   **** Not written yet ****

   (Micro-IP nodes should not need to bother about Internet addresses.
   The "extended addressing" in the Micro-IP UDP and TCP takes care of 
   that most of the time. So DNS is mostly needed for local address 
   resolving.)



16.  Micro-IP over serial links

   When transporting Micro-IP datagrams over serial links we recommend 
   using PPP. (Point-to-Point Protocol, RFC 1661.) If there isn't room 
   enough for PPP and the serial link is reasonably error free we 
   recommend using SLIP. (Serial Line Internet Protocol, RFC 1055.) Most 
   serial links can be made sufficiently error free by using shielded 
   cables.



17.  Fragmenting Micro-IP datagrams

   Micro-IP does not support datagram fragmenting. Micro-IP expects that 
   a full sized datagram (255 bytes) reaches it's destination in one 
   piece. 

   When transporting Micro-IP datagrams over buses that can not handle 
   datagrams as big as 255 bytes we recommend using the basic parts of 
   the ISO 15765-2 protocol for fragmenting and reassembly of the 
   datagrams. ISO 15765-2 is commonly used over CAN-buses in both 
   vehicles and industrial machines. It is also the protocol used in 
   OSEK/COM. (CAN = Controller Area Network = A real-time bus that only 
   has 8 bytes of data in each frame. OSEK is an initiative to 
   standardise embedded real-time operating systems.)

   Note that fragmented Micro-IP datagrams MUST be reassembled at the 
   next router.

   ISO 15765-2 basically works as follows:

   **** Not written yet ****



18.  Quality of Service for Micro-IP

   The author of this document do not believe that Micro-IP should have 
   support for QoS. It would make nodes and routers far to complex for 
   embedded systems. But should "the general audience" demand QoS for 
   Micro-IP a flow byte needs to be added to the Micro-IP datagram 
   header. How the flow byte should be used will be specified if we 
   decide to add QoS.



19.  Security considerations

    **** Not written yet ****



20.  Some comments

   The use of "extended addressing" makes it possible to connect 
   Micro-IP networks to just about any network, be it IPv4, IPv6 or
   something totally different. It is even possible to connect several
   Micro-IP networks to the same proxy thus allowing much more than 251 
   nodes in Micro-IP networks.



21.  References

   [1]  Malkin, G., Editor, "Internet Users' Glossary", FYI 18, 
        RFC 1983, August 1996

   [2]  Bradner S., "Key words for use in RFCs to Indicate Requirement 
        Levels", BCP 14, RFC 2119, March 1997

   [3]  Reynolds, J., "Assigned Numbers", STD 2, RFC 1700, October 1994

   [4]  Postel, J., "Internet Protocol - DARPA Internet Program
        Protocol Specification", STD 5, RFC 791, DARPA,
        September 1981

   [5]  Postel, J., Editor, "Transmission Control Protocol", STD 7, 
        RFC 793, September 1981

   [6]  Romkey, J.L., "Non-standard for transmission of IP datagrams 
        over serial lines: SLIP", STD 47, RFC 1055, June 1988

   [7]  Simpson W., Editor, "The Point-to-Point Protocol (PPP)", 
        STD 51, RFC 1661, July 1994

   [8]  International Organization for Standardization, "Road vehicles 
        -- Diagnostics on Controller Area Networks (CAN) -- Part 2: 
        Network layer services", ISO/DIS 15765-2, (work in progress)



22.  Authors' addresses

   Micro-IP web site: www.micro-ip.org

   To join the Micro-IP mailing list, send an email to:
   micro-ip-subscribe@egroups.com


   David Gothberg
   Studiegangen 7-208
   SE-416 81 Gothenburg
   SWEDEN

   Phone, home: +46-31-459856
   Phone, work: +46-31-7033252
   Email: david@gothberg.com
   http://hem.passagen.se/davidgot/



23.  Full copyright statement

   Copyright (C) The Internet Society (2000).  All Rights Reserved.

   This document and translations of it may be copied and furnished 
   to others, and derivative works that comment on or otherwise
   explain it or assist in its implementation may be prepared, copied,
   published and distributed, in whole or in part, without 
   restriction of any kind, provided that the above copyright notice
   and this paragraph are included on all such copies and derivative
   works.  However, this document itself may not be modified in any
   way, such as by removing the copyright notice or references to the
   Internet Society or other Internet organizations, except as needed
   for the purpose of developing Internet standards in which case the
   procedures for copyrights defined in the Internet Standards
   process must be followed, or as required to translate it into
   languages other than English.

   The limited permissions granted above are perpetual and will not
   be revoked by the Internet Society or its successors or assigns.

   This document and the information contained herein is provided on
   an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET
   ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR
   IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.



   This document expires March 2001.