怎么学好计算机网络?

转载---------------------知乎

我觉得正确的学习方法应该是边学理论边动手实践。

动手包括两类方法,一类是用一些命令行工具进行观测,另外一类就是用 socket 来写程序。

我建议首先要准备一台 Linux 电脑。在 Linux 下有很多成熟的网络相关的工具可供你使用。现在国内的互联网公司的服务器基本上也都是 Linux。而且用 Linux 有个好处就是源码是公开的。实在遇到不懂的问题,可以更容易地搜答案。这点比 Windows 强太多了。

                对于第一类动手观测法,我的建议是你学到某一层的时候,就找到一些相关的工具来做几个实验。比如讲到 TCP 的时候,你可以启动一个 Nginx(或者干脆自己写一个 Server),用 curl 等工具发起 TCP 连接建立请求。这时候用 tcpdump 动手进行抓包,看看三次握手究竟是怎么握的。 看看每次握手的时候,包体究竟是长什么样的。我把 linux 下常用的各种网络工具简单整理几个,各位有需要可以保存下来。<img src="https://pic1.zhimg.com/50/v2-7ad1eceab9db04af13c949e00caa35ce_720w.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="1256" data-rawheight="1358" data-default-watermark-src="https://pic1.zhimg.com/50/v2-870bdc575d1d0b4d9e0a4870ed59b615_720w.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="1256" data-original="https://pica.zhimg.com/v2-7ad1eceab9db04af13c949e00caa35ce_r.jpg?source=1940ef5c"/>

                第二类方法就是动手编程。刚开始可以从一些简单的开始,比如就写个 tcp server, tcp client 让他们相互连接然后传输一些简单的数据。然后可以开始练一些更为复杂一点的。比如写一套 FTP Server 和 Client, 让它们之间能够实现简单的文件下载。或者写一个 Web Server,支持通过浏览器来下载 Web Server 上的静态文件。再比如说模拟 tcpdump 来写一个抓包工具。(可以参考我的这篇文章,里面提供了一个简单的 demo)。做完这些相信你对网络的理解会前进一大步。对于我个人来讲,我也是一直通过理论 + 实践的方法来对知识进行学习的,效果很好。比如我在网络中,我想弄懂一条空的 TCP 连接消耗多大的内存。我自己在工作之余抽了好长时间去翻内核源码,然后动手做实验。当实验完成的时候,我对 TCP 连接的内存开销的理解就非常的深了。

posted @ 2023-03-09 21:16  长河饮马、  阅读(42)  评论(0编辑  收藏  举报