News and Announcements for CSC424 Communication, Distribution and Security.
Tue 6 Mar:
Project 3 out.
Fri 9 Feb:
Project 2 out.
Thu 25 Jan:
Project 1 out.
Tue 16 Jan:
Semester begins. Welcome!
Syllabus for CSC424 Communication, Distribution and Security.
This is a course in:
The standard communication protocols of computers, including TCP/IP,
and the security concerns consequent to those protocols;
The craft of highly skilled coding in C, following specifications,
and understanding and countering sophisticated attacks against system security.
Readings:
Computer Networks, Fifth Edition: A Systems Approach
(The Morgan Kaufmann Series in Networking) 5th Edition,
Other editions might be acceptable. by Larry L. Peterson (Author), Bruce S. Davie (Author).
((Amazon))
Security Engineering: A Guide to Building Dependable Distributed Systems,
2nd Edition,
by Ross J. Anderson.
((Amazon))
Quizzes: From time to time, to emphasize a concept. Will be due in a short
time frame, and no lateness is allowed.
Projects: A series projects, usually 2 to 3 weeks in length. A grace period
of lateness is allowed. See below.
Project grading: Projects are generally scored on a 0 to 5 scale, with 5 being
reserved for excellent projects.
Grade depends on completeness, correctness, and presentation.
Use of Subversion, Makefiles and file and folder names as requested are a must.
Lateness: Three days grace automatic on projects. One additional point off each week late,
up to four points. No lateness for quizzes.
All work to be done by the last day of class.
Class grading: After normalizations, 60% projects, 40% quizzes.
Computers:
You may be required to run a Ubuntu virtual image on running on Virtual Box (or similar),
on your own computer or computers. For operating systems, this is almost always
required. It can be optional for the networking course.
You will have a csc424 lab account, with the lab machines similar to csc220.
We will make extensive use of subversion, a source code control system, to
distribute your work across machines, and to submit assignments.
Contact:
The TA is Gururaj Shriram, g.shriram@miami.edu
My Office hours: by appointment.
Writing credit:
Writing credit for courses not officially designated as writing
courses is no longer available.
General Requirements:
Projects are programming projects, done in C on Unix.
All reasonable effort shall be made to make your code platform independent.
However, there are differences between platforms, and for the purposes of this class
your code is working if it works on Ubuntu 16.04.01 server version, 32-bit (i386).
You will share and submit your projects using the departmental subversion site,
svn.cs.miami.edu.
You will use Makefiles so that the graders and assistants can build your projects
from source, and are guided through your test suites.
You will given some test suites. The performance of your code on these test suits
define a basic level of correctness.
You will make additional test suites for your code, and your code maybe be tested
on reasonably considered correctness criteria, beyond those implied in the given
test suites. It is expected that you will anticipate these reasonably considered
correctness criteria, and your test suites will address those.
Coding style:
Your name and date must be in comments at the top of all files. I consider this
your promise to me that this is your own work, or you have explained the source of
the code otherwise.
Use only lower-case in filenames, with exceptions for strong historical precedence: Makefile, README.TXT,
maybe a few others. Never distinguish a file by case, and always refer to the file by the chosen case.
Do not declare variables in the middle of a block. Reject this C99 feature.
A variable's scope and lifetime should be a block, end of story. Coding is hard enough.
Do not use Variable Length Arrays (VLA). Reject this C99 feature.
They turn sizeof from a keyword into a function call, sometimes, and you now have run-time type
errors as well as run-time allocation errors. Coding is hard enough without turning your back on the
compiler's assistance in memory layout and type computation.
You can use // style comments.
I'm conflicted on the use of zero-length arrays. Harbison and Steele tells me I'm an outlaw,
but I can't seem to care. Your choice.
Comment what isn't obvious. Comment what confused you when you wrote this code.
Comment assumptions on parameters at the top of the function block.
I prefer writing subroutines more basic first, so I don't need forward declarations. I consider
this a huge hint to debuggers about what depends on what. I recommend not doing forward
declarations unnecessarily.
Use header files. Consider them as declaring your API. What's in the .h file explains
what you intend to be the stable functions and types, as opposed to helper functions that
might change.
Lab Accounts
A lab account as been set up for you, with username abcd424, if abcd is your subversion username.
The lab account has the same initial password as the password to your subversion account. You can
change the password on the lab account, but it won't change it on the subversion account.
You can work on the lab machines either in Ungar 426 or remotely. In general, you will have to
log into lee.cs.miami.edu and from there log into a lab machine.
The lab machines are not directly accessible to the internet. You are requested not to run
you code on lee. It is a small machine but will happily act as a ssh gateway.
From lee, you can log into any of the machines in the lab. Your home directory on every lab
machine is the same. For instance, if you edit a file in your home directory on antietam, those
changes will show up on the same file in shiloh.
Using the public key feature of ssh, if you access the lab from your own computer without
having to type a password. This also allows scp to work without a password, so file copy
between local files and the lab works if it were a local copy. Public key authentication is more
flexible and more secure than password authentication, although it only works from a
trusted machine that stores your private key.
Also, you can set up your .ssh/config file for transparent login from lee to a
lab machine. See the this blog post
to walk you through the setup. You will want to log in to multiple lab machines at the same time, so that you are really truly
running your code over a network of machines.
Ubuntu and Virtual Box
Additional notes of you are required or wish to run an Ubuntu image on your
computer in a virtual machine:
Install Virtual Box, or similar, on your own machine to develop code
locally on your own machine.
Download the ISO file for the latest Ubuntu LTS (Long Term Support).
For the operating systems course, 32-bit server version is a graceful survivor of all the damage
we do to the operating system. For OS, use that version.
For the networking course, you can take the default 64-bit desktop, if you wish the advantages of a desktop.
We are kind citizens and do not abuse our OS in the networking course.
Launch Virtual Box and create a new virtual machine: 2G mem, 32G disk, dynamic
disk allocation, VDI format.
When it boots, it will ask for a disk. Browse to your ISO image (downloaded in step 2 above).
You might select LVM in the panel asking about the installation type.
Insert the Guest Additions from the Devices pull-down menu item, install and reboot.
Once booted again, open the terminal and "sudo apt-get update ; sudo apt-get upgrade"
to bring your system up to date, the reboot. (Do this every so often, particularly if there
are security related updates.)
Install the subversion client with "sudo apt-get install subversion". This is all
I needed to get proj1 to build. The grader suggests "sudo apt-get install build-essential".
I've done this in the past as well, when curses or make is not default installed.
Keep it in mind if some buildtool doesn't seem to be installed.
MAC OSX
Install XCode on your Mac. It is available in the App Store for free.
After installation, take the additional step to install
the command line tools. Last time I did this, it was accomplished using "xcode-select --install"
in a terminal window. However, xcode->open developer tools->more developer tools will
open an Apple Developer login; register and login, and d/l the command line package and
install.
Mac's ship with subversion. I dont' even think you need XCode for that.
Mac's ship with ssh. You can set up your ~/.ssh/config file, and make
public keys, to make it easy to login and scp files.
On a Mac, d/l and install TextWrangler, http://www.barebones.com/products/textwrangler/.
This is my preferred WYSIWYG code editor. It allows you to edit a file remotely through SFTP.
Set this up by including in .ssh/config a Host stanza and public key credentials so
that authentication is automatic. See Nerderati.
Windows
For Windows
local developement, I recommend installing cygwin, https://www.cygwin.com/.
In my experience, Visual Studio
is powerful, but limited by being Microsoft-centric and
lacking a command line development style. Meanwhile, several other important command line tools
are missing from Windows. Install Cygwin and develop in a Unix-like
environment in Windows.