近段时间趁着寒假的功夫,打开了尘封了一段时间的《计算机网络:自顶向下方法(原书第七版)》( Computer Networking: A Top-Down Approach (Seventh Edition ))。在学习的时候,深感计算机网络相关的内容繁多而有趣。于是打算归纳整理书中所学相关知识,结合曾经的开发经验,写一系列计算机网络相关的文章,为日后考研复习使用,也与网上诸位分享,共同探讨这里面的问题。
想起大概初中的时候,当时找了很多博客,学会了一丁点 socket 的用法便沾沾自喜。而每每计算机课被老师用极域电子教室控制机器的沮丧,提高了我对计算机网络和系统编程的兴趣。回想那时候也是艰难,在一台 1G 内存跑着 Windows XP 系统的笔记本上,再运行两台虚拟机,分别装上极域电子教室学生机和教师机,就这样开始抓包了。最开始用的是一个叫做科来网络分析系统的软件,类似 Wireshark,左侧的树状控件对各种网络协议和地址进行了分类,用起来十分方便。后来好像停止维护,就转向了 Wireshark。
——请允许我接着絮叨絮叨。当时通过 抓包-改参数-再抓包
分析,得到了几个极域电子教室数据包的格式,我便写了程序以教师机的身份模拟和发送这些数据包,初步实验的时候因为临近会考,便停了下,之后的一年却没有计算机课了,项目便烂了尾(说难听点,还没开头)。当时在这项目里面产生了两个需求:数据包的封装/拆包和收发包。我花了很长时间才知道了“序列化”和“反序列化”这一组词,但是网上的序列化库使用了私有格式对数据进行打包,并不能满足我的要求(譬如,他们会给每个段进行起止标记,并附上大小以便扩展),我尝试了自己实现一个对于确定、不变的协议(往通用了说,可以是 TCP / UDP)进行序列化和反序列化操作的库,不过当时没能完成。再说收发包这块,我尝试用 Winpcap 库,驱动级捕获和发送数据包,因此是直接基于链路层的。我也第一次接触了应用层以外的链路层、网络层和传输层协议。使用 Winpcap 库的过程,免不了与 libpcap 英文文档打交道,更免不了头大,只能渐渐地习惯。而在此过程中,我也愈发喜欢底层开发,体验到底层程序可以干预上层程序的随心所欲。站在今天的角度回忆这件事情,我更多的是去思考如何确保通信安全。
突然感谢自己还有这些回忆。静下来写文章是一种奢侈,在学校的日子感觉自己很忙——又不得不忙活,大概是因为很多事情不得不做吧。在家自然是清净、踏实,少一份喧嚣、多一份自我。希望这一系列博文能满足六年前那个熊孩子的好奇心,鞭策他不断成长。
目录
TODO