We assume that mobile hosts are likely to move in a pattern where some moves are short (in geographic distance and network latency), but some moves are very far [26]. This pattern corresponds to a person who drives around a metropolitan area which is a few 10's of miles in diameter, but occasionally flies hundreds or thousands of miles to another location. This pattern also fits a user who moves among different network technologies with widely varying network latency.
We cache sampled triggers to take advantage of this pattern. The goal
is to create diversity in the cache so that a trigger in the cache is
near each of the remote locations that a mobile host visits (perhaps
infrequently), while preventing the frequent local moves from
polluting the cache. When the mobile host changes its network address,
it randomly samples servers as described above, caches the result,
and measures the delay to every trigger in the cache. When the cache
is full, and the new sample is closer than any in the cache, then we
must select a cache entry to evict. If the new sample is much closer
than the next closest cache entry (e.g., the new sample's latency is
less than 50% of the latency of lowest latency cache entry), then we
replace the least recently used trigger in the cache. That the new
sample is much closer than the next closest sample indicates that the
mobile host is probably at a location that is far from any it has
visited before, so we evict the entry we are least likely to use
again. If instead the new sample is not much closer than the next
closest entry in the cache is (e.g. the new sample's latency is
50%-100% of the latency of the next closest cached trigger), then we
replace that entry with the new sample. This indicates that the mobile
host is relatively close to a recently visited location, and the new
sample is a better server for that location.
In Section 7.1, we show by simulation that this caching scheme can reduce the latency stretch to nearly 1.0.