Professional Documents
Culture Documents
Examensarbete 30 hp
February 2011
Institutionen fr informationsteknologi
Department of Information Technology
Abstract
Evaluation and Enhancement of TCP with Network
Coding in Wireless Multihop Networks
Xiaolin Bai
Contents
1
Introduction
1.1 Problem Statement and Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Contributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Thesis Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8
8
9
9
10
10
10
12
12
12
13
14
15
15
15
16
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
20
20
20
21
21
21
21
22
22
23
23
24
25
25
27
27
30
30
30
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
31
31
31
31
34
35
35
35
35
36
36
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
37
37
37
38
38
38
39
42
42
43
45
45
45
4.11
4.12
4.13
4.14
4.15
4.16
4.17
4.18
4.19
5
4.10.2 NonAckTimer
4.10.3 CtrlPktTimer .
Opportunistic Listening
Opportunistic Coding .
Decoding . . . . . . .
Reception Report . . .
Asynchronous ACKs .
Control Packet . . . . .
Retransmission . . . .
Resume a packet . . .
TCP Reordering . . . .
Bibliography
47
List of Figures
2.1
2.2
2.3
11
13
14
3.1
3.2
17
19
4.1
4.2
4.3
4.4
4.5
4.6
4.7
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
22
23
24
28
28
32
34
5.1
5.2
5.3
5.4
5.5
5.6
Chain Topology . . . . . . . .
Throughput in Chain Topology
X-I Topology . . . . . . . . .
Throughput in X-I Topology .
X-II Topology . . . . . . . . .
Throughput in X-II Topology .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
38
39
40
40
41
41
6.1
6.2
43
44
.
.
.
.
.
.
Chapter 1
Introduction
Network coding, is young and very promising technology. It was the seminal paper Network information
flow by Ahlswede, Cai, Li and Yeung [1], that gave birth to network coding. Network coding is to
efficiently utilize resources in both wired and wireless networks, by letting the routers operate on the
packets rather than pure forwarding, it has received much attention from both academia and industry
recently. Network coding has several advantages [2], among which the most well-known is increasing the
throughput of networks. Other important advantages are the robustness to packet loss and link failures,
easy implementation and improved security.
COPE (Coding Opportunistically) is the first practical network coding scheme for wireless networks [13,
14], and is to be used here in this thesis work. The Transmission Control Protocol (TCP) is one of the
most important protocols in the Internet Protocol Suite, which is the set of communication protocols used
for the Internet and other similar networks. TCP is intended for use as a highly reliable host-to-host
protocol between hosts in packet-switched computer communication networks, and in interconnected
systems of such networks [40]. And TCP is a connection-oriented protocol, provides end-to-end, reliable
and ordered delivery of a stream of bytes between a source and a destination device. Evaluation and
enhancement of TCP with COPE in wireless multihop networks are the tasks of this thesis work.
in a 802.11-based wireless ad hoc network, and showed significant performance gain [14]. It is shown
in [14], the performance gain of TCP with COPE in a 802.11 network is almost neglected. However, most
wireless applications rely on legacy TCP to communicate with TCP-dominant wired hosts, and it is likely
that TCP will remain as the major transport protocol for the clients of 802.11 networks [15]. Hence, the
analysis and improvement of TCP performance in multihop ad hoc networks are important and valuable.
The performance of legacy TCP over multihop ad hoc networks is not satisfactory due to the special
features of wireless networks, such as hidden terminal and exposed terminal problems, transmission
errors, topology variations and routing instability, etc [16]. A lot of research has been done on TCP
performance in multihop ad hoc networks in recent yeas [16, 17, 18, 19, 20, 21, 22] by considering the
practical limitation of wireless ad hoc networks. Joint implementation of TCP and network coding has
also received attention recently [23, 24, 25]. However, as we know, the performance degradation of TCP
may be caused by the rate control mechanism of TCP itself and routing protocol [15, 26, 27], and no
research on this issue has been found until now. This is one of the main motivations of this thesis project.
Thus, in this thesis, we use network simulator NS-2 to implement COPE, and evaluate the performance of COPE in comparison with other TCP protocols adapted for wireless ad hoc network, such as
TCP-AP and TCP-FeW. Finally, if possible we try to propose a coding-aware TCP protocol, which takes
into account the influence of network coding.
The motivation of this work is the idea to find the reasons that cause the performance degradation of
TCP in wireless multihop networks, especially focus on the rate control mechanism of TCP itself. As the
previous research shows the network coding can increase the throughput of TCP. If we use the better rate
control mechanism of TCP for network coding, we can achieve the better performance of TCP.
1.2 Contributions
The contributions of the thesis consist of the following aspects.
1. COPE is an open source project which is implemented using NS-2. Then more and more researchers could research on it and make their own contributions to COPE and network coding in
wireless ad hoc networks.
2. Performance of COPE is evaluated, which proves that using COPE as a network coding approach
is reasonable. Three TCP protocols (TCP-NewReno, TCP-FeW and TCP-AP) with and without
COPE (with and without network coding) are simulated.
3. A new scheme of TCP-AP is proposed, which is a network coding aware TCP.
4. A new scheme of Encode Once is proposed to improve the performance of COPE.
Chapter 2
10
Tablet Computer
PDA
Smart Phone
Notebook
11
2.2.1 NewReno
TCP NewReno [48] is a slight modification over TCP Reno. When receiving three duplicate ACKs, TCP
Reno assumes there is packet loss happens on the link, and then start up the Fast Retransmit and Fast
Recovery process, which will immediately retransmit the lost packet. TCP Reno works very well when
the packet loss ratio is low. But TCP Reno doesnt perform well under the condition of high packet loss,
especially when there are multiple packet losses in one congestion window. Thats because TCP Reno
can only detect a single packet loss. When multiple packet losses happen, the later lost packets excluding
the first one would be retransmitted only after time-out. And time-out and retransmission would cause
TCP to go back to Slow Start stage, which results in low utilization of link and dramatically degrades
the performance of TCP.
To overcome this problem, TCP NewReno improves retransmission during the Fast Recovery stage
of TCP Reno. For every lost packet, TCP NewReno would retransmit it and wait for the acknowledgment
before exiting from Fast Recovery process. TCP NewReno successfully prevents TCP from going back
to Slow Start when there are multiple packet drops. TCP NewReno keeps the same performance at low
ratio of packet loss, and substantially outperforms TCP Reno at high ratio of packet loss.
2.2.2 TCP-FeW
As previous research [49] shows, to restrict the size of the congestion window of TCP to 1 or 2 would
lead to great improvement of the performance in wireless multihop networks. According to this research,
in 2005 K. Nahm, etc. [50] introduces the FeW (Fractional Window Increment) scheme, which prevents
the over-reaction of the on-demand routing protocol by limiting TCPs aggressiveness. TCP-FeW allows
the TCP congestion window to grow by a fractional rate 6 1 (packets) at each RTT (Round-Trip-Time).
That means adding one packet into the congestion window at every 1 / RTT.
More specific, lets assume the size of the current congestion window is W current , the source node
transmits W current packets to destination node and receives the same number of ACKs from the destination
node during each RTT. When receiving an ACK, the source node updates the current congestion window
size though the following formula (2.1):
W new = W current +
W current
(2.1)
where 0 < 6 1. When = 1, the pattern of increase of the formula above is the same as the traditional
style, increasing window size when receiving an ACK. So TCP-FeW keeps the original mechanism of
TCP congestion window growth. In addition to that, TCP-FeW can monitor the network traffic without
any other additional information and provide quick reactions.
2.2.3 TCP-AP
In multihop wireless networks, the main reason of packet drops is at the link layer rather than buffer
overflow, which is opposed to the wired network. Furthermore, the congestion control of TCP NewReno
purely depends on packet loss, the size of congestion window has been decreased when the packet drops
happen rather than proactively detect the trend of congestion by monitoring the network traffic. Thats
why TCP NewReno performs quite poorly in multihop wireless networks, as well as severe unfairness
among competing TCP flows.
12
In 2005, S. M. EIRakabawy, etc. [51] proposes a new congestion control algorithm for TCP over
multihop IEEE 802.11 wireless networks called TCP-AP (TCP with Adaptive Pacing). TCP-AP is a
rate-based scheduling of transmissions within the TCP congestion window. The source node adapts
its transmission rate according to the estimation of the current 4-hop propagation delay and coefficient
of variation of recently measured RTTs. Unlike the previous solutions, TCP-AP keeps the end-to-end
semantics of TCP, does not need to modify the routing or link layer, and does not rely on the cross-layer
information from intermediate nodes along the path. Moreover, TCP-AP achieves excellent fairness and
quick reaction to control network traffic conditions.
Node N / Router
Node N / Router
F 1( x , y , z )
F 2( x, y , z )
F 3( x , y , z )
(b) Network Coding
the first practical implementation of wireless network coding scheme. More details of COPE is introduced
in the following section 2.4.
2.4 COPE
COPE is a practical network coding scheme for wireless networks. It was proposed by S. Katti et.al. in
2006 [13], [14]. COPE is the first implementation of inter-session network coding in a real testbed and
shows significant performance gain. The aim of COPE is to bridge the theory of network coding with
practical application.
COPE was implemented in a real testbed with 20 laptops. COPE is implemented using the Click
Toolkit [38] in Linux and evaluated in an IEEE 802.11a network. However, the source code of COPE is
not open and it is also not easy for every interested researcher to implement a similar testbed. Therefore,
we implement COPE in the network simulator, NS-2, to evaluate its performance with different network
configurations.
1
2
3
4
As packet
Bs packet
3
As packet XOR Bs packet
transmission time and scare wireless resources. Several packets are sent together with network coding
to multiple nexthop nodes, which can correctly decode it. The whole process of COPE is shown in the
Figure 2.3. As shown in the figure, in COPE node C combines two packets into one (Encoding Process)
and broadcasts it, when neighbor nodes A and B receive this broadcast encoded packet, they would try
to get the original packet through the packets they have already hold (Decoding Process). While the
traditional transmission mode would require two transmissions instead of one broadcast. Compared to
the traditional transmission mode, we can see that the total times of transmission with COPE is three,
rather than the four times of traditional transmission mode.
COPE includes three parts: (i) Opportunistic Listening; (ii) Opportunistic Coding; (iii) Reception
Reports.
15
Chapter 3
The structure of a mobile node in NS-2 is shown in Figure 3.1. It consists of Agent/Sink, Link Layer,
16
Sink
Agent
target_
uptarget_
LL
downtarget_
IFq
uptarget_
mac_
downtarget_
MAC
downtarget_
uptarget_
NetIF
uptarget_
channel_
Channel
Figure 3.1: Structure of mobile node in NS-2
Interface Queue, MAC Layer, Network Interfaces and Channel. Each of the main components is briefly
described here.
Agent
Agent represents endpoint where network layer packets are constructed, and is used in the implementation of protocols, such as TCP and UDP (User Datagram Protocol) protocols. Any node in
NS-2 as a source of data flow needs to attach a specific Agent to generate packets.
Sink
Sink, as the opposite of Agent, is the consumer of the network layer packets. The node acts as a
receiver needs to attach a specific Sink to receive packets.
LL (Link Layer)
Link Layer connects to a ARP (Address Resolution Protocol) module, which is used to resolve the
MAC address using IP address. All the packets sent out by Agent will be transferred to Link Layer,
and then Link Layer puts them into the IFq. For the packets received, MAC transfers them to Link
Layer, and then Link Layer would pass them to its up target Sink.
IFq (Interface Queue)
There are two kinds of Interface Queue. When the routing protocol is DSR (Dynamic Source
Routing), a special queue called CMUPriQueue would be used, because different kinds of packets
would be assigned different priorities using DSR. Otherwise, another queue called PriQueue, which
17
pushes the packets at the head of the queue, will be used. The encoding and decoding operations
are implemented on this layer.
MAC (Media Access Control)
MAC layer is implemented as DCF (Distributed Coordination Function) MAC protocol in IEEE
802.11. There is a Tap Agent (Tap Agent is application level process on NS-2 node that converts
network packets between the simulated and the real network.) could be registered itself with the
MAC object using method installTap(). As the requirements of the network coding, the Tap Agent
will promiscuously snoop all the packets received by MAC layer, before address filtering is done,
and pass them up to the specific layer IFq.
NetIF (Network Interfaces)
NetIF layer in NS-2 acts as the hardware interface used by mobile node to access the channel
and simulates signal integrity, collision, transmission error, etc. The Radio Propagation Model
(Radio Propagation Model exists in physical layer of each mobile node and is used to predict
the received signal power of each packet.) has been integrated into NetIF layer. NetIF marks
each transmitted packet with transmission power, wavelength, etc. and decides whether coming
packet can be received by the mobile node with given distance, transmit power and wavelength. In
addition to that, Omni Directional Antenna module, which has unity gain for all direction, has been
implemented into this layer too.
Channel
Channel simulates the practical transmission of the packet at the physical layer. Contention mechanisms have been realized on Channel, which allows the MAC layer to carry out contention, carrier
sense and collision detection. If more than one transmissions happens at the same time, Channel
mark the collision flag. By checking this flag, MAC layer could be aware of this collision and
handle it.
COPE will be implemented on IFq layer. So we should make a few slight modifications to the original
structure of the mobile node in NS-2. For opportunistic listening, the up target of MAC is no longer LL,
because the COPE is implemented on IFq layer and all the incoming packets should pass through COPE.
If the destination or next hop of incoming packet is this node, then pass this packet to LL, which now is
the up target of IFq. Otherwise, COPE saves it in the packet pool for a while or drop it directly depending
on the packet is decodable or not. The new structure of the mobile node with COPE looks like Figure 3.2.
18
Sink
Agent
target_
uptarget_
LL
downtarget_
uptarget_
COPE
IFq
mac_
downtarget_
uptarget_
MAC
downtarget_
uptarget_
NetIF
uptarget_
channel_
Channel
Figure 3.2: Structure of mobile node with COPE in NS-2
19
Chapter 4
20
each neighbor, and both of these queues are implemented with linked list (list, one of the C++ STL
Containers).
The most tricky rule of opportunistic network coding is to guarantee the probability of decoding,
which depends on guessing. In COPE implemented in the testbed, the probability of overhearing leverages the routing protocol. However, we are going to implement it in a different and simpler way. The
overhearing probability of calculated by smoothing historical records. Assuming the probabilities in the
last and current report periods are pl and and pc , respectively, we can calculate the updated overhearing
probability as follows
pu = (1 ) pl +
t
t
pc + (1 t
) pl
( Tt + 1) T
( T + 1) T
(4.1)
where is the moving weight, t is the time between last and current reports and T is the reference period.
With this method, we will not need any help from the routing layer and generalize the application area
of COPE.
21
ENCODED_NUM
Packets
XOR-ed
together
PKT_ID
NEXTHOP
LOCAL_PKT_
SEQ_NUM
MAC Header
REPORT_NUM
COPE Header
Reception
Report
SRC_ID
LAST_PKT
Bit Map
Routing Header
(Optional; depends on protocol)
IP Header
ACK_NUM
ACK
Block
NEIGHBOR
LAST_ACK
Ack Map
Otherwise, the packet is sent to COPEPriQueue directly. This is because our one-queue dual-access
design for COPEPriQueue, refer to COPEPriQueue description in section 4.9 for detail.
4.9.1 COPEPriQueue
COPEPriQueue is the real IFq which is a multiple inheritance from CMUPriQueue and PriQueue as
showed in the following class graph (Figure 4.3). Although NS-2 uses different IFq for different routing
protocols (e.g., AODV and DSR), here we just integrate both of them together and overwrite some of their
functions. In current version of COPE in NS-2, we only consider two mostly widely used routing protocols, AODV and DSR (due to the time reasons, only DSR is implemented), and other routing protocols
can also be included into this implementing framework easily.
As you see in Figure 4.3, both queues inherit from a common class Connector which will result in
an ambiguous function call, so we need to indicate a specific path while using Connectors members or
functions.
Another problem is that we design the IFq much more like a BiConnector rather than just a Connector,
because all packets sent up from MAC layer have to go through COPE prior to LL, so that the incoming
packet can be decoded by COPE firstly and the packet sent up to LL is native. Since the decoded native
packets by COPE are sent up immediately without any need to store them in an UP queue, we simulate
the BiConnector by adding a uptarget member into COPE to simplify this class inheritance system. In
contrast, only one COPEPriQueue is implemented for all DOWN packets, Thus the COPEPriQueue
here is called one-queue dual-access design for IFq.
23
4.9.2 NonAckQueue
In order to realize retransmission of packets sent out in a coded way, we use NonAckQueue to store all
native packets, which are sent out using network coding from this node, but have not been acknowledged.
In other words, the uncodable packets (control packets and non-encoded packets) would not be put into
NonAckQueue.
typedef struct {
u_int16_t local_seqnum ; // local sequence number of Non - Acked pkt
u_int8_t rcounter ; // counter for times of retransmission
Packet * ppkt ; // pointer to packet
} non_ack_entry_t ;
typedef struct {
int nodeid ; // next hop
24
Whenever OutputQueue sends out a native packet, which is included in an encoded packet, this native
packet is put into the NonAckQueue. At the same time, COPE starts a timer for this native packet. The
duration of this timer slightly longer than the Round Trip Time (RTT). We call this timer NonAckTimer,
which inherits from CopeTimer. If the acknowledgment of this native packet comes back before the timer
expires, the COPE stops this timer and delete this native packet from NonAckQueue. Otherwise, this
native packet will be retransmitted, by putting it at the head of OutputQueue. And immediately, set a new
timer for this native packet and increase the retransmission counter by one. When OutputQueue sends it
out, it checks the counter, if counter == 2 (retransmission threshold is 2 by default), then stop its timer
and drop this packet.
4.9.3 AckPendQueue
Each node maintains an AckPendQueue for each neighboring node, each saves the pending ACK information related to the corresponding neighbor. AckPendQueue is implemented as a linked list, whose
nodes structure looks like this:
# define ACKMAP_TOTAL_SIZE
256
typedef struct {
int neighbor ; //MAC address of the neighbor
u_int16_t lastack ; // last ack sequence number
u_int16_t shifts ; // number of bits shifted
bitset < ACKMAP_TOTAL_SIZE > ackmap ;
} ack_pend_t ;
4.9.4 PacketPool
PacketPool (Packet Pool), keeps a copy of all native packets it has received or sent out. To clear expired
packets in the Packet Pool, garbage collection is conducted every few seconds. The structure of the PacketPool consists of one hash table, one first-in-first-out (FIFO) queue (backup queue), and one reception
report list.
Hash Table
hash_map <int , Packet *> pkt_table_ ;
We use a hash table to store native data packets keyed on packet id. The buckets of the hash table is
the pointer of the packet corresponding to this packet id. Its easy for COPE to do decoding when
receiving an encoded packet, because COPE could quickly get the corresponding packet through
its id.
Backup Queue To store packet pointers with FIFO strategy using the linked list. The purpose of
this backup queue is to assist the process of garbage collection.
25
typedef struct {
double time ;
Packet * ppkt ;
} pkt_entry_t ;
list < pkt_entry_t > backup_queue_ ;
Reception Report List To record which packets have been received from which neighbor, and also
which packets would be expired in the coming period, and be delete from Packet Pool during the
garbage collection process. This list is also the source of periodic reception reports.
# define BITMAP_TOTAL_SIZE 256
# define BITMAP_SIZE 8
typedef struct {
nsaddr_t srcip ; // source ip
u_int16_t lastpkt ; // ip sequence number
u_int16_t shifts ; // number of bits shifted
bitset < BITMAP_TOTAL_SIZE > bitmap ; // bit -map of recently heard
packets
u_int16_t max ;
} report_t ;
list <report_t > report_list_ ;
In Pool
When one native packet has been received or sent out, it is put into the PacketPool. The procedure of
doing that looks like this:
Firstly, check whether this packet has been in the pool or not. If it is, then the packet ignored. In
addition, check whether this packet has been garbage collected before. If so, then ignore it too.
Secondly, push this packet into the backup queue.
Thirdly, add this packets information into the hash table.
Finally, update the reception report list according to this packet.
Get Reception Report
There are also two situations need to get reports, just like getting ACKs from AckPendQueue. Firstly,
when the node has data packet to send out, it checks whether there is any reception report to transmit, if
so, it appends them to the COPE header. Secondly, when there is no data packet to send out, then periodic
report is broadcasted as a special control packet, which contains the reception reports.
26
Garbage Collection
Without appropriate approach to clear the out-of-date packets in the pool, the pool will soon overflow.
Thats why the garbage collection is used. The garbage collection is executed by COPE every few seconds.
4.9.5 PacketInfo
Each node keeps a hash set, packet info, that is keyed on packet id. For each packet in the output queue,
the table indicates whether each neighbor has that packet or not.
Using the gnu hash set as the hash set implementation, where gnu hash set is an easy-to-use hash
set, but hasnt been included into the C++ standard library. If our implementation of COPE would be
compiled on other platform, there may be some compiling problems. To fix this problems, you should
change the including path of hash set to the specific platform required.
As said before, the hash table should keyed on packet id, however, to get faster access speed and better
performance, the structure key (info key t, as showed bellow) is used rather than the packet id.
# include <ext / hash_set >
using namespace __gnu_cxx ;
typedef struct {
int nodeid ;
hash_set <int > pkt_ids ;
} pkt_info_t ;
Thats because if the hash set is keyed on packet id, when checking whether a packet is in the set or
not, true indicates the neighbor has that packet, false means not. When the sender wants to do encoding
process and gets one neighbors probability of having that packet, it has to search the whole list for each
packet, which wastes time and resources. If the packet id is used as key, the probability of each neighbor
having that packet is one entry of the hash set. That means the sender can get each neighbors probability
with high speed, which is the main advantage of hash set over other data structures.
4.9.6 ProbGuess
General Ideas
After searching for the packet info, if the node is still not sure whether its next hop has a specific
packet or not, a probability guessing mechanism should be utilized.
The guessed probability is only used at the the encoding-needed node(subset of intermediate nodes),
as a prob demander, the node will maintain an instance of ProbGuess to update probs after packet info
is updated and fetch a specific prob from. To explain how probability guessing works and whats the
implementation idea, we can consider a simple network scenario firstly as shown in Figure 4.4:
In the above simple topology, its obvious that A and C are source nodes with data flow A-B-E-F
and C-B-E-F separately, both B and E probably encode a native packet. Assume that A has sent out
packets with sequence number 1, 2, 3 and C, E have received all these packets and kept them in the
COPEPriQueue, then we can compute the new probability at E by this way:
E maintains a table for each source ip and the entry of each table is keyed by all its neighbor nodes,
at a certain time point, E receives a reception report and update the table into the following status(see
Figure 4.5, with V:exist, X:non-exist ) according to several important rules:
27
28
be calculated similarly. As you may note, instead of evaluating each packets probability, we just evaluate
the probability of a set of packets sourced by a specific node.
Until now, we skip a fact that the probability is updated continuously, to increase the accuracy of
the guessed probability, we should consider historical records as a factor and design an algorithm to
compute probability accumulatively, so a formula(as mentioned above, in Implementation of COPE in
NS-2/Opportunistic Coding) based on Moving Weighted Average Method which also regards updating
time period as a coefficient.
Lets elaborate the network scenario described before. Assuming that at node E, node Ds last reception report arrived at T 0 while the current report time is T 1 , and node Ds last probability for source A is
p l(D,A), then the guessed probability is updated as
pu [D, A] = pl [D, A] +
T1 T0
pc [D, A]
T
(4.2)
Third, to record the historical updating time for each neighbor, a simple struct is designed and similarly create a list of instances according to different neighbor node.
typedef struct {
int nodeid ;
double last_report_time ;
} nb_info_t ;
Fourth, two iterfaces are provided. one is to update prob info table after updating packet info, which
means a reception report received. This function will execute the following works:
1. update the src list information according to the large and small virtual queue, since the source nodes
are determined while initialization, no need to change(insert/delete) the list elements dynamically.
29
2. update nb ids nb info t, if it exists, delet add a new nb info t to the list, now one little problem
still exists that nothing to do if a node is no longer its neighbor.
3. get the new pkt info, and compute a new prob with the above strategy
4. update the new prob in prob info table, if the updated entry exists, delete it and insert a new one
5. reset the src list to a default status
Another get prob info will simply search for the hash table according to a specific source and neighbor, if no entry exists, return zero as the probability.
void up_prob_info (int nb_id ,
neighbor_list_node * neighbor list ,
VirQueue * virtual table ,
PacketInfo * pkt_info );
double get_prob_guess (int src ip , int neighbor id);
4.9.7 VirQueue
The virtual queue is used to store all packets pointer in the COPEPriQueue, sorted by the next hop and
packet type(Large/Small) pair. So a new hash table is constructed with a specific virtual key, each entry
stores a packet queue which maintains all qualified packets.
There are three main interfaces for VirQueue, the first one is inserting a packet into the virtual table
after inserting into the output queue, the related entry is specified by next hop id and packet size, if no
entry exist, creat it dynamically, the bool parameter is to decide enque head or push back; the second one
is getting a virtual packet matching the passed parameters; the third one will remove a packet from the
virtual table, if the packet queue becomes empty after removing, just naturally delete the whole entry.
void enque_vir_pkt ( Packet * p, bool rt);
PacketQueue * get_vir_pktq (int node_id , char type );
void remove_vir_pkt ( Packet * p);
4.10 Timers
Each node maintains following timers to control the packet retransmission, periodic control packets, and
reception reports, etc.
4.10.1 CopeTimer
CopeTimer is the parent class of other timers in COPE, which inherits from Handler. CopeTimer provides
some virtual member functions for child classes.
30
4.10.2 NonAckTimer
NonAckTimer is used to manage the retransmission of unacknowledged packets. A NonAckTimer is
started for each native packet in the encoded packet when sending out. If the acknowledgment comes
back before the timer expires, the packet in the NonAckQueue is remove, and the timer of this packet
is stopped. Otherwise, the timer expires. Then the retransmission process is called, by getting out that
packet from NonAckQueue and retransmitting it, increasing the retransmission counter by 1, and starting
a new timer for this packet.
Note that, to identify which timer, the neighbors ID and local sequence number in that packet have
been recorded when starting timer for it. These two variables are used to decide which timer should be
stopped when receiving ACKs.
4.10.3 CtrlPktTimer
There are some periodic control packets, reception reports and pure ACK packets in COPE, that is the
reason why this CtrlPktTimer exists. This timer is started when the OutputQueue is empty, and stopped
when the OutputQueue contains packets. When the timer expires, the control packets are sent out.
31
32
prob 1.0
q
head o f its tag Virtual Queue
for
each packet r in Encoded PktList
else
do
prob prob Pr
do
if
prob
<=
G
if (prob > G)
p p xor q
add
q to Encoded PktList
then
prob 1.0
q
head o f its tag Virtual Queue
for
each packet r in Encoded PktList
else
do
prob prob Pr
do
if
prob
<=
G
if (prob > G)
p p xor q
add
q to Encoded PktList
then
mission and periodical control packet etc. are not reflected in the above diagram.
Note that we are only considering a sub-optimal solution, which iterates all valid neighbors in {Neighbors}{NextHops} with a random order , we keep the optimal solution as an open function and may extend it in
our future works. For an optimal solution, we can design a set of packets as a best encoded choice prior
to others.
4.13 Decoding
In the same way, we can describe the decoding process by simulating a packet p received at a node and a
sequence diagram (Figure 4.7) is added to help us understand the whole process clearly:
COPE calls its receivable(2) member function which will further call extract state report(3) to
update local packetInfo(4) and probGuess(5), then extract acks(6) to merely delete ack item with
neighbor == myn odei d in non ack queue(7). Receivable function will return false(non-decodable
or overheard packet) or true(native or decodable).
COPE then calls its decode function(8) to iterate each item but in xored header field, the passed
packets also include a copy of the original target packet, this is because if the packet is nondecodable, we can recover it back for some further operations. To execute decoding process, COPE
will check its local packetPool9 confirming whether a xored packet exist or not(10). If the target
packet is native or overheard, just return this function, otherwise, continue with other items in the
xored header. In the end, COPE clears all the xored header(11) if it is decodable.
No matter it is receivable or not, just put the result packet into PacketPool(12). We keep all nondecodable packets for a further decoding possibility, which is regarded as an extention for latter
works.
34
Append an ack of the result packet into pendAcks if the received packet is decodable(13)
If the packet is receivable(native or decodable packet), update packetInfo for the native or decoded
packet(14), since it is obvious that the previous hop definitely has this packet.
Note that the whole decoding process has no relation with COPEPriQueue and VirQueue, because
once receiving a new packet with UP, COPE just deal with it directly rather than enqueue that packet.
4.17 Retransmission
There are two type of retransmission in COPE. One is retransmission of data packets, another is retransmission of asynchronous ACKs.
Data Packet Retransmission When the timer for the data packet in the NonAckQueue is expired,
which means the nexthop has not sent back the acknowledgment of that data packet. After the
expiration, the NonAckTimer handler will be called to process the data packet retransmission. And
the retransmission times are limited to 2 times, after that, the node gives up and drops that packet.
So the COPE does not guarantee the reliability at link layer.
35
Asynchronous ACKs Retransmission This is the counterpart of data packet retransmission. When
the nexthop gets a duplicate data packet, which means the previous data packet lost, so the nexthop
gets the pending ACKs from AckPendQueue, appends them to another data packet, and sends it
out. The retransmission times for data packet are limited to 2, so the retransmission times for
asynchronous ACKs should be limited (2 by default), otherwise the nexthop will wait for that lost
packet forever.
36
Chapter 5
(5.1)
Throughput Gain: the ratio of the measured network throughputs with and without COPE[13].
Throughput gain is defined as:
throughput gain =
throughputCOPE
throughputNoCOPE
(5.2)
where throughputCOPE and throughputNoCOPE are average TCP throughput when network coding
is turned on and off respectively.
37
m-1
200m
Figure 5.1: Chain Topology
The chain topology used in this thesis as shown in Figure5.1. In the chain topology, the distance of the
contiguous nodes is 200 meters, while the transmission range of each node is 250 meters, so each node
(except the first one and the last one) can only directly communicate with its two neighbor nodes around
itself. The first node n1 and the last node nm send TCP data to each other, while they have to transmit
data through the nodes between them. So the intermediate nodes would have opportunities to do network
coding. According to the formula of the network coding gain over chain topology [13]:
coding gain =
2N
N+1
(5.3)
where N is the number of hops in chain topology. When the number of hops N trends to infinity, the
theoretical gain should be 2.
We evaluated the three TCP protocols with and without COPE separately over the chain topology from
4 hops to 15 hops. As shown in Figure 5.2, the network throughput of TCP with COPE is much higher
than the one without COPE, which proves the benefits of network coding. However, there isnt any TCP
protocol that is absolutely the best one in all cases. We can see from Figure 5.2 that TCP-NewReno is the
worst choice for network coding. While TCP-AP with COPE is much better than TCP-FeW with COPE
when the number of hops is less than 11, after that, TCP-FeW with COPE achieves higher throughput.
And regardless of which TCP protocol is used, the throughput gain of this topology is less than the
theoretical coding gain 2 as shown in formula 5.3.
300
TCPNewReno
TCPNewReno with COPE
TCPFeW
TCPFeW with COPE
TCPAP
TCPAP with COPE
Goodput (Kbit/s)
250
200
150
100
50
4
10
11
Number of Hops
12
13
14
15
39
150m
200m
Figure 5.3: X-I Topology
800
Without COPE
With COPE
700
Goodput(Kbit/s)
600
500
400
300
200
100
0
TCPNewreno
TCPFeW
TCPAP
40
150m
200m
300
Without COPE
With COPE
Goodput(Kbit/s)
250
200
150
100
50
TCPNewreno
TCPFeW
TCPAP
41
Chapter 6
42
900
Without COPE
With COPE
With COPE & Encode Once
800
Goodput(Kbit/s)
700
600
500
400
300
200
100
0
TCPNewreno
TCPFeW
TCPAP
43
following equation.
rnew = rold
(6.1)
Where rold is the original rate interval of TCP-AP and rnew is the new rate interval used in our improvement of TCP-AP. Through various simulations and analysis, we got the experimental value of ,
when = 0.2, TCP-AP achieves the highest throughput.
700
Goodput(Kbit/s)
600
500
400
300
200
100
0
Without COPE
COPE
Encode Once
Figure 6.2: Throughput of X-I topology with Network Coding Aware Using TCP-AP
The Figure 6.2 shows the improvement of throughput provided by network coding aware TCP-AP
with COPE. This new TCP-AP scheme brings about 12% increase of network throughput, which greatly
improves the performance of TCP-AP in COPE.
Note that, due to the time reasons of this thesis, we didnt test this new TCP-AP protocol over other
topologies. But we think that there should be a appropriate , which is suitable for TCP-AP to do network
coding in that topology.
44
Chapter 7
7.1 Conclusions
The key issue of this master thesis project, to evaluate and enhance the TCP performance over wireless
multihop networks, has been finished. We implemented COPE, which is the first practical solution for
wireless network coding, on NS-2 and evaluated it with three different TCP protocols adapted for mobile
ad hoc networks, TCP-NewReno, TCP-FeW and TCP-AP, with and without COPE respectively. We
performed several simulations over chain topology, classic X-I topology and X-II topology. The simulate
results show that both TCP-FeW and TCP-AP over chain topology could greatly improve the performance
of legacy TCP. The similar results got from the evaluation over X-I topology, except TCP-AP. There
might be two reasons. One is TCP-AP is based on the current 4-hop propagation delay and coefficient of
variation of recently measured RTTs. Another one is the rate control of TCP-AP is over proactive, which
leads to less opportunities to perform network coding. To overcome this problem and find out the reason,
I introduced X-II topology, an extended version of X-I topology, to test TCP-AP protocol. And simulation
result of X-II topology approves that the main reason is the over proactive rate control of TCP-AP.
Furthermore, to improve the current network coding gain, I proposed the following two schemes
from the following two aspects: TCP protocols and the mechanism of COPE itself. One is Encode Once
scheme for COPE, which restricts the times of encoding for each packet to one. Both schemes bring some
improvement of throughput. Another is Network Coding Aware TCP, which is a slight modification of
current TCP-AP protocol to make it less proactive and more suitable for network coding.
In the vision of wireless network coding, this thesis presents an open source solution COPE to researchers that allows every one to take part in and make some contributions. The extensive performance
evaluation of the system I provided, shows COPE largely increases network throughput.
Finally, it should be noticed that the real wireless networks are more complicated than the topologies
used in this thesis project. Thus the results might be very different.
45
46
Bibliography
[1] R. Ahlswede, N. Cai, S.-Y. R. Li, and R. W. Yeung, Network information flow, IEEE Trans. on
Information Theory, vol. 46, no. 4, pp. 12041216, Jul. 2000.
[2] Tracey Ho and Desmond S. Lun, Network coding: an introduction, Cambridge University Press,
Cambridge, New York, 2008.
[3] S-Y. R. Li, r. W. Yeung, and N. Cai, Linear network coding, IEEE Trans. on Information Theory,
vol. 49, no. 2, pp. 371381, Feb. 2003.
[4] T. Ho, M. Medard, and R. Koetter, A random linear network coding approach to multicast, IEEE
Trans. on Information Theory, vol. 52, no. 10, Oct. 2006.
[5] S. Zhang, S.-C. Liew, and P. P. Lam, Physical-layer network coding, in Proc. of IEEE/ACM MOBICOM, Sep. 2006.
[6] C.-C. Wang and N. B. Shroff, Pairwise intersession network coding on directed networks, To appear
in IEEE Tran. on Information Theory.
[7] S. Sengupta, S. Rayanchu, and S. Banerjee, An analysis of wireless network coding for unicast
sessions: The case for coding-aware routing, in IEEE Proc. INFOCOM, May 2007.
[8] A. Khreishah, C.-C. Wang, and N. B. Shroff, Cross-layer optimization for wireless multihop networks with pairwise intersession network coding, IEEE Journals on Selected Areas in Communications, vol. 27, pp. 606621, Jun. 2009.
[9] Y. Wu, P. A. Chou, and S.-Y. Kung, Minimum-energy multicast in mobile ad hoc networks using
network coding, IEEE Trans. on Comm., vol. 53, no. 11, pp. 19061918, Nov. 2005.
[10] D. S. Lun, N. Ratnakar, M. Medard, R. Koetter, et al, Minimum-cost multicast over coded packet
networks, IEEE Tran. on Information Theory, vol. 52, no. 6, pp. 26082623, 2006.
[11] T. Cui, L. Chen, and T. Ho, Energy efficient opportunistic network coding for wireless networks,
in INFOCOM, Phoenix, AZ, USA, Apr 2008, pp. 361365.
[12] S. Katti, S. Gollakota, and D. Katabi, Embracing wireless interference: Analog network coding,
in Proc. of SIGCOMM, Kyoto, Japan, Aug. 2007.
[13] S. Katti, H. Rahul, W. Hu, D. Katabi, M. Medard, and J. Crowcroft, XORs in the air: Practical
wireless network coding, in Proc. SIGCOMM, Pisa, Italy, Sep. 2006.
[14] S. Katti, H. Rahul, W. Hu, D. Katabi, M. Medard, and J. Crowcroft, XORs in the air: Practical
wireless network coding, IEEE/ACM Trans. on Networking, vol. 16, no. 3, pp. 497510, Jun. 2008.
47
[15] K. Nahm, A. Helmy and C. -C. Jay Kuo, TCP over multihop 802.11 networks: Issues and performance enhancement, in Proc. ACM MobiHoc, Urbana-Champaign, IL, USA, May 2005.
[16] G. Holland and N. Vaidya, Analysis of tcp performance over mobile ad hoc networks, in Proc.
IEEE/ACM MOBICOM, Aug 1999.
[17] K. Xu, M. Gerla, L. Qi and Y. Shu, Enhancing TCP fairness in ad hoc wireless networks using
neighborhood RED, in Proc. MobiCom, San Diego, California, USA, Sep 2003.
[18] Z. Fu, X. Meng and S. Lu, How bad tcp can perform in mobile ad hoc networks, in IEEE International Symposium on Computers and Communications (ISCC02), Taormina, Italy, Jul 2002.
[19] K. Chandran, S. Raghunathan, S. Venkatesan and R. Prakash, A feedback-based scheme for improving TCP performance in ad hoc wireless networks, IEEE Pacific-Rim Conference on Multimedia, vol. 8, no. 1, Feb. 2001.
[20] H. Zhai, X. Chen and Y. Fang, Rate-based transport control for mobile ad hoc networks, in Proc.
IEEE WCNC, New Orleans, LA USA, Mar 2005.
[21] L. Ding, X. Wang, Y. Xu, and W. Zhang, Improve throughput of tcp-vegas in multihop ad hoc
networks, Elsevier Computer Communications, vol. 31, pp. 25812588, 2008.
[22] L. Ding, W. Zhang, X. Wang, L. Qian, and Y. Xu, Adaptive fractional window increment of tcp in
multihop ad hoc networks, Journals of Zhejiang University Sience A, vol. 10, no. 6, pp. 820827,
2009.
[23] L. Scalia, F. Soldo, and M. Gerla, Piggycode: a mac layer network coding scheme to improve tcp
performance over wireless networks, in Proc. GlobeCom, Washington, D.C., USA, Nov. 2007.
[24] P. Samuel David, and A. Kumar, Network coding for tcp throughput enhancement over a multi-hop
wireless network, in Proc. COMSWARE, Bangalore, Jan. 2008.
[25] J. Kumar Sundararajan, D. Shah, M. Medard, etc., Network coding meets TCP, in Proc. INFOCOM, Janeiro, Brazil, Apr. 2009.
[26] L. Ding, X. Wang, Y. Xu, W. Zhang and Y. Liu, Vegas-W: An enhanced TCP-Vegas for wireless
ad hoc networks, in Proc. ICC, Beijing, China, May 2008.
[27] S. M. EIRakabawy, A. Klemm, and C. Lindemann, TCP with adaptive pacing for multihop wireless
networks, in Proc. IEEE MobiHoc, Urbana-Champaign, IL, USA, May 2005.
[28] IEEE 802.11 WG, Part 11: Wireless lan medium access control (mac) and physical layer (phy)
specification, Standard, IEEE, Aug 1999.
[29] L. S. Brakmo, S. W. OMalley and L. L. Peterson, TCP vegas: New techniques for congestion
detection and avoidance, in Proc. ACM SIGCOMM, Oct 1994.
[30] A. Wierman, T. Osogami and Jorgen Olsen, A unified framework for modeling TCP-Vegas, TCPSACK, and TCP-Reno, in Proc. MASCOTS, Orlando, FL, USA, Oct 2003.
[31] D. Traskov, N. Ratnakar, D. S. Lun, etc., Network coding for multiple unicasts: An approach based
on linear optimization, in Proc. IEEE ISIT, Seattle, USA, Jul. 2006.
[32] T. C. Ho, Y.-H. Chan,g and K. J. Han, On constructive network coding for multiple unicasts, in
44th Allerton Conference on Communication, Control and Computing, 2006.
48
[33] T. D. Dyer and R. V. Boppana, A comparision of TCP performance over three routing protocols for
mobile ad hoc netwoks, in Proc. ACM MobiHoc, Oct 2001.
[34] S. Floyd and V. Jacobson, Random early detection gateways for congestion avoidance, IEEE/ACM
Tran. on Networking, vol. 1, no. 4, Aug 1993.
[35] H. Zhai, X. Chen and Y. Fang, Improving transport layer performance in multihop ad hoc networks
by exploiting MAC layer information, IEEE Transactions on Wireless Communications, vol. 6, no. 5,
pp. 16921701, May 2007.
[36] Z. Fu, P. Zerfos, H. Luo, S. Lu, L. Zhang and M. Gerla, The impact of multihop wireless channel
on tcp throughput and loss, in Proc. IEEE INFOCOM, San Francisco, USA, Mar 2003.
[37] K. Chen, Y. Xue and K. Nahrstedt, On setting TCPs congestion window limit in mobile ad hoc
network, in Proc. IEEE ICC, Anchorage,Alaska, May 2003.
[38] E. Kohler, robert Morris, B. Chen, J. Jannotti, and M. F. Kaashoek, The click modular router,
ACM Trans. Computer Systems, Aug 2000.
[39] Wikipedia, Wireless Ad Hoc Network, http://en.wikipedia.org/wiki/Wireless ad hoc network, accessed on Jan 2011.
[40] RFC 793, TRANSMISSION CONTROL PROTOCOL, http://www.faqs.org/rfcs/rfc793.html, Sep
1981.
[41] Wikipedia, Transmission Control Protocol, http://en.wikipedia.org/wiki/Transmission Control
Protocol, accessed on Jan 2011.
[42] M. Allman, V. Paxson, and M. Stevens, TCP Congestion Control, RFC 2581, Apr 1999.
[43] A. Bakre and B. R. Badrinath, I-TCP: indirect TCP for mobile hosts, in Proceedings 15th International Conference on Distributed Computing Systems (ICDCS), pp. 136-143, May 1995.
[44] K. Brown and S. Singh, M-TCP: TCP for mobile cellular networks, ACM SIGCOMM Computer
Communication Review, vol. 27, no. 5, pp. 19-42, October 1997.
[45] J. Border, M. Kojo, J. Grinder, G. Montenegro and Z. Shelby, Performance Enhancing Proxies,
INTERNET-DRAFT: http://tools.ietf.org/html/draft-ietf-pilc-pep-04, accessed on Jan 2011.
[46] P. Sinha, N. Venkitaraman, R. Sivakumar, and V. Bharghavan, WTCP: A reliable transport protocol
for wireless wide-area networks, Proceedings of ACM Mobicon99, Seattle, WA, pp. 231-241, 1999.
[47] S. Mascolo, C. Casetti, M. Gerla, M. Sanadidi, and R. Wang, TCP westwood: bandwidth estimation for enhanced transport over wireless links, ACM SIGMOBILE, pp. 287-297, 2001.
[48] S. Floyd and T. Henderson, RFC 2582: The NewReno Modification to TCPs Fast Recovery Algorithm, http://www.ietf.org/rfc/rfc2582.txt, April 1999.
[49] Z. Fu, P. Zerfos, H. Luo, S. Lu, L. Zhang, and M. Gerla, The Impact of Multihop Wireless Channel
on TCP Throughput and Loss, in IEEE INFOCOM 03, Mar. 2003.
[50] Kitae Nahm, Ahmed Helmy, C.-C. Jay Kuo, TCP over 802.11 Multihop Networks: Issues and
Performance Enhancement, Proc. of ACM Mobihoc 2005, May 2005.
[51] S. M. EIRakabawy, A. Klemm, and C. Lindemann, TCP with Adaptive Pacing for Multihop Wireless Networks, in Proceedings of ACM MOBIHOC, pp. 288-299, May 2005.
49
50