#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
