CS2911
Outcomes
Week 1
The first week of CS2911 uses the laboratory period as a third lecture period.
In Week 1, many of the outcomes are also discussed on Khan Academy's Binary and hexadecimal number systems. You may find this to be a more detailed supplement than the text, for the material it covers. Outcomes at least partially covered by Khan are indicated by ((
The Binary number system
- Describe the 0 and 1 concept for digital signals. (Khan)
- Describe positional number systems. (Khan)
- Compare and contrast decimal digits and binary bits. (Khan)
- List the powers-of-2 from 1 to 65536. (Khan: to 128)
- Convert decimal numbers to binary numbers using the largest-power-of-2-first algorithm. (Khan - small and large)
- Write the 3-bit and 4-bit unsigned binary numbers.
- Convert binary numbers to decimal numbers using positional multiplication. (Khan)
- State the maximum and minimum number on the n-bit unsigned number line.
- State the common names given to 4-bit and 8-bit binary numbers.
- Identify individual bytes in a hexadecimal byte stream
- Describe the octal and hexadecimal number systems. (Khan: Hexadecimal)
- Convert binary numbers to octal and hexadecimal numbers. (Khan: Hexadecimal)
- Convert hexadecimal numbers to binary numbers. (Khan: See my brief answers under the binary to hexadecimal video — search for yoderj)
Binary Representations
- Recall the raw representations of the ASCII characters '\r' (CR) and '\n' (LF), and ' ' (space)
- Recall the raw representations of the ASCII characters A, B, C, D, E, a, b, c, d, e, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
- 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
- Find a specific hexadecimal byte in a hexadecimal byte dump
Transport Layer -- UDP
- Be aware that the UDP header is the last header in a Wireshark capture of a simple UDP packet
- Manually construct a UDP packet (header and data) with specified contents
- Interpret code in a new language (Python)
- Send and receive UDP packets in Python
- Describe the role of the key components of the UDP segment header -- source port, destination port, length, checksum
Week 2
Introduction to Python
- Describe the difference between a compiled and an interpreted language
- Write a list literal in Python
- Write a tuple literal in Python
- Index into a tuple or list in Python
- Describe the difference between lists and tuples
- Write if-statements in Python
- Write a counting (for) loop in Python
- Write a sentinel-value (while) loop in Python
- Write code that manipulates raw bytes in Python using
ord(), chr(),s.encode(), b.decode(), int.from_bytes(), and i.to_bytes() - Write code that interprets and formats strings using str() and int()
- Declare a Python method
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
- Interpret by hand and write a program to parse a stream with a combination of headers and end-of-data delimiters
- Identify message boundaries in a stream by parsing the messages.
The Internet Stack
- Design an application network protocol
- 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
Week 3
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.
Network Protocols
- Define Network Protocol
- Describe the similarity between human and computer protocols
Application Layer -- HTTP
- Read and interpret the HTTP standard
- Explain the difference between a persistent connection and pipelining for HTTP.
- Explain how binary data is encoded in HTTP
- Describe the HTTP request line
- Describe 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 Host, Date, Last-Modified,
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 body is delimited with and without chunking
- Explain the role of chunking in an HTTP transmission
- Interpret raw HTTP protocol transmissions using Content-Length and chunking for the body.
- Properly implement chunking and determine when the end of the stream has been reached.
Week 4
Application Layer -- DNS
- Describe the purpose of the DNS protocol
- Describe the role of load distribution in the DNS protocol
- Describe the information contained in DNS A and MX 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
Week 5
Unicode
- Describe the difference between a character and a byte
- Describe the differences between the bytes and str types in Python
- Convert unicode code-points (characters) to utf-8 encoding by hand
- Convert between utf-8 and code-point encodings in Python
HTTP character encodings
- Convert a string to the percent-hex encoding used by URLs
- List the characters not percent-hex encoded and explain why they do not need to be encoded
- Explain how the character set can be specified for the body in HTTP
Week 6
Application Layer -- E-mail
- Describe the roles of the SMTP, IMAP, and POP3 email protocols
- Describe the operation of the SMTP protocol
- Describe the format of Internet Messages (email) headers and body
- Describe the operation of the IMAP protocol at a high level
- Describe how character sets are encoded in 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
Week 7
Transport Layer -- TCP
- Interpret the TCP header layout chart
- 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.
- Explain how the sequence and acknowledgement numbers are calculated
- Explain how the receive window is calculated
Security
- Define symmetric-key encryption
- Define public-key (asymmetric-key) encryption
- Describe situations where public-key cryptography is useful
- Describe situations where symmetric-key cryptography is useful
- Describe the function of public and private keys
- Explain public-key encryption using a physical key analogy
- Explain public-key encryption using functional notation
- Explain symmetric-key encryption using functional notation
RSA
- Describe how exponentiation works for some numbers in the encryption and decryption equations for the simple RSA used in class
- Implement an insecure version of RSA
- 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.
Week 9
SSL/TLS
- Describe how SSL/TLS uses symmetric- and public-key encryption
- Describe the security challenge of distributing public keys
- Describe how the Public Key Infrastructure solves the problem of authenticating public keys
- Describe some of the key fields of an X.509/RFC-1422 certificate used by SSL/TLS
- Describe public-key signing, key expiration, key revocation, and key chaining
- Describe the essential steps to authenticate a public key
- Describe the current status of key revocation checking in Chrome, Firefox, and Internet Explorer
Week 10
The Network Layer
- Describe the role of the network layer in more detail
- Describe the role of a firewall
Acknowledgement: Some of the binary number outcomes are by Dr. Meier