CS2910
Outcomes
This is an old version of this course, from Fall 2015. A newer version is available here.
Week 1
The Internet Stack
- Describe the role of each layer of the internet stack
- Give examples of protocols at each layer of the internet stack
- Explain the role of the port, IP address, and MAC address in internet protocols, and which level(s) of the internet stack each of these is found
Binary Representations
- Convert bytes between binary and hexadecimal representations, given a table.
- Recall the raw representations of the ASCII characters '\r' (CR) and '\n' (LF)
- Recall the raw representations of the ASCII characters A, B, C,
a, b, c,1, 2, and 3. - Identify individual bytes in a hexadecimal byte stream
- Find a specific hexadecimal byte in a hexadecimal byte dump
- Convert a many-digit binary number to its big-endian and little-endian formats
- Give examples of common systems using the big-endian and little-endian formats
- Encode and decode negative numbers in 1's complement and 2's complement
- Determine the most positive and most negative numbers that can be represented in 1's complement and 2's complement representations with a given number of bits
Network Protocols
- Define Network Protocol
- Describe the similarity between human and computer protocols
- Design and implement an application network protocol
Parsing Messages
- Interpret by hand and write a program to parse a stream with a data header
- Interpret by hand and write a program to parse a stream with end-of-data delimiters
- Interpert by hand and write a program to parse a stream with a combination of headers and end-of-data delimiters
- Identify the end-of-transmission without relying on an end-of-stream message
Week 2
Introduction to Python
- Write a list literal in Python
- Write a tuple literal in Python
- Index into a tuple or list in Python
- Declare a python method
- Write a counting (for) loop in Python
- Write a sentinal-value (while) loop in Python
- Write if-statements in Python
- Write code that maniuplates raw bytes in Python using ord(), chr(), struct.pack(), and struct.unpack()
- Write code that interprets and formats strings using str() and int()
Transport Layer -- UDP
- Manually construct a UDP packet with specified contents
Application Layer -- HTTP
- Read and interpret the HTTP standard
- Explain the difference between a persistent connection and pipelining for HTTP.
- Describe how characters are encoded in the HTTP protocol
- Explain how binary data is encoded in HTTP
- Describe in detail the HTTP request line
- Describe in detail the HTTP status line
- Describe how the length of the status line is delimited
- Describe the position of the header lines in an HTTP response
- Explain the role of headers in an HTTP transmission
- Explain the purpose of the If-Modified-Since, Content-Length, Location, Transfer-Encoding headers, and how they relate to each other.
- Describe how the length of the header lines is delimited
- Describe where PUT, GET, or HEAD would be found in an HTTP request, and describe what these methods are used for
- Describe an example of a conditional get
- Describe how the length of the request/response is determined when the Content-Length header is specified, and when chunking is used.
- Explain the role of chunking in an HTTP transmission
- Interpret raw HTTP protocol transmissions using Content-Length and chunking for the body.
- Describe how the length of the body is delimited with and without chunking
- Properly implement chunking and determine when the end of the stream has been reached.
- (not yet covered) Explain how the character set can be specified for the body in HTTP
- (not yet covered) Explain how URIs can encode characters from alternate character sets
Application Layer -- E-mail
- Describe the roles of the SMTP, IMAP, and POP3 email protocols
- Describe the operation of the SMTP protocol
- Describe the operation of the IMAP protocol at a high level
- Describe how character sets are encodedin in internet messages
- Explain how SMTP and IMAP are used, and the server configuration used in contemporary email settings
- Describe the differences between POP3 and IMAP
- Program an email interface in Python
Application Layer -- DNS
- Describe the purpose of the DNS protocol
- Describe the information contained in DNS A, CNAME records
- Describe the roles of the various servers and clients in the DNS protocol
- Describe the roles of servers used in the DNS system and their relationships to each other
Transport Layer
- List the two key transport-layer protocols
- Describe the differences between UDP and TCP
- Choose the appropriate protocol (UDP or TCP) for a given application and defend your answer
- Select which of UDP or TCP is most appropriate for a variety of applications, and describe your choice
- Describe the differences between the Application and Transport layers
- Describe the key fields (source port, destination port) in a transport-layer segment headers and why these are found at the transport layer.
- Describe the process of (port) multiplexing
- Describe how the TCP protocol allows multiple connections \"through\" the same port
- Write code to create UDP or TCP connections in Python
- Explain the purpose of a checksum in a transport-layer packet.
Transport Layer -- UDP
- Describe the role of the key components of the UDP segment header -- source port, destination port, length, checksum
Transport Layer -- TCP
- Define flow control and congestion control
- Describe the role of the key components of the TCP segment header -- source port, destination port, sequence number, acknowledgement number, receive window, internet checksum, and ACK, RST, SYN, and FIN bits.
Security
- Define public-key encryption
- Describe the function of public and private keys
- Explain why public/private keys are not used for encrypting the bulk of a transmission, and what is used instaed
- Explain public-key (asymmetric-key) encryption using functional notation
- Explain symmetric-key encryption using functional notation
- Define symmetric-key encryption
- Describe how exponentiation works for some numbers in the encryption and decryption equations for the simple RSA used in class
- Describe situations where public-key cryptography is useful
- Describe situations where symmetric-key cryptography is useful
- Explain why RSA is secure, given that it determines rapidly if two numbers are prime, and our simplistic algorithm for determining the primality of numbers can also tell us all the factors of a number.