pradykaushik / Content-Addressable-Networks-P2P

Implementation of the Content Addressable Networks (P2P) protocol in Java using Sockets.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Content Addressable Networks

This is the implementation of the research paper attached -- Content-Addressable-Network.pdf. I have considered the nodes to be positioned on a 2-Dimensional plane instead of a torus, the latter being the one mentioned in the paper.

Name: Pradyumna Kaushik

Email: pkaushi1@binghamton.edu

Instructions to compile

Run the following command

make

Bootstrap node

Please go to src/com/can/nodes/Peer.java and update BOOTSTRAP_HOSTNAME to correspond to the hostname of your bootstrap.

Start the bootstrap node

java -cp content-addressable-network.jar com.can.nodes.Peer

The Bootstrap node should now be up and running. Now go to any other machine on the network and run the above command

Commands

The following are the commands that are supported by this implementation of the content addressable network.

Build the network of machines

  • Type JOIN and press enter on all the machines except the bootstrap node (it is already part of the network).
  • The JOIN success message is displayed on all the nodes.
  • Now all the nodes have joined the network and we can start performing operations.

INSERT and SEARCH

  • Inserting a keyword can be done from any peer. The following is the command for INSERT,

    INSERT <keyword>
    

    The INSERT success message, along with information of the peer in which the keyword was inserted, is displayed. If the INSERT was not successful then a FAILURE message is displayed.

  • We can now search for the keyword inserted from any of the peers. The following is the command for SEARCH,

    SEARCH <keyword>
    

    The SEARCH success message, along with the information of the peer from which the keyword was retrieved, is displayed. The route taken by the SEARCH request is also displayed. If the SEARCH failed (file not present) then a FAILURE message is displayed.

LEAVE

  • A node can decide to leave the network. Type the following command for the node to leave the network. A success message corresponding to the LEAVE operation is displayed.

    LEAVE
    

    The node can now rejoin the network by typing 'JOIN'.

