首页
网站开发
桌面应用
管理软件
微信开发
App开发
嵌入式软件
工具软件
数据采集与分析
其他
首页
>
> 详细
辅导CSC424编程语言、讲解program编程、辅导Python,Java程序 辅导R语言编程|调试Matlab程序
项目预算:
开发周期:
发布时间:
要求地区:
CSC424 Computer Networks
ECE 534/634 Communication Networks
Project 2: Simple Transport Protocol
You will design a simple transport protocol that provides reliable datagram service. Your protocol will be
responsible for ensuring that data is delivered in order and without duplicates. Your protocol will be
tested on an emulated unreliable network.
1. Requirements
You will write two programs: a sending program that sends a file across the network, and a receiving
program that receives the file and stores it to local disk. It is recommended that your programs are written
in C on a Linux operating system. You may not use any transport protocol libraries in your project (such
as TCP). You must construct the packets and acknowledgements yourself, and interpret the incoming
packets yourself.
Your programs will achieve the following goals:
The sender reads a local file and uses your protocol to send it.
Transfer the file contents reliably.
The receiver must write the contents it receives into the local directory.
Your sender and receiver must gracefully exit.
Your code must be able to transfer a file with any number of packets dropped, duplicated, and
delayed.
You have to design your own packet format and use UDP as a carrier to transmit packets. Your packet
might include fields for packet type, acknowledgement number, advertised window, data, etc. This part of
the project is entirely up to you.
You have to implement a retransmission protocol to deal with dropped, duplicated, and delayed packets.
You may assume that packets are not corrupted so you do not need to implement any error correction
codes. You must implement at least Stop-and-Wait and Go-Back-N protocols. However, more
sophisticated algorithms (for example, selective repeat) will be given bonus credit. Some desired
properties of your protocol include (but are not limited to):
Fast: Require little time to transfer a file.
Low overhead: Require low data volume to be exchanged over the network, including data bytes,
headers, retransmissions, acknowledgements, etc.
Better performance will result in higher points. Remember that network-facing code should be written
defensively. Your code should check the integrity of every packet received.
2. Your programs
The command line syntax for your sending program is given below. The client program takes command
line argument of the remote IP address and port number, and the name of the file to transmit. The syntax
for launching your sending program is therefore:
sendfile
recv_host (Required) The IP address of the remote host in a.b.c.d format. (use 127.0.0.1 for localhost)
recv_port (Required) The UDP port of the remote host.
filename (Required) The name of the file to send.
Your sending program should print out messages to the console:
When the sender sends a packet for the first time, it should print the following:
[send data] start (length)
where start is the beginning offset of the file sent in the packet, and length is the amount of the
file sent in that packet.
When the sender resends a packet, it should print the following:
[resend data] start (length)
where start is the beginning offset of the file sent in the packet, and length is the amount of the
file sent in that packet.
When the sender receives an acknowledgement, it should print the following:
[recv ack] ackno
where ackno is the acknowledge number
You may also print messages of your own depending on your design, but make it concise and
readable.
The command line syntax for your receiving program is given below. The server program takes command
line argument of the port number. The syntax for launching your receiving program is therefore:
recvfile
recv_port (Required) The UDP port to listen on.
Your receiving program should print out messages to the console:
When the receiver receives a valid data packet, it should print:
[recv data] start (length) status
where status is one of ACCEPTED or IGNORED
You may also print messages of your own depending on your design, but make it concise and
readable.
Both the sender and the receiver should print out a message after completion of file transfer, and then exit:
[completed]
3. Testing your code
A. Unreliable network
In order for you to test your code, you should emulate an unreliable network. To fulfill this task, you will
use netem, which is a simple network packet loss emulation tool in Linux. In order to use netem, you need
to install the iproute package through the Ubuntu package manager or
sudo apt-get install iproute
Once iproute is installed you can use the binary “tc” to delay traffic. Only root can modify a network
interface so either su to root or use sudo. The following command line gives a simple example in which a
constant 100ms delay is added to outgoing packets of the external interface, eth0. Understand that netem
only adds the delay to packets leaving the interface.
sudo tc qdisk add dev eth0 root netem delay 100ms
To disable the netem delay products on the interface we can delete the rules.
sudo tc qdisk del dev eth0 root netem
Your sending and receiving programs probably will run and be tested on a single machine. In this case,
you can use lo (Local Loopback) as your device instead of eth0:
sudo tc qdisk add dev lo root netem delay 100ms
A detailed description of the usage of netem can be found at:
http://www.linuxfoundation.org/collaborate/workgroups/networking/netem
You will need to try different configurations of the network by changing:
Delay distribution
Packet loss rate
Packet duplication rate
Packet re-ordering rate
For example,
sudo tc qdisk add dev eth0 root netem delay 100ms 20ms 25% loss 0.5% duplicate 1% reorder 25% 50%
This configuration says:
Delay is 100ms ± 20ms with the next random element depending 25% on the last one.
Packet loss rate is 0.5%
Packet duplicate rate is 1%
25% of packets (with a correlation of 50%) will get sent immediately, others will be delayed.
B. Large files
Your program needs to handle file of any size. To create a dummy file in Linux (Ubuntu), use the
command line:
base64 /dev/urandom | head -c 10000000 > file.txt
This creates a file with name file.txt size of 10MB. You can use different configurations to test other file
sizes.
4. Report
You will write a report for this project. There is no strict format of this report but below are the essential
parts:
1. How you design the packets and your protocol.
2. A screen shot of the console in a successful run of your programs.
3. Try different configurations of netem and report the results.
4. Evaluate the efficiency of your protocol (e.g. throughput and delay).
5. Perform a comparative study of Stop-and-Wait and Go-Back-N.
There are other aspects that you can explore and report, which are up to you. More comprehensive study
will receive more credits.
* Do not paste a lot of codes in the report. Focus on the design and analysis. Your codes will be submitted
separately.
5. Submitting your project
You should submit your project in Blackboard. The submission includes: a project report and your source
codes. Please put everything in a zip/rar file, name it “FirstName_LastName_Project2.zip” or
“FirstName_LastName_Project2.rar”
6. Advice
Start by getting your code working without any packet manipulation. You can check whether your code
successfully transmits the file by using the diff program in Linux. Test your code with each type of
manipulation separately and then in combination. Note that you will likely have to introduce multiple
reliability mechanisms (timeouts, retransmits, etc) in order to handle all of the possible errors.
Start early! Do not wait until the last few days.
软件开发、广告设计客服
QQ:99515681
邮箱:99515681@qq.com
工作时间:8:00-23:00
微信:codinghelp
热点项目
更多
代写math 1151, autumn 2024 w...
2024-11-14
代做comp4336/9336 mobile dat...
2024-11-14
代做eesa01 lab 2: weather an...
2024-11-14
代写comp1521 - 24t3 assignme...
2024-11-14
代写nbs8020 - dissertation s...
2024-11-14
代做fin b377f technical anal...
2024-11-14
代做ceic6714 mini design pro...
2024-11-14
代做introduction to computer...
2024-11-14
代做cs 353, fall 2024 introd...
2024-11-14
代做phy254 problem set #3 fa...
2024-11-14
代写n1569 financial risk man...
2024-11-14
代写csci-ua.0202 lab 3: enco...
2024-11-14
代写econ2226: chinese econom...
2024-11-14
热点标签
mktg2509
csci 2600
38170
lng302
csse3010
phas3226
77938
arch1162
engn4536/engn6536
acx5903
comp151101
phl245
cse12
comp9312
stat3016/6016
phas0038
comp2140
6qqmb312
xjco3011
rest0005
ematm0051
5qqmn219
lubs5062m
eee8155
cege0100
eap033
artd1109
mat246
etc3430
ecmm462
mis102
inft6800
ddes9903
comp6521
comp9517
comp3331/9331
comp4337
comp6008
comp9414
bu.231.790.81
man00150m
csb352h
math1041
eengm4100
isys1002
08
6057cem
mktg3504
mthm036
mtrx1701
mth3241
eeee3086
cmp-7038b
cmp-7000a
ints4010
econ2151
infs5710
fins5516
fin3309
fins5510
gsoe9340
math2007
math2036
soee5010
mark3088
infs3605
elec9714
comp2271
ma214
comp2211
infs3604
600426
sit254
acct3091
bbt405
msin0116
com107/com113
mark5826
sit120
comp9021
eco2101
eeen40700
cs253
ece3114
ecmm447
chns3000
math377
itd102
comp9444
comp(2041|9044)
econ0060
econ7230
mgt001371
ecs-323
cs6250
mgdi60012
mdia2012
comm221001
comm5000
ma1008
engl642
econ241
com333
math367
mis201
nbs-7041x
meek16104
econ2003
comm1190
mbas902
comp-1027
dpst1091
comp7315
eppd1033
m06
ee3025
msci231
bb113/bbs1063
fc709
comp3425
comp9417
econ42915
cb9101
math1102e
chme0017
fc307
mkt60104
5522usst
litr1-uc6201.200
ee1102
cosc2803
math39512
omp9727
int2067/int5051
bsb151
mgt253
fc021
babs2202
mis2002s
phya21
18-213
cege0012
mdia1002
math38032
mech5125
07
cisc102
mgx3110
cs240
11175
fin3020s
eco3420
ictten622
comp9727
cpt111
de114102d
mgm320h5s
bafi1019
math21112
efim20036
mn-3503
fins5568
110.807
bcpm000028
info6030
bma0092
bcpm0054
math20212
ce335
cs365
cenv6141
ftec5580
math2010
ec3450
comm1170
ecmt1010
csci-ua.0480-003
econ12-200
ib3960
ectb60h3f
cs247—assignment
tk3163
ics3u
ib3j80
comp20008
comp9334
eppd1063
acct2343
cct109
isys1055/3412
math350-real
math2014
eec180
stat141b
econ2101
msinm014/msing014/msing014b
fit2004
comp643
bu1002
cm2030
联系我们
- QQ: 9951568
© 2021
www.rj363.com
软件定制开发网!