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

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

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

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

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

1.1 斯坦福大学之CS144

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

1.2 CS144实验室之Lab2

CS144Lab2是一个有趣而挑战性的实验,通常涉及构建一个简化的网络路由器。这个实验有助于学生深入理解路由器的工作原理和网络数据包转发过程。 在Lab2中,学生通常需要实现基本的路由器功能,包括数据包的转发和路由表的构建。他们可能会编写代码来处理接收到的数据包,根据目的地IP地址选择正确的输出端口,并将数据包转发到正确的目的地。 这个实验通常涵盖了许多网络原理,比如IP地址的解析、数据包的转发、路由表的更新等。学生们需要理解和实现一些基本的路由算法,以确保数据包按照正确的路径进行传输。 Lab2的完成通常需要学生运用课堂所学的知识,并通过编程和实践来加深对计算机网络中路由器功能的理解。这样的实验旨在将理论知识应用到实际网络系统中,并培养解决实际网络问题的能力。

⛳️2. Lab2

2.1 实验目的

1 实现一个简单的TCP接收类 2 对TCP数据传输有更深的理解

2.2 实验说明

1lab0中,我们实现了流控制字节流(ByteStream)的抽象。在lab1中,我们创建了一个StreamReassembler的结构体,它可以接受来自相同的字节流的子字符串序列,并将它们重新组装到原始流中。

2 这些模块可以发挥作用并可以满足实验要求,但是它们并没有体现出TCP传输控制协议的细节,所以在lab2中,我们将会实现一个TCPReceiver,它的作用是处理传入字节流的数据,也就是说,从IP数据报中正确读取它所携带的信息。

3 TCPReceiver应当可以对正确收到的数据报(没有差错,且按序到达)向发送方发送一个确认号,而发送方可以根据这个确认号来决定自己的发送情况。TCPReceiver还应当可以将自己的接收窗口告诉发送方,通过接收窗口的大小,发送方可以调整自己的发送。


2.3 实验内容

164位索引转换为32

1)获取实验代码。切换到build目录,输入命令”git merge origin/lab2-startercode”,如图3-1所示。其运行结果如图3-2所示。

代码语言:javascript
复制
git merge origin/lab2-startercode

3-1 获取实验代码​

​图3-2

2)下载代码完成后,在build目录中输入”make”对代码进行编译,编译结果如图3-3所示。

代码语言:javascript
复制
make

​图3-3 代码编译结果

3)输入命令”vim ../libsponge/wrapping_integers.hh”进入wrapping_integers.hh文件,如图3-4所示。此处我们不修改该文件,其代码内容如图3-5-3-6所示。文件源码见附录。

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

​图3-4 进入wrapping_integers.hh文件

​图3-5 文件内容_1

3-6 文件内容_1

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

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

​图3-7 文件内容

5)输入”make”进行编译,编译结果如图3-8所示。

代码语言:javascript
复制
make

​图3-8 编译结果

6)输入命令”ctest -R wrap”对lab2进行实验的检查,检测结果如图3-9所示。可以看到,所有的测试样例全部通过。

代码语言:javascript
复制
ctest -R wrap

​图3-9 实验1测试结果

2 实现TCPReceiver

1)输入命令”vim ../libsponge/tcp_receiver.hh”进入文件,将代码图3-10-3-11所示修改。代码源码见附录。

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

3-10 文件内容

​图3-11 文件内容

2)输入命令” vim ../libsponge/tcp_receiver.cc”进入文件,将代码如图3-12所示修改。代码源码见附录。

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

​图3-12 tcp_receiver.cc内容

3)输入”make”进行编译,编译结果如图3-13所示。

代码语言:javascript
复制
make

​图3-13 编译结果

4)输入命令” make check_lab2”对lab2的实验二进行检查,检查结果如图3-14所示。可以看到,所有测试样例全部通过。

代码语言:javascript
复制
make check_lab2

​图3-14 实验二check结果


2.4 实验体会

1 lab2需要完成“the TCP receiver”(TCP接收器)。Lab2总体来说比较简单,代码大概也就十几行。

2 实验一需完成” Translating between 64-bit indexes and 32-bit seqnos”(seqno64位索引和32位序列号之间转换),这里需要实现wrapn,isn)和uwrapn,isn,checkpoint)两个函数,对于wrapn,isn)若n0则返回SYN,否则nk则返回SYN+n,即将给定的seqno转化为32位的seqno,这里函数实现直接返回nisn相加即可;对于uwrapn,isn,checkpoint)由于一个34位对应多个64位整型,所以checkpoint用来表示离32位最近的64isn所以相当于一个映射。

3 实验二需完成“Implementing the TCP receiver”(实现TCP接收器)。这里引入了optional,此处的optional类似于容器:如果元素未初始化,则容器为空,否则认为容器有效的。这里将capacity传给reassembler得到缓冲区容量,segment received()设置了初始序列号和SYN标志的第一个到达段的序列号,只要注意的是如果在TCPSegment的中设置了FIN标志,此时调用reassembler.stream_out()函数即可; window_size()表示从ackno算还能接收的字节数,相当于TCP连接过程中的利用滑动窗口做到流量控制。

📝总结

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ⛳️1. 斯坦福大学计网实验室
    • 1.1 斯坦福大学之CS144
      • 1.2 CS144实验室之Lab2
      • ⛳️2. Lab2
        • 2.1 实验目的
          • 2.2 实验说明
            • 2.3 实验内容
              • 2.4 实验体会
              • 📝总结
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档