Sample test runs and corresponding outputs

  • Running the content addressable network on the following nodes,

    • <hostname of bootstrap node> (bootstrap node)
    • <hostname of server 1>
    • <hostname of server 2>
    • <hostname of server 3>
  • Initial display when the program is run on bootstrap node

    Bootstrap loaded and Initialized.
      Please provide a command. The possible commands are :
      VIEW -- VIEW [hostname]
      INSERT -- INSERT filename
      SEARCH -- SEARCH filename
    
  • Initial display when the program is run on the other nodes (hostname_server2, hostname_server3 and hostname_server4)

    Please provide a command. The possible commands are :
      JOIN -- JOIN
      VIEW -- VIEW [hostname]
    
  • Joining from hostname_server2. Display of JOIN success is as shown below,

    JOIN SUCCESSUL!
      IP of New Peer : hostname_server2/IP_server2
      Hostname of New Peer : hostname_server2
      Zone of New Peer : (5.0-10.0,0.0-10.0)
    
  • Viewing from hostname_bootstrap_node (VIEW)(this will display information of all the peers in the network)

    Hostname : hostname_server2
      ------------------------------------------------------------------
      Ip Address : IP_server2
      Zone : (5.0-10.0,0.0-10.0)
      Temp Zone : null
      Files : []
      Temp files : []
      Neighbours : hostname_bootstrap_node,
      ------------------------------------------------------------------
      Hostname : hostname_bootstrap_node
      ------------------------------------------------------------------
      Ip Address : IP_bootstrap_node
      Zone : (0.0-5.0,0.0-10.0)
      Temp Zone : null
      Files : []
      Temp files : []
      Neighbours : hostname_server2,
      ------------------------------------------------------------------
    
  • Joining from hostname_server3. Display of JOIN success is as shown below,

    JOIN SUCCESSFUL!
    IP of New Peer : hostname_server3/IP_server3
    Hostname of New Peer : hostname_server3
    Zone of New Peer : (5.0-10.0,0.0-5.0)
    
  • Viewing from hostname_bootstrap_node (VIEW)(this will display information of all the peers in the network)

    Hostname : hostname_server2
    ------------------------------------------------------------------
    Ip Address : IP_server2
    Zone : (5.0-10.0,5.0-10.0)
    Temp Zone : null
    Files : []
    Temp files : []
    Neighbours : hostname_server3, hostname_bootstrap_node,
    ------------------------------------------------------------------
    Hostname : hostname_server3
    ------------------------------------------------------------------
    Ip Address : IP_server3
    Zone : (5.0-10.0,0.0-5.0)
    Temp Zone : null
    Files : []
    Temp files : []
    Neighbours : hostname_server2, hostname_bootstrap_node,
    ------------------------------------------------------------------
    Hostname : hostname_bootstrap_node
    ------------------------------------------------------------------
    Ip Address : IP_bootstrap_node
    Zone : (0.0-5.0,0.0-10.0)
    Temp Zone : null
    Files : []
    Temp files : []
    Neighbours : hostname_server2, hostname_server3,
    ------------------------------------------------------------------
    
  • Joining from hostname_server4. Display of success is as shown below.

    JOIN SUCCESSUL!
    IP of New Peer : hostname_server4/IP_server4
    Hostname of New Peer : hostname_server4
    Zone of New Peer : (7.5-10.0,5.0-10.0)
    
  • Viewing from hostname_bootstrap_node (VIEW)(this will display information of all the peers in the network)

    Hostname : hostname_server2
    ------------------------------------------------------------------
    Ip Address : IP_server2
    Zone : (5.0-7.5,5.0-10.0)
    Temp Zone : null
    Files : []
    Temp files : []
    Neighbours : hostname_server3, hostname_server4, hostname_bootstrap_node,
    ------------------------------------------------------------------
    Hostname : hostname_server4
    ------------------------------------------------------------------
    Ip Address : IP_server4
    Zone : (7.5-10.0,5.0-10.0)
    Temp Zone : null
    Files : []
    Temp files : []
    Neighbours : hostname_server2, hostname_server3,
    ------------------------------------------------------------------
    Hostname : hostname_server3
    ------------------------------------------------------------------
    Ip Address : IP_server3
    Zone : (5.0-10.0,0.0-5.0)
    Temp Zone : null
    Files : []
    Temp files : []
    Neighbours : hostname_server2, hostname_server4, hostname_bootstrap_node,
    ------------------------------------------------------------------
    Hostname : hostname_bootstrap_node
    ------------------------------------------------------------------
    Ip Address : IP_bootstrap_node
    Zone : (0.0-5.0,0.0-10.0)
    Temp Zone : null
    Files : []
    Temp files : []
    Neighbours : hostname_server2, hostname_server3,
    ------------------------------------------------------------------
    
  • Inserting filename abc.txt at hostname_server2. Display of INSERT success message is as shown below.

    Command : INSERT
    Status : INSERT operation successful.
    Inserted file : abc.txt.
    Peer hostName : hostname_bootstrap_node.
    Peer ipAddress : hostname_bootstrap_node/IP_bootstrap_node
    Affected Peer hostname : hostname_bootstrap_node
    Affected Peer ipAddress : hostname_bootstrap_node/IP_bootstrap_node
    Affected Peer zone : (0.0-5.0,0.0-10.0)
    Route taken : hostname_server2 -> hostname_bootstrap_node
    
  • Searching for file from filename from hostname_server4. Display of SEARCH success message is as shown below.

    Command : SEARCH
    Status : Search successful
    Affected Peer hostname : hostname_bootstrap_node
    Affected Peer ipAddress : hostname_bootstrap_node/IP_bootstrap_node
    Affected Peer zone : (0.0-5.0,0.0-10.0)
    Route taken : hostname_server4 -> hostname_server2 -> hostname_bootstrap_node
    
  • LEAVE request from hostname_server2. Display of LEAVE success message is as shown below.

    Leave Successful
    -----------------
    Hostname of node that left : hostname_server2
    Ip address of node that left : hostname_server2/IP_server2
    
  • Viewing all the peers' information from hostname_server3. The display of information of all the peers is as shown below.

    Hostname : hostname_server4
    ------------------------------------------------------------------
    Ip Address : IP_server4
    Zone : (5.0-10.0,5.0-10.0)
    Temp Zone : null
    Files : []
    Temp files : []
    Neighbours : hostname_server3, hostname_bootstrap_node,
    ------------------------------------------------------------------
    Hostname : hostname_bootstrap_node
    ------------------------------------------------------------------
    Ip Address : IP_bootstrap_node
    Zone : (0.0-5.0,0.0-10.0)
    Temp Zone : null
    Files : [abc.txt]
    Temp files : []
    Neighbours : hostname_bootstrap_node, hostname_server3,
    ------------------------------------------------------------------
    Hostname : hostname_server3
    ------------------------------------------------------------------
    Ip Address : IP_server3
    Zone : (5.0-10.0,0.0-5.0)
    Temp Zone : null
    Files : []
    Temp files : []
    Neighbours : hostname_server4, hostname_bootstrap_node,
    

About

Implementation of the Content Addressable Networks (P2P) protocol in Java using Sockets.


Languages

Language:Java 99.8%Language:Makefile 0.2%