心力建网站,persona响应式博客wordpress主题,做推广哪个平台效果好,上海市网站建Lecture Notes 
略 
Exercises 
现在#xff0c;在check3中#xff0c;您将实现连接的另一边。 
TCPSender是一种工具#xff0c;它从出站字节流转换为将成为不可靠数据报的有效负载的段。 
TCP sender的任务是确保receiver至少收到每个bytes一次。任务#xff1a; 
1、跟踪…Lecture Notes 
略 
Exercises 
现在在check3中您将实现连接的另一边。 
TCPSender是一种工具它从出站字节流转换为将成为不可靠数据报的有效负载的段。 
TCP sender的任务是确保receiver至少收到每个bytes一次。任务 
1、跟踪window size 
2、填满window 
3、跟踪有哪些片段receiver没有回应这些片段叫做outstanding片段 
4、重新发送outstanding片段。 
TCPSender如何知道一个片段丢失了 
TCPSender将会发送一堆TCPSenderMessage。每个都将包含一个来自输出字节流的可能是空的子字符串用序列号索引以指示其在流中的位置在流的开头用SYN标志标记在结尾用FIN标记。具体来说 每隔几毫秒TCPSender的tick方法将被调用该参数告诉它自上次调用该方法以来已经经过了多少毫秒。使用此功能来维护TCPSender已活动的总毫秒数的概念。请不要尝试从操作系统或CPU中调用任何“时间”或“时钟”函数——tick方法是您对时间流逝的唯一访问权限。这使得事物具有确定性和可测试性。  当构造TCPSender时它会给出一个参数告诉它重传超时RTO的“初始值”。RTO是在重新发送未完成的TCP段之前要等待的毫秒数。RTO的值会随着时间的推移而变化但“初始值”保持不变。启动器代码将RTO的“初始值”保存在一个名为initial_RTO_ms的成员变量中。  你将实现retransmission timer一个可以在特定时间启动的警报一旦RTO过去警报就会关闭或“expires”。我们强调时间流逝的概念来自于被调用的tick方法——而不是通过获得一天中的实际时间。  每次发送包含数据的段序列空间中的非零长度无论是第一次还是重传如果计时器未运行则启动它运行以便在RTO毫秒后过期对于RTO的当前值。我们所说的“expire”的意思是时间将在未来耗尽一定数量的毫秒。  在确认了所有未完成的数据后请停止retransmission timer。  如果调用了tick并且retransmission timer已expired a) retransmit尚未被TCP receiver完全确认的最早最低序列号ISN段。您需要在一些内部数据结构中存储未完成的段以便实现这一点。 b) 如果窗口大小非零  i. 跟踪连续重传的次数并增加它因为您只是重传了一些内容。您的TCP连接将使用此信息来决定连接是否无望一行中连续重传输太多是否需要中止。  ii. RTO值乘2。这被称为“exponential backoff”——它减缓了糟糕网络上的重传以避免进一步的工作。  c) 重置retransmission timer并启动它使其在RTO毫秒后过期考虑到您可能刚刚将RTO的值翻了一倍。  当接收方给发送方一个确认成功接收新数据的ackno时ackno反映的是比以前任何ackno都大的绝对序列号 a) 将RTO设置回其“初始值”。 b) 如果发送方有任何未完成的数据请重新启动retransmission timer使其在RTO毫秒后对于RTO的当前值将expire。 c) 将“连续重传”的计数重置为零。  
参考 
CS 144CS144 | Winter 2024, Lab 0~7 记录已开源