190 likes | 373 Views
RSVP Refresh Overhead Reduction by State Compression. Lan Wang, Andreas Terzis, Lixia Zhang UCLA with input from Paxson, Braden, Berson, the interim meeting and others. Goals. Reduce the refresh overhead of RSVP
E N D
RSVP Refresh Overhead Reductionby State Compression Lan Wang, Andreas Terzis, Lixia Zhang UCLA with input from Paxson, Braden, Berson, the interim meeting and others
Goals • Reduce the refresh overhead of RSVP • one refresh message per session per refresh period --> one message per RSVP neighbor • Minimize re-synchronization delay • when sessions added/deleted • when two neighbors discover inconsistencies in RSVP state • Keep the soft-state nature of RSVP • Refresh messages are sent periodically.
Approach • Digest • a compressed version of the RSVP state shared between two nodes (made of a set of signatures) • Digests sent periodically to neighbor nodes • refresh RSVP state • discover inconsistency • Raw RSVP messages sent only when • state changes: e.g. Tspec/Rspec changes, session addition/deletion • re-synchronizing session state
Digest-capable neighbor discovery • Request ACK when sending raw RSVP msgs • Add a D-bit to MESSAGE_ID object to indicate compression-capable • Three cases: • Receive ACK with D-bit set in MESSAGE_ID • neighbor is compression-capable • Receive ACK with D-bit off in MESSAGE_ID • neighbor is compression-incapable • Receive PathErr or ResvErr message: “legacy” RSVP neighbor
Limitations Lost automatic route adaptability in original RSVP • Rely on specific notification to adjust to • routing changes • multicast group membership changes • do not handle non-RSVP cloud case Original Route B S A D Non-RSVP Cloud C New Route
Neighbor Data Structure Neighbor Struct +--------------- + | IP Address | +--------------- + | OutSession |--> Hash Table for outgoing sessions +--------------- + | OutDigest |--> top level of OutDigest tree +--------------- + |RefreshOutTimer | +----------------+ | IDLastSent | +----------------+ |OutDigestTimeout| +----------------+ | InSession |--> Hash Table of incoming sessions +----------------+ | InDigest |--> top level of InDigest tree +----------------+ | CleanupInTimer | +----------------+
Session Signature Computation • Objects included in computation
Digest Computation (simple version) digest M Entries Hash Table • M: number of slots in the hash table • multiple sessions may hash to the same slot • compute a signature for each slot • neighbor nodes send this list of M signatures in place of raw RSVP refresh msgs
Digest Computation (high compression version) • Digest Tree: digest Level-2 signatures Level-1 signatures M Entries Hash Table • M: number of entries in the hash table • N: number of signatures contained in a digest (fit into one packet) • neighbors exchange digest msg periodically
MESSAGE_ID Object 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |A|D| Flags | Epoch | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Message_ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • Object format defined in draft-berger-rsvp-refresh-reduct-03.txt • We added D-bit in flags field for neighbor discovery
DIGEST Object 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Level | Group | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Reserved | Number of Signatures | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | // signature list // | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • Class in 10bbbbbb range • Level: level of signatures in digest tree • Group: Block of signatures inside level • Number of Signatures: # of signatures in object • Signature list: a list of checksums
New Messages 1. Digest Message (Msg Type 14) <Digest Message> ::= <Common Header> [<INTEGRITY>]<MESSAGE_ID> <DIGEST> [<TIME_VALUES>] • Digest message must contain a MESSAGE_ID object with Ack_Requested bit set 2. DigestErr Message (Msg Type 16) <DigestErr Message> ::= <Common Header> [<INTEGRITY>]<MESSAGE_ID> <DIGEST> • Negative ack, contains digest computed at receiver
PATH New Neighbor ! Set Digest Timer ACK(d) RSVP Msgs Digest Refresh timer times out Digest Received digest matches with local InDigest ACK Normal Case Example
Recovery Procedure • DigestErr contains set of (top level) signatures computed at the receiving side • Sender finds which of the N signatures differ • Sends new Digest message(s) of next lower level rooted at mismatched signatures • Follow same procedure until reach the bottom of the digest tree • Refresh all sessions corresponding to the mismatched signatures
Digest(t1) ACK(t1) PATH ACK More RSVP Msgs Digest(t2) DigestErr(t2) Lower-level Digest DigestErr More lower-level Digest and DigestErr msgs Raw RSVP msgs ACK msgs Digest(t3) ACK(t3) Recovery Example Sync! Start recovery Synchronized!
Digest Computation Costs • Digest Tree requires O(T+M) space. • Computation cost of signature: depend on the compression algorithm • MD5 and CRC linear on the size of the message • Update signature of a hash slot: f(T/M*s) • s is signature size, f() cost to compute signature • T/M: average number of sessions in a hash slot • Update tree: (logNM – 1)* f(N*s)
Summary of Changes Required • Protocol • 1 new object (DIGEST) • 2 new message types (Digest, DigestErr) • State • Neighbor Data Structure per neighbor • hash table • signature tree
Features • Efficient state re-synchronization • Allow individual nodes to choose original RSVP refreshes or the refresh reduction • Backward compatibility with the current RSVP implementation • Incremental digest computation when part of the session(s) changes state
ADSPEC & POLICY_DATA • POLICY & ADSPEC • These objects can change locally • Current RSVP spec keeps object received • Need to keep copy of the forwarded object to calculate digest for that neighbor • Digest refreshes trigger updates for these objects • How to detect changes • always assume new • expect explicit notification PATH(Ad’) PATH(Ad) Ad Ad’