Professional Documents
Culture Documents
WILLIAM KIBIRANGO
Reg No. 15/U/6292/PS
A report submitted in partial fulfilment of the requirements for the award of degree of Bachelor of
Science in Computer Engineering at the College of Engineering, Design, Art and Technology,
Makerere University.
June, 2019
Dedication
This report is dedicated to Brian Musiime for being an amazing project partner and an even more
amazing friend.
iii
Acknowledgement
I would like to give thanks to my project supervisors, Dr. Edwin Mugume and Eng. Dr. Dorothy
Okello, for their continuous guidance, insights and for pushing me to be a better engineer.
Many thanks to my fellow colleagues who actively participated in this research: Brian Kakembo,
Allan Benjamin Katamba, Methodius Uwizera, Sulaiman Kagumire and Elton Jim Solomon
Muwebwa. Thank you very much guys!
In the same vein, I would also like to thank my aunt, Sara Kibirango, for her support, prayers and
helping us with the devices needed to carry out this research.
iv
Table of Contents
List of Tables.....................................................................................................................................viii
List of Illustrations..............................................................................................................................ix
List of Acronyms..................................................................................................................................x
Abstract...............................................................................................................................................xi
1 INTRODUCTION.............................................................................................................................1
1.1 Background of Study.................................................................................................................1
1.1.1 Delay/Disruption Tolerant Network (DTN)......................................................................1
1.1.2 The Android Platform........................................................................................................4
1.2 Research Problem......................................................................................................................5
1.3 Research Purpose.......................................................................................................................5
1.3.1 Specific Objectives............................................................................................................5
1.4 Significance of Study.................................................................................................................5
1.5 Scope of Study...........................................................................................................................6
2 LITERATURE REVIEW..................................................................................................................7
2.1 DTN Routing Protocols.............................................................................................................7
2.1.1 Flooding-based Routing.....................................................................................................7
2.1.2 Forwarding-based Routing.................................................................................................8
2.1.3 PRoPHETv2.......................................................................................................................8
2.2 DTN Deployments on Android..................................................................................................9
3 RESEARCH PLAN.........................................................................................................................11
3.1 Research Design......................................................................................................................11
3.2 Population and Sampling.........................................................................................................11
3.2.1 Testbed.............................................................................................................................11
3.3 Data Collection and Analysis..................................................................................................11
3.3.1 Performance Metrics........................................................................................................12
3.3.2 Analysis............................................................................................................................13
3.3.3 Instrumentation................................................................................................................13
3.4 Assumptions.............................................................................................................................14
4 RESEARCH PROCEDURE...........................................................................................................15
4.1 Introduction..............................................................................................................................15
4.2 Protocol Simulation.................................................................................................................15
4.2.1 Introduction......................................................................................................................15
4.2.2 Simulation Settings..........................................................................................................15
4.2.3 Hypotheses.......................................................................................................................16
4.2.4 Results and Analysis........................................................................................................17
4.2.5 MKP Protocol Development............................................................................................20
4.3 DTN Implementation on Android............................................................................................24
4.3.1 Introduction......................................................................................................................24
4.3.2 Implementation Architecture...........................................................................................24
4.3.3 DTN Application Development.......................................................................................25
4.3.4 Deployment......................................................................................................................30
4.4 Data Collection and Interpretation...........................................................................................30
5 CONCLUSIONS.............................................................................................................................36
5.1 Introduction..............................................................................................................................36
v
5.2 Challenges and Limitations.....................................................................................................36
5.3 Conclusions..............................................................................................................................37
5.4 Recommendations....................................................................................................................37
5.5 Future work..............................................................................................................................37
vi
List of Tables
Table 4.1: Simulation parameters for DTN Android implementation................................................15
Table 4.2: MK-DTN architectural component descriptions...............................................................25
Table 4.3: MK-DTN application settings...........................................................................................27
Table 4.4: DTN protocol comparison for the Android platform........................................................35
vii
List of Illustrations
Illustration 1.1: The Bundle layer on separate DTN nodes (source: [13])..........................................2
Illustration 1.2: Placement of the Bundle Layer within the OSI model (source: [3]).........................3
Illustration 4.1: The relationship between delivery ratio and bundle size.........................................17
Illustration 4.2: The relationship between delivery ratio and bundle lifetime..................................18
Illustration 4.3: The relationship between latency and bundle size...................................................18
Illustration 4.4: The relationship between latency and bundle lifetime............................................19
Illustration 4.5: Delivery ratio and bundle size relationship with MKP protocol.............................22
Illustration 4.6: Delivery ratio and bundle lifetime relationship with MKP protocol.......................22
Illustration 4.7: Latency and bundle size relationship with MKP protocol.......................................23
Illustration 4.8: Latency and bundle lifetime relationship with MKP protocol................................23
Illustration 4.9: MK-DTN Android application architecture............................................................24
Illustration 4.10: Application Agent module details.........................................................................25
Illustration 4.11: MK-DTN layered architecture...............................................................................26
Illustration 4.12: MK-DTN application screenshot of a received bundle.........................................27
Illustration 4.13: MK-DTN storage architecture...............................................................................29
Illustration 4.14: Delivery ratio - bundle size comparison between MKP and Spray and Wait.......31
Illustration 4.15: Delivery ratio - bundle lifetime comparison between MKP and Spray and Wait 31
Illustration 4.16: Latency - bundle size comparison between MKP and Spray and Wait.................32
Illustration 4.17: Latency - bundle lifetime comparison between MKP and Spray and Wait...........32
Illustration 4.18: Average CPU utilisation comparison between MKP and Epidemic.....................33
Illustration 4.19: Battery consumption comparison between MKP and Epidemic...........................33
Illustration 4.20: Storage consumption comparison between MKP and Epidemic...........................34
Illustration 4.21: Memory consumption comparison between MKP and Epidemic.........................34
viii
List of Acronyms
API Application Programming Interface
BSP Bundle Security Protocol
CLA Convergence Layer Adapter
CPU Central Processing Unit
DP Delivery Predictability
DTN Delay/Disruption Tolerant Network
DTNRG DTN Research Group
EID Endpoint Identifier
FIFO First-In-First-Out
IDE Integrated Development Environment
ION Interplanetary Overlay Network
IPC Inter-Process Communication
IPNRG Inter-Planetary Network Research Group
IRTF Internet Research Task Force
ISO International Organisation for Standardisation
JNI Java Native Interface
KiB kibibyte
LTP Licklider Transmission Protocol
MANET Mobile Ad-hoc Network
MRG Minimum Reception Group
ONE Opportunistic Networking Environment
OSI Open Systems Interconnection
PRoPHET Probabilistic Routing Protocol using History of Encounters and Transitivity
RAM Random Access Memory
SNMP Simple Network Management Protocol
TCP Transmission Control Protocol
TTL Time To Live
UDP User Datagram Protocol
ix
Abstract
Delay-tolerant networks (DTNs) are those which allow communication in highly stressed
environments characterised by frequent intermittent connections, limited node resources and
dynamic topologies. For nodes to communicate, two broad classes of routing protocols were
developed, that is flooding-based and forwarding-based protocols. Previous DTN deployments on
Android used one protocol, PRoPHET, without comparing its performance with others on the
platform. This report documents the research carried out for the development of delay-tolerant
routing protocols for use on Android-based devices and the comparison of their performance under
various scenarios. A demo text-messaging Android application, MK-DTN, was created to use these
protocols for testing in a live situation on Makerere University students’ Android smartphones. The
results showed that a combination of forwarding- and flooding-based protocols were better
performers on the Android devices. Specifically, our new routing protocol implementation, MKP,
showed lower CPU, memory and battery utilisation than other flooding-based techniques. As future
work, the research proposes implementing wide-area DTNs for Android devices, focusing on
security and improved node synchronization.
x
1 INTRODUCTION
1.1 Background of Study
1.1.1 Delay/Disruption Tolerant Network (DTN)
There exist various Internet protocols, the main ones being the Transmission Control Protocol
(TCP) and the User Datagram Protocol (UDP). These protocols work on the transport layer of the
ISO’s (International Organisation for Standardisation) OSI (Open Systems Interconnection) model.
In the TCP protocol, a sender contacts the receiver in order to form a connection. This forms a
virtual circuit. The sender then breaks down data sent from the upper layers into segments prior to
transmitting them to the receiver. The receiver on the other end uses their TCP protocol to
reconstruct the segmented data back into the original data, in the appropriate order. After the
transmitting TCP host sends these segments, it waits for an acknowledgement from the receiving
TCP host for each segment, retransmitting those that were not acknowledged. This behaviour makes
TCP a full-duplex, connection-oriented, accurate and reliable protocol.
In the UDP protocol, like the TCP, it receives data blocks from the upper layers and segments them
prior to sending them to the receiving UDP host, numbering each uniquely. However, unlike TCP,
it does not sequence the segments and does not care in which order they are received at the
destination. After the segmentation, the segments are sent and no attention is given to them
thereafter. This is why it is referred to as an “unreliable protocol”. Further, it does not create virtual
circuits and does not contact the receiver for acknowledgement of each segment, making it a
“connectionless” protocol. This behaviour requires fewer network resources compared to TCP and
is therefore useful for applications like network monitoring with the Simple Network Management
Protocol (SNMP) [1].
These protocols do not work well for some environments due to some fundamental assumptions
built into the Internet architecture. These assumptions include:
• that an end-to-end path between source and destination exists for the duration of a
communication session,
• that that all routers and end stations support the TCP/IP protocols,
• that selecting a single route between sender and receiver is sufficient for achieving
acceptable communication performance.
These fundamental assumptions prevent the deployment of Internet technology in challenged
environments with disruption and large transmission delays. The Delay/Disruption Tolerant
Network (DTN) architecture was created to relax most of these assumptions, based on a number of
design principles such as:
• Use of storage within the network to support store-and-forward operation over multiple
paths, and over potentially long time scales. (i.e. to support operation in environments where
many and/or no end-to-end paths may ever exist); do not require end-to-end reliability,
1
• Provide coarse-grained classes of service, delivery options, and a way to express the useful
lifetime of data to allow the network to better deliver data in servicing the needs of
applications,
• Use a universal naming syntax that supports a wide range of naming and addressing
conventions to enhance interoperability.
A DTN is a type of mobile ad-hoc network created to solve the problem of connectivity for
situations that are characterised by intermittent and heterogeneous interconnections, high delay,
high error-rates, dynamic topologies and limited node resources [2]–[5]. In 2003, the concept was
first proposed and in 2007, its architecture [6] and the associated Bundle protocol [7] were proposed
by the DTN Research Group (DTNRG); a research group based on the Inter-Planetary Network
Research Group (IPNRG) which was established by the Internet Research Task Force (IRTF).
The Bundle Protocol specifies how to an implementation of a DTN should behave and also defines
a format for the exchange of DTN Bundles, the messages that flow in a DTN, to gain
interoperability between different implementations. These will simply be referred to as bundles for
the remainder of the report. It was designed to realize networks with intermittently-connected nodes
by utilizing a store-carry-forward approach. The store-carry-forward routing is implemented by
creating an overlay on top of the given network structure. This end-to-end overlay, known as the
“bundle layer”, may exist anywhere between the application and transport layers of the OSI model.
This is shown in Illustrations 1.1 and 1.2. Although IP networks are also based on the same
operations, the “storing” may not persist for a long time. In contrast, the Bundle protocol does not
expect that network links are always available or reliable. Bundles may be stored for a long time
until they are finally forwarded to another node. Since the storage time of the message is longer
than regular IP routers, the DTN nodes employ some form of persistent storage like hard disks or
flash memory [3].
Illustration 1.1: The Bundle layer on separate DTN nodes (source: [13])
2
Illustration 1.2: Placement of the Bundle Layer within the
OSI model (source: [3])
A bundle is a protocol data unit of the DTN Bundle Protocol. Each bundle consists of a sequence of
two or more “blocks” of protocol data which serves several purposes. Multiple instances of the
same bundle (the same unit of DTN protocol data) might exist concurrently in different parts of the
network. Each bundle is a concatenated sequence of at least two block structures. The first block in
the sequence must be the primary bundle block, and no bundle may have more than one primary
block. Additionally, bundle protocol blocks of other types might follow the primary block to support
extensions to the bundle protocol such as the Bundle Security Protocol (BSP) [8]. At most one of
the blocks in the sequence may be a payload block. The last block in the sequence must have the
“last block” flag (in its block processing control flags) set to one and for every other block in the
bundle after the primary block, this flag must be set to zero. Bundle may be split up (fragmented)
into multiple constituent bundles also called fragments during transmission. A fragment is a bundle
whose payload block contains a fragmentary payload. A fragmentary payload is either the first N
bytes or the last N bytes of some other payload [7]. Fragments are themselves bundles and may
further be fragmented. Two or more fragments may be reassembled anywhere in the network,
forming a new bundle.
The movement of a bundle (and its delivery responsibility) from one node to another is called
custody transfer. It is analogous to a database commit transaction. The nodes receiving these
bundles along the way (and agreeing to accept the reliable delivery responsibility) are called
custodians. To accept custody upon forwarding a bundle is to commit to retain a copy of the
bundle, possibly re-forwarding the bundle when necessary, until custody of that bundle is released.
Custody transfer allows the source to delegate retransmission responsibility and recover its
retransmission-related resources relatively soon after sending a bundle.
A DTN node is an engine for sending and receiving bundles; an implementation of the bundle layer.
Applications utilize DTN nodes to send and/or receive application data units carried in bundles.
Nodes may be members of groups called DTN endpoints. A DTN endpoint is therefore a set of
DTN nodes. Formally, a DTN/bundle endpoint is a set of zero or more bundle nodes that all identify
themselves for Bundle Protocol purposes by using some single text string called a bundle endpoint
ID (EID). A bundle is considered to have been successfully delivered to a DTN endpoint when
3
some minimum subset of the nodes in the endpoint has received the bundle without error. This
subset is called the minimum reception group (MRG) of the endpoint.
In the last decade or so, the application of DTN has been widely researched and deployed in areas
such as deep space exploration [9], rural communication [10], military and air-bone networks [3],
[11], advanced vehicle ad-hoc networks [12] and many others [4].
DTN2 is the reference implementation for the DTN architecture and Bundle Protocol, mainly used
for research. It was implemented to be modular and extensible to fit many research-specific needs
and still be good enough for real-world deployment. It was developed in C and C++, mixing
different programming paradigms. It was developed with the OASYS library to enable platform-
independent construction with extensions provided for implementing various convergence layers
such as those based on UDP, TCP, Bluetooth and Licklider Transmission Protocol (LTP) [13].
The Interplanetary Overlay Network (ION) was an implementation of the DTN architecture and
Bundle Protocol specifically for space exploration scenarios. It was built to be very robust, efficient
and reliable. It operates by distributing its work-load among multiple processes which communicate
via shared-memory inter-process communication (IPC), reducing complexity. To limit bandwidth
consumption during transmission, ION reduces bundle size by compressing the EIDs in the bundle
primary block. To solve node synchronization, it uses extension blocks for ageing bundles without
using UTC time [13].
4
1.2 Research Problem
Due to its wide market, many organisations and individuals have developed numerous Android
applications for its users in a wide variety of categories such as Productivity suites like WPS,
Messaging applications like WhatsApp and Games like Candy Crush. In order for users to have a
great user experience while using these applications, developers have to take into consideration
certain resources their applications use on the Android devices such as the CPU, bandwidth, battery
energy and memory. If these are overlooked, users might observe that their devices frequently hang
and/or overheat and they might even need to charge them more frequently than usual. This is highly
undesirable!
There have only been a few instances where DTNs have been deployed on the Android platform.
To our knowledge, there are only two known DTN Android implementations, Bytewalla [10] and
IBR- DTN [13]. Both of these implementations uses the PRoPHET message forwarding method.
Furthermore, research has been done to implement various other forwarding methods through
simulations and their performance assessed [19]. However, neither of these research projects
explicitly compared the different routing protocols of DTN and their performance specifically on
Android-based devices basing on how they use the above-mentioned resources. This left the
question of which protocol is appropriate for the Android platform under a given scenario
unanswered.
• To develop a demo DTN Android application that can send a text message from one phone
to another using the routing protocols.
• To compare the different routing protocols in different scenarios and analyse the results.
• To determine the most appropriate DTN routing protocol for Android-based devices under
different scenarios.
5
1.5 Scope of Study
This project on the development of delay-tolerant routing protocols for Android-based devices was
conducted from September 2018 to May 2019 using quantitative analysis. Data was collected
through the Android Studio Profiler [20], the devices themselves and from the demo text-messaging
DTN application we developed, MK-DTN. The project was specifically seeking to determine the
most appropriate DTN routing protocol for Android-based devices under a given scenario.
6
2 LITERATURE REVIEW
2.1 DTN Routing Protocols
In DTN, the end-to-end route can never be achieved, so the routing of bundles is done hop-by-hop
in which the selection of the next hop is done dynamically as per the application scenario as well as
the algorithm used. In general, when a node receives any bundle (or a message), then as per the
algorithm, that node will search for a good relay node to which it can forward the bundle. The
transmission of messages in DTN can either be done by replicating the message or forwarding it,
depending on the algorithm used. There are two broad categories of routing approaches that have
been developed for use under DTNs such as flooding-based protocols like epidemic and Two-Hop
Relay, and forwarding-based protocols like NECTAR and Per-Hop [2].
7
2.1.2 Forwarding-based Routing
Forwarding-based routing takes place when nodes have some relevant knowledge about the other
nodes in the network. Here, no node generates the replicas of a message. Each node will search for
the best suitable relay nodes and forward the messages to them. It reduces the extra resource
consumption as replication of messages is not permitted. Examples of prominent forwarding-based
protocols are as follows.
1. Direct Contact routing is where the source node directly forwards the bundle to the
destination node. The source node creates the bundle and waits for the destination node. The
amount of delay incurred in delivery of bundle is very high but costs involved in routing are
very low.
2. Per-Hop routing is where each intermediate node will decide the next node to which the
bundle will be forwarded for a particular destination. The decision made on which node to
transmit to could be a random selection from a set of neighbouring nodes or a first-come-
first-served approach.
3. NECTAR routing involves the concept of neighbourhood index table that is maintained at
each of the nodes. This table stores the information about the meeting frequency of the node
with each other node in the network. The meeting frequency is defined as the number of
times a node meets another in a given time period. Whenever any two nodes meet, the
meeting frequency of that node is updated in the other’s neighbourhood index table. If a
node needs to forward a message to a particular destination, it will select one of the relay
nodes that have the highest index value (meeting frequency) for the respective destination.
4. PRoPHET (Probabilistic Routing Protocol using History of Encounters and Transitivity)
enables communication between participating nodes wishing to communicate in an
intermittently connected network where at least one of the nodes is mobile [21]. It relies on
the premise that mobility of nodes is predictable such as smartphones held by students in a
university. This enables nodes to calculate the probability of meeting a given node in a given
period of time. These probabilities, called delivery predictabilities (DPs), are maintained in
a routing database and update when nodes meet each other. To forward a bundle, a node
with the highest probability of meeting the destination is selected from a set of neighbouring
nodes. This protocol aims to avoid sending bundles on paths that have low probability of of
reaching the bundle’s destination.
In order for nodes using NECTAR and PRoPHET to choose which nodes to forward bundles to,
they go through an information exchange phase where they share they bundles that they have as
well as the neighbourhood indices or delivery predictabilities before sending the actual bundle.
2.1.3 PRoPHETv2
In this protocol, the concept of probability transitivity enables nodes to become candidates chosen
during routing to a particular destination if they frequently meet other nodes that frequently meet
the destination. For example, let there be four DTN nodes A, B, C and D. Let “→” mean
“frequently meets”. Suppose also that A has a bundle to send to D. Therefore if B → C and C → D,
8
then B → D. This means A can comfortably transmit the bundle to B, knowing that it will most
likely reach D. This improves on the delivery predictability estimation of the original PRoPHET
algorithm.
How it Works
Every node in the DTN maintains a set of delivery predictabilities for nodes it encounters. Let
P(A→B) be the current probability of node A meeting node B. This represents the DP for node B
on node A and is a real number that lies in the open interval [0, 1). Let P’(A→B) represent the
previous DP for B on A. This is how they will be denoted for the remainder of this report.
The DPs change for every encounter of a node. Generally, for any number of encounters, the DP
changes according to (2.1).
P( A→ B)=P' ( A→ B)+{1− δ −P' ( A→ B)}⋅Pencounter (2.1)
Pencounter is a constant that determines the first encounter probability. It is recommended that Pencounter =
0.5 for general scenarios though for more real world applications, P encounter might not be constant
[22]. δ = 0.01 because DPs can never realistically reach 1. For a first encounter, P’(A → B) = 0 is
applied to (2.1) to get P(A → B) = (0.99) × (0.5) = 0.495.
As time progresses, the DPs for all nodes encountered decrease according to (2.2). This is referred
to as decaying.
γK is a decay constant that decreases the DP as time progresses. K represents the number of time
units since the last application of (2.2) on a DP. γ is a real number that lies in the closed interval [0,
1] and is recommended to be 0.999 for general applications [23].
If node B is a good path to node C and node A meets node B frequently then nodes that meet A
might want to give messages for C to node A. This is the transitivity rule. To apply this rule, (2.3) is
used whenever information exchange phase is taking place as per the PRoPHETv2 protocol.
P( A→C )=max {P ' ( A →C ) , P( A → B)⋅P( B→C )⋅𝗉} (2.3)
P(B → C) is sent from B to A during the information exchange phase in order for A to update its
DP for C. β is also a real number in the interval [0, 1], chosen depending on the level of transitivity
required in the DTN. It is recommended to be 0.9 for most general applications [23].
9
the city. The Bytewalla application was implemented in Java with reference to the DTN2 reference
architecture and used the PRoPHET protocol for routing DTN bundles [10].
IBR-DTN was an event-driven software architecture for DTNs, focusing on eliminating the
weaknesses of the Bundle Protocol. It aimed to create a lightweight, extensible and portable
implementation of a DTN node. This was so that it could be deployed on small and embedded
computer systems such as small routers and tracking devices for wildlife animals. Specifically, the
research sought to be able to deploy the solution to a computer with at least 32 MB of RAM and a
having a CPU capable of running a Linux kernel. As an objective to eliminate the weaknesses of the
Bundle Protocol, it sought to solve the dependency on node synchronization by distributing
information to nodes to self-adjust their own clocks so that the error is minimised. The solution uses
clock rating and a self-adjusting algorithm for clock synchronization of nodes in the DTN. In
supporting embedded systems, the architecture was well suited to be deployed on Android-based
devices as well as Windows and OS/X systems. As an evaluation test for portability to other
platforms, the implementation was deployed to Android using the Java Native Interface (JNI) for
other Android applications to make API calls to the IBR-DTN C++ libraries. It was packaged as a
stand-alone application called IBR-DTN, currently on Google Play Store [24]. Other applications
that use IBR-DTN are ShareBox for file sharing and Talkie for sending and receiving voice
messages over DTN. For routing DTN messages, the implementation uses PRoPHET, Epidemic
and static routing, putting emphasis on PRoPHET [13].
10
3 RESEARCH PLAN
3.1 Research Design
This research was conducted through quantitative analysis. This approach emphasizes objective
measurement and the statistical, mathematical or numerical analysis of data collected through polls,
questionnaires and surveys or by manipulating pre-existing statistical data using computational
techniques [25]. It was used to collect the numerical data on the observable parameters mentioned
in Section 3.3 for each of the different routing protocols to be implemented. This design was
selected because the research requires comparison of quantitative data in order to draw conclusions.
3.2.1 Testbed
The testbed for this research consisted of a minimum of 8 Android smartphones. These phones
belonged to students from the College of Engineering, Design, Art and Technology, Makerere
University – Main Campus. The students volunteered to participate in the research by accepting us
install our DTN demo application on their smartphones and send each other messages using the
application, as they performed their daily routines around the college’s premises (approximately
500m × 500m in area).
This number of devices was chosen to increase on the network size and physical distance between
nodes as much as possible and to show whether a bundle could be transmitted from source, through
intermediate nodes, to the destination over a large distance. Furthermore, the Android devices
(being held by students moving in, out and around the college and the whole university) were put
under harsh conditions such as having obstacles (like buildings) between them and disconnections
due to high mobility of the devices.
11
while the power consumption was measured as the relationship between cumulative battery
consumption when uploading or downloading DTN bundles of varying sizes.
In IBR-DTN, various metrics were taken into consideration to evaluate the performance of the
architecture on multiple platforms (Android inclusive) such as storage I/O performance and network
throughput (bundles sent per second over a Gbit Ethernet link with varying bundle sizes), and
compared that to those of other architectures such as ION and DTN2.
CPU Utilisation
The Central Processing Unit (CPU) is another resource that applications utilise to carry out
computations in their tasks. These days, CPUs installed in computers are multi-cored, support
multiple threads per core and are utilised with very sophisticated task-scheduling algorithms to
enable multi-tasking. Despite this, they remain a scarce resource especially on Android mobile
devices since multiple applications have to share this one resource amongst themselves. Therefore,
they must make proper use of them to prevent effects like unresponsive user interfaces, rapid
battery depletion, overheating and long processing. This was, therefore, a prominent parameter to
measure and use to evaluate our DTN routing protocol performance. It was measured against time
with Android Studio’s Profiler.
12
Battery Consumption
Battery consumption and CPU utilisation have a positive correlation between them. The more the
CPU is utilised, the faster the battery drains. Therefore, we also took this as an important parameter
in protocol assessment, since it affects user experience and also because the system’s current battery
level was a factor considered when a bundle node (an Android device) is requested to take custody
of a bundle, following the Bundle Protocol Specification. No communication would occur in the
network if the nodes had severely depleted battery power. This was measured against time by taking
readings of our DTN application’s battery charge consumption (in mAh) from the device settings
every 30 minutes during a testing session with different smartphones.
Network Latency
In communication systems, it is imperative that data transfer from sender to receiver is carried out
as fast and as efficiently as possible. In DTNs, the delay in data transmission, though significant
compared to other kinds of networks, still needs to be minimised through the use of efficient routing
protocols. Therefore, it had to be considered as a metric for protocol performance assessment. With
this, the fastest routing protocol can be determined. This delay was the time taken for a bundle to
traverse the network from the source to its destination. This was measured by taking timestamps of
when a given bundle is created and delivered, calculated by our DTN application. In our research,
we took these measurements with changing bundle sizes and bundle lifetimes.
Delivery Ratio
The delivery ratio of a given routing protocol in a given time period is defined in (3.1) as:
This serves as a measure of success in bundle delivery (i.e. delivery reliability) without error in a
given time period, usually the bundle’s lifetime or more. This was measured by having the
participants record how many times they sent a message to a given destination DTN node and
recording the number of received messages at that destination node, still with changing bundle sizes
and lifetimes.
3.3.2 Analysis
To facilitate easier interpretation, the collected data was visualised with line graphs created using
the Numpy[28] and Matplotlib[29] Python modules and Microsoft Excel, showing the variation of
the performance metrics with changes in their independent variables.
3.3.3 Instrumentation
• Data collection sheets – These were given to the participants to record who many times
they sent a message to a given destination node on a given day. A list of destination node
EIDs were provided with each sheet to aid in this process.
13
• Android smartphones – Used to collect memory, storage and battery consumption from the
phone settings.
• Demo application, MK-DTN – used to collect timestamps needed to calculate latency and
the messages needed to calculate the delivery ratio.
3.4 Assumptions
We assumed a constant channel capacity over the wireless connection between the Android devices
used. This simplified the analysis of network delay and allowed us to concentrate on the more
prominent parameters to be measured [6].
14
4 RESEARCH PROCEDURE
4.1 Introduction
This project investigated the implementation and comparison of different DTN routing protocols,
under different scenarios, for Android-based devices. This was because previous DTN
implementations for Android did not compare the different routing protocols of DTN and their
performance specifically on Android-based devices.
To solve this problem, we came up with a work plan that went generally as follows:
1. Simulation of the various protocols found from the literature.
2. DTN implementation for the Android platform.
3. Data collection of performance metrics.
This chapter presents the details of the above work plan and the results obtained.
15
Transmission range 3 metres
Buffer size 150 MB (worst-case for Android devices)
Movement model Random waypoint
Movement speed (Min, Max) Min: 1.25 ms-1, Max: 1.75 ms-1
Number of nodes 9
Size of environment 500m × 500m
Message interval (Min, Max) Min: 1.8 hours, Max: 4 hours
These simulation parameters were set as shown in Table 4.1 to make the scenario in which we were
deploying the DTN as realistic as possible, taking in consideration the worst-case such as having
little to no traffic generated in the Android DTN that was to be implemented, slow transmission
speeds and rapidly-moving nodes (walking students). In our study, since the ONE cannot simulate
battery consumption, CPU or memory utilisation, we observed only the Delivery ratio and Latency
(network delay) from the simulations. This was sufficient since these parameters are typical
performance metrics for DTN routing protocol evaluation [30]. To try to mimic random human
walking, we also used the random waypoint movement model, where each node begins by pausing
for a fixed number of seconds. The node then selects a random destination in the simulation area
and a random speed between 0 (excluded) and some maximum speed. The node moves to this
destination and again pauses for a fixed period before another random location and speed. This
behaviour is repeated for the length of the simulation. It is commonly used in evaluating
communication protocols used in mobile ad-hoc networks due to its simplicity [30].
4.2.3 Hypotheses
In general, we hypothesized that the bundle’s lifetime and size would affect the delivery ratio of a
given protocol and the latency experienced in the network while operating under said protocol. The
bundle lifetime is defined as the time period during which the bundle is useful. If the current time is
greater than the bundle’s creation time plus its lifetime, the bundle is considered to be expired and
can be deleted from the network. It is synonymous to a TCP packet’s time-to-live (TTL) period.
Specifically, we hypothesized that there was a negative correlation between bundle size and
delivery ratio. This was to be expected because as bundle size increases, it requires more time to
transfer it between communicating nodes. Due to the fact that DTNs often experience sudden
disconnections during communication, it is unlikely that the entire bundle will be transferred
successfully, hence decreasing the likelihood of delivery, that is, the delivery ratio. Due to these
same conditions in DTNs, we also hypothesized that there was a positive correlation between
bundle size and latency.
We hypothesized that there was a positive correlation between bundle lifetime and delivery ratio
because the greater the lifetime, the less likely it is to delete that bundle, and hence the more likely
it will be to deliver that bundle in time. We also hypothesized that there was a positive correlation
between bundle lifetime and latency because the greater the lifetime, the longer the bundle will be
retained in the network. This could increase on memory consumption and processing overhead if
16
each node has to process many long-living bundles in its memory buffer, and thus increase the
latency.
Illustration 4.1: The relationship between delivery ratio and bundle size
17
Illustration 4.2: The relationship between delivery ratio and bundle
lifetime
18
Illustration 4.4: The relationship between latency and bundle lifetime
From the results shown, it was observed that the hypotheses stated earlier were true. However, in
general, it was observed that all protocols start performing poorly when bundle sizes increase
beyond 1 KiB and bundle lifetimes decrease below 10 hours. This could be because of the node’s
buffer sizes or their movement speed, leading to more dropped bundles.
It was also observed that the Direct Contact and Per-Hop protocols performed poorly compared to
the rest. This could be because they are forwarding-based, meaning that nodes send bundles to at
most one node at a time and delete their copy of the bundle once the receiver has accepted custody
of the transmitted bundle. This behaviour adds on delay and might lead to more dropped bundles.
Direct Contact suffers from this more because it was to wait for the destination to be in range in
order to deliver the bundle, hence much greater latency.
Epidemic and PRoPHETv2 protocols were the best performing protocols, with Epidemic in the
lead. This could be because it is replication-based, meaning that every node sends a copy of all the
bundles it has in its custody to all other nodes that do not have it already in their buffer (persistent
storage), and does not delete them when the other nodes get those copies. This protocol is rather
simple which minimises processing overhead. Since it replicates bundles, it compensates for the
dropping of bundles by having them pass through every possible route to their destination. If some
are dropped by passing a non-optimal path possibly characterised by unreliable nodes, at least one
will reach the destination; the one that travelled through the most optimal path of all. This helps
propagate the bundles rapidly through the network and hence, arrive at the destination node faster.
However, because of its behaviour, it was predicted to have a high negative impact on memory and
storage consumption. If each node is to have a copy of each bundle created in the DTN without the
possibility of dropping bundles, then the nodes themselves should have significant storage space to
handle this kind of data load. From this, it was seen that in order for this protocol to be feasible on
19
Android, the nodes (smartphones) would require huge amounts of storage space, which is rarely the
case.
PRoPHETv2 lagged a little behind Epidemic due to the fact that it is a forwarding-based protocol.
To compensate for this, it employs a more sophisticated history-based forwarding method which
allows it to achieve its great performance. It also lagged behind possibly due to its information-
exchange method which was predicted to negatively impact CPU and battery utilisation as seen
from the literature [23].
Basing on these findings, Spray and wait showed a good “middle-ground” performance between
delivery ratio and latency, making it a worthy candidate for deployment on the Android platform.
This could have been due to its controlled message replication, allowing it to ensure multiple paths
are taken by a bundle to reach the destination while keeping the message copies few.
20
7. The offering node then sends accepted bundles in the order that they were requested.
In our perspective, this looked like it was going to delay and complicate communication between
nodes in our network. To add to that, disconnection between nodes could happen at any time during
this phase, which would add on the delay. To compensate for this, we implemented MKP in such a
way that the transmitting node attached the DP of the destination node to the bundle. The bundle
was then forwarded based on the Epidemic protocol procedure. The receiving node would then
make a comparison of the DP received with its own of the destination to determine whether to store
the bundle and deliver it or not. We believed that this would simplify communication and reduce
delays in the routing, while still making sure the bundles travel through the most optimal path and
were not replicated unnecessarily in the DTN.
t1/2 represents the half-life of the delivery predictability, P. This would act as our average meeting
interval of nodes in our DTN. For our study, nodes met regularly (approximately 1-3 days) since
they were held by full-time students at Makerere University – Main Campus. This meant that after
1-3 days, the delivery predictability P(A → B) would reduce to half its value. Therefore, (4.2) was
much easier to understand and implement compared to the trial-and-error approach of choosing
appropriate values of γ and K for use in (2.2). For our scenarios, we chose t 1/2 = 3 days for worst-
case scenario performance.
Potential Pitfalls
Despite these improvements, a potential disadvantage of the MKP protocol would be the delay at
the receiving node. When a bundle meant for node C is sent from node A to multiple nodes Bi, for i
= 1, 2, 3, …, n, following the Epidemic protocol, the delivery predictability P(A→C) is attached to
it. A node Bi then has to query its routing database for P(Bi→C). It then has to compare if P(Bi→C)
> P(A→C). If so, the node B i accepts custody of that bundle or else it drops it silently. This process
is time consuming, possibly leading to more CPU utilisation time, but we hypothesized that it
would take far less time compared to the original PRoPHETv2 information exchange phase. It
would also yield higher bundle throughput compared to PRoPHETv2 because only one transaction
21
of data, i.e. the bundle, is performed between nodes in MKP, unlike PRoPHETv2 where multiple
transactions are made before an actual bundle is transmitted [23].
22
Illustration 4.7: Latency and bundle size relationship with
MKP protocol
23
Overall, the protocols chosen to be feasible for DTN implementation on Android were Epidemic
basing on its high delivery ratio, Spray and Wait basing on its lower memory consumption and
MKP basing on the hypothesis that it could reduce on PRoPHETv2’s CPU and battery
consumption.
24
Illustration 4.10: Application Agent module details
The modules each served a purpose in the Bundle Protocol as briefly described in Table 4.2. The
purpose of each module was used as a reference for creating tests cases at the start of the
implementation phase.
25
IDE; Java and Kotlin. Since we were more familiar with Java, it was chosen as our development
language. This section describes how each of the modules in the architecture were developed with
Java in Android Studio.
Unit Testing
From the architecture shown in Illustration 4.9, we began by first writing JUnit tests for the modules
of the MK-DTN implementation, following the test-driven development methodology [33]–[35].
This helped to guide the development in that the deliverables (i.e. the modules in the application)
were created to meet their requirements from the very start of development. This had many
advantages: it kept the modules focused to the role they were designed to perform, it eased
debugging and it made the implementation testable, among others.
Implementation
Application
The MK-DTN application was the application to develop to use the DTN routing protocols to send
text messages as shown in the screenshot in Illustration 4.12. It comprised of four main activities:
The Peers, Messages, Settings and Manager activities. The Peers activity showed which nodes were
currently in range of a given Android device. The Messages activity showed a list of delivered
messages, each having the sender’s EID, the creation and delivery timestamps and the text message
that was sent. The Settings activity showed the different configurations that could be set by the
participant to determine how the DTN application behaves. The settings and their values were as
shown in Table 4.3.
26
Table 4.3: MK-DTN application settings
Setting Values
Routing protocols Epidemic, MKP and Spray and Wait
Bundle lifetime 5, 15 and 35 hours
Maximum fragment size 1, 250 and 500 KiB
These bundle lifetime and fragment size values acted like our sampled values for live testing. The
Manager activity controlled the Manager module, a convenience module that was adapted from the
Bytewalla implementation and developed to enable the participants to start up and shutdown the
Android service that provided the DTN service. This allowed them to fully control their devices and
only activated it when they wanted to.
Daemon
By definition, a daemon is a background process running on a computer for extended periods of
time. To make the DTN daemon component achieve this state on Android devices, it was
implemented as an Android service [36]. This was to facilitate processing and transmission of DTN
Bundles without the user’s intervention. It also allowed us to separate the daemon from the Android
applications so that their process life-cycles could not coupled to one another and that multiple
applications of different kinds could share the service. To make sure that the daemon ran as often as
possible (in order to get as many results as possible), the service was automatically started by an
Android broadcast receiver on device boot-up. This also relieved the participants from having to
remember to start the daemon/service whenever they rebooted their Android smartphones.
27
Application Agents
The generation of bundles to transmit was done solely by the application agents. The Application-
specific application agent generated bundles from data presented to it by the Android applications
i.e. MK-DTN. To keep the network traffic moderately high (in order to get as many results as
possible) without telling the participants to keep sending messages, a background task was always
launched when the daemon/service was started to send random messages to randomly chosen
destinations. This meant that the DTN node EIDs of devices having the MK-DTN application had
to be hard-coded into it.
The Administrative application agent generated administrative records on request by the bundle
daemon in response to an event such as bundle delivery, bundle deletion or custody acceptance of a
particular bundle. It also processed all inbound administrative records. There were two type of
administrative records: Custody Signals and Status Reports.
Custody signals were generated to indicate whether custody had been accepted for the transmitted
bundle by the receiving node and the reason for acceptance or rejection. Only after receiving a
custody signal indicating “custody accepted” for a particular bundle could a node delete that bundle
from its internal storage buffer. This brought about a reliability property in the DTN since only
capable nodes could accept custody of bundles. To accept custody of a received bundle, the node
checked the system (Android device) to determine whether there were sufficient resources to store
the bundle and deliver it. In our implementation, these checks included: Available storage space,
Available battery power and currently stored bundles.
Status Reports were generated primarily for debugging purposes to indicate the status of a
particular bundle as it travelled in the network such as if a bundle had been delivered, deleted or
received. Since these were for debugging, as a consequence, the network could become congested
with more status reports than actual user data bundles. To reduce this, our implementation only
generated status reports for delivered and deleted bundles.
Fragment Manager
Since user data could be of arbitrary size, sending “big” bundles from node to node was risky
because it needed more resources and longer contact windows to send it. To deal with this problem,
the Bundle protocol specified a way to break these bundles into smaller bundles called fragments.
These fragments must be such that they can be used to fully reconstruct the original data. User data
smaller than these sizes and any administrative records are not fragmented. In our implementation,
the fragmentation was pro-active, meaning that it was done prior to transmission. The
defragmentation only occurred at the destination node. The intermediate nodes did not fragment or
defragment bundles that were neither generated by them nor meant for them.
Router
From the simulation result analysis in Section 4.2, the protocols implemented for the application
were Epidemic, Spray and Wait and MKP. These were configurable by the user from the MK-DTN
application’s settings menu.
28
Storage
In the realm of Android devices, application developers are capable of making applications that
store data in the device’s persistent storage (internal storage or SD card). The data can be stored as
regular files or in SQLite databases [37]. This allows Android devices to perform the kind of data
storage required by bundle nodes in DTNs. In our implementation, the data that flowed through our
system was mainly DTN bundles. From the literature [7], these bundles were composed of a
concatenated sequence of two or more bundle blocks, each holding some information necessary to
process that bundle accurately. These included the primary and canonical blocks. Additionally, there
were different kinds of bundles in DTN: administrative records (status reports and custody signals)
and user data. In order to model this data in our system, we created data structures that we used to
pass DTN-related data through our system. The data structures were developed and arranged
architecturally as shown in Illustration 4.13. In the implementation, the storage module was created
with a use of synchronized queues that were written to disk whenever the bundles in them were
deleted, updated or when new ones were inserted into them.
29
provides a peer-to-peer networking API that allows Android applications to easily discover, connect
to, and exchange data with nearby devices in real-time, regardless of network (i.e. internet)
connectivity. It leverages a combination of Bluetooth and Wi-Fi technologies on Android devices to
enable this kind of communication. As compared to Wi-Fi Direct, this was a better alternative since
it did not require user intervention to connect to a node, it was much simpler to implement and
cheaper since the frequencies of operation lie within the 2.4 GHz band which do not need one to
purchase a license. In our case, the Nearby Connections API and its associated communication
protocol served as our underlying protocol which our CLA implementation used to transmit and
receive bundles. A star topology was used for communication with the Nearby Connections API
because it offered the highest bandwidth while providing multiple full-duplex communication
connections between devices, thereby creating a mesh-like network.
4.3.4 Deployment
The deployment of MK-DTN on the testbed was done manually where by the application was
installed via USB from the development computers to the participants’ devices. This meant that the
devices’ developer options had to be enabled to perform this installation. Along with the
installation, each participant was given a data collection sheet to accompany the application.
30
Illustration 4.14: Delivery ratio - bundle size comparison
between MKP and Spray and Wait
31
Illustration 4.16: Latency - bundle size comparison between MKP
and Spray and Wait
32
The second data to collect was the device CPU utilisation, storage and memory consumption for
every implemented protocol. The CPU utilisation was collected with the use of Android Studio’s
Profiler while the memory and storage consumption was measured by taking readings from the
device’s settings every 30 minutes. For this scenario, two devices were used; a TECNO W3XP (in
good condition i.e. minimal wear and tear) and a TECNO W4 (in bad condition i.e. a lot of wear
and tear). Illustrations 4.18 – 4.21 show the visualisation of this collected data. These illustrations
only show live test results for Epidemic and MKP due to the limitations faced as explained in
Section 5.2.
Illustration 4.18: Average CPU utilisation comparison between MKP and Epidemic
33
Illustration 4.20: Storage consumption comparison between MKP and Epidemic
34
protocol. But the real difference came in the way they consumed memory, battery and storage.
From Illustrations 4.19 – 4.21, the line graphs for the Epidemic protocol were steeper than those of
the MKP protocol, showing higher resource consumption per unit time. Using the Epidemic
protocol consumed a lot more resources on both the W4 and W3XP phones compared to using
MKP as was predicted basing on the simulations results. Table 4.4 summaries the findings of how
the different selected and implemented protocols behaved.
35
5 CONCLUSIONS
5.1 Introduction
From the interpretation of results, we have come to see that the bundle size and bundle lifetime
clearly affect the delivery reliability and latency of various DTN routing protocols. To add to that,
the way the protocols behave clearly has an implication on the resource utilisation on an Android
device.
36
use of synchronized queues instead, for simpler testing without too many software runtime errors or
“crashes”.
5.3 Conclusions
This project investigated the development of delay-tolerant routing protocols for Android-based
devices. It was intended to implement and compare different DTN routing protocols, under different
scenarios, for Android-based devices. This was in relation to the question of which protocol is
appropriate for the Android platform under a given scenario. The project specifically sought to
implement the store-carry-forward mechanism for Android-based devices, develop a demo DTN
Android application that can send a text message from one phone to another using the routing
protocols, to compare the different routing protocols in different scenarios and analyse the results
and determine the most appropriate DTN routing protocol for Android-based devices under
different scenarios.
The project established that DTNs are feasible on the Android platform, with the use of low-
resource consuming routing protocols like MKP. The simpler forwarding-based protocols, like
Direct Contact and Per-Hop, perform poorly in highly stressed environments while the simpler
replication-based protocols, like Epidemic, consume a lot of resources on Android devices. The
project also established that large bundles or short bundle lifetimes lead to an increase in dropped
bundles.
5.4 Recommendations
In light of these findings, the project recommended that for situations where speed is necessary,
regardless of resource consumption such as file sharing, the Epidemic protocol is most suitable for
the Android platform since it yielded the highest delivery ratio and the least latency. For situations
where resources are scarce, which is more likely the case, then protocols like MKP are most
suitable since it showed a high delivery ratio and low latency while keeping resource consumption
minimum. Situations like this could be devices with low storage capacity are backing up data to a
server with significant storage capacity compared to theirs. For all other general situations, Spray
and Wait is the most suitable for the Android platform since its performance was average in all
situations. To add to that, the project recommended that for the most optimum performance of all
the protocols in general, bundle sizes should not exceed 1 KiB and the bundle lifetimes should be at
least 10 hours. This is so that bundle dropping is minimised during transmission.
37
the node density in a given geographical area, maybe by deploying the DTN software on other
communication devices such as small Wi-Fi hotspots or routers. To add to this work, there should
also be focus on incorporating security in the DTN with bundle encryption, node registration and
authentication among other things. This could be achieved possibly by implementing the Bundle
Security Protocol, or a variant, to this work.
38
REFERENCES
[1] NASA STI Program, “A Simplified Introduction to Disruption-Tolerant Networking.”
[Online]. Available: https://www.youtube.com/watch?v=HV8CHoWP9-o. [Accessed: 15-Aug-
2018].
[2] S. Shukla, A. Munjal, Y. N. Singh, and E. Dept, “Routing Protocol Approaches in
Delay Tolerant Networks,” p. 7.
[3] T. Jonson, J. Pezeshki, V. Chao, K. Smith, and J. Fazio, “Application of delay
tolerant networking (DTN) in Airborne Networks,” in MILCOM 2008 - 2008 IEEE
Military Communications Conference, 2008, pp. 1–7.
[4] W. Sun, C. Liu, and D. Wang, “On Delay-Tolerant Networking and Its Application,” p. 7.
[5] spacenetworking, “Introduction to Disruption Tolerant Networking (no audio version).”
[Online]. Available: https://www.youtube.com/watch?v=nWtRTzXJvtI. [Accessed: 15-Aug-
2018].
[6] K. Fall et al., “Delay-Tolerant Networking Architecture.” [Online]. Available:
https://tools.ietf.org/html/rfc4838. [Accessed: 15-Aug-2018].
[7] K. L. Scott <kscott@mitre.org>, “Bundle Protocol Specification.” [Online].
Available: https://tools.ietf.org/html/rfc5050. [Accessed: 15-Aug-2018].
[8] S. Farrell, H. Weiss, and P. Lovell, “Bundle Security Protocol Specification.”
[Online]. Available: https://tools.ietf.org/html/rfc6257. [Accessed: 11-Jun-2019].
[9] U. E, R. V, S. S, and S. Udupa, “Delay Tolerant Network for Space,” in 2016 3rd
International Conference on Signal Processing and Integrated Networks (SPIN), 2016, pp.
591–595.
[10] H. Ntareme, M. Zennaro, and B. Pehrson, “Delay Tolerant Network on
smartphones: Applications for communication challenged areas,” p. 7.
[11] Z. Lu and J. Fan, “Delay/Disruption Tolerant Network and its application in military
communications,” in 2010 International Conference On Computer Design and
Applications, 2010, vol. 5, pp. V5-231-V5-234.
[12] T. D. T. Nguyen, T.-V. Le, and H.-A. Pham, “Novel store–carry–forward scheme for
message dissemination in vehicular ad-hoc networks,” ICT Express, vol. 3, no. 4, pp. 193–
198, Dec. 2017.
[13] J. Morgenroth, “Event-driven Software-Architecture for Delay- and Disruption-
Tolerant Networking,” Jul. 2015.
[14] “The Platform | Android.” [Online]. Available: https://www.android.com/the-platform/.
[Accessed: 21-May-2019].
[15] A. Moscaritolo, “Sorry Windows, Android Is the World’s Most Popular OS,” Entrepreneur,
03-Apr-2017. [Online]. Available: https://www.entrepreneur.com/article/292351. [Accessed:
16-Aug-2018].
[16] “Android versions market share 2018,” Statista. [Online]. Available:
https://www.statista.com/ statistics/271774/share-of-android-platforms-on-mobile-devices-
with-android-os/. [Accessed: 16-Aug-2018].
[17] “10 reasons why Android is better than iPhone even now.” [Online]. Available:
https://www.androidauthority.com/10-reasons-why-android-is-still-better-than-ios-145370/.
[Accessed: 12-Oct-2018].
[18] M. Karch, “Everything You Need To Know About the Android OS,” Lifewire. [Online].
Available: https://www.lifewire.com/what-is-google-android-1616887. [Accessed: 21-Oct-
2018].
[19] E. A. A. Alaoui, S. Agoujil, M. Hajar, and Y. Qaraai, “The Performance of DTN
Routing Protocols: A Comparative Study,” vol. 14, p. 10, 2015.
39
[20] “Measure app performance with Android Profiler,” Android Developers. [Online].
Available: https://developer.android.com/studio/profile/android-profiler. [Accessed: 20-
Aug-2018].
[21] M. HusseinMamoun, “Efficient DTN Routing Protocol,” Int. J. Comput. Appl., vol. 80, no.
9, pp. 16–19, Oct. 2013.
[22] S. Grasic, E. Davies, A. Lindgren, and A. Doria, “The evolution of a DTN routing protocol -
PRoPHETv2,” in Proceedings of the 6th ACM workshop on Challenged networks -
CHANTS ’11, Las Vegas, Nevada, USA, 2011, p. 27.
[23] A. Lindgren, E. Davies, S. Grasic, and A. Doria, “Probabilistic Routing Protocol for
Intermittently Connected Networks.” [Online]. Available: https://tools.ietf.org/html/rfc6693.
[Accessed: 06-Sep-2018].
[24] “IBR-DTN - Apps on Google Play.” [Online]. Available:
https://play.google.com/store/apps/details?id=de.tubs.ibr.dtn. [Accessed: 21-Oct-2018].
[25] R. V. Labaree, “Research Guides: Organizing Your Social Sciences Research Paper:
Quantitative Methods.” [Online]. Available: //libguides.usc.edu/writingguide/quantitative.
[Accessed: 20-Aug-2018].
[26] “Platform Architecture,” Android Developers. [Online]. Available:
https://developer.android.com/guide/platform/. [Accessed: 16-Aug-
2018].
[27] G. Adam, C. Bouras, A. Gkamas, V. Kapoulas, G. Kioumourtzis, and N. Tavoularis,
“Performance evaluation of routing protocols for multimedia transmission over mobile ad hoc
networks,” in 2011 4th Joint IFIP Wireless and Mobile Networking Conference (WMNC
2011), Toulouse, France, 2011, pp. 1–6.
[28] “NumPy — NumPy.” [Online]. Available: https://www.numpy.org/. [Accessed: 23-May-2019].
[29] “Matplotlib: Python plotting — Matplotlib 3.1.0 documentation.” [Online]. Available:
https:// matplotlib.org/. [Accessed: 23-May-2019].
[30] A. Keränen, J. Ott, and T. Kärkkäinen, “The ONE simulator for DTN protocol evaluation,”
in Proceedings of the Second International ICST Conference on Simulation Tools and
Techniques, Rome, Italy, 2009.
[31] “Meet Android Studio | Android Developers.” [Online]. Available:
https://developer.android.com/studio/intro. [Accessed: 21-May-
2019].
[32] B. Musiime and W. Kibirango, “MK-DTN,” 21-May-2019. [Online].
Available: https://github.com/radman13666/MK-DTN. [Accessed: 04-Jun-
2019].
[33] “Introduction to Test Driven Development (TDD).” [Online].
Available: http://www.agiledata.org/essays/tdd.html. [Accessed: 19-
Feb-2019].
[34] “Fundamentals of Testing | Android Developers.” [Online]. Available:
https://developer.android.com/training/testing/fundamentals. [Accessed: 21-May-
2019].
[35] “Test your app,” Android Developers. [Online]. Available:
https://developer.android.com/studio/test. [Accessed: 21-May-
2019].
[36] “Services overview,” Android Developers. [Online]. Available: https://developer.android.com/
guide/components/services. [Accessed: 16-Aug-2018].
[37] “Content provider basics,” Android Developers. [Online]. Available:
https://developer.android.com/guide/topics/providers/content-provider-basics. [Accessed: 19-
Feb-2019].
[38] Android Developers, “Introducing Nearby: Physical proximity within and without apps -
Google I/O 2016.” [Online]. Available: https://www.youtube.com/watch?v=Acdu2ZdBaZE.
40
[Accessed: 06-Oct-2018].
[39] “Overview | Nearby Connections API,” Google Developers. [Online]. Available:
https://developers.google.com/nearby/connections/overview. [Accessed: 06-Oct-2018].
[40] “Nearby,” Google Developers. [Online]. Available: https://developers.google.com/nearby/.
[Accessed: 06-Oct-2018].
41
[41] “Room Persistence Library,” Android Developers. [Online]. Available:
https://developer.android.com/topic/libraries/architecture/room. [Accessed: 19-Feb-2019].
42