======================================================================
Network Working Group                                   P. Mockapetris
Request for Comments: 3043                                         ISI
Updates: None                                                May, 1995
c++
                IP encapsulation for carrier pigeons

For many people without access to a physical network conneection, be
it a dedicated connection or a simple dialup PPP link, getting
internet access may seem hopeless. However, a new method has been
designed to allow almost anyone access to the internet. Not that this
method probably can't be used in the far north, without encapsulating
your carrier pigeon in a wool packet (See RFC3044). The data and frame
format for a carrier pigeon is interesting because it doesn't have a
physical network layer - That is, you send direct IP packets (They are
not encapsulated in, for example, a PPP packet). Thus, the TCP/IP
frame for a carrier pigeon is quite simple. Selectivly color in
squares on a grid piece of paper. The TCP segment header is shown:

TCP Header Format (With carrier pigeon extensions)
0         1         2         3
0123456789012345678901234567890
+-----------------------------+
|  Source Port |   Dest Port  |
+-----------------------------+
|       Sequence Number       |
+-----------------------------+
|         Ack Number          |
+-----------------------------+
|Dta|          |              |
|Ofs| Reserved |   Window     |
|   |          |              |
+---+----------+--------------+
|  Checksum    | Urgent Pntr  |
+--------------+--------------+
| Options           | Padding |
+-------------------+---------+
|            Data             |
+-----------------------------+

Note that you can indicate the status/ownership of the pigeon by
changing the statis bit in `Reserved'. U means you own the carrier, O
means someone unknown owns the pigeon, and G means your carrier pigeon
provider owns the pigeon.

So, to send a packet you simply check off the boxes on a grid piece of
paper, conforming to the ablive TCP/IP data header, and send the
pigeon off and await the reply. Note that UDP datagrams are essentialy
useless, because of the inherent instability of the network. This also
means that ICMP packets in most cases will not be passed. This renders
Ping and several routing protocols inoperable. However, to verify that
the network is indeed still alive, kick it. This is refered to as
"Squawking the Network". If a squawk is returned, the network is alive
and operational.

This is really just a primer. Refer to RFC3048 for more information.