<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-CA">
	<id>https://nmsl.cs.sfu.ca/index.php?action=history&amp;feed=atom&amp;title=Private%3ApCDN%3ASystems_Issues</id>
	<title>Private:pCDN:Systems Issues - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://nmsl.cs.sfu.ca/index.php?action=history&amp;feed=atom&amp;title=Private%3ApCDN%3ASystems_Issues"/>
	<link rel="alternate" type="text/html" href="https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;action=history"/>
	<updated>2026-08-03T01:58:39Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=2250&amp;oldid=prev</id>
		<title>Mhefeeda at 00:13, 8 August 2008</title>
		<link rel="alternate" type="text/html" href="https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=2250&amp;oldid=prev"/>
		<updated>2008-08-08T00:13:20Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-CA&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:13, 8 August 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l34&quot; &gt;Line 34:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 34:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Geo Fencing ===  &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Geo Fencing ===  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Details are given in [pCDN:Geo-Fencing|this page.]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Details are given in &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;[&lt;/ins&gt;[pCDN:Geo-Fencing|this page.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;]&lt;/ins&gt;]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Mhefeeda</name></author>
	</entry>
	<entry>
		<id>https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=2249&amp;oldid=prev</id>
		<title>Mhefeeda at 00:12, 8 August 2008</title>
		<link rel="alternate" type="text/html" href="https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=2249&amp;oldid=prev"/>
		<updated>2008-08-08T00:12:45Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-CA&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:12, 8 August 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l34&quot; &gt;Line 34:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 34:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Geo Fencing ===  &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Geo Fencing ===  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Details are given in [pCDN:Geo-Fencing this page.]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Details are given in [pCDN:Geo-Fencing&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;|&lt;/ins&gt;this page.]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Mhefeeda</name></author>
	</entry>
	<entry>
		<id>https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=2248&amp;oldid=prev</id>
		<title>Mhefeeda at 00:12, 8 August 2008</title>
		<link rel="alternate" type="text/html" href="https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=2248&amp;oldid=prev"/>
		<updated>2008-08-08T00:12:19Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-CA&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:12, 8 August 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l31&quot; &gt;Line 31:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 31:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;State maintenance&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;State maintenance&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== Geo Fencing === &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Details are given in [pCDN:Geo-Fencing this page.]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Mhefeeda</name></author>
	</entry>
	<entry>
		<id>https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=1768&amp;oldid=prev</id>
		<title>Mhefeeda at 22:26, 30 March 2008</title>
		<link rel="alternate" type="text/html" href="https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=1768&amp;oldid=prev"/>
		<updated>2008-03-30T22:26:10Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-CA&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:26, 30 March 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l19&quot; &gt;Line 19:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 19:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== NAT Traversal ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== NAT Traversal ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== Client Design ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Transparency, portability, Buffering, disk access,  &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== Server Design ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Architecture &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Threading and scalability&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;State maintenance&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Mhefeeda</name></author>
	</entry>
	<entry>
		<id>https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=1749&amp;oldid=prev</id>
		<title>MediaWiki default: Private:pCDN:System Issue moved to Private:pCDN:Systems Issues</title>
		<link rel="alternate" type="text/html" href="https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=1749&amp;oldid=prev"/>
		<updated>2008-03-26T21:06:52Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php/Private:pCDN:System_Issue&quot; class=&quot;mw-redirect&quot; title=&quot;Private:pCDN:System Issue&quot;&gt;Private:pCDN:System Issue&lt;/a&gt; moved to &lt;a href=&quot;/index.php/Private:pCDN:Systems_Issues&quot; title=&quot;Private:pCDN:Systems Issues&quot;&gt;Private:pCDN:Systems Issues&lt;/a&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-CA&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:06, 26 March 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en-CA&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>MediaWiki default</name></author>
	</entry>
	<entry>
		<id>https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=1748&amp;oldid=prev</id>
		<title>MediaWiki default at 20:49, 26 March 2008</title>
		<link rel="alternate" type="text/html" href="https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=1748&amp;oldid=prev"/>
		<updated>2008-03-26T20:49:05Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-CA&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:49, 26 March 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l14&quot; &gt;Line 14:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 14:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #1''': We distinguish clients behind and not behind NATs. We set the heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; to be 30 mins, and maximal retries to be 3 times for clients that are not behind NATs. We use an adaptive heartbeat interval for clients behind NATs. This heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; is initialized to be 2 mins, and is reduced by 5 secs whenever the server notices an IP/port change. &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; should never go below 5 secs.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #1''': We distinguish clients behind and not behind NATs. We set the heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; to be 30 mins, and maximal retries to be 3 times for clients that are not behind NATs. We use an adaptive heartbeat interval for clients behind NATs. This heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; is initialized to be 2 mins, and is reduced by 5 secs whenever the server notices an IP/port change. &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; should never go below 5 secs.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #2''': We create two types of heartbeat messages: for maintaining client states at the server and  for maintaining UDP states at the NAT box. We call the these two types of heartbeat messages as: type-S and type-N heartbeat messages, respectively. The type-S heartbeat messages are sent at very low frequency: at 30 mins interval with 3 retries. Unlike Alternative #1, even clients behind NAT send type-S heartbeats at this low rate. Both the server and the client send type-S heartbeat messages. The type-N heartbeat messages are sent only by clients at very high frequency: potentially one per second. This is to refresh the port mapping on NAT boxes. To avoid the message flooding, the type-N heartbeats should have a small ''TTL'' value, say &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Choosing proper &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value is not easy, considering there might be several chained NAT boxes between clients and the server. A feasible &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value should fall between the hop count to the ''outer-most'' NAT box and the hop count to the server. An optimal  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; should be as close to the hop count to the ''outer-most'' NAT box as possible. We set &amp;lt;math&amp;gt; n = 3 &amp;lt;/math&amp;gt; as the initial TTL value. We increase &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server observes an IP/port change, which indicates our port mapping still gets timed out because the type-N heartbeats did not go far enough. We decrease &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server receives a type-N heartbeat, which indicates type-N heartbeats are flooding our server. We set &amp;lt;math&amp;gt;n=0&amp;lt;/math&amp;gt; if we observe the &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value fluctuates for 3 times. Clients with a zero &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; do not send type-N heartbeats.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #2''': We create two types of heartbeat messages: for maintaining client states at the server and  for maintaining UDP states at the NAT box. We call the these two types of heartbeat messages as: type-S and type-N heartbeat messages, respectively. The type-S heartbeat messages are sent at very low frequency: at 30 mins interval with 3 retries. Unlike Alternative #1, even clients behind NAT send type-S heartbeats at this low rate. Both the server and the client send type-S heartbeat messages. The type-N heartbeat messages are sent only by clients at very high frequency: potentially one per second. This is to refresh the port mapping on NAT boxes. To avoid the message flooding, the type-N heartbeats should have a small ''TTL'' value, say &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Choosing proper &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value is not easy, considering there might be several chained NAT boxes between clients and the server. A feasible &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value should fall between the hop count to the ''outer-most'' NAT box and the hop count to the server. An optimal  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; should be as close to the hop count to the ''outer-most'' NAT box as possible. We set &amp;lt;math&amp;gt; n = 3 &amp;lt;/math&amp;gt; as the initial TTL value. We increase &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server observes an IP/port change, which indicates our port mapping still gets timed out because the type-N heartbeats did not go far enough. We decrease &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server receives a type-N heartbeat, which indicates type-N heartbeats are flooding our server. We set &amp;lt;math&amp;gt;n=0&amp;lt;/math&amp;gt; if we observe the &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value fluctuates for 3 times. Clients with a zero &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; do not send type-N heartbeats.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;** '''Implementation Issues''': Alternative #2 is more difficult to implement, because of the limitation of Java virtual machine. We generally cannot set the TTL value for UDP socket in Java. One solution is to use the Raw Socket Library, however, users will have to have root privilege to send hand-crafted UDP packets. Alternative #1 is easier, but may incur more traffic on the server as all heartbeat messages will arrive at the server.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Streaming Friendly Scheduling ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Streaming Friendly Scheduling ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== NAT Traversal ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== NAT Traversal ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>MediaWiki default</name></author>
	</entry>
	<entry>
		<id>https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=1747&amp;oldid=prev</id>
		<title>MediaWiki default at 20:44, 26 March 2008</title>
		<link rel="alternate" type="text/html" href="https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=1747&amp;oldid=prev"/>
		<updated>2008-03-26T20:44:20Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-CA&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:44, 26 March 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l13&quot; &gt;Line 13:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 13:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''Adaptive HeartBeat Interval''': There are two alternatives to make heartbeat interval adaptive to NAT box implementation.  &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''Adaptive HeartBeat Interval''': There are two alternatives to make heartbeat interval adaptive to NAT box implementation.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #1''': We distinguish clients behind and not behind NATs. We set the heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; to be 30 mins, and maximal retries to be 3 times for clients that are not behind NATs. We use an adaptive heartbeat interval for clients behind NATs. This heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; is initialized to be 2 mins, and is reduced by 5 secs whenever the server notices an IP/port change. &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; should never go below 5 secs.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #1''': We distinguish clients behind and not behind NATs. We set the heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; to be 30 mins, and maximal retries to be 3 times for clients that are not behind NATs. We use an adaptive heartbeat interval for clients behind NATs. This heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; is initialized to be 2 mins, and is reduced by 5 secs whenever the server notices an IP/port change. &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; should never go below 5 secs.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #2''': We create two types of heartbeat messages: for maintaining client states at the server and  for maintaining UDP states at the NAT box. We call the these two types of heartbeat messages as: type-S and type-N heartbeat messages, respectively. The type-S heartbeat messages are sent at very low frequency: at 30 mins interval with 3 retries. Unlike Alternative #1, even clients behind NAT send type-S heartbeats at this low rate. Both the server and the client send type-S heartbeat messages. The type-N heartbeat messages are sent only by clients at very high frequency: potentially one per second. This is to refresh the port mapping on NAT boxes. To avoid the message flooding, the type-N heartbeats should have a small ''TTL'' value, say &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Choosing proper &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value is not easy, considering there might be several chained NAT boxes between clients and the server. A feasible &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value should fall between the hop count to the ''outer-most'' NAT box and the hop count to the server. An optimal  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; should be as close to the hop count to the ''outer-most'' NAT box as possible. We set &amp;lt;math&amp;gt; n = 3 &amp;lt;/math&amp;gt; as the initial TTL value. We increase &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server observes an IP/port change, which indicates our port mapping still gets timed out because the type-N heartbeats did not go far enough. We decrease &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server receives a type-N heartbeat, which indicates type-N heartbeats are flooding our server. We set &amp;lt;math&amp;gt;n=0&amp;lt;/math&amp;gt; if we observe the &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; fluctuates for 3 times. Clients with a zero &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; do not send type-N heartbeats.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #2''': We create two types of heartbeat messages: for maintaining client states at the server and  for maintaining UDP states at the NAT box. We call the these two types of heartbeat messages as: type-S and type-N heartbeat messages, respectively. The type-S heartbeat messages are sent at very low frequency: at 30 mins interval with 3 retries. Unlike Alternative #1, even clients behind NAT send type-S heartbeats at this low rate. Both the server and the client send type-S heartbeat messages. The type-N heartbeat messages are sent only by clients at very high frequency: potentially one per second. This is to refresh the port mapping on NAT boxes. To avoid the message flooding, the type-N heartbeats should have a small ''TTL'' value, say &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Choosing proper &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value is not easy, considering there might be several chained NAT boxes between clients and the server. A feasible &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value should fall between the hop count to the ''outer-most'' NAT box and the hop count to the server. An optimal  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; should be as close to the hop count to the ''outer-most'' NAT box as possible. We set &amp;lt;math&amp;gt; n = 3 &amp;lt;/math&amp;gt; as the initial TTL value. We increase &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server observes an IP/port change, which indicates our port mapping still gets timed out because the type-N heartbeats did not go far enough. We decrease &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server receives a type-N heartbeat, which indicates type-N heartbeats are flooding our server. We set &amp;lt;math&amp;gt;n=0&amp;lt;/math&amp;gt; if we observe the &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;value &lt;/ins&gt;fluctuates for 3 times. Clients with a zero &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; do not send type-N heartbeats.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Streaming Friendly Scheduling ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Streaming Friendly Scheduling ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== NAT Traversal ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== NAT Traversal ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>MediaWiki default</name></author>
	</entry>
	<entry>
		<id>https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=1746&amp;oldid=prev</id>
		<title>MediaWiki default at 20:43, 26 March 2008</title>
		<link rel="alternate" type="text/html" href="https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=1746&amp;oldid=prev"/>
		<updated>2008-03-26T20:43:39Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-CA&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:43, 26 March 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l13&quot; &gt;Line 13:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 13:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''Adaptive HeartBeat Interval''': There are two alternatives to make heartbeat interval adaptive to NAT box implementation.  &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''Adaptive HeartBeat Interval''': There are two alternatives to make heartbeat interval adaptive to NAT box implementation.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #1''': We distinguish clients behind and not behind NATs. We set the heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; to be 30 mins, and maximal retries to be 3 times for clients that are not behind NATs. We use an adaptive heartbeat interval for clients behind NATs. This heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; is initialized to be 2 mins, and is reduced by 5 secs whenever the server notices an IP/port change. &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; should never go below 5 secs.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #1''': We distinguish clients behind and not behind NATs. We set the heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; to be 30 mins, and maximal retries to be 3 times for clients that are not behind NATs. We use an adaptive heartbeat interval for clients behind NATs. This heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; is initialized to be 2 mins, and is reduced by 5 secs whenever the server notices an IP/port change. &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; should never go below 5 secs.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #2''': We create two types of heartbeat messages: for maintaining client states at the server and  for maintaining UDP states at the NAT box. We call the these two types of heartbeat messages as: type-S and type-N heartbeat messages, respectively. The type-S heartbeat messages are sent at very low frequency: at 30 mins interval with 3 retries. Unlike Alternative #1, even clients behind NAT send type-S &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;heartbeat &lt;/del&gt;at this low rate. Both the server and &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;clients &lt;/del&gt;send type-S heartbeat messages. The type-N heartbeat messages are sent only &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;be &lt;/del&gt;clients at very high frequency: potentially &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;once every &lt;/del&gt;second. This is to refresh the port mapping on NAT boxes. To avoid the message flooding, the type-N heartbeats should have a small ''TTL'' value, say &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Choose &lt;/del&gt;proper &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value is not easy, considering there might be several chained NAT boxes between clients and the server. A feasible &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value should fall between the hop count to the ''outer-most'' NAT box and the hop count to the server. An optimal  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; should be as close to the hop count to the ''outer-most'' NAT box as possible. We set &amp;lt;math&amp;gt; n = 3 &amp;lt;/math&amp;gt; as the initial TTL value. We increase &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server observes an IP/port change, which indicates our port mapping still gets timed out because the type-N heartbeats did not go far enough. We decrease &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server receives a type-N heartbeat, which indicates type-N heartbeats are flooding our server. We set &amp;lt;math&amp;gt;n=0&amp;lt;/math&amp;gt; if we observe the &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; fluctuates for 3 times. Clients with a zero &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; do not send type-N heartbeats.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #2''': We create two types of heartbeat messages: for maintaining client states at the server and  for maintaining UDP states at the NAT box. We call the these two types of heartbeat messages as: type-S and type-N heartbeat messages, respectively. The type-S heartbeat messages are sent at very low frequency: at 30 mins interval with 3 retries. Unlike Alternative #1, even clients behind NAT send type-S &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;heartbeats &lt;/ins&gt;at this low rate. Both the server and &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;the client &lt;/ins&gt;send type-S heartbeat messages. The type-N heartbeat messages are sent only &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;by &lt;/ins&gt;clients at very high frequency: potentially &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;one per &lt;/ins&gt;second. This is to refresh the port mapping on NAT boxes. To avoid the message flooding, the type-N heartbeats should have a small ''TTL'' value, say &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Choosing &lt;/ins&gt;proper &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value is not easy, considering there might be several chained NAT boxes between clients and the server. A feasible &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value should fall between the hop count to the ''outer-most'' NAT box and the hop count to the server. An optimal  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; should be as close to the hop count to the ''outer-most'' NAT box as possible. We set &amp;lt;math&amp;gt; n = 3 &amp;lt;/math&amp;gt; as the initial TTL value. We increase &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server observes an IP/port change, which indicates our port mapping still gets timed out because the type-N heartbeats did not go far enough. We decrease &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server receives a type-N heartbeat, which indicates type-N heartbeats are flooding our server. We set &amp;lt;math&amp;gt;n=0&amp;lt;/math&amp;gt; if we observe the &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; fluctuates for 3 times. Clients with a zero &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; do not send type-N heartbeats.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Streaming Friendly Scheduling ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Streaming Friendly Scheduling ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== NAT Traversal ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== NAT Traversal ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>MediaWiki default</name></author>
	</entry>
	<entry>
		<id>https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=1745&amp;oldid=prev</id>
		<title>MediaWiki default at 20:41, 26 March 2008</title>
		<link rel="alternate" type="text/html" href="https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=1745&amp;oldid=prev"/>
		<updated>2008-03-26T20:41:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-CA&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:41, 26 March 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l10&quot; &gt;Line 10:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 10:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;To better resolve this, we propose two mechanisms: permanent Id and adaptive heartbeat interval.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;To better resolve this, we propose two mechanisms: permanent Id and adaptive heartbeat interval.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''Permanent Id''': Clients should maintain a unique and permanent Id. We achieve the uniqueness using the MD5 hash. We store the Id in the client's configuration file for permanency. We should note that the configuration file of a fresh installed client should contain no Id. This can be implemented by reserving an Id as the ''Initial Id'', such as all 0xFF. When a client starts up, it loads its Id from the configuration file. The client generates a new Id if its configuration file contains the ''Initial Id''. The new Id is created by hashing the first MAC address of that client machine. If this &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;failed&lt;/del&gt;, we hash a random number and use it as the new Id. All messages from clients to the server should contain client's Id, which enables the server to determine whether there is an IP/port change. If the server notices an IP/port change, it performs two taks. First, the server should send a JoinAck message to the client, so that the client can update it's public IP address and port number. Second, the server updates its connection and content tables.  &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''Permanent Id''': Clients should maintain a unique and permanent Id. We achieve the uniqueness using the MD5 hash. We store the Id in the client's configuration file for permanency. We should note that the configuration file of a fresh installed client should contain no Id. This can be implemented by reserving an Id as the ''Initial Id'', such as all 0xFF. When a client starts up, it loads its Id from the configuration file. The client generates a new Id if its configuration file contains the ''Initial Id''. The new Id is created by hashing the first MAC address of that client machine. If this &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;fails&lt;/ins&gt;, we hash a random number and use it as the new Id. All messages from clients to the server should contain client's Id, which enables the server to determine whether there is an IP/port change. If the server notices an IP/port change, it performs two taks. First, the server should send a JoinAck message to the client, so that the client can update it's public IP address and port number. Second, the server updates its connection and content tables.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''Adaptive HeartBeat Interval''': There are two alternatives to make heartbeat interval adaptive to NAT box implementation.  &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''Adaptive HeartBeat Interval''': There are two alternatives to make heartbeat interval adaptive to NAT box implementation.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #1''': We distinguish clients behind and not behind NATs. We set the heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; to be 30 mins, and maximal retries to be 3 times for clients that are not behind NATs. We use an adaptive heartbeat interval for clients behind NATs. This heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; is initialized to be 2 mins, and is reduced by 5 secs whenever the server notices an IP/port change. &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; should never go below 5 secs&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;, that is &amp;lt;math&amp;gt;t_s \ge 5 &amp;lt;/math&amp;gt;&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #1''': We distinguish clients behind and not behind NATs. We set the heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; to be 30 mins, and maximal retries to be 3 times for clients that are not behind NATs. We use an adaptive heartbeat interval for clients behind NATs. This heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; is initialized to be 2 mins, and is reduced by 5 secs whenever the server notices an IP/port change. &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; should never go below 5 secs.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #2''': We create two types of heartbeat messages: for maintaining client states at the server and  for maintaining UDP states at the NAT box. We call the these two types of heartbeat messages as: type-S and type-N heartbeat messages, respectively. The type-S heartbeat messages are sent at very low frequency: at 30 mins interval with 3 retries. Unlike Alternative #1, even clients behind NAT send type-S heartbeat at this low rate. Both the server and clients send type-S heartbeat messages. The type-N heartbeat messages are sent only be clients at very high frequency: potentially once every second. This is to refresh the port mapping on NAT boxes. To avoid the message flooding, the type-N heartbeats should have a small ''TTL'' value, say &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Choose proper &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value is not easy, considering there might be several chained NAT boxes between clients and the server. A feasible &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value should fall between the hop count to the ''outer-most'' NAT box and the hop count to the server. An optimal  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; should be as close to the hop count to the ''outer-most'' NAT box as possible. We set &amp;lt;math&amp;gt; n = 3 &amp;lt;/math&amp;gt; as the initial TTL value. We increase &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server observes an IP/port change, which indicates our port mapping still gets timed out because the type-N heartbeats did not go far enough. We decrease &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server receives a type-N heartbeat, which indicates type-N heartbeats are flooding our server. We set &amp;lt;math&amp;gt;n=0&amp;lt;/math&amp;gt; if we observe the &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; fluctuates for 3 times. Clients with a zero &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; do not send type-N heartbeats.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #2''': We create two types of heartbeat messages: for maintaining client states at the server and  for maintaining UDP states at the NAT box. We call the these two types of heartbeat messages as: type-S and type-N heartbeat messages, respectively. The type-S heartbeat messages are sent at very low frequency: at 30 mins interval with 3 retries. Unlike Alternative #1, even clients behind NAT send type-S heartbeat at this low rate. Both the server and clients send type-S heartbeat messages. The type-N heartbeat messages are sent only be clients at very high frequency: potentially once every second. This is to refresh the port mapping on NAT boxes. To avoid the message flooding, the type-N heartbeats should have a small ''TTL'' value, say &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Choose proper &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value is not easy, considering there might be several chained NAT boxes between clients and the server. A feasible &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value should fall between the hop count to the ''outer-most'' NAT box and the hop count to the server. An optimal  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; should be as close to the hop count to the ''outer-most'' NAT box as possible. We set &amp;lt;math&amp;gt; n = 3 &amp;lt;/math&amp;gt; as the initial TTL value. We increase &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server observes an IP/port change, which indicates our port mapping still gets timed out because the type-N heartbeats did not go far enough. We decrease &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server receives a type-N heartbeat, which indicates type-N heartbeats are flooding our server. We set &amp;lt;math&amp;gt;n=0&amp;lt;/math&amp;gt; if we observe the &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; fluctuates for 3 times. Clients with a zero &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; do not send type-N heartbeats.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>MediaWiki default</name></author>
	</entry>
	<entry>
		<id>https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=1744&amp;oldid=prev</id>
		<title>MediaWiki default at 20:36, 26 March 2008</title>
		<link rel="alternate" type="text/html" href="https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:Systems_Issues&amp;diff=1744&amp;oldid=prev"/>
		<updated>2008-03-26T20:36:10Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-CA&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:36, 26 March 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l13&quot; &gt;Line 13:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 13:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''Adaptive HeartBeat Interval''': There are two alternatives to make heartbeat interval adaptive to NAT box implementation.  &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''Adaptive HeartBeat Interval''': There are two alternatives to make heartbeat interval adaptive to NAT box implementation.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #1''': We distinguish clients behind and not behind NATs. We set the heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; to be 30 mins, and maximal retries to be 3 times for clients that are not behind NATs. We use an adaptive heartbeat interval for clients behind NATs. This heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; is initialized to be 2 mins, and is reduced by 5 secs whenever the server notices an IP/port change. &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; should never go below 5 secs, that is &amp;lt;math&amp;gt;t_s \ge 5 &amp;lt;/math&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #1''': We distinguish clients behind and not behind NATs. We set the heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; to be 30 mins, and maximal retries to be 3 times for clients that are not behind NATs. We use an adaptive heartbeat interval for clients behind NATs. This heartbeat interval &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; is initialized to be 2 mins, and is reduced by 5 secs whenever the server notices an IP/port change. &amp;lt;math&amp;gt;t_s&amp;lt;/math&amp;gt; should never go below 5 secs, that is &amp;lt;math&amp;gt;t_s \ge 5 &amp;lt;/math&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #2''': We create two types of heartbeat messages: for maintaining client states at the server and  for maintaining UDP states at the NAT box. We call the these two types of heartbeat messages as: type-S and type-N heartbeat messages, respectively. The type-S messages are sent at very low frequency: at 30 mins interval with 3 retries. Unlike &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;alternative &lt;/del&gt;#1&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** '''Alternative #2''': We create two types of heartbeat messages: for maintaining client states at the server and  for maintaining UDP states at the NAT box. We call the these two types of heartbeat messages as: type-S and type-N heartbeat messages, respectively. The type-S &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;heartbeat &lt;/ins&gt;messages are sent at very low frequency: at 30 mins interval with 3 retries. Unlike &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Alternative &lt;/ins&gt;#1&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;, even clients behind NAT send type-S heartbeat at this low rate. Both the server and clients send type-S heartbeat messages. The type-N heartbeat messages are sent only be clients at very high frequency: potentially once every second. This is to refresh the port mapping on NAT boxes. To avoid the message flooding, the type-N heartbeats should have a small ''TTL'' value, say &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Choose proper &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value is not easy, considering there might be several chained NAT boxes between clients and the server. A feasible &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; value should fall between the hop count to the ''outer-most'' NAT box and the hop count to the server. An optimal  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; should be as close to the hop count to the ''outer-most'' NAT box as possible. We set &amp;lt;math&amp;gt; n = 3 &amp;lt;/math&amp;gt; as the initial TTL value. We increase &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server observes an IP/port change, which indicates our port mapping still gets timed out because the type-N heartbeats did not go far enough. We decrease &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; by 1 if the server receives a type-N heartbeat, which indicates type-N heartbeats are flooding our server. We set &amp;lt;math&amp;gt;n=0&amp;lt;/math&amp;gt; if we observe the &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; fluctuates for 3 times. Clients with a zero &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; do not send type-N heartbeats.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Streaming Friendly Scheduling ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Streaming Friendly Scheduling ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== NAT Traversal ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== NAT Traversal ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>MediaWiki default</name></author>
	</entry>
</feed>