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

2023-12-17 14:20

本文主要是介绍【斯坦福计网CS144】Lab5终结笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🌈个人主页:Sarapines Programmer
🔥 系列专栏:《斯坦福大学CS144 | 奇遇记》
🔖翰墨致赠:翠柏摇落寒江曲,风华如梦往事长。剑啸苍穹激云涌,豪情自在星空翔。

目录结构


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

1.1 斯坦福大学之CS144

1.2 CS144实验室之Lab5

⛳️2. Lab0

2.1 实验目的

2.2 实验说明

2.3 实验内容

2.4 实验体会

📝总结


🔥后续实验:【斯坦福计网CS144】Lab6终结笔记

🔥官方文档:lab0-lab7官网解析pdf.zip

🔥源码资源:斯坦福CS144-lab5解决源码(亲测有效!!!)

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

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

1.1 斯坦福大学之CS144

在斯坦福大学,CS144是网络世界的大门。这门课程不仅传授网络系统的根基原理和框架,更是探索计算机网络核心概念的摇篮。IPTCP路由,这些网络骨架的秘密将被揭示,而学子们将会深入了解网络构建、管理和维护的神秘奥秘,以及数据在这个网络舞台上的华丽演绎。

CS144采用炼金术般的教学模式,融合理论授课、资料阅读、编程挑战和实验探索,助力学生深度探究计算机网络的魅力。这门课程要求学生进行一系列项目和作业,可能包括网络协议的创新设计、仿真模拟和深度分析,唤醒学子们将理论知识嵌入实际的巧思。

换而言之,CS144旨在孕育学生对计算机网络的深刻理解,为他们奠定构建、管理和优化网络系统的必备基石和技能。在这个网络狂潮中,CS144为学子们描绘出一幅璀璨的网络未来图景。


1.2 CS144实验室之Lab5

CS144Lab5通常是关于网络传输控制协议(TCP)的实验。在这个实验中,学生们将深入探索TCP协议的工作原理、流量控制和拥塞控制机制。

实验内容包括:

  1. 实现简单的TCP协议: 学生们被要求使用编程语言(如Python或者C++)实现一个简单的TCP协议栈,模拟TCP连接的建立、数据传输和连接关闭过程。这可能包括处理序列号、确认号、超时重传以及拥塞控制等功能。

  2. 流量控制和拥塞控制实验: 学生们需要设计实验来观察和评估TCP协议中流量控制和拥塞控制算法的效果。他们可以通过模拟不同网络条件下的数据传输、改变窗口大小或者引入数据包丢失来评估TCP协议的性能。

  3. 性能分析和比较实验: 实验任务之一是对比不同的TCP变种(如TCP Tahoe、Reno、NewReno等)在特定条件下的性能,了解它们在拥塞控制和流量控制方面的差异,并分析其优缺点。

这些实验有助于让学生们深入了解TCP协议的运作方式,并通过实践加深对网络传输控制的理解。他们将有机会通过实验验证理论概念,观察TCP协议在不同情境下的行为,从而更好地掌握网络协议的本质和运作机制。


⛳️2. Lab5

2.1 实验目的

1  实现一个简单的网络接口,将IP数据报以数据链路层以太网帧的形式进行转发

2  深入理解地址解析协议ARP

3  深入立即以太网帧的转发过程


2.2 实验说明

1  在lab5中,我们将使用堆栈实现一个网络接口:连接Internet数据报在全球传播和链路层以太网帧单跳传播。该接口可以作用于TCP/IP实现之下,但是当我们在实验室6中构建路由器时,也可以将该组件在网络接口之间传递路由数据报。

2  在lab01234中,我们编写了一个TCP实现,它可以成功地与使用TCP的任何其他计算机交换TCP段。但是,这些TCP段是如何传递到对等的TCP实体上的?实际上,这个实现有几种选择:

1TCP-in-UDP-in-IPTCP段可以携带在用户数据报的数据负载中。例如,Linux中提供了一个接口(UDPSocket),它允许应用程序只提供用户数据报的有效负载和目标地址,内核负责构造UDP头、IP头和以太网头,然后将数据包发送到适当的下一跳。内核确保每个套接字都有本地和远程地址、端口号的唯一组合。由于是内核将这些写入UDPIP头,所以它可以隔离不同的应用程序。

2TCP-in-IP。在通常的用法中,TCP段总是直接放在Internet数据报中,在IPTCP报头之间没有UDP报头,这就是“TCP/IP”。这实现起来有点困难。Linux提供了一个称为TUN设备的接口,它允许应用程序提供整个Internet数据报,而内核负责其余的工作(写入以太网标头,并通过物理以太网卡实际发送,等等)。但是现在应用程序必须构造完整的IP头本身,而不仅仅是有效负载。实际上,lab4提供了一个表示Internet数据报并知道如何解析和序列化自身的对象(tcp helpers.{hh,cc}),和在IP中封装tcp段的逻辑(现在可以在tcp helpers/tcp over IP .cc中找到)

