ION is short for Interplanetary Overlay Network, which is an implementation of Delay-Tolerant Networking (DTN) architecture as described in Internet RFC 4838. We can download the source code from SourceForge, our laboratory will do some research on interplanetary communication, so I got a new assignment recently : exploring ION code.

After glancing over the documentation and README.txt included in the source code, there is still no clear framework graph coming up in my mind. Although some tests give me some hints, however they always include Bundle Authentication or Bundle Security Protocol, and these are out of my scope. The tutorial.html is something wrong with code version, so I just want to know how is ION working basically, for example send/receive bundles two hosts in local area network.

Prepared two hosts: Gentoo 3.14 (ip: 192.168.1.187) and Ubuntu 14.04 (ip: 192.168.1.184) for me; Downloading ION and building it as following:

1
2
3
4
5
6
7
8
9
# configure environment, install tools like gcc and make if need
./configure
./make
# for running ion commands and using dynamic libraries
# outside the ion source code directory
./sudo make install
./sudo ldconfig

Now is the script for host configure. If you have no idea on what is the “host.rc” or “ionstart” means, I suggest you should review the documentation(ION.pdf) again intensely. If you have seen them but not be familiar with, let us go ahead. A standard configuration include some parts like: ionadmin, bpadmin, ipnadmin…

Question: What works did ionadmin, bpadmin… do?!

Configuration for host1, the meaning of every command can be found in tutorial.html located in the directory of ION source code.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# host1.rc
## begin ionadmin
1 1 ''
s
a contact +1 +3600 1 2 100000
a range +1 +3600 1 2 1
## end ionadmin
## begin bpadmin
1
a scheme ipn 'ipnfw' 'ipnadminep'
a endpoint ipn:1.1 q
a protocol tcp 1400 100
a induct tcp 192.168.1.187:4556 tcpcli
a outduct tcp 192.168.1.184:4556 tcpclo
s
## end bpadmin
## begin ipnadmin
a plan 2 tcp/192.168.1.184:4556
## end ipnadmin

Configuration for host2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# host2.rc
## begin ionadmin
1 2 ''
s
a contact +1 +3600 1 2 100000
a range +1 +3600 1 2 1
## end ionadmin
## begin bpadmin
1
a scheme ipn 'ipnfw' 'ipnadminep'
a endpoint ipn:2.1 q
a protocol tcp 1400 100
a induct tcp 192.168.1.184:4556 tcpcli
#a outduct tcp 192.168.1.184:4556 tcpclo
s
## end bpadmin
## begin ipnadmin
## end ipnadmin

We can run the host1.rc and host2.rc in two hosts separately by :

1
2
3
4
5
6
7
# in host1
ionstart -I host1.rc
bpsource ipn:2.1
# in host2
ionstart -I host2.rc
bpsink ipn:2.1

We can send some messages in host1, see the result in host2. And disconnect the connection between two hosts, and send the message again from host1, connect the host2 afterwards, we can see the result again. This is DTN!

What next I wonder to know: What happened when ION transmit bundles/messages between hosts. For details, what protocols ION used as its lower communication layer. And how is the calls relationship on the source code sense?