CIS 320: Computer Networking, Spring 2022
This is an introductory course to computer networking. It is recommended that you have taken CIS 270 Computer Hardware. In this course we will cover the foundations of computer networks and computer communication including network architecture, hardware, and software protocols. The class will involve in-class laboratory style instruction, as well as lectures, short programming assignments, and two exams (midterm and final).
- Severance, “Introduction to Networking”
. This freely available book provides the best networking introduction I have found.
- Kurose and Ross, “Computer Networking: A Top Down Approach” 7th or 8th edition. The 7th edition is the latest version for which a hard copy is available for purchase. The 8th edition, while more recent, is only available for rental. The 7th edition has both a domestic and international version, either is fine (the international edition, while cheaper, appears to not have some material on network security.) If you pick up an older edition, that will probably be fine too, I can work with you determine how the page numbers may have changed or if there is anything crucial that is missing.
This free network analyzer is an excellent tool for not only learning, but also
diagnosing network related problems. It acts as a network sniffer allowing
you to see all packets that the network card(s)/interface(s) see, with powerful filtering capabilities.
In addition to Google cloud compute engine, we will be using one or more of the following tools to create virtual machines to learn networking principles.
- Google Cloud - each student will receive $50 credit to run virtual machines via the compute engine console.
- VirtualBox - This is an excellent desktop VM tool; M1-based mac processors are not supported though.
- QEMU - not only a virtualizer, but also an emulator
Network Application Programming Languages.
While this class is not a class in computer programming, writing small networking programs is a very effective way to learn several principles. There are a lot of good languages for network application development, the best language often depends on what you are specifically doing.
For educational purposes (and for rapid development more generally, Python is a great language.
Python has limitations regarding multithreading and speed, which makes C an excellent language to pair with Python in your first programming languages toolbox.
We will be writing small network applications in both Python and C.
Windows powershell, linux bash, and macos terminal are all shells or command line interpreters.
(Why is it called a shell? I heard it is analogising the operating system with a nut, i.e. the kernel is inside, the shell is on the outside.)
Many native shell commands (which are usually programs), are useful for the many aspects of networking.
- Physical data transfer
- Network models/architectures
- Client/Server applications
- Interface with Transport services
- Interface with Network Layer
Laboratory Activities (tentative)
- VM intro
- Wireshark intro
- shell intro
- ping, ifconfig/ipconfig, DNS
- Ethernet, switch, hub, wifi
- client/server UDP
- client/server TCP