前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【斯坦福计网CS144】Lab3终结笔记

【斯坦福计网CS144】Lab3终结笔记

作者头像
SarPro
发布2024-02-20 15:46:27
2280
发布2024-02-20 15:46:27
举报
文章被收录于专栏:【计网】Cisco

⛳️1. 斯坦福大学计网实验室

【中文精翻】【斯坦福大学】CS144 计算机网络介绍!!!

1.1 斯坦福大学之CS144

在斯坦福大学,CS144是网络世界的大门。这门课程不仅传授网络系统的根基原理和框架,更是探索计算机网络核心概念的摇篮。IPTCP路由,这些网络骨架的秘密将被揭示,而学子们将会深入了解网络构建、管理和维护的神秘奥秘,以及数据在这个网络舞台上的华丽演绎。 CS144采用炼金术般的教学模式,融合理论授课、资料阅读、编程挑战和实验探索,助力学生深度探究计算机网络的魅力。这门课程要求学生进行一系列项目和作业,可能包括网络协议的创新设计、仿真模拟和深度分析,唤醒学子们将理论知识嵌入实际的巧思。 换而言之,CS144旨在孕育学生对计算机网络的深刻理解,为他们奠定构建、管理和优化网络系统的必备基石和技能。在这个网络狂潮中,CS144为学子们描绘出一幅璀璨的网络未来图景。


1.2 CS144实验室之Lab3

斯坦福大学CS144课程的实验中的Lab 3通常涉及对网络协议的实际实验和实现。Lab 3是关于网络路由的实验,旨在让学生深入理解和实践路由算法和路由协议。 在Lab 3中,学生会涉足到路由器的实现和仿真。他们需要编写代码来模拟路由器的行为,设计并实现一个简单的路由协议,或者进行一些仿真实验以评估不同路由策略的性能。这样的实验通常需要学生理解网络拓扑、数据包转发和路由选择的基本概念,并在实验中应用这些概念。 Lab 3涉及一些具体任务,比如实现路由表、设计路由选择算法、模拟数据包的传输路径等等。学生需要使用编程语言来实现这些功能,并通过模拟或仿真环境进行测试和评估。 这个实验有助于让学生通过动手操作加深对网络路由原理的理解,并通过实践了解路由器和路由协议的工作方式。这种实践性的学习方式有助于学生将课堂上学到的知识应用到实际情境中,加深对计算机网络原理的理解。


⛳️2. Lab3

2.1 实验目的

1 实现一个简单的TCP发送类 2 进一步熟悉TCP协议中的各种内容


2.2 实验说明

1lab0中,我们实现了流控制字节流(ByteStream)的抽象。在lab1lab2中,我们实现了将IP数据报中携带的段转换为传入字节流的工具:StreamReassemblerTCPReceiver

2 现在,在lab3中,我们会实现连接的另一端。TCPSender是一个将传出的字节流转换为将成为IP数据报的工具。

3 TCP发送方和接收方各自负责TCP段的一部分。TCP发送方写入与lab2中的TCPReceiver相关的TCPSegment的所有字段:即序列号、SYN标志、有效负载和FIN标志。然而,TCP发送方只读取由接收方写入的段中的字段:确认号和窗口大小。

4TCPSender中,我们应该实现的功能如下

1)跟踪接收方的窗口(处理传入的报文段和接收窗口大小)

2)在必要的时候填充窗口,通过从ByteStream读取并创建新的TCP段(包括SYNFIN标志),最后发送它们。发送方应该一直发送段,直到窗口已满或字节流为空。

3)跟踪已经发送但尚未被接收方确认的片段,假如这种片段的发送时间较长但是依然未被接收方确认,则重新发送


2.3 实验内容

1 实现TCPSender

1)打开终端,输入命令”cd sponge/build”进入build目录,输入命令”git origin/lab3-startercode”获取lab3实验源码,运行结果如图4-1所示。

代码语言:javascript
复制
cd sponge/build
git origin/lab3-startercode

4-1 获取实验原始代码

2)输入命令”make”对文件进行编译,编译结果如图4-2所示。

代码语言:javascript
复制
make

4-2 对源文件进行编译

3)输入命令”vim ../libsponge/tcp_sender.hh”进入文件,将文件代码内容修改如图4-3-4-6所示。代码源码见附录。

代码语言:javascript
复制
vim ../libsponge/tcp_sender.hh

4-3 文件内容_1

4-4 文件内容_2

4-5 文件内容_3

4-6 文件内容_4

4)输入命令”vim ../libsponge/tcp_sender.cc”进入文件,将文件内容如图4-7-4-12所示修改。代码源码见附录。

代码语言:javascript
复制
vim ../libsponge/tcp_sender.cc

4-7 文件内容_1

4-8 文件内容_2

4-9 文件内容_3

4-10 文件内容_4

4-11 文件内容_5

4-12 文件内容_6

5)输入命令”make”对文件进行编译,编译结果如图4-13所示。

代码语言:javascript
复制
make

4-13 编译结果

6)输入命令 make check_lab3”lab3进行检查,检查结果如图4-14所示。可以看到,全部样例测试通过。

代码语言:javascript
复制
make check_lab3

4-14 检查结果


2.4 实验体会​​​​​​​

1 lab3需要完成“the TCP sender”。Sender需要做的事情比较多,并且这里的lab3文档讲述并不完善,参考了“https://cs144.github.io/doc/lab3/class t c p sender.html”以及CSDN上面的博客基本思想,需要完成的主要如fill_window()∶接收端会给Sender一个window_size(采用滑动窗口进行流量控制),根据该window_size判断如果窗口没填满并且发送端有数据需要发送,就可以使用fill_window()发送segment

2 另外需要实现的是ack_received(ackno, window_size)︰接收端返回了确认信息,拿到该确认信息后,首先更新Sender自身的window_size状态。对于接收端确认的ackno来说,如果接收端是对新的数据进行确认,就需要更新Sender自身的ackno状态。(Senderwindow_sizeackno存的都是Receiver的状态),此外还要实现ticks(ms_since_last_tick), consecutive_retransmissions两个方法,这里需要专门查看超时重传的文档。

3 本次实验中我们使用队列作为其数据结构:在TCPSender中实现队列_outstanding_segments存储已发送未确认的segments。对TCPSender而言,如果将TCPsegment推送到_outstanding_segments队列则认为它已完成发送。接着TCPSender的TCPconnection会对其进行pop(使用segments_out()访问)并发送。需要注意的时在从TCPReceiver获取ackno前,TCPSender假设Window size为一个字节,如果接收到outstanding segments的部分ackno,TCPSender要求实现TCPsegment只有全部被ack才能被remove。


📝总结

斯坦福大学的CS144实验从Lab0到Lab7涵盖了广泛的网络系统和计算机网络主题。Lab0往往是介绍性的,可能涉及设置实验环境和初步概念。逐步进入Lab1至Lab7,学生将涉及更深层次的网络协议、编程和系统设计。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ⛳️1. 斯坦福大学计网实验室
    • 1.1 斯坦福大学之CS144
      • 1.2 CS144实验室之Lab3
      • ⛳️2. Lab3
        • 2.1 实验目的
          • 2.2 实验说明
            • 2.3 实验内容
              • 2.4 实验体会​​​​​​​
              • 📝总结
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档