As a result of multicast-based soft handoff, the server will send
duplicate encapsulated packets to the MH. To prevent the MH's TCP/IP
stack and applications from receiving duplicates of the inner
packet (i.e., original IP packet, see Figure 7),
the ROAM proxy suppresses duplicates during multicast-based soft
handoff.
The ROAM proxy maintains a small window of MD5 [30]
digests of recent packets. The proxy computes digests over the first
20 bytes of the IP header and the first 8 bytes of the transport
header. The first 28 bytes of a packet are sufficient to differentiate
non-identical packets in practice [31]. To minimize
duplicates, the window size must be sufficiently large so that a
duplicated packet that arrives both via a very low latency link and
via a very high latency link will be caught in the window. We use a
window size of 1 second, which should be sufficient even if one path
is very congested or contains a 500ms satellite link. Note that
this scheme detects duplicates received on different addresses, which
means that only duplicates generated by are eliminated, and not
duplicate packets sent by the sender (e.g., TCP dup-ack).
We show in Section 7 that a TCP bulk transfer flow using
multicast-based soft-handoff achieves similar throughput to a flow
without mobility.
Another implementation issue is when does the proxy stop using
multicast. Our algorithm removes an address when a large
fraction of its packets are duplicates as this indicates that the
address is redundant. The ROAM proxy maintains a counter of duplicate
packets received on both addresses () and a counter of packets
received on each address (
). When
, we
simply remove the address that has received fewer packets in the
last window. The value
is a constant indicating the fraction of an
address's packets that must be duplicates before the address can
be dropped. In addition, the proxy uses a timeout
to prevent a
newly added address with poor connectivity from being removed until
the timeout expires. In our implementation, we use
and
s.