上一篇博客中我们完成了 Lab0,使用双端队列实现了一个字节流类ByteStream,可以向字节流中写入数据并按写入顺序读出数据。由于网络环境的变化,发送端滑动窗口内的数据包到达接收端时可能失序,所以接收端收到数据之后不能直接写入ByteStream中,而是应该缓存下来并按照序号重组成正确的数据。这篇博客所介绍的 Lab1 将实现...
首先,我们切换到实验作业的存储库中,并运行"git fetch"来检索实验作业的最新版本。然后,我们运行"git merge origin/check1-startercode"来下载lab 1的启动代码。在修改了相关代码后,我们在/build目录下进行编译测试,使用"make check1"命令。通过测试结果可以看到,所有的测试都通过了,证明我们的实现是正确的。 通过...
stringdata,boolis_last_substring){size_t_first_unassembled=output_.writer().bytes_pushed();size_t_first_unaccept=_first_unassembled+_capacity;// 处理空的最后子串的特殊情况if(data.empty()&&is_last_substring){_is_eof=true;_eof_index=first_index;// 如果当前已组装到EOF位置,...
lab1 这次作业主要完成两个类 StreamReassembler 和 ByteStream。我的思路是每读入数据就O(n)扫一遍,用map维护每个index对应的数据,用一个指针指向当前需要写入值的位置,不断向后移动。原本没深刻认识到overleap的含义,记录的是整串string,然而测试数据相当于把一个字符串随机剁碎,字符串反而不好维护。 这是第三个...
CS144-Lab1 实验简介 Lab0中完成了有序字节流的写入和读出,这个实验需要完成乱序字节流的重组、写入和读出。也就是说,Lab1实验手册中的这幅图,蓝色和绿色部分我们已经在Lab0中完成了,我们在Lab1中只需要完成红色部分的重组即可。 思路 (这个思路有很大的性能优化空间)...
1在lab0中,我们使用Linux的传输控制协议(TCP)的内置实现,使用互联网流套接字从一个网站获取信息并发送电子邮件。这个TCP实现设法产生了一对可靠的按顺序排列的字节流(一个从主机到服务器,一个从相反方向),尽管底层网络只提供”尽力而为”的数据报,但是我们还是在一台计算机的内存中自己实现了字节流的抽象。
1将子字符串拼接成一个字节流 (1)输入”cdsponge/build”切换到实验作业的存储库中,运行”gitfetch”来检索实验作业的最新版本。通过运行”gitmergeorigin/lab1-startercode”,下载实验1的启动代码。如图2-1所示。在build目录中,输入”make”进行编译,编译结果如图2-2所示。
Lab 1 对应的PDF:Lab Checkpoint 1: stitching substrings into a byte stream 实验结构 这幅图完整的说明了CS144 这门实验的结构: 其中,ByteStream是我们已经在 Lab0 中实现完成的。 我们将在接下来的实验中分别实现: Lab1StreamReassembler:实现一个流重组器,一个将字节流的字串或者小段按照正确顺序来拼接回连...
https://github.com/wine99/cs1... 任务TCP 接受方接收到乱序且可能重叠的报文段,StreamReassembler 需要将收到的报文段按情况送入 ByteStream (lab0 实现的),或丢弃,或暂存(在合适的时候重组送入 ByteStream)。 注意点: 报文段包含索引、长度、内容,lab1 的索引从 0 开始增长,不会溢出绕回。 任何报文段,...
CS144 lab1 笔记 CS144 lab1 笔记 上图是TCP实现中模块和数据流的安排,我们要实现的就是StreamReassembler 一个字符重组器,将乱序的字符串,按照索引排序,使其成为连续字符,供TCPSender和TCPReceiver使用 有容量限制,超出的字符直接丢掉(不是整个片段) TCP接收到的片段从零开始,不会溢出...