Sei sulla pagina 1di 5

Problem 1

Consider an IRMA multicast tree of 4 levels: the root router is at level 1 and the leaf routers are at level 4. Each of the root and intermediate routers has exactly three router children and each leaf router has exactly 10 host children. A single data packet was multicast and successfully acknowledged by all receivers. Assume p is the cost of transmitting the data packet on a downstream link and q is the cost of transmitting an ACK message on an upstream link. a) Compute the total cost for the reliable multicast of one single data packet within the multicast router-only tree (i.e., the cost of transmitting the packet on downstream links and transmitting the ACKs on upstream links, not including links to the host sender or host receivers). b) Compute the savings in cost of the above scheme compared to a simple scheme that delivers the packet to each receiver using a dedicated unicast TCP connection.

Problem 1- a Solution # routers in 2nd level = 3 # routers in 3rd level = 9 # leaf routers in 4th level = 27 # user hosts = 270 receivers # downstream links for a data packet = 27 + 9 + 3 = 39 # upstream links for aggregated ACKs = 39 IRMA multicast cost = 39 p + 39 q

Problem 1- b Solution # user hosts = 270 receivers # unicast TCP connections = 270 The are 3 downstream links for each unicast packet and 3 upstream links for each ACK in the router-level tree. Cost of a one-packet TCP connection = 3p + 3q Unicast Cost = 270 (3p+3q) = 810p + 810q Cost savings of IRMA multicast = 810p + 810q 39p -39 q = 771p + 771 q

Problem 2
Consider a restricted version of IRMA that does not support caching, i.e., IRMA routers do not have code/variables to support caching. Thus recovery of lost packets is only done by the multicast sender. Write the pseudo code of the routine executed by an intermediate router when it receives a Leave request from a child router. Use the same data structures/notation used in the IRMA paper and clearly define any extra variables you may use.

Problem 2 Solution
LEAVE (src, dest) // src is k and dest is i child(i)= child(i) - {k} // remove child k if(child(i) = empty) // if no more children, prune router i {send LEAVE request to parent(i); exit()} // Update state of router i old_seqno = ackseq_no(i); old_dupno = dup_no(i); old_awnd = awnd(i); ackseq_no(i) = Min{ackseq_no(j) | j child (i) }; awnd(i) = Min{ackseq_no(j)+awnd(j) | j child (i)} - ackseq_no(i); dup_no(i) = Max{dup_no(j) | ackseq_no(j) = ackseq_no(i) & j child (i) }; if (old_seqno ackseq_no(i) OR old_dupno dup_no(i) OR old_awnd awnd(i) ) { send ACK(ackseq_no(i), dup_no(i), awnd(i)) to parent (i) }

Potrebbero piacerti anche