Comp 343-001, Computer Networks

Peter Dordal, Loyola University Dept of Computer Science

Thursdays 7:00-9:30 pm, LT-410 (windows lab)

Text: Peterson & Davie, Computer Networks, Morgan-Kaufmann, 3rd ed

My general course groundrules are here. Exams (midterm and final) will count for about 70% of your grade, with homework and programs making up the rest. The final will be Thursday, May 3, at our usual time.

The midterm is set for week 7, March 1. The final will be Thursday, May 3. Programming will be in Java.

Spring 2022:
I am generally in my office on Mondays from noon to a little before 4:00.
Sometimes I have meetings or come in late, so check first.
I am also available other times via Zoom, by appointment. Contact me via email for the Zoom meeting ID.


Study guides and materials

A brief overview of networks

My course notes (with readings)

My Ethernet notes

Final exam study guide
Answers are here.

Midterm study guide>, with suggested study exercises. Answers are here.


Programming Assignments

#1: Port Forwarder, due April 12

You are to implement a port forwarder. When started on host localhost with the command line
      java forwarder 3333 remotehost 44
Then every time a connection is made to localhost:3333, a new connection is opened to remotehost:44 and two threads are started to forward the original connection to remotehost:44. That is, two copier threads are created to copy in each direction: incoming data from the original connection is sent to remotehost:44, and data coming in from remotehost:44 is written back to the original connection.

The net result is that it appears to the user that the connection to localhost:3333 is actually to remotehost:44. No timeout handling is needed, though thread creation is necessary.

More details are here.

Files

#2: Port Scanner, due May 1

You are to implement a port scanner: it is to attempt to connect to a range of ports, and, if the connection is successful, it is to read some data from that port (no data writing is involved). You do not need threads, but you do need to handle timeouts (at least for full credit). You need to handle both timeouts during read (read timeouts) and timeouts during the connection attempt (connection timeouts). Note that the connection attempt itself is part of the socket creation, at least from the java perspective. See quikconnect.java for an example of a connection timeout.

More details are here.

Files


The material divides naturally into three "tracks" that we will alternate between, at will.

Here are the tracks:

This looks like the traditional four-layer model (LAN/IP/transit/application), but we're not really abiding by any strict layering. Here is further information about what will be covered in each track:

LAN basics

1.1 basics
1.2 layering
1.3 sockets programming intro
2.1 links basics
2.5 reliable transmission (moved up to accomodate TCP)
3.1 switching and forwarding (moved up to accomodate IP)
2.2 encoding
2.3 framing
2.4 error detection
2.6 Ethernet
3.2 bridged Ethernet
3.3 ATM

IP and routing

4.1 IP basics
4.2 Distance-Vector and Link-State Routing
4.3 Subnets, supernets, BGP, and IPv6; backbone structure; AADS v MAE EAST.

TCP and congestion

5.1 UDP
5.2 TCP
5.3 Remote Procedure Call (blast/chan v Sun)
6.1 Congestion issues
6.2 Queuing models
6.3 TCP congestion management: Reno and Tahoe
6.4 DECbit, RED, and TCP Vegas
6.5 Reservation-based approaches to congestion



Class-by-class summary: see the nnotes file, "my course notes", above


The following paper has useful information about TCP/IP security: Security Problems in the TCP/IP Protocol Suite by Steve Bellovin.

Here's a map of the internet!