首页
编程语言
数据库
网络开发
Algorithm算法
移动开发
系统相关
金融统计
人工智能
其他
首页
>
> 详细
讲解COMP3331、辅导Networks、C++/Java/Python程序语言调试 解析Java程序|辅导Python编程
COMP3331/9331 Computer Networks and Applications
Assignment for Term 1, 2020
Individual Assignment
Due: 5pm, 21 April 2020
Implementation of Peer-to-Peer Network using Distributed Hash Table
[Updated Version: Released on 17 March 2020]
NOTE: There will be no further versions of the assignment specs released. From now on, any
updates or clarifications will be posted on the Assignment Forum in WebCMS. You must keep
an eye on this forum and use it for all discussions regarding this assignment.
Goal and Learning Objectives
The goal of this assignment is to gain hands-on experience in implementing the concept of peer-topeer
(P2P) networks. Instead of connecting geographically distributed peers over the Internet, the
scope of the assignment is confined to a single operating system with sockets or processes acting as
independent peers.
On completion of this assignment, students will:
1. Learn techniques for implementing peer-to-peer networks
2. Gain experience in implementing distributed hash tables (DHTs), the bedrocks for many
distributed systems
3. Master socket programming
Background on P2P Networks and DHT
Week 3 lecture covers the necessary background on P2P networks. The lecture notes are
supplemented by relevant pages from the 6th edition of the textbook as well as a scientific article,
called CHORD, which provide more detailed coverage of DHT. You will implement the methods
described in these documents.
Assignment Specifications
You will implement the following five P2P services:
1. Data insertion: An external entity can request any peer to store a new data record into the
distributed database implemented as the DHT.
2. Data retrieval: An external entity can request any peer to retrieve a data record from the
DHT.
3. Peer joining: A new peer can approach any of the existing peers to join the DHT.
4. Peer departure (graceful): A peer can gracefully leave the DHT by announcing its
departure to other relevant peers before shutting down.
5. Peer departure (abrupt): Peers can depart abruptly, e.g., by “killing” a peer process using
CTRL-C command.
For insertion, retrieval, or joining services, you are required to display the route taken along the
circular DHT to complete the service. The route is simply defined as the sequence of peers traversed
from the originating peer to the final one.
Following guidelines apply for implementing these services:
• A peer is implemented as a process and represented as an xterm, which can be used as an
interface to approach the peer. The xterm can also be used for the peer to display any
internal messages.
• The DHT identity of a peer is drawn from the range [0,255]. This means that technically, the
DHT can support a maximum of 256 peers to join the network. For tractability, however,
actual testing will be conducted with a small number of peers.
• Data records are files stored in the same directory where the assignment codes are stored.
• Filenames are four-digit numbers such as 0000, 0159, 1890, etc. Filenames such as a912 and
32134 are invalid because the former contains a non-numeral character and the latter does
not consist of exactly 4 numerals
• Hash function used to produce the key is given as modulus(filename/256), which results in a
key space of [0,255] matching the DHT identity space. For example, the hash of file 2012 is
220.
• A file producing a hash of n is stored in the peer that is the closest successor of n in the
circular DHT.
You should use client-server socket programming paradigm to implement all communications
between the peers. For example, you can choose specific unique port numbers for each peer to listen
for communications, which should be known by all peers. You can use TCP sockets for reliable
transfer of data during data insertion and delivery and UDP sockets for regular status checking (e.g.,
regular pinging) between predecessor and successor peers. The Appendix at the end of this document
provides a more detailed guideline and tips for implementing the assignment specs.
What to submit and how to submit
You will submit the following:
1. Your code files, the main file as well as any header/helper files, along with a readme file
explaining how to run your code. You can choose from C, Java, or Python to implement your
code. If you are using C, you MUST submit a makefile/script along with your code. If you
use Python, you must indicate the Python version in your readme file. You must make sure
that the submitted code compiles and run on CSE Linux servers, because the markers will test
your code there. Your assignment cannot be marked if it does not work in CSE servers and
will be treated as a failure.
2. In addition to your code files, you must also submit a PDF report file not exceeding 3 pages
in total. In the report, you should give a description of how your system works, possible
improvements and extensions to your program/code that could be made in the future if you
had time and indicate how you could realise them. If your program does not work under any
particular circumstances, please report this too. Also indicate any segments of code that you
have borrowed from the Web or other sources.
You can submit your assignment files using the give command in an xterm from any CSE machine.
Make sure you are in the same directory as your code and report, then execute the following:
1. Type tar -cvf assign.tar filenames (e.g. tar -cvf assign.tar *.java report.pdf) [NOTE: The system
will only accept “assign.tar” submission name. All other names will be rejected.]
2. When you are ready to submit, at the bash prompt type 3331
3. Next, type: give cs3331 assignment assign.tar (You should receive a message stating the result of
your submission).
IMPORTANT: You can submit multiple times before the deadline. A later submission,
however, will override the earlier submission, so make sure you submit the correct file. Do not
leave until the last moment to submit, as there may be technical, or communications error and
you will not have time to rectify it.
Late submission penalty
Late submissions will be accepted but will be penalised at the rate of 10% per day late. For example,
a student receiving an original (without penalty) mark of 18/20 but submitting 2 days late, will receive
a final mark (after penalty is applied) of 18x0.8 = 14.4. No submissions will be accepted after 5pm
28th of April 2020.
Plagiarism
You are to write all of the code for this assignment yourself. All source codes are subject to strict
checks for plagiarism, via highly sophisticated plagiarism detection software. These checks may
include comparison with available code from the Internet and assignments from previous semesters.
In addition, each submission will be checked against all other submissions of the current term. Do
not post this assignment on forums where you can pay programmers to write code for you. We will
be monitoring such forums. We are aware that a lot of learning takes place in student conversations,
and do not wish to discourage those. However, it is important, for both those helping others and those
being helped, not to provide/accept any programming language code in writing, as this is apt to be
used exactly as is, and lead to plagiarism penalties for both the supplier and the copier of the codes.
Write something on a piece of paper, by all means, but tear it up/take it away when the discussion is
over. It is OK to borrow bits and pieces of code from sample socket code out on the Web and in
books. You MUST however acknowledge the source of any borrowed code. This means providing a
reference to a book or a URL when the code appears (as comments). Also indicate in your report the
portions of your code that were borrowed. Explain any modifications you have made (if any) to the
borrowed code. If detected, the penalty for plagiarism can be a ZERO mark for the assignment as
well as further measures related to student conduct.
APPENDIX – Detailed Guideline and Implementation Tips
In this appendix, we provide more details and tips for implementing the required peer-to-peer
network. We will use Figure 1 as reference for the steps described below.
Step 1 - Initialization
This step shows how a set-up a script that can open 7 xterm windows to start the 7 peers shown in
Figure 1.
Xterm -hold -title “Peer 2” -e “java p2p init 2 4 5 30” &
Xterm -hold -title “Peer 4” -e “java p2p init 4 5 8 30” &
Xterm -hold -title “Peer 5” -e “java p2p init 5 8 9 30” &
Xterm -hold -title “Peer 8” -e “java p2p init 8 9 14 30” &
Xterm -hold -title “Peer 9” -e “java p2p init 9 14 19 30” &
Xterm -hold -title “Peer 14” -e “java p2p init 14 19 2 30” &
Xterm -hold -title “Peer 19” -e “java p2p init 19 2 4 30” &
In order to understand the input arguments, let us look at the first line more closely:
java p2p init 2 4 5 30
java p2p
TYPE - Type of run
init - we use when we initialize the network,
join -use when new peer is joining to existing network (we’ll discuss this more later)
PEER - Peer ID
FIRST_SUCCESSOR - Id of first successor
SECOND_SUCCESSOR -Id of second successor
PING_INTERVAL (seconds) - We’ll discuss this shortly
We can identify port number of each by 12000+i (i = peer ID), for example.
As an instance,
Xterm -hold -title “Peer 1” -e “java p2p init 2 4 5 30”
Start peer 1 at port 12002
Peer 1 can find first successor on port 12004 and second successor on port 12005.
Step 2 - Ping Successors
Soon after initialization, each peer pings its 2 successors to check their existence. As an instance,
Peer 2 pings Peer 4 & 5 to verify whether they are dead or alive. Xterm needs to display the following
messages:
Peer 2
> Ping requests sent to Peers 4 and 5
Peer 4
> Ping request message received from Peer 2
Peer 5
> Ping request message received from Peer 2
If Peer 4 and 5 still alive:
Peer2
> Ping response received from Peer 4
> Ping response received from Peer 5
Then after every Ping Interval (e.g., every 10 seconds) each peer needs to send ping messages to
each successor to verify their existence. Use UDP for pinging.
NOTE: It is important to note that the messages displayed in the terminal should differentiate
between ping request and ping response messages. You will need to decide on how often you send
the ping messages. You should not send them too often, otherwise you may overwhelm the computer.
However, please do not make the evaluator/marker wait for more than 60 seconds before it shows
the output. Otherwise it will be assumed that the program does not work.
Step 3 - Peer Joining
Assumer Peer 15 is joining to the network. Peer 15 only knows about Peer 4’s details (i.e., the ID of
Peer 4). Then Peer 15 can start from a new xterm window by executing:
Java p2p join 15 4 30
Java p2p
Correct position of Peer 15 is between Peer 14 and Peer 19. Hence peers 4,5,8, and 9 forward the
request message to its successors over TCP. When Peer 14 receives a forwarded message from Peer
9, it will contact Peer 15 over TCP and send network join details. Similarly, Peer 14 sends details
about Peer 15 to its first predecessor, Peer 9, via TCP (Peer 14 can learn about its predecessors by
pinging successors in step 2). Finally Peer 15 can join the network by using details from Peer 14.
Expected outputs of each xterm windows are as follows:
Peer 4
> Peer 15 Join request forwarded to my successor
Peer 5
> Peer 15 Join request forwarded to my successor
Peer 8
> Peer 15 Join request forwarded to my successor
Peer 9
> Peer 15 Join request forwarded to my successor
Peer 14
> Peer 15 Join request received
> My new first successor is Peer 15
> My new second successor is Peer 19
Peer 9
> Successor Change request received
> My new first successor is Peer 14
> My new second successor is Peer 15
Peer 15
> Join request has been accepted
> My first successor is Peer 19
> My second successor is Peer 2
Step 4 - Peer Departure (Graceful)
Here, a peer informs its predecessors before it departs from the network. The peer which is going to
depart, will enter “Quit” on its xterm terminal. For an evaluation of your assignment, let us assume
Peer 9 wants to depart gracefully. Peer 8 and Peer 5 are notified by Peer 9 about its departure. Peer
9 sends details of its successors to Peer 14 and Peer 19 (Peer 9 can learn about its predecessors by
pinging successors in step 2). All this information is sent over TCP. Finally, Peer 8 and 5 update their
successors.
This is the network after Peer 9’s departure:
Expected outputs of each xterm windows are as follows:
Peer 9
> Quit
Peer 8
> Peer 9 will depart from the network
> My new first successor is Peer 14
> My new second successor is Peer 19
Peer 5
> Peer 9 will depart from the network
> My new first successor is Peer 8
> My new second successor is Peer 9
Step 5 - Peer Departure (Abrupt)
In this step, we kill one peer by pressing ctrl+c in the terminal. For an evaluation of your program,
let us assume that Peer 14 is killed by pressing ctrl+c in the terminal. Now peer 9 and peer 8
(predecessors of Peer 14) learn that Peer 14 is no longer alive, by pinging successors that we discussed
in step 2. Because we use UDP for ping successors, packets can be technically lost during the
communication. Therefore, peers need to wait at least a few consecutive lost ping-successor messages
before it decides its successor is dead. You need to find the best number of consecutive lost ping
successors messages by doing some experiments (2 or 3 may be OK given that loss is unlikely to
happen within an operating system).
After learning that Peer 14 is no longer alive, Peer 9 sends a message to Peer 19 to get its first
successor. Similarly, Peer 8 sends message to Peer 9 requesting its successors (because when the time
Peer 9 receives message from Peer 8, it may have already updated its successors, then Peer 8 needs
to use the first successor of Peer 9 as its 2nd successor, otherwise needs to use the 2nd successor of
Peer 9 as its 2nd successor)
Expected outputs of each xterm windows:
Peer 9
> Peer 14 is no longer alive
> My new first successor is Peer 19
> My new second successor is Peer 2
Peer 8
> Peer 14 is no longer alive
> My new first successor is Peer 9
> My new second successor is Peer 19
NOTE: Printing messages to the terminal is highly important as the evaluator/marker will mark you
according to the outputs. So, if no output is printed, the evaluator will assume that the file request
was unsuccessful. Please do not make the evaluator wait for more than 60 seconds for your program
to detect a node has been killed.
Step 6 - Data Insertion
In this step, one of the peers in the network is requested to store a file in the network by entering
“Store
” in its xterm. Peers need to find the correct location in the network (correct peer)
to store the file by using the hash function Mod(filename/256). For an example evaluation of your
program, let us consider a file name of 2067. Remainder of 2067 when divided by 256 is 19. Hence
correct location of the file is Peer 19. At the beginning, Peer 8 is asked to store File 2067. Peer 8
knows that it is not the correct location to store hence it forwards the message to its successor.
Likewise, Peer 9 and Peer 14 do the same thing. Finally, Peer 19 accepts to store the file.
Expected outputs of each xterm windows:
Peer 8
> Store 2067
> Store 2067 request forwarded to my successor
Peer 9
> Store 2067 request forwarded to my successor
Peer 14
> Store 2067 request forwarded to my successor
Peer 19
> Store 2067 request accepted
Step 7 - Data Retrieval
In this step, one of the peers in the network requests a file that is stored in the network by entering
“Request
” in its xterm. Peers need to find the correct location in the network (correct
peer) that stores the file by using hash function Mod(filename/256). As an example, let us assume
that Peer 2 requests file 4103, which leads to a remainder of 7. Hence the file is stored in Peer 8. Peer
2 sends a message to its successor using TCP. Peer 4 and Peer 5 forward the request message to their
successors. After Peer 8 receives the file request, it starts a direct TCP connection with Peer 2 and
sends the file.
Initially we have a 4103.pdf file in the program directory. At the end, we have a duplicate file
named received_4103.pdf at the same directory.
Expected output of each xterm windows
Peer 2
> Request 4103
> File request for 4103 has been sent to my successor
Peer 4
> Request for File 4103 has been received, but the file is not stored here
Peer 5
> Request for File 4103 has been received, but the file is not stored here
Peer 8
> File 4103 is stored here
> Sending file 4103 to Peer 2
> The file has been sent
Peer 2
> Peer 8 had File 4103
> Receiving File 4103 from Peer 8
> File 4103 received
------------------------------------------------------------------------------------------------------------------------
Network setup script (init_java.sh & init_python.sh) can be executed using
./init_java.sh
If you cannot execute init_java.sh or init_python.sh, then fix the permissions by executing the
following command in the command line
chmod u+x init_java.sh
End of Assignment Specs [We hope you enjoy this assignment!]
联系我们
QQ:99515681
邮箱:99515681@qq.com
工作时间:8:00-21:00
微信:codinghelp
热点文章
更多
辅导 cs1b spring 2024 tth hw...
2024-04-19
讲解 managing financial risk...
2024-04-19
辅导 cs 0449 – project 5: /...
2024-04-19
辅导 elec 2141 digital circu...
2024-04-19
讲解 csc171 — videogame pro...
2024-04-19
讲解 comp3411 artificial int...
2024-04-19
讲解 stat3061: random proces...
2024-04-19
辅导 accounting 452, spring ...
2024-04-19
辅导 finc5001 foundations in...
2024-04-19
辅导 7ssmm712 – topics in a...
2024-04-19
讲解 com 337 - film studies ...
2024-04-19
辅导 mes202tc - digital vlsi...
2024-04-19
辅导 geography 2041b distanc...
2024-04-19
辅导 ecos3006 international ...
2024-04-19
讲解 fit5225 2024 sm1 creati...
2024-04-19
讲解 cit 593: introduction t...
2024-04-19
讲解 math 4931: take home ex...
2024-04-19
辅导 csci 547|info 533: syst...
2024-04-19
辅导 cs536-s24 intro to pls ...
2024-04-19
讲解 fit5212 - assignment 1辅...
2024-04-19
热点标签
ee5311
imse2113
comp 2322
acct2102
fnd109
int102
is3s664
is6153
data4000
accfin5034
fit5212
cs536-s24
fit5225
ecos3006
mes202tc
finc5001
stat3061
csc171
cs1b
7ssmm712
cpt206
swen90004
cs170
comp3411
bu.450.760
comp5313/comp4313—large
bl5611
kxo206
comp532
elec207
kxo151
hpm 573
dts101tc
cs 2820
cpt108
math2319
dts204tc
qm222
comp2511
ccs599
infs1001
mat2355
eeee4123
25721
ifn647
pols0010
cs 2550
cse340
comp2003j
comp9417
qbus6860
stat0023
csci 1100
cs 61b
cs360
fin 3080
ierg 4080
cs6238
cit 594
finm7406
hw6
elec9713
asb-2522
lit301
mcd4540
geog0030
125.330
biol0006
125.320
cs3334
fit2093
acct1101
110.309
masy1-gc
cs314
elec0048
gds104
mg5637
math5905
fit2096
07
mso3610
eel4837
sehs4515
cpt s 321
asb2522 investment
ma214
co2104
mgmt2015
32516
math32051
econ1012
mark2052
dsci 525
comp3310
econ0019
comp30023
abmf3184
aps106
antc27
finm7401
itp122
tech2300
math3026
cs 211
36318
cao107
fit1047
is2022
comp9024
ics4u
2xc3
en.540.635
4qqmn506
finn3081
phys10362
sta601
ec481e
math5165
csi 2120
el1205
comp7250
ecos3013
beam065
info1113
sehh2042
comp2051
csc325
mne 6130
ai6126
inu1111
ecs150
is61x6
cse115
seng6110
bus265
cpts260
mphy0009
csc306
eco2011
ee3004
st332
idepg001
info6001
cpt106
qbus2820
fins5516
finm7409
fit3152
isom3028
eece 6083
ceg5304
mcd4700
eecs 493
eg25h4
38173
elc5216
infs6071
lubs5996m
7ssmm803
glbh0031
phys1120
comp52715
eeb240
soci3403
math3836
cmns3490
iy5610/4610
cpt304
ac6105
psyc3241
fin570
218.323
lng310
rim3352
bio206
comp3334
ac.f633
asb-3525
cs 1501
cpt408
bust10134
lng206
acfi302
soc100
infr11199
csc1002
comp9334
csci 2122
etf5650
eco202y1y
acct608
apm236
gbsh0007
efim20005
actl5105
elec 292
sdsc4026
ds2500
dts205tc
联系我们
- QQ: 99515681 微信:codinghelp
© 2024
www.7daixie.com
站长地图
程序辅导网!