3TCP-in-IP-in-Ethernet。在上述的几种方法中,我们仍然依赖Linux内核来实现部分网络栈。每当代码将IP数据报写入TUN设备时,Linux必须以IP数据报作为有效负载构造一个链路层以太网帧。这意味着Linux必须根据下一跳的IP地址计算出下一跳的以太网目的地址。如果它还不知道这个映射,Linux广播一个查询,问:“谁声明下面的IP地址?”你的以太网地址是什么?,然后等待回复。实际上,这些功能由网络接口执行:一个将出站IP数据报转换为链路层(如以太网)帧的组件,反之亦然。

3  在本周的实验中,我们将实现一个网络接口,

并将其放在TCP/IP栈的最底部。我们的代码将生成原始以太网帧,这些帧将通过一个称为TAP设备的接口传递给Linux——TAP设备。类似于TUN设备,但更低级,因为它交换原始链路层帧而不是IP数据报。大部分的工作是为每个下一跳的IP地址查找(和缓存)以太网地址。这方面的协议被称为地址解析协议(ARP)


2.3 实验内容

实现网络接口

1输入命令”cd sponge/build”进入build目录,输入命令”git merge origin/lab5-startercode to date”获取实验源代码。输入命令”make”进行编译,编译结果如图6-1所示。

cd sponge/build
git merge origin/lab5-startercode to date

​图6-1  编译结果

2输入命令” vim ../libsponge/network_interface.hh”进入文件并如图所示修改文件代码。代码源码见附录。

vim ../libsponge/network_interface.hh

​图6-2  文件内容

(3)输入命令” vim ../libsponge/network_interface.cc”进入文件并如图6-3-6-4所示修改文件代码。代码源码见附录。

vim ../libsponge/network_interface.cc

6-3   文件内容_1

​图6-4  文件内容_2

4输入命令”make”进行编译,编译结果如图6-5所示。

make

​图6-5  编译结果

5输入命令” make check_lab5”对lab5进行检查,检查结果如图6-6所示。可以看到,所有的测试样例都通过

make check_lab5

​图6-6  check结果


2.4 实验体会

1  在lab5实验中,我们遇到的一个典型问题是:当系统在发送一个ARP request后,如果没有响应要五秒后重发,且在上一个请求被正常响应之前其他的请求都要排在后面。如果没有注意到这一点就可能导致最后make check_lab5出现一些错误提示

2  通过这次lab5实验,我们了解到TCP报文有三种方式可被传送至远程服务器。第一种是TCP-in-UDP-in-IP,这是内核完成的任务,因此内核可以确保每个套接字都具有本地地址与端口,以及远程地址与端口的唯一组合,同时能保证不同进程之前的隔离。第二种是TCP-in-IP,当用户将 IP 报文发送给 TUN 设备后,剩余的以太网报头构造、发送以太网帧等的操作均会由内核自动进行,无需用户干预。第三种是TCP-in-IP-in-Ethernet,它将会把待出口的 IP 报文转换成链路层(以太网)帧等等,之后将链路层帧发送给 TAP 虚拟网络设备,剩下的发送操作将会由它来代为完成。

3  通过这次lab5实验,我们了解到适配器之所以除了有网络层地址(IP地址)以外,还会有链路层地址(MAC地址)的原因是因为局域网是为了任意网络层协议而设计,并非只用于 IP 和因特网。如果适配器使用 IP地址而不使用 MAC 地址,那么每次适配器移动或重启时,均需重新配置地址。由于适配器同时拥有网络层和链路层地址,因此需要相互转化。而这种转换的任务就由地址解析协议来完成。ARP 类似于 DNS 服务,但不同的是,DNS 为任何地方的主机来解析主机名,但 ARP 只能为在同一个子网上的主机和路由器接口解析 IP 地址。


📝总结

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

如果你也想了解更多斯坦福大学的CS144实验,以及计算机网络技术新进展,不妨点击下方链接,加入我们社群,共同探讨更多可能性吧。鉴于今年斯坦福大学的CS144实验的火热,我们还建立了一个CS144 🔥 系列专栏:《斯坦福大学CS144 | 奇遇记》,旨在深入探讨斯坦福大学的CS144的实践和应用。

这篇关于【斯坦福计网CS144】Lab5终结笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/504684

相关文章

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个

Git 的特点—— Git 学习笔记 02

文章目录 Git 简史Git 的特点直接记录快照,而非差异比较近乎所有操作都是本地执行保证完整性一般只添加数据 参考资料 Git 简史 众所周知,Linux 内核开源项目有着为数众多的参与者。这么多人在世界各地为 Linux 编写代码,那Linux 的代码是如何管理的呢?事实是在 2002 年以前,世界各地的开发者把源代码通过 diff 的方式发给 Linus,然后由 Linus