-
Notifications
You must be signed in to change notification settings - Fork 20
Readings
This page has the reading assignments for the semester.
Search Google (or your favorite search engine) for two different tutorials for Python3 appropriate for your level. If you've never used Python before, or have little programming experience, an introductory tutorial is fine. If you know a lot about programming, maybe search for something intermediate. You should spend no more than one hour on the reading, but you should implement at least one example from the tutorials and run it.
Read the Python documentation for sockets. Most of this is just API stuff that won't help you to get started. But jump down to the bottom and start with the Example section. Implement the example, run it, and then back up and review some of the API documentation to better understand how the program is.
Asyncio has changed a little for 3.7 and I'm not ready for that yet, so please read the 3.6 documentation for his module. There's too much here to read everything. Please focus on "transport and protocols", and especially try out the example of Echo using Protocol class. If you still have some time, look at Futures and Co-routines.
Coroutines will blow your mind if you haven't worked with them before. This will take some time to get used to. Please search for ONE readings-based tutorial and ONE youtube video about this topic. Pay special attention to "async def" and "await" (search for these independently if your search for co-routines doesn't bring it up). If your experience is like mine, you will find that most of the examples for async and await are pretty useless. We'll do a real example in class.
HTTP is everywhere of course. HTTP is the protocol your computer is using to read this right now. Your next assignment will involved sending HTTP messages over the network and implement a basic web server. You will use your browser to connect to it. So for this reading, you need to learn how HTTP messages are created and the basics of how the protocol works. If you search, you'll find there's a lot of stuff, and not all of it is good, so I recommend this one. The first half is the most important. Please pay attention to basic get messages and response.
An HTTP proxy receives an HTTP request at one computer, but forwards it to another. Please read the Wikipedia article and focus on the "connect" method. You don't need to write the code for the proxy yourself, you can get it out of chapter 7 of the Python Crypto book (link coming soon)
A protocol stack (and in networking, a network protocol stack) is a group of protocols that work together. Please read the following two articles:
Layer2 is usually the lowest part of the networking stack that we talk about. Layer 1 is important, but it's more about how the actual radio waves or wire signals are processed. In fact, Ethernet includes some components that are for layer 1. Layer 2 is about how the medium is accessed and used, hence Media Access Control. Please read the following article. It's long, but it's very good.
Technical specification tell someone (usually someone else) how to implement technology (including software) to meet some objective. Often, compatibility is an explicit objective. If not, it is typically implied.
In this class, you will need to create technical specifications that other students can use to create their modules. For the class to be interoperable, the standards must be clear on how the software should work together.
Here is an RFC about creating RFC's! It's a meta RFC!
IPv4 is the "air" the Internet breathes for much of the world and much of the world's internet history. Europe has made more migration to IPv6 than America, but either way, you start by understanding IPv4 first. We will discuss IPv6 later.
- The initial IPv4 RFC (791): https://tools.ietf.org/html/rfc791
- Wikipedia's descriptions are good: https://en.wikipedia.org/wiki/IPv4
For the upcoming quiz on IPv4, be sure to know the following:
- Be able to fill in a blank IPv4 Header diagram as found in the RFC
- Be able to explain how the header will be configured for a fragmented packet. I will give you a data size and an MTU, and you will need to write down the values for the fragment offset field and the MF flag.
TCP provides a "reliable delivery" layer that runs on top of IP. Much of the Internet uses TCP/IP including most HTTP. There are changes in the works for versions of HTTP/2 that run over UDP (an alternative to TCP) that does not provide reliable delivery. But for our purposes, we will stick with TCP.
TCP provides reliable delivery using a transmit-acknowledge protocol with un-acknowledged segments re-transmitted. Please read more about this protocol here:
- The initial RFC 793: https://tools.ietf.org/html/rfc793
- The Wikipedia description: https://en.wikipedia.org/wiki/Transmission_Control_Protocol
For the in-class quiz, be prepared to:
- Fill in a blank header schematic as found in the RFC
- Explain how the TCP connection establishment handshake works, including sequence numbers and ack numbers
- Explain the meaning of:
- Cumulative acknowledgement
- Duplicate cumulative acknowledgement
- Timeout-based retransmission
- Selective acknowledgement
For this reading assignment you will learn to use Google Scholar if you are not already familiar with it. Instead of doing a normal google search, go to http://scholar.google.com. This will bring up a normal search bar. Enter "Network Firewall" and hit enter.
You will now see a results screen with some options. On the left hand side you can select a time frame for results. There are pre-selected choices such as "Since 2019", and "Since 2018" which are useful for finding recent papers. But for our class, we want to go back in time. So, use the blank boxes to select papers before 2000. That is, on the right most box, enter "2000" and hit enter. Now all of your results should be from before that year.
Also, there are a lot of patents about firewalls, which aren't useful. Also along the left hand side are checkboxes to include patents. Uncheck this box to remove them from your search.
Please read ONE article/paper about patents from this set of search results.
ALSO, read the part of the Wikipedia article about firewall history for first and second generation firewalls. https://en.wikipedia.org/wiki/Firewall_(computing)
From Google scholar to find papers about layer-7 firewalls by searching for papers about "l7 firewall" after 2010. Read one paper about this topic.
Also, read the rest of the wikipedia article about the history of firewalls (specifically, third generation). https://en.wikipedia.org/wiki/Firewall_(computing)
Search Google to learn about the relatively new CHACHA algorithm. Specifically, what are the benefits of CHACHA over, say, AES.
Also, review the Python cryptography documentation about symmetric encryption.
Read the wikipedia page: https://en.wikipedia.org/wiki/Public-key_cryptography
Also, review the Python cryptography documentation about asymmetric encryption
IPSec is an authentication and encryption system for IPv4 and IPv6. In fact, IPSec was originally designed for IPv6 and was back ported. There's too much to learn in a single day's lecture, but here are some key readings:
Read this Cisco overview of IPSec here: https://www.cisco.com/c/en/us/td/docs/routers/asr920/configuration/guide/sec_vpn/sec-ipsec-xe-3s-book-920/overview_of_ipsec.pdf
Measurement of improvement of IKEv2 over IKEv1 in simulation: https://waset.org/publications/11377/ikev1-and-ikev2-a-quantitative-analyses
TLS (Transport Layer Security) was originally SSL (Secure Socket Layer). In API's, it is still called SSL (and OpenSSL is obviously still called OpenSSL). The first version was never published. SSLv2 was published by Netscaped, followed by SSLv3 which was converted with few modifications to TLS1.0.
Please read the original: https://www-archive.mozilla.org/projects/security/pki/nss/ssl/draft02.html
Please read the RFC for TLS 1.0: https://www.ietf.org/rfc/rfc2246.txt
Please read through page 15: https://www.sans.org/reading-room/whitepapers/authentication/ssl-tls-hood-34297
TLS 1.0 should not be used, nor should SSL v3 or any earlier version. They are broken! There was also a brief TLS 1.1 version, but almost nobody used it.
Recommended for today's use are TLS versions 1.2 and 1.3. Most of the differences are in the handshake.
Read about the TLS 1.2 handshake: https://tlseminar.github.io/first-few-milliseconds/
Read about TLS 1.3: https://blog.cloudflare.com/rfc-8446-aka-tls-1-3/