CMPT 471: ASSIGNMENT 3
YOU MAY WORK IN GROUPS OF 1-3 STUDENTS FOR THIS ASSIGNMENT
PROBLEM 1: 60 points
Submit the code for your client and your server to the course management system. You may use C or C++ to develop the server and clients, but you MUST use the C socket library (not a C++ socket library). Your code must run in the CSIL LINUX environment.
60 points for a dual stack TCP file transfer server (instance server ) (32 points) and client (28 points).
o It is much better to submit a consistently working code that satisfies some requirements than a partially working (and / or unstable) code that sometimes satisfies more requirements. If your code crashes or hangs during one of the tests you will receive a substantial deduction from your grade (~5 points).
If you submit a sequential server instead of an instance server you can receive a deduction of 15 points
If you submit an IPv4 only client and server you can receive a deduction of 25 points.
Write a dual stack TCP file transfer client and a dual stack TCP file transfer server based on the specifications below. A sample C code is provided. You may begin with the sample code provided if you wish. The sample code is an echo client and server (not optimally implemented). The sample server is an instance server that created a process that is a copy of the original server to service each request. Specifications of each client and the server are given below.
For smoother and easier development you may wish to write a client and sequential server for IPv4 only first, then add the support for IPv6, then convert to an instance server.
GENERAL SPECIFICATIONS
1. Your code must be written in C or C++ and must run in the virtual lab LINUX environment
2. You may assume that files to be transferred are in the same folder as the TCP file transfer server.
3. IPv4 requests and IPv6 requests can arrive at the server in any order, you MAY NOT assume that they
alternate.
4. The instance server will create a new copy of itself to process each file transfer. You may create the
copy as a new process OR as a new thread, the sample code produces a new process.
5. If a client request is made using the IPv6 address of the server then the request and the file will be
transferred using IPv6.
6. If a client request is made using the IPv4 address of the server then the request and the file will be
transferred using IPv4.
7. Your file transfer server should be able to respond to both IPv4 and IPv6 requests. It should respond
to requests from IPv4 and IPv6 clients sequentially (in any order) or, for the instance server,
concurrently (at the same time) without restarting the server.
8. Your TCP client and server should use an internal buffer with a size that is specified as a command
line argument. The size of the buffer will be the maximum size of the block of data that can be carried in a single TCP segment. The size of the buffer must be the same in the clients and the server. This buffer will be referred to as the send/receive buffer. This is NOT the sliding window buffer.
9. Your client should take as command line arguments the server IP address and port number, the client IP address, the filename of the requested file and the size of the send/receive buffer in that order as command line arguments,
10. Your servers should take as command line arguments the server IPv4 port number, the sever IPv6 port number and the size of send/receive buffer. Arguments should be in the order mentioned in the previous sentence.
TCP file transfer client specifications:
Constructs a message to send to the file transfer server that will indicate the file that should be transferred.
If the command line arguments for the IP address of the server is an IPv4 address creates an IPv4 socket, otherwise creates an IPv6 socket.
Sets the MTU of the new socket (from buffer size)
Connects to the server
Sends the constructed message to the file transfer server.
If the packet contains the error message “COULD NOT OPEN REQUESTED FILE”
o Clean up and terminate the client
Otherwise the packet will contain the message “FILE SIZE IS xxxxx bytes” where xxxx is the size
of the file in bytes.
o Extract and save the number of bytes
o Open a file with the same name as the file requested on the client host (in the same folder as
the client is running)
o If the file cannot be opened print the error message “COULD NOT OPEN OUTPUT FILE”,
clean up and terminate the client. Until all data in the file has been received.
o A packet of data is received
o The data is removed from the packet and written to the file on the client. o The socket waits to read the next packet that arrives.
Duplicate data should not be added to the file
After execution of the client this file on the client host should be identical to the file on the server host.
File transfer server specifications:
1. The server should create an IPv4 TCP socket and an IPv6 TCP socket.
2. The server should use the values in the command line arguments to bind the IPv4 and IPv6 sockets to
the correct port and IP address.
3. The server should convert the IPv4 and IPv6 sockets to listening sockets.
4. The instance server should spawn a copy of itself to manage each TCP connection request.
5. Each copy should be a separate process or a separate thread.
6. Each copy of the TCP echo server should
a. Accept a connection request.
i. If the connection request is for the IPv4 port connect to the IPv4 socket
ii. If the connection request is for the IPv6 port connect to the IPv6 socket
b. Close the listening sockets
c. Receive the request for the file to transfer.
d. Extract the filename from the request and attempt to open the file
e. Should send a message to the client
1. If the file could not be found or not be opened the message should be
“COULD NOT OPEN REQUESTED FILE”
2. If the file is open and ready to send the message should be
“FILE SIZE IS xxxxx bytes”.
f. If the file cannot be found or cannot be opened then clean up and terminate the copy of the
server.
g. Send the contents of the file one segment at a time. Wait approximately 1 second between
sending successive segments.
h. Close the file
i. Terminate the copy of the server
Default values:
For both the client and the servers the IPv4 port number should default to 33455 if no port number is given. And the IPv6 port number should default to 33446
For both the client and the server the IP address should default to the localhost address
For both the client and the servers the send receive buffer size should default to 1440 for IPv4 and
1280 for IPv6 if no size is given.
The default filename will be fileToTransfer
If no arguments are given your clients and server should print a message indicating the command
line inputs/options for running the program.
Test your clients and server to assure that they function correctly both when running on the same machine (loopback) and when running on different machines. Use the dual stack network (lab1-06 to lab1-010) for testing.
PROBLEM 2 (30 points):
Choose one host on each of the four networks in the virtual lab. Open a Wireshark window on each of these hosts to capture ICMPv6 datagrams. Next, select one additional host on net 17 (host A) and one additional host on net 18 (host B). Ping each of the global IPV6 address of host B from host A. Next, use host B to ping each of the IPv6 addresses of host A. that begin with fdd0. Capture at least 2 echo request echo reply pairs for each address pinged. Save each of your capture files for analysis and submission.
Since IPv6 is being introduced into the internet gradually and must operate in the internet along with IPv4 there are a number of transition strategies. One of these is to use tunneling to enable IPv6 traffic to pass through IPv4 only networks. Several types of tunneling are available.
a) [10 points] Examine the /etc/network/interfaces file on router december. Briefly explain what each line that effects eth2 in the file does.
b) [8 points] Which lines in the /etc/network/interfaces file are used to support 6in4 tunneling? Show the lines below for the hosts at both ends of the tunnel. What IP addresses are used for the ends of the tunnel? Why is the MTU of 1460 chosen for the packets travelling through the tunnel?
c) [6 points] Examine the IPv4 datagrams carrying echo requests and replies through net 16. Briefly discuss what you would expect a 6in4 encapsulated packet to look like and use your captured datagrams to help you illustrate your explanation. You must site evidence from your capture file.
d) [5 points] Packets destined for which networks travel through the tunnel through network 16 (an IPv4 only network).
PROBLEM 3: (10 points)
Consider computation of a TCP checksum. Assume that although the checksum field in the segment has not been set to zero, the result of computing the checksum is zero. What can you conclude?