Getting started
首先是版本控制操作,从lab6分支创建用于lab7开发的分支,我是在Clion的Git图形操作界面设定的。然后按照文档,从远程仓库拉取lab7的实验内容
//在新分支dev-lab7下
git fetch
git merge origin/lab7-startercode
make -j4
会弹出一个询问界面,让你提交此次合并到你本地仓库分支的说明commit,可以不管,直接ctrl+X键。
本次实验,你不用编写任何代码,仅仅需要在terminal下执行几条命令即可。
本次实验的逻辑流程:
你可能需要一个搭档(没有也可以),如果有就是一方充当server端,一方是client端(没有的话,同一台机器上开两个窗口也可以完成)。作为普通用户我们的实际网络是处于NAT网络转换下的,可以借助本实验的设计者在 CS144.keithw.org 搭建的服务,server和client借助此服务作为中继通信。
注意:端口号可能被占用,多尝试别的端口号
测试
简略通讯测试
我是直接开了两个窗口,分别在两个窗口执行下列命令(都要在build目录下):
//作为server的窗口,端口号尽量大一点(1024 ~ 64000)
sudo ./apps/lab7 server cs144.keithw.org 9730
//作为client的窗口
sudo ./apps/lab7 client cs144.keithw.org 12093
通信测试结果如下图(c->s:表示客户端发给服务器端;s->c:服务器端发给客户端):
前面通讯完成后,先在client端按ctrl+D结束连接,然后继续在server端是可以发送消息的,因为第四次挥手还没做,然后server端也ctrl+D,等待一会后双方都会结束了。
传输文件测试
现在本地创建一个big.txt文件:
dd if=/dev/urandom bs=1M count=1 of=/tmp/big.txt
//接着在另外一个窗口
sudo ./apps/lab7 server cs144.keithw.org 6000 < /tmp/big.txt
//又在另外一个窗口
sudo ./apps/lab7 client cs144.keithw.org 6001 > /tmp/big-received.txt </dev/null
可以根据窗口信息知道,client在接收到文件后就结束了通信,所以在server端要ctrl+D,等待连接关闭。
接着就可以在ternimal中执行:
sha256sum /tmp/big.txt
//会得到一串哈希值
sha256sum /tmp/big-received.txt
//也会得到一串哈希值
比较两者,结果如下:
磕磕碰碰终于玩成了CS144的八个实验!😄 👏完结撒花🌸
找到了性能非常好的实现,等后面尝试优化一下,感谢 Keith Winstein 教授的实验设计。
参考引用
👉LRL52博客
👉涉及的Sponge仓库
👉康宇PL‘s Blog
👉Kiprey的博客
👉Lexssma’s Blogs
👉TUN和TAP的区别
👉ViXbob的实现效率很优秀
👉B站一个Up很好的视频讲解