国科大计算机网络课程实验简记
2019-12-20 10:35
2431 查看
说明
这里记录一下我研一在国科大雁栖湖校园学习《计算机网络》课程做的“静态路由转发实验”,实验要求学生在已有代码基础上,完善其中的 TODO 部分,实现路由器的 IP 查找转发、ARP请求和应答、ARP 缓存管理、发送 ICMP 消息等功能。
本次实验花了我大约一周的时间才跑通。
- 一是因为以前对arp协议、ICMP协议、IP协议等只是了解,浮于表面,并没有真正深入探究过。以ICMP协议来说,以前看见包结构只是扫一眼,并没有真正去细心查看过包结构的组成。
- 二是因为自己写了很长时间Web,C语言很久不用了,写起来不那么得心应手。
- 三是因为Debug的过程实在是太痛苦了,每次修改完代码,都要先编译,编译完成后重启mininet发包,出现了错误需要定位时需要使用wireshark抓包分析,调试一次需要太长时间,代码开发就相当的慢了。
以下是实验报告和Github链接:
点击这里查看《计算机网络路由转发实验报告》
部分程序运行结果截图
完成顺序
- arpcache.c arpcache_lookup()
- arpcache_append_packet()
- print_arp_cache_list()
- arpcache_insert()
- arpcache_sweep()
-
arpcache_test ()
-
arp_send_request()
TODO
- arp表的替换应该是随机替换而不是先入先出。
收获
- 一种数据结构,利用宏复用给多种类型(list_head);
- 如何设置一个网络packet(利用char*与结构体变量的相互转换);
- 大小字节序真的需要注意(htonl, htons, ntohl, ntohs, n:network, h:host);
- 应该从上层往底层写,而不是从底层往上层写,底层函数可以先todo然后慢慢实现,上层要先有自己的逻辑;
- 上层协议的包头包裹在下层协议的包头里面;
- const在某些情况下很有必要,可以防止别的coder做一些错事;
- 提醒自己,有一个malloc就必须有一个free;
- &pointer->ele与&(pointer->ele);
疑问与质疑
- ARP协议处于网络层和数据链路层中间,在本代码里,ARP协议是直接操纵数据链路层的包头(ether_header),这样不好。我认为应当提供封装好的接口,这样代码可以解耦;
- 为什么实验一和实验二只能ping通入端口,不能ping通出端口?实验二两个主机节点也相互ping不通(router-reference也是如此)
参考资料
相关文章推荐
- 计算机网络原理 2007年版 杨明福 课程代码4741
- 计算机网络安全实验-缓存区溢出攻击II
- 计算机网络实验ethereal
- 计算机网络原理实验一--网线的制作
- 自考计算机网络本科课程通关攻略
- 计算机网络课程(笔记)
- 吴恩达Deeplearning.ai课程:浅层神经网络python实验代码(二)
- 基于eNSP模拟结合实际的计算机网络综合实验(三)
- 计算机网络课程设计先导集:安装Linux FTP服务器
- 计算机网络课程总结(概述,物理层,数据链路层)
- 高职高专计算机网络技术实验实训教程
- 中原工学院 计算机网络 课程期末试卷及类型题
- 课程实验,实现网络图片的查看!
- 《网络系统管理-Windows Server 2003》实验课程-教学大纲
- 计算机网络实验八实验报告——应用Packet Tracer 5.0模拟器工具对WLAN进行配置
- 计算机网络:自顶向下方法(第七版)Wireshark实验指南
- 计算机网络实验二 CDMA 编码 [17/10/25]
- 在校大学生如何学习计算机网络工程师课程----崔常春(Cuisir)
- 计算机网络实验(router_sim)工具
- 计算机网络课程(笔记)