#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
\lyxformat 345
\begin_document
\begin_header
\textclass beamer
\begin_preamble
\usetheme{Warsaw}
% or ...
\setbeamercovered{transparent}
% or whatever (possibly just delete it)
\end_preamble
\use_default_options false
\language english
\inputencoding auto
\font_roman times
\font_sans default
\font_typewriter default
\font_default_family default
\font_sc false
\font_osf false
\font_sf_scale 100
\font_tt_scale 100
\graphics default
\paperfontsize default
\spacing single
\use_hyperref false
\papersize default
\use_geometry false
\use_amsmath 2
\use_esint 0
\cite_engine basic
\use_bibtopic false
\paperorientation portrait
\secnumdepth 2
\tocdepth 2
\paragraph_separation indent
\defskip medskip
\quotes_language english
\papercolumns 1
\papersides 1
\paperpagestyle default
\tracking_changes false
\output_changes false
\author ""
\author ""
\end_header
\begin_body
\begin_layout Title
net2o: vapor
\begin_inset Formula $\rightarrow$
\end_inset
reality
\begin_inset OptArg
status open
\begin_layout Plain Layout
net2o
\end_layout
\end_inset
\end_layout
\begin_layout Author
Bernd Paysan
\end_layout
\begin_layout Date
EuroForth 2010, Hamburg
\end_layout
\begin_layout BeginFrame
Outline
\end_layout
\begin_layout Standard
\begin_inset CommandInset toc
LatexCommand tableofcontents
\end_inset
\end_layout
\begin_layout EndFrame
\end_layout
\begin_layout Section
Motivation
\end_layout
\begin_layout Subsection
No sabbatical, but also no real challange
\end_layout
\begin_layout BeginFrame
Looking for a challange
\end_layout
\begin_layout Itemize
As presented last year on EuroForth, the challange I'm looking at is a clean
slate reimplementation of
\begin_inset Quotes eld
\end_inset
the Internet
\begin_inset Quotes erd
\end_inset
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
My previous company managed to sell me with my team instead of firing us---so
the planned sabbatical doesn't happen
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
This means it will take more time, but on the other hand it has to be simpler
and more compact
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
This talk is partly status report and much more a list of things to do
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
IETF discussions about strategic internet development indicate that I'm
on the right track
\end_layout
\begin_layout EndFrame
\end_layout
\begin_layout Subsection
Recap: Requirements
\end_layout
\begin_layout BeginFrame
Recap: Requirements
\end_layout
\begin_layout Description
Scalability Must work well with low and high bandwidths, loose and tightly
coupled systems, few and many hosts connected together over short to far
distances.
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Description
Easy
\begin_inset space ~
\end_inset
to
\begin_inset space ~
\end_inset
implement Must work with a minimum of effort, must allow small and cheap
devices to connect.
One idea is to replace
\begin_inset Quotes eld
\end_inset
busses
\begin_inset Quotes erd
\end_inset
like USB and firewire with cheap LAN links.
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Description
Security Users want authentication and authorization, but also anonymity
and privacy.
Firewalls and similar gatekeepers (load balancers, etc.) are common.
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Description
Media
\begin_inset space ~
\end_inset
capable This requires real-time capabilities, pre-allocated bandwidth and
other QoS features, end-to-end.
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Description
Transparency Must be able to work together with other networks (especially
Internet 1.0).
\end_layout
\begin_layout EndFrame
\end_layout
\begin_layout Section
Recap: Topology
\end_layout
\begin_layout BeginFrame
Switching Packets, Routing Connections
\end_layout
\begin_layout Itemize
Similar to MPLS, packets should run through a switching network, not through
routers
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
Routing is a combination of DNS (name resolution) and routing calculation
(destination lookup)
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Block
\begin_inset ERT
status collapsed
\begin_layout Plain Layout
{
\end_layout
\end_inset
Physical Route
\begin_inset ERT
status collapsed
\begin_layout Plain Layout
}
\end_layout
\end_inset
\end_layout
\begin_deeper
\begin_layout Itemize
Take first
\begin_inset Formula $n$
\end_inset
bits of target address and select destination
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
Shift target address by
\begin_inset Formula $n$
\end_inset
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
Insert bit-reversed source into address field
\end_layout
\end_deeper
\begin_layout EndFrame
\end_layout
\begin_layout Subsection
Recap: Packet Header
\end_layout
\begin_layout BeginFrame
Recap: Packet Header
\end_layout
\begin_layout Standard
\align center
\begin_inset Tabular
<lyxtabular version="3" rows="7" columns="2">
<features>
<column alignment="center" valignment="top" width="0">
<column alignment="center" valignment="top" width="0">
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\emph on
Size
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\emph on
Flags
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\emph on
2
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\emph on
Path
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\emph on
2/8
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\emph on
Address
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\emph on
2/8
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\emph on
Junk
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\emph on
0/8
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\emph on
Data
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\emph on
32/128/512/2k
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\emph on
ECC
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\emph on
L1 dependent
\end_layout
\end_inset
</cell>
</row>
</lyxtabular>
\end_inset
\end_layout
\begin_layout Standard
\align center
\begin_inset Graphics
filename ../../../doc/euroforth2009/internet-2.0/header64.fig
lyxscale 50
scale 25
\end_inset
\end_layout
\begin_layout Standard
\align center
\begin_inset Graphics
filename ../../../doc/euroforth2009/internet-2.0/header16.fig
lyxscale 50
scale 25
\end_inset
\end_layout
\begin_layout EndFrame
\end_layout
\begin_layout Section
Implementation Status
\end_layout
\begin_layout BeginFrame
Starting Point
\end_layout
\begin_layout Itemize
As starting point, I first implement net2o using UDP as transport layer
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
UDP offers a reaonable interface for a single server that handles many connectio
ns without crazy Unix overhead
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
For start, IPv4 only; IPv6 requires more work (no fragmented packets possible)
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
Two parts: Packet server and command generator/interpreter
\end_layout
\begin_layout EndFrame
\end_layout
\begin_layout Subsection
Data Structures
\end_layout
\begin_layout BeginFrame
Switching
\end_layout
\begin_layout Itemize
Use a hash for
\begin_inset Quotes eld
\end_inset
switching
\begin_inset Quotes erd
\end_inset
IP-Addresses: Hash value equals prefix
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
Hash collissions resolved with longer prefixes
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
Prefix granularity: Byte
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\begin_layout Description
MSB=0 Direct routing entry
\end_layout
\begin_layout Description
MSB=1 larger prefix, look at next byte for more data
\end_layout
\end_deeper
\begin_layout EndFrame
\end_layout
\begin_layout BeginFrame
Shared Memory
\end_layout
\begin_layout Itemize
Map from address to connection context
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
Connection context (will) contain
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\begin_layout Itemize
real addresses
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
file handles
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
cryptographic keys
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
authentication information
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
and other status information (a lot of that still unimplemented)
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\end_deeper
\begin_layout Itemize
Event queue for received packets
\end_layout
\begin_layout EndFrame
\end_layout
\begin_layout BeginFrame
Commands
\end_layout
\begin_layout Itemize
UTF-8 encoded commands: Simple commands are 0-7F, one byte, complexer commands
take more bytes
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
Commands packet into 8 byte chunks
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
8 byte literals (e.g.
addresses) and strings embedded into the command structure
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
Command assembler allows seamless commands within Forth code
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
Discussion: offsets to literals as UTF-8 code?
\end_layout
\begin_layout EndFrame
\end_layout
\begin_layout Subsection
Working Stuff
\end_layout
\begin_layout BeginFrame
Working Testcase
\end_layout
\begin_layout ExampleBlock
\begin_inset ERT
status open
\begin_layout Plain Layout
{
\end_layout
\end_inset
Server loop
\begin_inset ERT
status open
\begin_layout Plain Layout
}
\end_layout
\end_inset
\end_layout
\begin_deeper
\begin_layout LyX-Code
init-server
\end_layout
\begin_layout LyX-Code
server-loop
\end_layout
\end_deeper
\begin_layout Pause
\end_layout
\begin_layout ExampleBlock
\begin_inset ERT
status open
\begin_layout Plain Layout
{
\end_layout
\end_inset
Debugging output
\begin_inset ERT
status open
\begin_layout Plain Layout
}
\end_layout
\end_inset
\end_layout
\begin_deeper
\begin_layout LyX-Code
init-client
\end_layout
\begin_layout LyX-Code
s
\begin_inset Quotes erd
\end_inset
localhost
\begin_inset Quotes erd
\end_inset
net2o-udp insert-ipv4
\end_layout
\begin_layout LyX-Code
constant lserver
\end_layout
\begin_layout LyX-Code
net2o-code s
\begin_inset Quotes erd
\end_inset
This is a test
\begin_inset Quotes erd
\end_inset
$, type
\end_layout
\begin_layout LyX-Code
'!' char, emit cr end-code
\end_layout
\begin_layout LyX-Code
cmdbuf cell+ 0 lserver sendA
\end_layout
\end_deeper
\begin_layout EndFrame
\end_layout
\begin_layout Section
Todo-List
\end_layout
\begin_layout Subsection
Flow Control
\end_layout
\begin_layout BeginFrame
Flow Control
\end_layout
\begin_layout Itemize
UDP offers no quality of service
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
TCP/IP flow control is horribly broken, assumes no buffers---reality are
buffers everywhere, filled up completely by TCP/IP (causing horribly lags)
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
Idea: PLL-based flow control, tries to prevent buffers filling up
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
\begin_inset Quotes eld
\end_inset
Fast start:
\begin_inset Quotes erd
\end_inset
Send first few packets out as fast as possible, to measure actual data
rate
\end_layout
\begin_layout EndFrame
\end_layout
\begin_layout Subsection
Cryptography
\end_layout
\begin_layout BeginFrame
Cryptography
\end_layout
\begin_layout Itemize
Ellyptic Curve Cryptography code for the assymmetric part (much faster than
RSA, a lot stronger per bit)
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
Wurstkessel as symmetric cryptography and hashes
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
Ubiquituous encryption is very important for network neutrality!
\end_layout
\begin_layout EndFrame
\end_layout
\begin_layout Subsection
Browser
\end_layout
\begin_layout BeginFrame
Presentation/Browser
\end_layout
\begin_layout Itemize
Typesetting engine
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
Embedding of images, audio, and video---but please no plugins!
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
Properly secured scripting (needs to be simple enough for that!)
\end_layout
\begin_layout Section*
Summary
\end_layout
\begin_layout BeginFrame
Summary
\end_layout
\begin_layout Itemize
There is already a little bit of code
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
A lot more work for long dark winter evenings
\end_layout
\begin_deeper
\begin_layout Pause
\end_layout
\end_deeper
\begin_layout Itemize
After completion of reference implementation: RFC, IETF discussions, presentatio
ns at larger network-related conferences
\end_layout
\begin_layout EndFrame
\end_layout
\begin_layout Section*
\start_of_appendix
Appendix
\end_layout
\begin_layout Subsection*
For Further Reading
\end_layout
\begin_layout BeginFrame
\begin_inset ERT
status open
\begin_layout Plain Layout
[allowframebreaks]
\end_layout
\end_inset
For Further Reading
\end_layout
\begin_layout Bibliography
\begin_inset CommandInset bibitem
LatexCommand bibitem
key "In20"
\end_inset
Bernd Paysan
\begin_inset ERT
status collapsed
\begin_layout Plain Layout
\backslash
newblock
\end_layout
\end_inset
\emph on
Internet 2.0
\emph default
\begin_inset ERT
status collapsed
\begin_layout Plain Layout
\backslash
newblock
\end_layout
\end_inset
\begin_inset Flex URL
status open
\begin_layout Plain Layout
http://www.jwdt.com/~paysan/internet-2.0.html
\end_layout
\end_inset
\end_layout
\begin_layout EndFrame
\end_layout
\end_body
\end_document