123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- - QSPN scalability
-
- The QSPN is an optimised way of "sending a tracer_pkt from each extreme node".
- A tracer_pkt is just a flood, and the total number of floods is given by:
-
- total_floods = extreme_nodes + 1
-
- where the extreme_nodes are:
-
- extreme_nodes = number_of_nodes_with_only_one_link + number_of_cycles*2
-
- A cycle here is meant as a set of nodes, where each node is linked at least at
- two other nodes of the set.
-
- The total different packets generated by a single flood is equal to:
-
- total_packets_per_flood = Sum( number_of_links_of_each_node - 1 ) + 1
-
- Since the network is organized in gnodes, the total_floods for all the levels
- will be the sum of the total_floods of each level. The same applies to the
- total_packets_per_flood.
-
-
- Now we'll consider various worst scenarios.
-
-
- - First scenario
-
- The first worst case is a network where all the nodes are an extreme_node, i.e.
- there's one node X and all the other are linked to it by just one link.
-
- O Y
- \ /
- \ /
- N ---- X ----L
- |
- |
- M (A graph describing the first worst
- scenario)
-
- In this case all the nodes, including X, will send a tracer_pkt.
- This means that if all the nodes in the level 0 are linked in that way, and all
- the gnodes of the higher levels are also linked between them in the same way,
- then the total floods, in all the levels, we'll be:
-
- total_floods = MAXGROUPNODE * levels
-
- Where MAXGROUPNODE is the number of (g)node present in a gnode.
- By the way, this configuration has its advantages because there is only one
- hop between each node, therefore each flood will end after one hop and the
- total packets will be:
-
- total_packets = MAXGROUPNODE^2 * levels
-
- MAXGROUPNODE is equal to 256.
- In the ipv4 we have 4 levels.
- This means that in a network composed by 2^32 nodes, in the first worst
- scenario to run the QSPN at all the levels will have:
-
- total_floods = 1024; total_packets = 262144;
-
- Note that "levels" is equal to log_2(N)/MAXGROUPNODE_BITS, where N is the
- maximum number of nodes in the network and MAXGROUPNODE_BITS is equal to 8.
- MAXGROUPNODE is also equal to 2^MAXGROUPNODE_BITS.
- The final formulas that describes the growth of the number of floods and
- packets are:
-
- total_floods = 2^5 * log_2(N)
-
- total_packets = 2^13 * log_2(N)
-
-
- - Second scenario
-
- In this case we consider a network where each (g)node is linked to all the other
- (g)nodes.
- C
- /|\
- / | \
- A-----D
- \ | /
- \|/
- E
-
- That means that we have 1 cycle and 0 nodes_with_only_one_link, so the
- total_floods are:
-
- total_floods = 2
-
- Since every (g)node is linked with every other (g)gnodes, the number of links
- for each of them is MAXGROUPNODE and the number of total different packets
- generated per flood is:
-
- total_packets = ( ( MAXGROUPNODE - 1 ) * MAXGROUPNODE + 1)
-
- Supposing that this configuration is the same for the upper levels too, we have:
-
- total_floods = 2 * levels
- total_packets = total_floods * ( ( MAXGROUPNODE - 1 ) * MAXGROUPNODE + 1)
-
- N = total_number_of_nodes_in_the_network
- levels = log_2(N)/MAXGROUPNODE_BITS
-
- total_packets = (log_2(N)/4) * ( ( MAXGROUPNODE - 1 ) * MAXGROUPNODE + 1)
-
- In ipv4, with 2^32 nodes:
-
- total_packets = 522248
-
- - Third scenario
-
- All the (g)nodes are in just one line: to reach the end node B from the start
- node A we have traverse N nodes, with N equal to the total number of nodes
- minus 2.
-
- In this awful case a flood will have to traverse N hops, this means that if
- the average rtt between two nodes is 70ms, then the flood, if started from an
- extreme node will take about 9 years to reach the other end.
-
- - About the maximum size of a tracer_pkt
-
- Each time a tracer_pkt traverse a node it grows of one byte, since the
- tracer_pkt is always restricted to a determinate level, which has maximum
- MAXGROUPNODE nodes, the maximum size of a plain tracer_pkt is 256 Bytes (we
- are not counting the headers, which are a constant size).
-
- The things change if the tracer_pkt traverses border nodes, in fact,
- (7 + 10*L) bytes are added in the the tracer_pkt each time it passes trough a
- bnode. L is the number of gnodes the border node is linked to.
-
- - About the maximum size of the maps
-
- The size of levels in the maps is fixed 'cause we already know the maximum number
- of nodes in the network. We are also considering that we store only the 20
- best routes for each node.
-
- So the maximum size of the maps, when we have all the routes stored, and the
- bnode with all their maximum links filled is:
-
- internal map | external map | border node map
-
- ipv4 44032 | 136704 | 3159552
-
- ipv6 44032 | 683520 | 15797760
-
- (in bytes).
-
- The bnode map is so large because we are considering the worst case in which
- in each of our gnodes there are 256 bnodes each of them is linked to 512
- gnodes.
-
-
- - About the overload created by multiple hooks of (g)nodes
-
- In order to prevent that a QSPN is sent every time a (g)node joins the network
- the QSPN are all syncronised in each level, therefore the maps are updated at
- each qspn_round. (Read the section "5.1.4 Qspn round").
|