Changes between Initial Version and Version 1 of petconpaper


Ignore:
Timestamp:
Feb 6, 2009 5:35:53 AM (11 years ago)
Author:
anonymous
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • petconpaper

    v1 v1  
     1
     2
     3<h1>Peer Profiling and Selection in I2P</h1>
     4
     5PET-CON 2009.1
     6<br>
     7DRAFT 2009-01-19
     8<br>
     9zzz@i2pmail.org
     10<br>
     11Note - this looks like a one-hour talk, Pet-con limit is 10-15m,
     12so a little editing is needed...
     13Maybe this is the outline for a paper, not a 10m talk.
     14
     15<h2>Overview of I2P</h2><ul>
     16
     17        <li> Unidirectional tunnels, garlic (~= onion) routing, hidden services...
     18        <li> Started by jrandom in 2003; vanished in late 2007
     19        <li> ~800 routers == peers == users at any given time
     20        <li> ~50-100 new routers/day
     21        <li> 7 releases in 2008
     22          (pic from stats.i2p)
     23        <li> Total usage currently: ~10MBps, ~40K tunnel hops
     24        <li> Network growth: doubled in last 6 months
     25          (pic from stats.i2p)
     26        <li> Hidden services oriented - P2P friendly - only one HTTP outproxy (~= "exit node")
     27</ul>
     28
     29<h2>Tunnel Overview</h2><ul>
     30
     31        <li> Client tunnels - for all user-generated traffic
     32        <li> Exploratory tunnels - low bw, used by the router for tunnel builds, tunnel tests, netdb queries...
     33             and for "exploration", as we will see below...
     34        <li> Tunnel lifetime 10m
     35        <li> Selected by each peer
     36        <li> Strict ordering within a tunnel (predecessor attack)
     37        <li> Tunnel build request can be rejected or dropped for a number of reasons
     38        <li> Periodic testing of each tunnel (~1KB per minute)
     39
     40</ul>
     41<h2>NetDB Overview </h2><ul>
     42
     43        <li> RouterInfo for each router, and LeaseSet (~= "hidden service descriptor"), not discussed here
     44        <li> K/L/M/N/O bw classes ( &lt;12 / 12+ / 32+ / 64+ / 128+ KBps of configured shared capacity)
     45             for each router
     46        <li> Information only, not used for any routing decisions...
     47        <li> ...Except that K routers are not used
     48        <li> Lots of stats in there for network debugging, but NOTHING is trusted or used except IP/port (and "K")
     49        <li> Serious anonymity and DOS implications if we trust claimed capacity
     50        <li> L is the default, so about 96.5% of routers are L-O, and route for others
     51          (pic from stats.i2p)
     52
     53</ul>
     54<h2>Peer Profiling and Tiers  </h2><ul>
     55
     56        <li> Continuous gathering of stats, per-peer and per-tunnel
     57        <li> Keep totals and average of each stat for several time periods (1m, 10m, 1h, 1d)
     58        <li> Re-sort into tiers every 30s
     59        <li> Stats are persistent across restarts
     60        <li> 3 Tiers:
     61        <ul>
     62                <li> Not Failing Tier: peers is pretty much everybody that is responsive; typ 300-500 peers
     63                <li> High Capacity Tier: peers are Not Failing and have above-average tunnels-built-per-hour; typ 10-30 peers
     64                <li> Fast Tier: peers are High Capacity and have above-average bandwidth-per-tunnel; typ 8-15 peers
     65        </ul>
     66        <li> Use only my own traffic for these measurements, not routed traffic
     67          (we don't know if the peer before or after us in a tunnel is a true participant
     68           or the originator or destination, so that data wouldn't be valid)
     69        <li> The two metrics above are relative, not absolute, as they depend on traffic;
     70        <li> Each tier contains 8 minimum, peers are 'promoted' if the tier is too small
     71          (pic: sample table from profiles.jsp)
     72
     73
     74<table border="1"><tr><td><b>Peer</b> (385, hiding 51)</td><td><b>Groups (Caps)</b></td><td><b>Speed</b></td><td><b>Capacity</b></td><td><b>Integration</b></td><td><b>Failing?</b></td><td>&nbsp;</td></tr><tr><td><code><font color="blue">++ 16BDe7</font></code></td><td>Fast, High Capacity (OR 0.6.5)<td align="right">16,582.88</td><td align="right">37.47</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=16BDe7">netDb</a>/<a href="dumpprofile.jsp?peer=16BDe7">profile</a>/<a href="configpeer.jsp?peer=16BDe7f5rVXqyaQjx0q0Yx4NpQMvtzyZbhIJ4ZlGjSM=">+-</a></td>
     75
     76</tr><tr><td><code><font color="blue">++ 2Mnb~b</font></code></td><td>Fast, High Capacity (OR 0.6.5)<td align="right">2,944.37</td><td align="right">40.74</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=2Mnb~b">netDb</a>/<a href="dumpprofile.jsp?peer=2Mnb~b">profile</a>/<a href="configpeer.jsp?peer=2Mnb~bww30aw3X9SVj9osQwp2RRcgSbPY9bjogtXcxc=">+-</a></td>
     77</tr><tr><td><code><font color="blue">++ 2hHaG5</font></code></td><td>Fast, High Capacity (OR 0.6.5)<td align="right">7,103.61</td><td align="right">34.30</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=2hHaG5">netDb</a>/<a href="dumpprofile.jsp?peer=2hHaG5">profile</a>/<a href="configpeer.jsp?peer=2hHaG5IgUw9AVGYsCMs1pALR1GPlqmKzbk6xvQd-qBU=">+-</a></td>
     78
     79</tr><tr><td><code><font color="blue">++ CIIICF</font></code></td><td>Fast, High Capacity (OR 0.6.5)<td align="right">18,248.68</td><td align="right">14.64</td><td align="right">397.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=CIIICF">netDb</a>/<a href="dumpprofile.jsp?peer=CIIICF">profile</a>/<a href="configpeer.jsp?peer=CIIICFBj9GVbVzRUAl4TWEeavboV8LbGIblUxKw5AKY=">+-</a></td>
     80</tr><tr><td><code><font color="blue">++ KQ~Tdx</font></code></td><td>Fast, High Capacity (OR 0.6.5)<td align="right">8,025.64</td><td align="right">8.97</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=KQ~Tdx">netDb</a>/<a href="dumpprofile.jsp?peer=KQ~Tdx">profile</a>/<a href="configpeer.jsp?peer=KQ~Tdx9~dg3Y6Sn7oZWsXCF4xfhE6HTiQITZn4fRkmc=">+-</a></td>
     81
     82</tr><tr><td><code><font color="blue">++ M92fGW</font></code></td><td>Fast, High Capacity (OR 0.6.5)<td align="right">2,623.86</td><td align="right">44.22</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=M92fGW">netDb</a>/<a href="dumpprofile.jsp?peer=M92fGW">profile</a>/<a href="configpeer.jsp?peer=M92fGWK1XkYTfpw2SpKxGMjAGTE0Fzqw41C7LUaOI6Y=">+-</a></td>
     83</tr><tr><td><code><font color="blue">++ g247zU</font></code></td><td>Fast, High Capacity (OR 0.6.5)<td align="right">18,113.82</td><td align="right">82.02</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=g247zU">netDb</a>/<a href="dumpprofile.jsp?peer=g247zU">profile</a>/<a href="configpeer.jsp?peer=g247zUCVPOV1Rd7MRC14HxKX8BkPMe1JeyWWDqyPuRE=">+-</a></td>
     84
     85</tr><tr><td><code><font color="blue">++ nF6ArZ</font></code></td><td>Fast, High Capacity (OR 0.6.5)<td align="right">1,776.98</td><td align="right">46.54</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=nF6ArZ">netDb</a>/<a href="dumpprofile.jsp?peer=nF6ArZ">profile</a>/<a href="configpeer.jsp?peer=nF6ArZjmBnfF7srwgH6rW4Av1Bc-8f8e2U0bOgD~TyQ=">+-</a></td>
     86</tr><tr><td colspan="7"><hr /></td></tr>
     87<tr><td><code><font color="blue">++ 1oDXZQ</font></code></td><td>High Capacity (OR 0.6.5)<td align="right">3,722.18</td><td align="right">10.45</td><td align="right">0.00</td><td> 4/20 Test Fails&nbsp</td><td nowrap><a href="netdb.jsp?r=1oDXZQ">netDb</a>/<a href="dumpprofile.jsp?peer=1oDXZQ">profile</a>/<a href="configpeer.jsp?peer=1oDXZQ3Uu58bHtw0Z0UMoAukuQIoUdprRWlaAeHLlOQ=">+-</a></td>
     88
     89</tr><tr><td><code><font color="blue">++ BE-r13</font></code></td><td>High Capacity (OR 0.6.5)<td align="right">4,504.26</td><td align="right">37.51</td><td align="right">0.00</td><td> 8/56 Test Fails&nbsp</td><td nowrap><a href="netdb.jsp?r=BE-r13">netDb</a>/<a href="dumpprofile.jsp?peer=BE-r13">profile</a>/<a href="configpeer.jsp?peer=BE-r13IRa38pxQGqsfgI0kAcDBOHhjEVPGnukTpnY14=">+-</a></td>
     90</tr><tr><td><code><font color="blue">++ LHxb70</font></code></td><td>High Capacity (LR 0.6.5)<td align="right">2,459.38</td><td align="right">19.63</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=LHxb70">netDb</a>/<a href="dumpprofile.jsp?peer=LHxb70">profile</a>/<a href="configpeer.jsp?peer=LHxb70B749R2WsMuT~2pBpR6s8GCSbKrLt0s91gKWRI=">+-</a></td>
     91
     92</tr><tr><td><code><font color="blue">++ OPZ3i5</font></code></td><td>High Capacity (LR 0.6.5)<td align="right">321.74</td><td align="right">7.39</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=OPZ3i5">netDb</a>/<a href="dumpprofile.jsp?peer=OPZ3i5">profile</a>/<a href="configpeer.jsp?peer=OPZ3i51NZwRpdpjhT6BLVPy~H1qjeHoaioIknhS~B3A=">+-</a></td>
     93</tr><tr><td><code><font color="blue">++ UM5Wvv</font></code></td><td>High Capacity (NR 0.6.5)<td align="right">2,137.30</td><td align="right">11.03</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=UM5Wvv">netDb</a>/<a href="dumpprofile.jsp?peer=UM5Wvv">profile</a>/<a href="configpeer.jsp?peer=UM5WvvYBw~Lmwr7PaxSGZoCrheBB3McxaN5qCaxRDHw=">+-</a></td>
     94
     95</tr><tr><td><code><font color="blue">++ er9GCL</font></code></td><td>High Capacity (LR 0.6.5)<td align="right">207.26</td><td align="right">6.81</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=er9GCL">netDb</a>/<a href="dumpprofile.jsp?peer=er9GCL">profile</a>/<a href="configpeer.jsp?peer=er9GCLbMkHdUwuzIoXPrVgNFJR-IUHipDo9Xvorq7T0=">+-</a></td>
     96</tr><tr><td><code><font color="blue">++ vXE9dG</font></code></td><td>High Capacity (LR 0.6.5)<td align="right">241.74</td><td align="right">16.22</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=vXE9dG">netDb</a>/<a href="dumpprofile.jsp?peer=vXE9dG">profile</a>/<a href="configpeer.jsp?peer=vXE9dGylnKkiPQrGx3c-gr5ShZbKI~4xFuzzFo4jgxk=">+-</a></td>
     97
     98</tr><tr><td><code><font color="blue">++ xHKlu4</font></code></td><td>High Capacity (MR 0.6.5)<td align="right">0.00</td><td align="right">7.40</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=xHKlu4">netDb</a>/<a href="dumpprofile.jsp?peer=xHKlu4">profile</a>/<a href="configpeer.jsp?peer=xHKlu4ZjD-30-6eW2JaZZzCJiU-IE9LuWSHjpeKWRZM=">+-</a></td>
     99</tr><tr><td colspan="7"><hr /></td></tr>
     100<tr><td><code><font color="blue">++ -L9FoJ</font></code></td><td>Not Failing (OR 0.6.5)<td align="right">626.84</td><td align="right">5.21</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=-L9FoJ">netDb</a>/<a href="dumpprofile.jsp?peer=-L9FoJ">profile</a>/<a href="configpeer.jsp?peer=-L9FoJ8FSP~JKWrIwMMC-cm-X4LaWPwZCMu3Tydlk04=">+-</a></td>
     101
     102</tr><tr><td><code>&nbsp;&nbsp;&nbsp;-Nvi-8</code></td><td>Not Failing (LR 0.6.5)<td align="right">0.00</td><td align="right">1.00</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=-Nvi-8">netDb</a>/<a href="dumpprofile.jsp?peer=-Nvi-8">profile</a>/<a href="configpeer.jsp?peer=-Nvi-84hMs437URaaZDvBmjShN25blHXz38zm4syhQc=">+-</a></td>
     103</tr><tr><td><code>&nbsp;&nbsp;&nbsp;-dlmDx</code></td><td>Not Failing (OR 0.6.5)<td align="right">2,290.46</td><td align="right">5.09</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=-dlmDx">netDb</a>/<a href="dumpprofile.jsp?peer=-dlmDx">profile</a>/<a href="configpeer.jsp?peer=-dlmDxd1vrry3gY3ilXLblHHZ21NJB5oqaZ-oB2SQHU=">+-</a></td>
     104
     105</tr><tr><td><code>&nbsp;&nbsp;&nbsp;-qO3ah</code></td><td>Not Failing (LU 0.6.5)<td align="right">0.00</td><td align="right">5.00</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=-qO3ah">netDb</a>/<a href="dumpprofile.jsp?peer=-qO3ah">profile</a>/<a href="configpeer.jsp?peer=-qO3ahzIzRg82vz7ouxoXjOChNbINMROwsNp5-3UpGs=">+-</a></td>
     106</tr><tr><td><code><font color="blue">++ -yUfot</font></code></td><td>Not Failing (KR 0.6.5)<td align="right">0.00</td><td align="right">5.00</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=-yUfot">netDb</a>/<a href="dumpprofile.jsp?peer=-yUfot">profile</a>/<a href="configpeer.jsp?peer=-yUfot1KvrZvFFJgZERwesxu9-RyaXeOEW09RNPuJNA=">+-</a></td>
     107
     108</tr><tr><td><code>&nbsp;&nbsp;&nbsp;02YO6l</code></td><td>Not Failing (LR 0.6.5)<td align="right">0.00</td><td align="right">5.00</td><td align="right">0.00</td><td> Unreachable&nbsp</td><td nowrap><a href="netdb.jsp?r=02YO6l">netDb</a>/<a href="dumpprofile.jsp?peer=02YO6l">profile</a>/<a href="configpeer.jsp?peer=02YO6leg78Ci1XAYlvr0xk7nYzBR~tPELYnul-zpVxw=">+-</a></td>
     109</tr><tr><td><code>&nbsp;&nbsp;&nbsp;064wSq</code></td><td>Not Failing (LU 0.6.5)<td align="right">0.00</td><td align="right">5.00</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=064wSq">netDb</a>/<a href="dumpprofile.jsp?peer=064wSq">profile</a>/<a href="configpeer.jsp?peer=064wSqCHDJ2i9sSAlVVdlOrBgncV~2HFgFMk90FuM3E=">+-</a></td>
     110
     111</tr><tr><td><code>&nbsp;&nbsp;&nbsp;08vuC5</code></td><td>Not Failing<td align="right">0.00</td><td align="right">1.00</td><td align="right">0.00</td><td> Unreachable&nbsp</td><td nowrap><a href="netdb.jsp?r=08vuC5">netDb</a>/<a href="dumpprofile.jsp?peer=08vuC5">profile</a>/<a href="configpeer.jsp?peer=08vuC58rF~fvzujdY9kxmadgQ4EZVphfmhyk-5xaiWI=">+-</a></td>
     112</tr><tr><td><code><font color="blue">++ 0rmD6z</font></code></td><td>Not Failing (NR 0.6.5)<td align="right">5,057.75</td><td align="right">0.00</td><td align="right">0.00</td><td> 3/6 Test Fails&nbsp</td><td nowrap><a href="netdb.jsp?r=0rmD6z">netDb</a>/<a href="dumpprofile.jsp?peer=0rmD6z">profile</a>/<a href="configpeer.jsp?peer=0rmD6ziyBbdTrMOS75sqLy57GqpYb7CUVcCBZ7tik9Q=">+-</a></td>
     113
     114</tr><tr><td><code>&nbsp;&nbsp;&nbsp;0uOOg6</code></td><td>Not Failing (LR 0.6.5)<td align="right">23.98</td><td align="right">5.00</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=0uOOg6">netDb</a>/<a href="dumpprofile.jsp?peer=0uOOg6">profile</a>/<a href="configpeer.jsp?peer=0uOOg6muG6SQ0tl~WmhTQ1~D~jM7ByDvsnfiTcP-yp8=">+-</a></td>
     115</tr><tr><td><code>&nbsp;&nbsp;&nbsp;0xl1nh</code></td><td>Not Failing (NR 0.6.5)<td align="right">0.00</td><td align="right">5.00</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=0xl1nh">netDb</a>/<a href="dumpprofile.jsp?peer=0xl1nh">profile</a>/<a href="configpeer.jsp?peer=0xl1nhi2rOPmYhvxfUTl6lw1xBFSWkEiuc1j2d7Y6w4=">+-</a></td>
     116
     117</tr><tr><td><code>&nbsp;&nbsp;&nbsp;12oGTF</code></td><td>Not Failing (LR 0.6.5)<td align="right">0.00</td><td align="right">5.00</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=12oGTF">netDb</a>/<a href="dumpprofile.jsp?peer=12oGTF">profile</a>/<a href="configpeer.jsp?peer=12oGTFVsnGEqV5SgL4EB0jtVSXhH-YgAgAjHNVgp-2k=">+-</a></td>
     118</tr><tr><td><code>&nbsp;&nbsp;&nbsp;135LOS</code></td><td>Not Failing (LR 0.6.5)<td align="right">154.58</td><td align="right">5.60</td><td align="right">0.00</td><td>&nbsp</td><td nowrap><a href="netdb.jsp?r=135LOS">netDb</a>/<a href="dumpprofile.jsp?peer=135LOS">profile</a>/<a href="configpeer.jsp?peer=135LOSgnGPmHs08Wun2r~isax8MKGnPLk2MGCsZmXlk=">+-</a></td>
     119</tr>
     120</table>
     121
     122</ul>
     123<h2>Rating Details            </h2><ul>
     124
     125        <li> Speed - simple - the average amount of data per tunnel we have sent through
     126          the peer in the last minute
     127        <li> Capacity - not so simple - The weighted number of successful tunnel builds
     128          through the peer.
     129          Let r(t) be the successful builds per hour, over a certain time period;
     130          R = 4*r(10m) + 3*r(30m) + 2*r(1h) + r(1d);
     131        <li> Growth factor adds a little bit each time, so that new peers are tried
     132        <li> Not required for measurement: any special-purpose 'load'
     133        <li> Not used for rating: latency, ....
     134        <li> "Bonuses" can be used to manually adjust preferences for individual peers
     135
     136</ul>
     137<h2>Capacity: Crime, Blame, and Punishment </h2><ul>
     138
     139        <li> Raw build capacity isn't sufficient - we have to decrement for bad behavior, because
     140          tunnel build attempts are expensive
     141        <ul>
     142                <li> A peer that accepts 10/10 tunnels is better than one that accepts 10/100.
     143                <li> A peer that explicitly rejects a request is better than one that drops it.
     144                <li> A peer that accepts a request but later drops data through the tunnel is the worst
     145        </ul>
     146        <li> Punishment: Capacity is decremented for build request rejections, build request timeouts,
     147          and tunnel test failures.
     148        <li> Problem: We don't know who to blame when a request or tunnel test message is dropped
     149        <ul>
     150                <li> Naive solution: Don't bother blaming anybody. This doesn't work well at all!
     151                <li> Much better solution: Blame everybody, with a weighted value. The bad peers will be discovered over time.
     152        </ul>
     153        <li> Example 1: Tunnel build request expired (3 outbound hops A-B-C), reply was due back through
     154          our inbound exploratory tunnel (2 hops D-E).
     155          Blame A, B, and C with weight 1/3, blame D-E with weight 1/2.
     156          Alternately: It was probably D's fault, because that's the usual failure point in I2P
     157          (the gateway of the inbound tunnel can't be reached), so blame D with weight 3/4 and
     158          E with weight 1/4.
     159          (pic needed here)
     160
     161</ul>
     162<h2>Peer Selection                 </h2><ul>
     163
     164        <li> Client tunnels from Fast tier
     165        <li> Exploratory tunnels from Not Failing tier, but a varying % is from High Capacity,
     166          more when build failure is high (maintains a minimum level of service
     167          while continuing to explore)
     168        <li> Equal weight within each tier
     169
     170</ul>
     171<h2>How It Works, Lessons for Other Implementations   </h2><ul>
     172
     173        <li> Great! Core system has been in place since the beginning of I2P.
     174             Pretty much includes everything proposed in "Tuneup for Tor"
     175        <li> Stability - Tier members don't change that often; as using a peer for tunnels
     176          tends to increase that peer's metrics, which keeps it in the pool.
     177          This is a desirable quality for anonymity.
     178        <li> Most client tunnels go through the highest-performance peers when the network is uncrowded;
     179          traffic "spreads out" to lower-performing peers when the network gets busy
     180        <li> The parameters, weighting, and calculations are VERY powerful "knobs" to turn;
     181          difficult to test and debug in a distributed network;
     182          impossible to fully optimize;
     183          can take months or years to
     184          get right
     185        <li> The basic measurements are much simpler than they used to be
     186        <li> The punishment is what keeps the network running well. How heavily you punish
     187          determines how fast the load spreads out across the network as the it gets busy,
     188          and how quickly an overloaded peer gets avoided.
     189        <li> Start simple, get more complex if necessary, you will probably have to simplify again later
     190          (for example, our speed calc used to be pages and pages of code, now a one-liner)
     191        <li> You don't need to generate large amounts of special-purpose data for testing. Normal traffic will do.
     192          Our exploratory tunnels average only 100KB in 10m (~150Bps)...
     193          Our unused client tunnels average only 10KB in 10m from tunnel tests (~15Bps)...
     194           but this is sufficient.
     195          When you are low bw, you don't care how accurately you sort into tiers.
     196          When you push a lot of data, your tiering will be better.
     197          Even very-low-bw routers tend to accurately find fast peers and thus are
     198          well-prepared when higher bw is demanded.
     199</ul>
     200
     201<h2>References                   </h2><ul>
     202<li><i>A Tune-up for Tor: Improving Security and Performance in the Tor Network</i>
     203Robin Snader and Nikita Borisov @ UIUC
     204<li>http://www.i2p2.de/
     205</ul>