This is an old version of this course, from Fall 2016. A newer version is available here.
Videos
Titles
- Data encoding, part 1
- Data encoding, part 2
- Data encoding, part 3
- Introduction to packet switching
- What is a protocol?
- Principles of network applications
- Introduction to the Python programming language, part 1
- Introduction to the Python programming language, part 2
- Introduction to network programming in Python
- Introduction to HTTP protocol, part 1
- Introduction to HTTP protocol, part 2
- Introduction to HTTP protocol, part 3
- Introduction to DNS, part 1a
- Introduction to DNS
- Transport-layer protocols
- Multiplexing and demultiplexing
- UDP protocol
- TCP protocol
- Email protocols
- Sending email (SMTP)
- Sending email
- Sending email
- Delivering/receiving email
- Fetching email (IMAP)
- Network-layer protocols and routers
- IP protocol
- IPv4 addressing and DHCP
- Network address translation (NAT and UPnP)
- Cryptography in network protocols
- Public key cryptography
- Modular arithmetic
- RSA encryption
Data encoding, part 1 (Click here to view video)
Revised: 31 August 2014
(1:45-6:43) I have removed 1's complement from the outcomes requirements. The rest of the video is still part of the class.
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Importance of data encoding in network protocols and applications |
01:00 | Historical issues |
01:45 | Numeric encoding (unsigned, 1's-complement, 2's-complement) |
06:43 | Endian-ness (big, little) |
09:33 | Hexadecimal notation, powers of two |
11:38 | End |
Data encoding, part 2 (Click here to view video)
Revised: 31 August 2014
Time code | Topic |
---|---|
00:00 | Introduction |
00:40 | Character encoding: Morse |
01:35 | Character encoding: Baudot-Murray |
02:40 | Character encoding: ASCII |
04:29 | Byte character sets, ISO-8859-X |
07:23 | Unicode |
10:25 | End |
Data encoding, part 3 (Click here to view video)
Revised: 31 August 2014
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Unicode encoding, UTF-8, UTF-16 |
01:52 | Details of UTF-8 encoding |
04:30 | UTF-8 encoding example |
06:54 | Percent-hex encoding (e.g., URLs) |
08:23 | Percent-hex encoding procedure |
10:36 | Percent-hex URL encoding example |
14:11 | End |
Introduction to packet switching (Click here to view video)
Revised: 09 September 2013
This video might come into play in Week 10 when we discuss the network layer.
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Packet switching as an alternative to circuit switching |
01:15 | Sharing bandwidth dynamically by breaking data up into packets that travel through the network |
03:00 | Store-and-forward packet transmission |
03:50 | Packet reception, storage/queuing, transmission; channel data-rate effects; queue capacity |
05:50 | Routing and link/path selection, routing tables and dynamic re-routing |
07:25 | Delays in packet switching: propagation, queuing, processing, transmission |
08:50 | Packet loss: queue overflow, link and node failures |
09:15 | Data throughput |
What is a protocol? (Click here to view video)
Revised: 12 September 2013
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Protocol: dictionary definitions |
01:08 | Example: interpersonal communication protocol |
03:00 | Protocol characteristics: setup, requests, responses, termination (and alternative flows) |
04:35 | Definition of messages and interactions within a protocol |
05:05 | Protocol definition components |
Principles of network applications (Click here to view video)
Revised: 13 September 2013
The audio quality for this video is not up to desired standards, and there are references to some videos on low-level network topics that you may not yet have viewed; sorry about that.
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Building applications that make use of network services |
00:50 | Layers in a protocol stack, interface abstraction |
01:59 | Physical layer: moving data from one point to another |
02:28 | Link layer: low-level management of "frames" of data across a link |
03:20 | Network layer: managing routing through network nodes and links |
04:58 | Transport layer: moving application-level messages from sender to receiver (e.g., UDP, TCP) |
05:40 | Virtual circuits using TCP in the transport layer |
06:10 | Application layer: managing a particular type of data from one application to another across the network (HTTP, SMTP, IMAP, FTP) |
Introduction to the Python programming language, part 1 (Click here to view video)
Revised: 12 September 2014
There are many web and other resources on Python, and these videos are only a limited introduction.
Most of this video still applies in Python 2, but there are differences:
00:30-end Whenever you use print, you must put parenthesis around the arguments, just like with other function calls in Python.
02:20 raw_input in Python 2 has been replaced by input
in Python 3
05:05 You no longer need to specify the character set of your source code in a comment at the top of a file. UTF-8 is assumed by default in Python 3.
05:30 The handling of UTF-8, Unicode, ASCII text, and raw bytes has changed significantly in Python 3
08:20 (again) The handling of UTF-8, Unicode, ASCII text, and raw bytes has changed significantly in Python 3
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Python syntax, comments |
01:00 | Variable declaration and initialization, value output |
01:50 | Variables and value types |
02:20 | Python user input |
03:10 | String concatenation vs arithmetic addition |
04:00 | Using int() function |
04:45 | Simple python data types |
05:05 | Source code character set specification |
05:40 | UTF-8 vs ASCII character strings |
06:15 | String formatting using format() function/method |
07:10 | Integer division and exponentiation operator |
07:30 | Float and boolean values, variable naming convention |
08:20 | UTF-8 string length for non-ASCII characters |
09:20 | Python type() function and mention of duck typing |
10:13 | End |
Introduction to the Python programming language, part 2 (Click here to view video)
Revised: 12 September 2014
Most of this video still applies in Python 2, but the discussion of Unicode and UTF-8 (from 09:50 through the end) has changed significantly in Python 3
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Lists and dictionaries |
02:20 | Control structures, if/elif/else statements |
04:05 | Iteration: for loops, ranges, conditional expressions |
06:20 | Break statements in loops |
07:20 | Functions: def statements |
08:00 | Main methods |
09:00 | None values |
09:50 | Unicode and UTF-8 processing |
13:37 | End |
Introduction to network programming in Python (Click here to view video)
Revised: 18 September 2014
This video applies completely to Python 2 as well as Python 3. Just note that the data sent and received is a bytes
object holding raw bytes, not a str
string object holding characters.
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Transport layer review (UDP, TCP) |
01:10 | Python socket class |
02:25 | UDP: sending |
04:04 | UDP: receiving |
08:05 | TCP: sending |
08:50 | TCP: receiving and server sockets |
13:40 | End |
Introduction to HTTP protocol, part 1 (Click here to view video)
Revised: 19 September 2013
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | HTTP (HyperText Transfer Protocol) |
01:10 | "RFC" network protocol standards |
01:55 | HTTP client and server |
02:37 | HTTP and TCP, virtual circuit client/server connection |
03:05 | HTTP requests and responses |
03:40 | Persistent and non-persistent connections; single or multiple connections between a client and a server |
04:45 | HTTP message formats: request and response |
05:25 | Entity bodies in responses and requests |
06:10 | "Line" structure of HTTP messages and the HTTP line terminator |
07:20 | HTTP request line components: method, URL, protocol version |
08:35 | URL format in HTTP request, identifying a specific site within a server |
Introduction to HTTP protocol, part 2 (Click here to view video)
Revised: 19 September 2013
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | HTTP header lines in a request |
01:00 | Header line format |
01:30 | Grammar used in HTTP message format specification |
04:50 | Parsing an example request header |
Introduction to HTTP protocol, part 3 (Click here to view video)
Revised: 20 September 2013
(09:45-end) The Java programming issues discussed in this part of the video are closely related with the bytes
/str
distinction which is so important in Python 3
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | HTTP response message |
01:30 | Response status line |
02:50 | Classes of HTTP status codes |
03:15 | "Moved permanently" response |
03:50 | Response header lines |
05:10 | Response transfer encoding (e.g., "chunked") |
06:00 | Chunked transfer encoding in HTTP specification |
06:35 | Syntax for chunked transfer encoding |
09:45 | Java programming issues for HTTP data: buffering, "reading" |
14:39 | End |
Introduction to DNS, Part 1a (Click here to view video)
Revised: 29 September 2015
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Address translation, DNS acronym |
02:00 | DNS servers, BIND software |
02:45 | DNS server capabilities, canonical names |
Want more? Continue to the full video, Introduction to DNS, Part 1 (a-b)
Introduction to DNS, Part 1 (a-b) (Click here to view video)
Revised: 28 September 2013
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Address translation, DNS acronym |
02:00 | DNS servers, BIND software |
02:45 | DNS server capabilities, canonical names (apologies for some text problems) |
05:38 | DNS server hierarchy, TLD, domain servers, hierarchical lookup |
08:12 | Local DNS servers, caching, stale data |
11:08 | DNS records: A, NS, CNAME, MX |
12:22 | DNS messages, UDP |
13:53 | End |
Transport-layer protocols (Click here to view video)
Revised: 30 September 2013
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Transport layer in protocol stack |
00:55 | Transport-layer protocols: UDP, TCP |
01:20 | UDP and TCP characteristics |
01:45 | Transport-layer protocols operate in connection endpoints |
02:25 | Segments that make up transport-layer messages |
02:40 | Network layer review, linking hosts, IP protocol |
03:18 | Multiple meanings of the term "datagram" |
04:05 | Relationship between transport and network layers, multiplexing and demultiplexing |
07:15 | End |
Transport-layer multiplexing and demultiplexing (Click here to view video)
Revised: 30 September 2013
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Transport-layer multiplexing |
01:12 | UDP datagram port usage: source, destination |
03:00 | "Reply" UDP datagram port usage |
03:45 | Simplicity of UDP port number addressing |
04:15 | TCP port usage introduction |
04:55 | TCP listening port considerations |
05:30 | TCP connection port assignment |
06:15 | Identifying the proper connection port on the server |
07:40 | TCP destination port as seen by client |
08:20 | Handling subsequent client traffic with connection port |
09:00 | TCP listening/connection port number translation table |
11:01 | End |
UDP protocol (Click here to view video)
Revised: 23 October 2013
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | UDP protocol |
01:27 | UDP RFC 768 |
01:50 | UDP message format |
02:30 | UDP source port and UDP reply |
03:00 | UDP destination port, message length |
03:17 | UDP checksum |
04:30 | UDP protocol characteristics |
05:08 | Why use UDP? |
07:30 | Use of UDP by DNS for two-way communication |
08:10 | UDP for streaming data |
08:26 | End |
TCP protocol (Click here to view video)
Revised: 28 August 2014
Time code | Topic |
---|---|
00:00 | Introduction |
Email protocols (Click here to view video)
Revised: 10 October 2013
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Email protocol summary |
00:55 | SMTP protocol, original SMTP use |
01:28 | "Today's" email transmission process |
02:40 | DNS MX record for destination server IP address |
03:18 | Email fetch protocols: POP, IMAP |
03:55 | POP vs IMAP for received message handling |
05:30 | IMAP with more than one email client device |
06:05 | Webmail client |
06:45 | IMAP selective access to email headers |
07:19 | End |
Sending email (SMTP), old version (Click here to view video)
Revised: 28 August 2014
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Sending email with SMTP |
01:00 | SMTP from originating client to server, between servers |
01:58 | SMTP protocol specification |
02:40 | SMTP evolution, types of data in email |
03:16 | SMTP standard (RFC) overview |
03:50 | SMTP access via Telnet |
04:12 | SMTP exchange: commands, responses |
05:00 | HELO/EHLO greeting |
05:30 | MAIL FROM command |
05:55 | RCPT TO command |
06:25 | DATA command |
07:00 | QUIT command |
07:18 | RFC 5322: email message headers |
08:21 | End |
Sending email (SMTP), Part 1 (Click here to view video)
Revised: 15 October 2014
Time code | Topic |
---|---|
00:00 | Introduction |
12:58 | End |
Sending email (SMTP), Part 2 (Click here to view video)
Revised: 15 October 2014
Time code | Topic |
---|---|
00:00 | Introduction |
08:57 | End |
Delivering/receiving email (IMAP), Part 1 (Click here to view video)
Revised: 19 October 2014
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | IMAP mail delivery |
01:06 | Securing message delivery (IMAPS, IMAP STARTTLS) |
03:40 | IMAP operation, complexity |
05:25 | IMAP standards (RFCs) |
06:55 | IMAP RFC 3501 |
07:45 | Python IMAP support options |
09:03 | Listing mailboxes with imaplib |
12:23 | Trace output from mailbox listing operation, protocol message format |
14:22 | End |
Fetching email (IMAP) and Java email client library (Click here to view video)
Revised: 14 October 2013
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | IMAP protocol introduction |
01:10 | IMAP server folders |
02:08 | IMAP RFC 3501 |
02:40 | IMAP commands and responses |
03:15 | Example IMAP session |
03:40 | Java client-side IMAP library - javax.mail |
05:00 | Java email classes and methods |
06:00 | Java email: folder traversal and naming |
07:00 | Java email: folder access |
07:37 | Java email: message access |
08:31 | End |
Network-layer protocols and routers (Click here to view video)
Revised: 28 October 2013
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Network layer in the protocol stack |
01:00 | Role of network layer |
01:30 | Forwarding and routing packets |
02:11 | Routers |
02:45 | Routing tables |
03:15 | Message buffers |
03:50 | Switching fabric and queuing in a router |
04:58 | Router queue buffer overflow and packet loss |
05:35 | Effect of large buffer sizes |
06:03 | Forwarding (routing) table loading |
06:50 | Routing protocols: RIP, OSPF |
08:05 | Dynamic routing table updates in case of network changes/outages |
09:00 | Dijkstra's shortest-path algorithms and spanning-tree algorithms |
09:57 | End |
IP protocol (Click here to view video)
Revised: 29 October 2013
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Internet protocol (IP) characteristics |
01:09 | IPv4 and IPv6 |
01:30 | RFC 791 spec for IPv4 |
01:45 | IP header format |
02:45 | Packet "time to live" - maximum number of "hops" |
03:30 | Header checksum |
04:08 | Source and destination IP addresses and address space limitations |
05:34 | End |
IPv4 addressing and DHCP (Click here to view video)
Revised: 29 October 2013
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | IPv4 addressing and DHCP |
00:55 | IPv4 address format (octets), hex representation, dotted-decimal notation |
02:25 | Subnet masks and address classes A/B/C (now obsolete) |
04:05 | Subnet mask notation - separating address components (CIDR) |
06:30 | DHCP - dynamic host configuration protocol |
07:45 | DHCP specification RFC 2131 |
08:30 | DHCP operation: discover, offer, request, acknowledgment |
09:28 | DHCP leases, lease renewal, address reuse |
10:18 | End |
Network address translation (NAT and UPnP) (Click here to view video)
Revised: 30 October 2013
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Network address translation (NAT) |
01:05 | Cable modem example: single network address |
01:40 | Network address translation to allow sharing of a single "outside" IP address |
02:40 | Router implementation of NAT |
03:15 | Non-routable IP addresses, allocated by DHCP |
04:00 | NAT operation: external realm, private realm |
05:09 | Address/port translation table |
06:30 | External port number mapping to internal address/port |
07:00 | NAT example |
08:05 | Translating an address for a message to an external host |
09:10 | External port number assignment and use |
09:50 | NAT translation table entries |
10:10 | Handling external response to internal message |
11:03 | Reuse of internal IP address (non-routable) ranges |
11:40 | External host establishing connection with internal host - how? |
12:20 | Opening a port on the external network |
13:30 | Opening ports with UPNP (universal plug-and-play) |
14:48 | End |
Cryptography in network protocols (Click here to view video)
Revised: 5 November 2013
Time code | Topic |
---|---|
00:00 | Introduction |
14:39 | End |
Public key cryptography (Click here to view video)
Revised: 01 November 2013
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Brief review of symmetric-key encryption |
01:45 | Public-key encryption introduction |
03:30 | Simplified mathematical view of public-key encryption |
04:19 | Reversing roles of the private and public keys |
04:55 | Lack of sender authentication in basic public-key encryption |
06:15 | Dependence on the difficulty of factoring large prime numbers in the RSA algorithm |
07:52 | Use of a symmetric session key, in turn encrypted using public-key algorithm |
08:38 | Security of the session key and perfect forward secrecy |
10:00 | Ephemeral session keys and Diffie-Hellman key exchange algorithm |
11:21 | End |
Modular arithmetic (Click here to view video)
Revised: 31 October 2014 (Dr. Yoder)
Time code | Topic |
---|---|
00:00 | Introduction |
00:30 | Game: around the circle |
03:50 | A variation on the game: modular addition |
05:36 | Modular multiplication |
06:15 | Raising to a power |
09:20 | Modular arithmetic and RSA algorithm |
09:29 | End |
RSA encryption (Click here to view video)
Revised: 02 November 2014 (Dr. Yoder)
Time code | Topic |
---|---|
00:00 | Introduction |
00:17 | Modular arithmetic review |
00:50 | Modular arithmetic and RSA public-key encryption |
01:18 | Example: creating a public/private key pair |
01:40 | Secret modulus (totient ) |
02:10 | Public/private key definitions, encoding/decoding process |
03:00 | How it works: modular arithmetic proof |
04:30 | Example: encryption/decryption with small numbers |
05:55 | Need for factoring a prime number, difficulty of doing that |
06:19 | End |
More vidoes
Looking for more? Check out the video archive.
Acknowledgement
Nearly all of the this page and the videos it links to were created by Dr. Mark Sebern.