Stanford CS144 For Computer Network(一):环境搭建
大三学过计算机网络,后面就没有碰过这门课了。那时候的教材是谢希仁教授的《计算机网络》,为了应付期末考试还将课件和资料整理成了上万字的文档,放到校内网去低价出售,不知道光顾的那几位老哥考得咋样,可能不如多看几道课后题考得高分,多少有点误人子弟(哭),计算机网络是一个庞大的课程,往下它可以和硬件层各种协议交流,网上它需要提供应用层的各种软件接口,作为EE专业的主修课,授课的时候更倾向于信号处理、电路连接等联系,后面选修的《网络体系空间结构》更是承接了这个特点,几乎没有从代码的角度构建过这些通信协议,Stanford
CS144利用C++以及容器算法,围绕TCP协议开展实验,技术栈还是比较匹配的,就尝试做做吧。
一个有意思的插曲是斯坦福的老师在2019年开源了这个项目,后续又出了2021、2023等多个版本,但是后面因为考虑到自己的学生可能会直接从开源仓库获取答案,遂关闭了官方仓库,要求其他仓库克隆者也应该将仓库转为private,一位清华大佬希望只去除“CS144”防止被google索引,而且回复道:
- I think opensourcing is irrelevant to whether someone make their solutions public. In fact, the only way to prevent someone show their solutions is never making the assignment public.
此刻不得不佩服大佬开源的决心,尽管后面大佬在对方上百词劝说的压力下暂时关闭了仓库,但是我写这篇文章的时候仓库仍然是开放的。闭源产生很多极具商业价值产物,开源可能给一些人带来惰性(AI工具如此流行,开源已经不是惰性的最大源头了),但也带来了很多生态共同参与的产物,任何事情都是双刃剑,一个健康的开源社区一定是每个普普通通开发者的希冀。不知道目前迭代的斯坦福CS144作业是否仍沿用原来的部分,建议个人仓库命名不要涉及“CS144”。
环境配置
本实验环境基于2021版本Stanford CS144搭建,开发环境:
- VMware 16 Ubuntu 18.04镜像
- Vscode远程SSH
- g++ 8
在后面的实验我会把仓库公布出来,直接克隆并且回滚到斯坦福老师的Commit即可。这个仓库也很容易从其他地方搜到,毕竟就如大佬所说,一旦开源,就闭不回来了。
首先安装必要的依赖:
doxygen和clang-format都是辅助的工具,在以往的经历我还没用过,用到再说,但是这个实验环境确实需要。libpcap-dev是一个TCP/IP相关的API的工具库,如果缺少会报错,见Q&A
2; 1
2
3sudo apt-get install doxygen clang-format
sudo apt install cmake
sudo apt-get install libpcap-dev
然后查看g++版本: 1
dpkg -l | grep g++
版本低于g++8则需要安装,并设置优先级: 1
2sudo apt install g++-8
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 50
新建build文件夹并且cmake上级目录: 1
2
3
4
5mkdir build
cd build
cmake .. #报错见Q&A
make format
make -j4
Q&A
- cmake出现报错:
You must compile this project with g++ >= 8 or clang >= 6.
- 应按上面方法安装g++
8,使用命令
readlink -f $(which c++)
查看cmake是否确实以g++ 8以上版本作为编译器,每次cmake失败应该删除不完整的文件。
- cmake出现
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
- 安装sudo apt-get install libpcap-dev