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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【斯坦福计网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数据报并知道如何解析和序列化自身的对象(tcphelpers.{hh,cc}),和在IP中封装tcp段的逻辑(现在可以在tcphelpers/tcpoverIP .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  实现网络接口

1输入命令”cdsponge/build”进入build目录,输入命令”gitmergeorigin/lab5-startercodetodate”获取实验源代码。输入命令”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输入命令” makecheck_lab5”对lab5进行检查,检查结果如图6-6所示。可以看到,所有的测试样例都通过

make check_lab5

6-6  check结果


2.4 实验体会

1  在lab5实验中,我们遇到的一个典型问题是:当系统在发送一个ARPrequest后,如果没有响应要五秒后重发,且在上一个请求被正常响应之前其他的请求都要排在后面。如果没有注意到这一点就可能导致最后makecheck_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,学生将涉及更深层次的网络协议、编程和系统设计。


目录
相关文章
|
6月前
|
存储 NoSQL 编译器
UIUC CS241 讲义:众包系统编程书(1)
UIUC CS241 讲义:众包系统编程书(1)
81 0
|
6月前
|
存储 缓存 网络协议
UIUC CS241 讲义:众包系统编程书(7)
UIUC CS241 讲义:众包系统编程书(7)
285 0
|
6月前
|
存储 缓存 安全
UIUC CS241 讲义:众包系统编程书(4)
UIUC CS241 讲义:众包系统编程书(4)
217 0
|
6月前
|
存储 安全 NoSQL
UIUC CS241 讲义:众包系统编程书(2)
UIUC CS241 讲义:众包系统编程书(2)
136 0
|
6月前
|
网络协议 算法 安全
UIUC CS241 讲义:众包系统编程书(6)
UIUC CS241 讲义:众包系统编程书(6)
129 0
|
6月前
|
存储 缓存 算法
UIUC CS241 讲义:众包系统编程书(5)
UIUC CS241 讲义:众包系统编程书(5)
202 0
|
6月前
|
存储 网络协议 Linux
【斯坦福计网CS144项目】Lab1 实现一个流重组器
【斯坦福计网CS144项目】Lab1 实现一个流重组器
116 0
|
6月前
|
网络协议 安全 网络安全
【斯坦福计网CS144】Lab7终结笔记
【斯坦福计网CS144】Lab7终结笔记
75 0
|
6月前
|
存储 网络协议 算法
【斯坦福计网CS144】Lab3终结笔记
【斯坦福计网CS144】Lab3终结笔记
57 0
|
6月前
|
网络协议 开发工具 git
【斯坦福计网CS144】Lab4终结笔记
【斯坦福计网CS144】Lab4终结笔记
89 0