有读者问我:轩辕,你是怎么学计算机网络的?
鸽了好久,今天得空聊聊这个话题。
轩辕是通信工程专业,计算机网络通信自然是必学内容。
我猜,绝大多数同学的计算机网络知识,估计都是在学生时代,抱着谢希仁那本厚厚的《计算机网络》课本,老师念着上个世纪就传承至今的教案PPT得来的。
如果运气好,老师讲的不错,还学的进去。
如果运气不好,老师只是一个PPT播放机的话,那就···
很不幸,我就是运气不好的那种。
老师讲了一大堆协议啊,局域网、广域网、网络设备啥的,我却听着听着经常就神游太虚了。
一次偶然,发现隔壁班的计算机网络是当初教计算机二级的老师在上课,这位老师的讲课风格一直是我非常喜欢的,于是我和两个小伙伴就一起溜进去蹭课,这一蹭不要紧,一下就上了瘾。
这位老师风格独立,根本不用学校发的教材,而是自己编写了一套PPT,从最底层的原理讲起,从通信的编码校验,到局域网的802.3、802.4、802.5等技术演进,用生动有趣到生活实例告诉我们什么是CSMA/CD,听得我们如痴如醉。我现在写的很多故事性的文章,一定程度上都有这位老师的影响。
在我们几个的口口相传下,我们班在上计算机网络课时,门可罗雀,而隔壁班人却越来越多,不知道我们的计算机网络老师看到后心里有何感想。
果然,老师的力量还是很大的,一下子就开了窍似的,学起来简单多了,期末考试轻松拿下100分。
我的经历期末考试结束后就是暑假,我进入学校的网络安全实验室了,进入之后的第一个任务,也是事关我们能否留下来的考核题目来了:编写一个HTTP流量还原的软件。
程序要求:输入一个从wireshark等抓包软件导出的pcap文件,输出这其中所有传输的HTTP内容,包括HTML、CSS、JS、JPEG、PNG、GZIP等等内容。
包括我在内,同批次进入实验室的总共有5个人,大家各自负责不同的协议流量还原,有FTP、SMTP、HTTP、IMAP、POP3,我算运气好的,因为HTTP相对来说是最熟悉的了。
那时刚刚大一暑假,才刚刚学完C语言,虽然已经提前自学了C++,但面临这个题目还是慌了。
最大的问题就是,网络数据包只在课本里学过报文格式,我也没见过真正的数据包长啥样,也不知道在pcap文件里怎么存储的,更不知道如何把HTTP传输的数据给还原出来了。
总之,就是当时对网络流量的认识还停留在类似上面这样的图上,至于数据包长啥样则完全没概念。
有一天晚上,实验室的老师安排了高一届的师兄们给我们讲解了如何抓包,怎么查看网络通信数据。
那是我第一次在抓包软件下看到了网络中数据流量的真实样子,触动特别大,平时躺在书本上的报文格式,现在活生生的出现在了眼前,每一个字节,甚至每一个比特的意义都在抓包软件下看的清清楚楚,原来,网络是可以看到的!
在抓包软件下,网络的分层不再是一个静态的分层模型图,而是看得到的一层又一层的报文头,从链路层的以太网协议,到网络层的IP协议,再到老大难的TCP头部,再到上面的应用层协议,那一串二进制比特流数据,用一棵协议树的形式对应了起来。
那几天,我们都在集中学习抓包,看着自己浏览的网页数据,最后都能在抓包软件中找到它,我对计算机网络的理解开始变得立体起来。
抓包学的差不多,就要开始编写程序完成任务了。