Routing Overview
Programming Homework 4
Due by 04/21/2019. Firm deadline
Node B
PING
Node A
PONG
Creating a Gnutella network
A node joins the network with a PING to announce self
IP address, port, number/size of shared files
Receivers
forward the Ping to their neighbors
back-propagate a PONG to announce self, including sender’s IP address
Maintaining a Gnutella network (60 points)
PING neighbors periodically and PONG back
Choose a new neighbor when an existing one disappears
Providing search capability (30 points)
Creates a query (A, S, N, T ), where A is the requesting node, S search string, N unique request ID, T Time-to-Live
Download the file from a node which has the requested files.
Documents (10 points)
OPTION 1: Implement a Gnutella-like system
*
What you need to submit
Design documents
Communication protocols (e.g., packet definition)
Please read the attached “Gnutella protocols” for your reference. You don’t have to implement exactly. It is up to you to design any simplied version, but the system must be able to ping and pong.
You can implement your own protocol (which should be simpler!), but please document in a way that other people can implement their own gnutella node and join your system
Module designs and their pseudocode
Source code
Java preferred, which allow us to run and test your code
If you use C/C++ or other languages, you will be asked to do the demo
Submit through your canvas account
*
The system provides services similar to social networks such as WeChat, Tweeter, and Facebook
A user can join the system
Users can form a group
User can send messages to another user or the users in a group
Unlike existing social networks, your system must be fully distributed
No central server
There may be a number of servers, which may be on and off dynamically
All information (e.g., user accounts, groups, chat records) are stored distributively among the servers
What to submit
Detailed design documents
OPTION 2: Design a P2P-Chat System
IMPORTANT: You need to talk to the instructor for his permission to take this option
*