代做program、代写TCP Implementation编程
Project 3: TCP Implementation
Introduction
TCP serves many purposes: it provides reliable, in-order delivery of bytes, it makes
sure the sender does not send too fast and overwhelm the receiver (flow control), and
it makes sure the sender does not send too fast and overwhelm the network
(congestion control). It also aims to be fair: when multiple senders share the same
link, they should receive roughly the same proportion of bandwidth. In this project,
you will demonstrate your understanding of the TCP basics by implementing the TCP
protocol.
Be prepared: this is a single-person project, and your skills will be exercised. So start
early and feel more than welcome to ask questions. However, please note that the TAs
are not allowed to debug your code for you during their office hours. They cannot
touch your keyboard, and they will only spend a maximum of 10 minutes reading
your code. This helps them to assist more students effectively. Therefore, it is
recommended that you visit their office hours with specific questions instead of vague
statements like "my code doesn’t work." For debugging, logging or tools like
Wireshark1
can be helpful. There are many ways to do this; be creative.
TCP Recap
TCP is a transport layer protocol that enables different devices to communicate. As a
reminder the basic setup is the following.
You have an initiator (client) and a listener (server). The listener is waiting to receive
a connection from the initiator. After a connection is received, they perform a TCP
handshake to initiate the connection. Afterward, they can read and write to each other.
From the application layer, reads and writes to the socket are buffered before being
sent over the network. This means that multiple reads or writes might be combined
into a single packet or the opposite, that a single read or write to a socket might be
split into many packets.
To establish reliable data transfer, TCP must manage many different variables and
data structures. Here are some examples of the details you’ll need to track.
1 https://www.wireshark.org/
Let’s say we have sockets A and B, and that socket A wants to start sending data to
socket B. A will store the data in a buffer that it will pull from for sending packets.
Socket A will then create packets using data from the buffer and send as many as it is
allowed to send based on the congestion control algorithm used. As Socket B receives
packets, it stores the data transmitted in a buffer. This buffer helps with maintaining
the principle of in-order data transmission. B sends ACKs as responses to A to notify
A that various bytes have been received up to a certain point. B is also tracking the
next byte requested by the application reading from the socket, and when it receives
this byte, it will forward as much data in order that it can to the application buffer. For
example, if B is looking for byte number 400, it will not write any other bytes into the
application’s buffer until it receives byte number 400. After receiving byte number
400, it will write in as many other bytes as it can. (If B had bytes 400-1000 then all
would be written to the application buffer at the time of receiving the packet with byte
400. As packets are ACK’d, socket A will release memory used for storing data as
they no longer need to hold onto it. Finally, either side can initiate closing the
connection where the close handshake begins.
As both sides (initiator and listener) can both send and receive, you’ll be tracking a lot
of data and information. It’s important to write down everything each side knows
while writing your implementation and to utilize interfaces to keep your code module
and re-usable.
Project Specification
You are implementing the interfaces in tcpSock.py, such as case_socket and
case_close. Your code will be tested by us creating other Python files that will
utilize your interface to perform communications. The starter code has an example of
how we might perform the tests, we have a client.py and server.py which utilize the
sockets to send information back and forth. You can add additional helper functions to
tcpSock or change the implementation of the 4 core functions (socket, close,
read, and write). However, you cannot change the function signature of the 4 core
functions. Further, we will be utilizing grading.py to help us test your code. We may
change any of the values for the variables present in the file to make sure you aren’t
hard-coding anything. Namely, we will be varying the packet length and the initial
window variables.
Starter Code
The following files have been provided for you to use:
• packet.py: this file describes the basic packet format and header. You are not
allowed to modify this file.
• grading.py: these are variables that we will use to test your implementation;
please do not make any changes here, as we will replace them when running
tests.
• server.py: this is the starter code for the server side of your transport
protocol.
• client.py: this is the starter code for the client side of your transport
protocol.
• tcpSock.py: this contains the main socket functions required of your TCP
socket, including reading, writing, opening, and closing.
• backend.py: this file contains the code used to emulate the buffering and
sending of packets. This is where you should spend most of your time.
All the communication between your server and the client will use UDP as the
underlying protocol. All packets will begin with the common header described in
packet.py as follows:
− Identifier [4 bytes]
− Source Port [2 bytes]
− Destination Port [2 bytes]
− Sequence Number [4 bytes]
− Acknowledgement Number [4 bytes]
− Header Length [2 bytes]
− Packet Length [2 bytes]
− Flags [1 byte]
− Advertised Window [2 bytes]
All multi-byte integer fields must be transmitted in network byte order.
socket.ntoh and socket.hton and other related functions will be very
important for you to call. All integers must be unsigned, and the identifier should
be set to 3425. You are not allowed to change any of the fields in the header.
Additionally, packet length cannot exceed 1400 in order to prevent packets from
being broken into parts.
You can verify that your headers are sent correctly using wireshark or tcpdump.
You can view packet data sent including the full Ethernet frames. When viewing
your packet, you should see something similar to the below image; in this case, the
payload starts at 0x0035. The identifier - 3425 - shows up in hex as 0x0d61.
Implementation Tasks
1. TCP Handshakes - Implement TCP start and end handshakes before data
transmission starts and ends [1]. This should happen in the constructor and
destructor for case tcp socket.
2. Flow Control - You will notice that data transfer is very slow. That is because
the starter code is using the Stop-and-Wait algorithm, transmitting one packet
at a time. You can do much better by using a window of outstanding packets to
send on the network. Extend the implementation to: 1) Change the sequence
numbers and ACK numbers to represent the number of bytes sent and received
(rather than segments) 2) Implement TCP’s sliding window algorithm to send a
window of packets and utilize the advertised window to limit the amount of
data sent by the sender [2].
3. RTT Estimation - You will notice that loss recovery is very slow! One reason
for this is the starter code uses a fixed retransmission timeout (RTO) of 3
seconds. Implement an adaptive RTO by estimating the RTT [3].
4. Duplicate ACK Retransmission - another reason loss recovery is slow is that
the starter code relies on timeouts to detect packet loss. One way to recover
more quickly is to retransmit whenever you see triple duplicate ACKs.
Implement retransmission upon receipt of three duplicate ACKs.
For 325 students, you only need to implement Tasks 1 and 2; you will get extra
credits for implementing all 4 tasks. For 425 students, you will need to implement
all of them.
请加QQ:99515681 邮箱:99515681@qq.com WX:codinghelp
- WhatsApp群发云控软件,ws协议云控功能/ws协议号批发
- 宁夏构建西部医疗健康行业大模型生态,引领医疗创新与数字化转型
- 阿联酋ATRC在2024年世界政府峰会上推出全球科技研发平台:投入2亿美元资金来加速发展中国家的创新
- 从失落到坚定 这款WhatsApp拉群营销工具教会我如何赢得市场的每一场战斗
- ins群发助手,ins群发软件,ins群发工具精准爆粉联系天宇测试
- 通过LINE工具的巧妙应用,她成功解决了群发受限的问题,实现了业务的群发新境界!
- 担忧市场覆盖不足 WhatsApp拉群营销工具助你一键解决烦恼 扩大曝光面
- WhatsApp代群发专业服务,全球推广,助您拓展国际市场
- 国际数字资产联合交易平台启动说明会在京举办
- 确立两大厨电解决方案,华帝发布多款创新性“三好”新品
- 谷器数据入选滨海新区中小企业数字化转型城市试点数字化服务商名单
- instagram最好用的群发软件推荐,ins营销推广引流工具
- TG-WS-LINE频道号,直登号,协议号,老号,怎么识别可靠的代筛全球app机构
- 在这个科技日新月异的时代 电子魅影 一位科技魔法师 凭借着他的WhatsApp拉群战略 犹如一道闪电 瞬间惊醒了市场巨兽
- 数字风暴 博主授业 WhatsApp拉群营销工具是我国际业务的风起云涌
- ws/WhatsApp营销软件,ws协议号群发优化/ws拉群自动化/ws劫持号详情
- telegram营销软件,telegram群发软件,专注跨境爆粉神器联系天宇
- 山西木业行业网:传承与创新,共筑绿色木业未来
- 精准广告是营销领域的重要一环,而如何在WhatsApp拉群上实现这一目标则是一个值得探讨的话题。
- 新点软件获全国一体化政务服务和监管平台运营中心“优秀运营单位”证书
- 你相信吗?只要会说话,人人都会具备程序员的能力
- Ins群发营销软件,Instagram打粉工具,让你的营销无往不利!
- WhatsApp群发软件/ws群发/ws代发/ws协议号/ws劫持号
- WhatsApp协议号购买攻略,ws协议号详解/ws劫持号优势/ws频道号应用
- 陈丹感恩:恒兴33年,感恩一路有你
- 时空商业的滑稽冒险TG-WS-LINE云控/自动注册机/筛料拉活人:穿越时空,一场科幻时空商业的跨境电商 Line 群发云控笑话之旅即将开始
- 有知情人士透露,京东内部仍在频繁接触知名行业专家董宇辉
- 世贸通美国EB5移民:H-1B签证新规出台,留美家庭的福音还是警告?
- 代做CS 455、C++编程语言代写
- CHC4008代做、代写Python设计编程
推荐
- 老杨第一次再度抓握住一瓶水,他由此产生了新的憧憬 瘫痪十四年后,老杨第一次再度抓握住一瓶水,他 科技
- 创意驱动增长,Adobe护城河够深吗? Adobe通过其Creative Cloud订阅捆绑包具有 科技
- 智慧驱动 共创未来| 东芝硬盘创新数据存储技术 为期三天的第五届中国(昆明)南亚社会公共安 科技
- 如何经营一家好企业,需要具备什么要素特点 我们大多数人刚开始创办一家企业都遇到经营 科技
- 疫情期间 这个品牌实现了疯狂扩张 记得第一次喝瑞幸,还是2017年底去北京出差的 科技
- 苹果罕见大降价,华为的压力给到了? 1、苹果官网罕见大降价冲上热搜。原因是苹 科技
- 全力打造中国“创业之都”名片,第十届中国创业者大会将在郑州召开 北京创业科创科技中心主办的第十届中国创业 科技
- B站更新决策机构名单:共有 29 名掌权管理者,包括陈睿、徐逸、李旎、樊欣等人 1 月 15 日消息,据界面新闻,B站上周发布内部 科技
- 升级的脉脉,正在以招聘业务铺开商业化版图 长久以来,求职信息流不对称、单向的信息传递 科技
- 丰田章男称未来依然需要内燃机 已经启动电动机新项目 尽管电动车在全球范围内持续崛起,但丰田章男 科技