目录
- CS144 实验介绍
- Lab0: networking warmup
- 配置实验环境
- 利用一些网络工具
- 完成 webget
CS144 实验介绍
CS144 实验是斯坦福大学计算机网络课程的实验,也是我选修计科计算机网络的实践内容。核心是手写一个简单的 TCP 传输,并在这个过程中明白 TCP 具体是如何运作的。但受限于上课时时间紧张,并没有好好写,因此打算利用一下放假的时间好好再研究一下。
详情可以点击这个链接 ➡️ CS144 实验网址
Lab0: networking warmup
1. 配置实验环境
具体的配置可以查看文档,以下是我的环境
- 虚拟机:VMware 16
- 系统:Ubuntu 20.04.3 LTS
- GCC:9.3.0 x86_64-linux-gnu
- CMake: 3.21.2
2. 利用一些网络工具
2.1 使用 telnet 抓取一个网页
⚠️ 首先请确保可以正常访问 http://cs144.keithw.org/hello
1 | 使用 telnet 的工具来抓取 cs144.keithw.org/hello 的页面内容 |
在实践的时候出了一些问题,但最后都解决了:
- 刚输入完
Connection: close
发现服务器直接关闭了连接,并返回Connection closed by foreign host.
这个时候可以尝试先输入前两行内容,等待返回数据后再关闭连接。 - 输入好的报文后回车没反应。此时可以尝试 tab+回车 来发送报文
然后就使用相同的方法来访问 http://cs144.keithw.org/lab0/sunetid (其中 sunetid 可以随意填写)
2.2 发送 email
这个比较简单但是挺琐碎的,跳过。
2.3 本地创建监听和连接
使用 netcat
创建本地服务器并开启监听, telnet
连接本地服务器。
1 | netcat 创建本地 9090 端口并监听 |
成功连接后,在 telnet
中发送数据,可以在 netcat
中看到。关闭 netcat
则双方都关闭
3. 完成 webget
从现在开始才是 CS144 的真正开始,我们需要自顶向下慢慢完善我们的 TCP 连接。在 lab0 中,我们需要基于 cs144 所提供的 sponge 框架中完成类似 telnet
发送报文并输出返回报文的功能。
代码下载完后首先使用 cmake 得到工程,在 build 文件中可以使用 make help
来获取有关 sponge 的资料。
在本次试验中,我们需要完成 webget.cc
中的 get_URL()
函数。其中需要具有 创建套接字,连接服务器,发送报文,获取完整输出
通过查阅帮助文档,可以知道我们需要使用到 TCPSocket
,具体的调用可以参考文档和目标功能。总体还是比较简单的:1、建立套接字连接;2、利用套接字连接服务器;3、创建报文并发送(注意每一行需要 \r\n,以及最后一行要多一个空行表示发送结束);4、读取返回的报文信息,读取至 eof 为止。
1 | void get_URL(const string &host, const string &path) { |
编译后可以 ./build/apps/webget cs144.keithw.org /heelo
来测试一下是否正确。
大致没问题,可以使用 make check_webget
来测试代码: