CoderZQYのBlog

个人不定期更新的学习周报

0%

Lab Checkpoint 3: the TCP sender

2 Checkpoint 3: The TCP Sender

​ Lab3 将实现 TCP 中的 TCPSender,其需要完成的功能有:

  • 跟踪 Receiver 的 TCPReceiverMessage 信息acknos 和 window sizes),通过将 ByteStream 的数据以 TCP Segments 的格式不断发送,尽可能地填满 window, 直到 window 满了或者 ByteStream 中没有任何东西可以发送。
  • 跟踪那些已发送但还没有被接收的 segments, 通常将这些数据被称为 “outstanding” segments。
  • 若是这些 segments 在足够长的时间后没有没接收, 则重传这些 segments 数据

​ 这些功能实现了 “automatic repeat request (ARQ)” 机制,TCPSender 的任务就是确保 TCPReceiver 能收到每个字节至少一次。

阅读全文 »

Lab Checkpoint 2: the TCP receiver

​ Lab2 将实现 TCP 协议的 TCPReceiver,通过 receive() 函数从 peer 端接收数据, 经过 Reassembler 处理写入 ByteStream 缓存, 应用层就可以通过 TCPSocket 读取数据。

​ 在接收 peer 端数据的同时, TCPReceiver 通过 send() 函数承担着告知 peer 一些重要信息的职责, 这些信息包括这两个部分:

  • Acknowledgment: first_unassembled_index 又称 **ackno**, 是 TCPReceiver 从 peer 发送端希望收到的 第一个字节的索引号。
  • Flow Control: **window size**, 是 ByteStream 可以写入的剩余空间, 限制了 TCPSender 发送数据的 index 的实际范围。 通过这个 window, TCPReceiver 能够 对输入的数据流量进行控制, 限制发送端的数据直到接收端准备好继续接收。

通常将 ackno 称作 window 的索引左边界 (Smallest Index), 将 ackno + window size 称作 window 的索引右边界 (Largest Index)

阅读全文 »

Lab Checkpoint 1: stitching substrings into a byte stream

0. Overview

CS144 Labs'structure 1-3

​ 由于底层网络是以 “best effort” 的形式在进行数据报 (datagram) 的传输,意味着在数据包传输的过程中,很可能会发生丢失重复乱序或者被替换的现象,因此需要 TCP 为数据包提供可靠的底层逻辑。Lab1 的实验需要完成 ByteStream 外部的 StreamReassembler 部分。

阅读全文 »

Lab Checkpoint 0: networking warmup

1. Set up GNU/Linux on your computer

CS144 的任务需要 GNU/Linux 操作系统和一个支持 C++ 2020 标准的 C++ 编译器(非常激进 … )

我的运行环境:ubuntu-22.04.3 with g++ 13.2.0

阅读全文 »

PJ——索引调优

1、任务要求

阅读全文 »