Hello, dear friend, you can consult us at any time if you have any questions, add WeChat: zz-x2580
Coursework Weight: 60%
In this coursework, you will develop a number of small networking-based applications. These
are designed to increase your competency in developing socket-based applications, as well as
increasing your familiarity with a number of key technologies and measures. These are in
widespread use, and commonly deployed to evaluate networks and to provide services over
them.
Coursework 1 is split into a number of smaller tasks: ICMP Ping Client, Traceroute Client, Web
Server and Web Proxy. Importantly, the tasks build upon each other; the work you do in Task
1.1 will be fundamental to Task 1.2, and similarly, the work completed in Task 2.1 will greatly
assist you in Task 2.2. Marks will be awarded for meeting certain criteria within each task.
These are outlined in more detail within each task description. You are encouraged to
progress as far as possible with each task. Do note however, that Task 1 and Task 2 are
independent; attempting both of them is advised, even if you do not fully complete each.
Submission and Assessment
The submission for all work completed in this practical is due by the end of Week 12. Please
submit 4 distinct Python scripts, named according to each task. Even though you can reuse
code from earlier tasks in the later tasks, it will simplify the marking procedure if you submit
each solution independently.
During the marking session (scheduled for Week 13), you will be expected to demonstrate
the functionality of each of these scripts. You will mainly be assessed on functionality, but
expect to be able to walk-through and explain your code. As we will also be providing you
with a few small snippets of code (to use in your own solution), you will not be expected to
explain these in great detail. However, a general understanding of how these functions work
will be beneficial to your overall learning and comprehension. There will also be a small
proportion of marks available for a consistent code style and useful commenting. Resilient
code, using try and except statements to catch errors is also preferred, and will be rewarded
accordingly.
Task 1.1: ICMP Ping
The first task is to recreate the ping client discussed in Lecture 3: Delay, Loss & Throughput.
Remember that ping is a tool used to measure delay and loss in computer networks. It does
this by sending messages to another host. Once a message has reached that host, it is sent
back to the sender. By measuring the amount of time taken to receive that response, we can
determine the delay in the network. Similarly, by tracking the responses returned from our
messages, we can determine if any have been lost in the network.
ping traditionally uses Internet Control Message Protocol (ICMP) messages to achieve this
behaviour. More details can be found in RFC777. For this task, we will be sending echo request
messages (with an ICMP type code of 8). These requests are useful to us because on reaching the
client, the client will respond with an echo reply message (with an ICMP type code of 0). By
timing the period of time elapsed between sending the request and receiving the reply, we
can accurately determine the network delay between the two hosts.
Remember, you are recreating ping without the use of external libraries; they are explicitly
prohibited!
Implementation Tips
There are a number of aspects to consider when writing your implementation. Carefully think
about the logic required; use a whiteboard if need be. A ping client sends one ICMP echo
request message at a time and waits until it receives a response. Measuring the time between
sending the message and receiving it will give us the network delay incurred in transit.
Repeating this process provides us with a number of delay measurements over time, showing
any deviation that may occur.
To assist you in your implementation, we have provided skeleton code for this task. This can
be found on the SCC. 203 Moodle page. It contains suggested functions, as well as an overview
of functionality to be implemented by each. These are given as comments and are to be
treated as guidance only. Note that you may have to change the parameters passed to each
function as you advance with the task. The following Python libraries will also be useful to
your implementation:
Note that to run a privileged socket, such as socket.SOCK_RAW, your script must be run with
elevated privileges (such as sudo). Note that an alternative solution using unprivileged
sockets, such as socket.SOCK_DGRAM, is also acceptable.
We have provided you with a checksum function (included in the skeleton code) which can
be freely used in your solutions without penalty. It is important that when passing a packet
to this function, the checksum field must contain a dummy value of 0. Once the checksum has
been calculated, it can be immediately inserted in the packet to send.