Protocol     

IPv5 certified routers must support a few different services including address allocation, packet forwarding, multicasting, and of course routing. A router must support a full packet size of 20,000 bits. This stipulation ensures that the maximum header-length of a non-multicast packet (6729 bits) is supported, along with leeway for a fair sized minimum payload.

Addresses are currently up to 120 bits long and are written with sets of base-32 numbers from 0 to zzzz using Crockford's Base32 separated by dots. For example, ag4.45.12y8.jiv0, and 3cf.1234.abcd.3v.90pv.2fjd.cvre are all valid addresses.
Using this format, the highest 120 bit address is zzzz.zzzz.zzzz.zzzz.zzzz.zzzz.

Address allocation and network structure

Addresses are allocated automatically in a hierarchical fashion and networks can be set up separately, then linked together later without any configuration. The top level (tier 14) router of the network always has the address 0. The address-space is split up into 15 tiers (tier 0 through 14) all but one of which correspond to a 5-bit part of the IP address. tier 0 is only 2 bits.

A router is allowed to connect to any other router it wants, but each router may only have one parent. In IPv5, a parent of a router is more than a simple node in the tree-like hierarchy of the IPv5 network. The parent is responsible for allocating and changing the IP address of its children and verifying routing information like the identity of routers connected to the child through shortcuts (shortcuts are connections between routers that don't have a parent-child relationship - connections between siblings are considered shortcuts).

When a parentless router connects to another parentless router, the router that can support more addresses will become the parent of the other router (provided it can support the address space of the other network along with its own), but the network of the router with the least allocated addresses will be the one to change IP addresses.

When routers that already have parents connect to each other, these routers can become a shortcut if they are already in the same network. If they are not in the same network, it is possible for the top-tier root router of one network to form a virtual connection to the shortcut router in the other network (or another router in that network that can support both address spaces). To facilitate this, a router can send a special packet that specifies the interface number to forward a packet to (rather than an IP address). Interface forwarding allows a router to send a packet to a network it would not otherwise be able to support, if another router tells it what interface it needs to send the packet on.

Routers have permissions that can allow or disallow certain actions like reordering the network, or forcing IP addresses to change.

The only thing a child needs to connect to the rest of the internet is a parent - no shortcuts are necessary. However, if a router gets cut off to its parent, it goes into panic mode, during which it attempts to find its parent through shortcuts. If it cannot find its parent or if its parent instructs it to find a new parent, it will attempt to become the child of one of its former shortcut routers. If the router has no shortcuts or if its shortcuts cannot support it, the router will either severe and create its own network or will perform some as-of-yet unspecified techniques to communicate through a shortcut that cannot support it (perhaps reclaiming unused IPs until it fits as the child of its shortcut router, or perhaps becoming something like a NAT). This protocol makes the network robust in both small and catastrophic failures, and keeps the systems that are connected in contact with each other despite a failure of the rest of the network.

The routing protocol is optimized for quick route changes - especially notification and propagation of broken links, so the internet is not significantly affected by a major link breakage.


(Click to enlarge)

Groupcasting

A groupcast is a type of multicast that uses a remote server to relay a packet to many different recipients. A groupcast router may inform the sender of a multi-cast packet that it can handle groupcasting if the sender of the multi-cast packet has the groupcast request bit set to 1. A willing groupcast router will send back a packet indicating its IP address, and the amount of memory it has to store IP addresses it can send to. The sending system will then send a packet with encoded addresses in it (encoded in one of the types of encoding given by multicast branching types 1, 2, or 3).

Once the groupcasting host received the encoded addresses, it verifies with the system at each address that they actually want to receive the broadcast. To do this, the groupcasting host first sets up an IPsec connection with the system at an address, sends a packet denoting its address and its groupcasting code, and waits for an encoded verification to be sent so that it knows that host is actually the one that wants the groupcast.

Once these connections are verified (or denied or time out), the groupcasting host will inform the system requesting groupcast service how many systems accepted groupcasting (perhaps even the actual addresses that accepted). The sender can then send packets to the groupcasting host, and each packet will be forwarded to each address.

The groupcasting host has the authority to choose how it will send the groupcast, it can either send a multicast, or it can set up its own groupcast servers to which it will then send the packets.

Protocol
in Lima-like psuedo-code

The implementation of the following is entirely up to the designers of the router. Every action here is marked with a "*", conditions are marked with a "-". This pseudo code does not imply anything about the order in which any action is taken - this specification only requires that the actions are taken such that packets are sent out in an order dependant only on the priority of the packets, and that the packets are updated appropriately before being received by the next router.

if
[ -packet type = = 0:
       if
       [  - Router can't handle the packet for whatever reason (maybe
            the packet is too large, or there is not enough space
in the
            queue momentarily) :
                 * Drop the packet
       ]
       if
       [  - priority = = 0:
                 * Add packet to priority 0 queue associated with the
                    destination address
          - priority = = 1:
                 * Add packet to priority 1 queue associated with the
                    destination address
          - priority = = 2:
                 * Add packet to priority 2 queue associated with the
                    destination address
          - priority = = 3:
                 * Add packet to priority 3 queue associated with the
                    destination address
       ]

       - when packet reaches the front of the queue:
       [       if
               [ - random.int % 4 = = 0:
                       * decriment the TTL field
               ]
               * send the packet into the link
       ]

  - packet type = = 1:
      
      - when packet is received into an input queue:
      [       if
              [  - Router can't handle the packet for whatever reason
                 (maybe the packet is too large, or there is not enough
                 space in the queue  momentarily) :
                        if
                        [ - router has space for more than just the header:
                               * truncate the packet
                               * set the "truncated" field to 1.
                               * copy the packet length and jumbo packet
                                  fields into the original packet length and jumbo
                                  missing bytes fields, respectively.
                               * update the packet length
                          - router does not have space for the full header:
                               * Drop the packet
                        ]
             ]
             if
             [  - TTL size = = 0:
                - TTL size = = 1:
                - TTL size = = 2:
                - TTL size = = 3:
             ]
       ]
       if
       [  - priority = = 0:
                 * Add packet to priority 0 queue associated with the
                    destination address
                 *
          - priority = = 1:
                 * Add packet to priority 1 queue associated with the
                    destination address
          - priority = = 2:
                 * Add packet to priority 2 queue associated with the
                    destination address
          - priority = = 3:
                 * Add packet to priority 3 queue associated with the
                    destination address
       ]

  - packet type = = 2:
]

Suggested router techniques

 

2007 Nov 30
Billy Tetrud