This is a combination of an overview of the course, and Internetworking
in general.


Schedule
========

7	Intro                   elliot
8	TCP                     jhawk
9	IPv6                    elliot

7	Routing                 elliot
8	Level 2                 elliot
9	Internet Engineering    jhawk

7	Utilities               jhawk
8	Applications            elliot
9	Security                jhawk


Who are we?
===========

SIPB
- service organization: improve the computing environment at MIT
- ways we do this: answer questions next to the W20 cluster, provide many
  useful Athena lockers (sipb), IAP courses, computer tours, news service,
  www.mit.edu web server, scanner, etc.
- meetings are Monday's at 7:30 pm, W20-557, anyone welcome

Instructors:
 Elliot Schwartz <elliot@mit.edu>
- senior in Computer Science and Engineering
- working on M.Eng next year, so if you have any leads for
  thesis advisors / funding, let me know :)
- worked 3 years for UUNET Canada
- worked a couple of summers at LCS doing network research

 John Hawkinson <jhawk@mit.edu>
- currently working for BBN Planet (GTE) in Network Engineering group
- used to work for Panix, an ISP in New York City

Internetworking
===============

What is the problem?
  [picture of a network]
- want people to be able to communicate

How do you solve it?
- to solve, like any problem, modularity is the key
- break up the problem into smaller problems:
  - how to send packets between adjacent nodes
  - how to send packets between any nodes
  - how to send a reliable data stream between any nodes

Layering
========

- in fact, modularity in networking tends to be even more constrained

Why layering?
- each layer solves part of the problem, then stack the layers
- allows gradual change and evolution of system
  ex. ethernet to fast ethernet, addition of multicast to IP
- splits technology into areas that can be developed by different groups
  ex. 3COM makes ethernet cards, cisco/bay networks make routers, netscape
      does software
- allows multiple systems
  ex. you can use TCP or UDP, ethernet or FDDI, netscape or mosaic

How to make it?
- each layer has a specified interface or abstraction to the ones below
  or above it
- like any program/system you might design, electrons go at the bottom,
  users go at the top - fill in the middle (somewhat) arbitrarily
- add/refine services as you go up
- lower level data and header becomes upper level data (encapsulation)

How to use it?
- users/programmers communicate between machines at a particular layer
- bits actually go down through the stack, across the network and up the
  other side
[diagram] ex. telnet across an ethernet, web across the Internet (maybe fr)
- "lower level" layers are closer to the hardware/network
- "higher level" layers are closer to the software/user

A few words on the ISO-OSI model...
- developed by the International Organization for Standardization
- they were developing their own set of protocols, but they're mostly unused
- they also developed a model which you'll see at most courses
- it's a layer model, but it has a fixed number of layers and each layer is
  designed to solve a very specific problems
- in real life, layering is more flexable - sometimes layers will appear
  in different places, or more than once, or not at all...
- still, it's a good way to basically think about things

Views of Layering
=================

Services Provided
- make a stack of the added service at each layer

Data Structure
- show how the data needed for each services is added at each layer

Code
- show how the flow of the code goes for each layer

Now we look at the topics and where they fit in.

TCP (Transmission Control Protocol)
===================================
- it's a layer
- expects: unreliable packet service between nodes
- provides: reliable stream service between nodes
- how?: sequence numbers, retransmissions, etc.
- also interesting: flow control

IPv6
====
- it's a layer
- expects: a way to communicate with nodes on the same subnet
- provides: a way to communicate with any node on the Internet
- how?: universal addressing, routing protocols, node and
  router behaviour

Routing
=======
- intimately tied to IP layer namely
- given: a set of routers which can forward packets
- solves: how do we decide where to forward it?
- interesting: uses other layers for passing information

Level 2
=======
- it's a layer
- given: various forms of physical connection (optical, electronic,
  different topologies)
- provides: way for these physically connected machines to talk to
  each other

Internet Engineering
====================
All this theory is nice, but:
- how do you assign addresses
- which Level 2 technologies do you use in practice and where?
- how do you want to organize your network?

Utilities
=========
How can you explore the network yourself?
- ping
  - allows you to send a packet to any host on the internet which gets
    returned to you
  - good basic test for connectivity, packet loss, return trip times
- traceroute
  - allows you to see what routers your packet passes through on the
    way to a destination
- pathchar
  - computes the characteristics of various subnets of the trip by
    using timing information

Applications
============
- it's (sort of) a layer
- given: a reliable stream connection
- provide: services
- we'll look at e-mail and the web
- actually encompass a number of layers above reliable stream connection

Security
========
- computing has two main security problems
 - authentication (how to tell something comes from someone)
 - privacy (keeping information from people who shouldn't see it)
- mainly solved with cryptography
- manifests itself in a few places on the Internet
  - don't just want "reliable stream connection", want
    "*secure* reliable stream connection"
  - the login / identity problem 
  - secure e-mail
- look at the potential problems, and existing solutions

  
