udp模仿tcp类似于socket实现tcp的功能(单方向),比如三次握手,四次挥手,超时重传快速重传等等。
模拟TCP的功能
- 三次握手
- 四次挥手
- 发送端要带有计时器,要实现RTT估计和RTO(重传计时器)估计。RTT如下
SampleRTT某报文段被发出到对该报文段的确认被收到之间的时间量
EstimatedRTT=(1-α)* EstimatedRTT+α*SampleRTT(α=0.125?)
DevRTT=(1-β)DevRTT+β|SampleRTT-EstimatedRTT| (β=0.25?)
TimeoutInterval = EstimatedRTT + 4 *DevRTT(初始值:EstimatedRTT = 500 milliseconds, DevRTT = 250 milliseconds)
TimeoutInterval = EstimatedRTT + gamma * DevRTT
- 可靠数据传输:发送端维护最早未被确认的字节序号(sendbase), 下一个要发送的字节的序号(nextSeqNum), 通过单一计时器来实现超时重传,通过冗余ACK来实现快速重传。
- 流量控制:有一个在任何时刻能保持的最大的未确认的 《字节数》(最大窗口数),包能够有的最多字节数。
- 因为是在环回网络上测试,所以要模拟数据包出现TCP中的意外–丢失,延迟,损坏,乱序
- 接收端收到后立刻返回ACK。不对ACK包进行操作
设计参考《计算机网络自顶向下方法》
设计思路之包头设计
三次握手需要syn,ack两个标志位,四次挥手需要fin的标志位,校验错误需要crc码,传输数据需要ackNo码跟seqNo码。因为java中datagramSocket.receive收到的packet大小是固定的。比如

本文介绍了如何使用UDP模仿TCP协议的一些关键特性,如三次握手、四次挥手、超时重传和快速重传。在设计中,包含了包头设计、状态管理以及发送和接收端的策略,以确保在环回网络上的可靠性。接收端接收到数据后立即回应ACK,但不处理ACK包,同时处理可能的数据丢失、重复、损坏和乱序问题。

702

被折叠的 条评论
为什么被折叠?



