Instructor Information

Instructor E-Mail Office, Phone, & Office Hours Class Meetings
Professor Xiannong Meng xmeng at bucknell dot edu Dana 212, x7-1214,
M 3-4 p.m., W 8-10 a.m., R 9 a.m. - 10 a.m., F 2-3 p.m.
Lecture: MWF 11:00–11:52 p.m. Dana 132
Lab: T 8:00 – 9:52 a.m. Dana 132

Course Catalog Entry

Principles and design of networked computing systems and application programs. Topics include reliable communications, medium access control, routing, congestion control, and networked applications. Prerequisite: CSCI 315.

Course Description

CSCI 363 is an advanced Computer Science elective at Bucknell. The course focuses on developing an understanding of network design principles, particularly on the software architecture of the protocol stack and the development of protocols.

The primary goal of the course is to understand the design principles of networking software. You should see this course as an opportunity to apply what you've learned in computer science to reason critically about networking technology. A second goal is to learn the details about the existing protocols in use today. We will spend a good portion of our time on this pursuit. It is important for you to learn to read and understand protocol standards so that you can write new implementation or to modify an existing code base.

Expected student work includes lab exercises, programming projects, exams, and active class participation.


Learning Objectives

At the successful completion of the course, students will be able to:


Main textbook:

Main reference books:

Other reference books:

Lab Work

There will be weekly lab exercises. Lab exercises usually involve relatively short programming on a particular topic. Lab assignments are due 11:55 p.m. on the specified due date, typically in a week time. Some lab exercises may take more than two hours to complete. See the lab descriptions for details.

Though discussion is encouraged, lab exercirses are individual work, meaning they have to be completed by each individual student. Specifically lab exercises are collaborative discussion type of work (see Conduct Rules for details.)

Project Assignments

The course will have two projects. The first project will be an application program that follows the client-server model. The second project will be a program that emulates a part of the protocol stack involving packing and unpacking the contents to and from an application, and then deliver and receive the packets at both ends of the network. See the respective project descriptions for details.

The first project is team work. All members must be actively participating the work. Students may choose to work alone. If working as a team, the team must be formed prior the beginning of the project and cannot be changed in the duration of the project. Team member contributions to the project must be documented. See Conduct Rules for details.

The second project is individual work. Similar to all the lab work, while discussions are encouraged, each student must complete the work individually.


There will be two one-hour mid-term exams and a comprehensive final exam. The dates of the two exams are shown in the class schedule. The final exam will be given at the time scheduled by the Registrar's Office. If you miss an exam due to illness or some other unusual circumstances, you will need a written justification for the absence. In the case of a justified absence, make-up exams will be given as long as the student has not communicated with anyone in the class about the exam.

Announced Quizzes

We will have weekly quiz at the beginning of the lab, except for the weeks that we don't have a lab assignment.

Class Participation

All students are expected to attend class and scheduled labs: poor attendance (either in class or lab) will have an adverse affect on your grade. Absences may be excused if you send me email in advance, unless in situations out of your control. I understand that we can get sick, have to travel for interviews, etc. Reasonable absense requests will be granted. However, every four unexcused absences will cause a one third letter reduction in the final grade (that is, if you end up with B+, but have four unexcused absences, your final grade for the course will be B). There are two reasons for this policy. First, I view our classes as shared experiences in a community of learners (all students and the instructor); if you're not there, you are not sharing and we all lose. Second, every student has to take responsibility for their role in the learning process. Being absent for no reason shows that you're not taking this responsibility seriously.

Also, note that you will earn a portion of the grade for participation in the class. This component of your final grade is determined by how invested you are in our class meetings and labs. Ask and answer questions posed by the instructor and your classmates, put ideas out for discussion, and bring up points that you have learned or discovered outside the classroom. The point is for you not to fade into the background; you are expected to be actively engaged in the class.

Extra Credit Work

There will be various pieces of extra-credit work from the project. You are encouraged to work on these problems, but not required. I will use the grades for these extra-credit work as needed at the end of the semester. For example, if your regular grade is on a boundary of a grade level, and you completed good amount of extra-credit work, your grade can be upgraded to the next higher level.


The grade is distributed as follows.

Inclusive Classroom Environment

We all support a inclusive learning environment for better learning. To that end, I am quoting directly from Professor Linda Smolka of the Math Department, which I fully endorse,

Our classroom will be inclusive where everyone will be treated with respect. Learning requires taking risks that often require guessing an answer or an approach to solving a problem. Mistakes are the key moments where learning begins, thoughts in logic are corrected and core memories are formed. Everyone in this course will make mistakes so do not be embarrassed when you are wrong. Class must be interactive to ensure that your thoughts in reason are correct or are being corrected in real time, so please jump into the conversation when you want to make a point or ask a question (including, I'm lost!). I will ask questions during lecture to get you thinking and determine if you are following class. These questions are not rhetorical. You should blurt out your answers!

Communicating With The Instructor

I want to hear your thoughts on how much you're learning in this course. If you find something exciting that we didn't mention in the class, I'd like to hear from you. If you are struggling with the material, please let me know sooner rather than later. Problems which might be resolved somewhat easily when they are just identified can lead to much hardship if left alone for long. Make the best use of our contact time in regular classes and labs. Visit me in my office often.

You should feel safe to give me constructive criticism. Although I will work hard to make this course a good experience for everyone, it wont be really great unless you give me feedback to make adjustments to maximize effectiveness.

I will do my best to help you reach the learning objectives in this course and to help you grow your enthusiasm for studying computer science. If you have previous knowledge of topics in this class and feel that you could use a bigger challenge to motivate your learning, make sure to let me know and we will work together to identify something productive for you to pursue.