计算机网络太难?如何系统自学计算机网络?
先用一张图打开全文:
我的宫伀号【编程学习指南】有更多编程学习干货,欢迎围观~
关于计算机网络学习的一点感想:
我在大学期间,学习计算机网络课程的教材是谢希仁的《计算机网络》,先不说这本书好不好,至少是非常不适合入门。
枯燥的行文方式,上来就是深入到网络各层的细节,知识点那么多,令人云里雾里,直接劝退。然后考试也是各种死记硬背的题目,令人毫无兴趣。
我的宫伀号【编程学习指南】有更多编程学习干货,欢迎围观~
好的教学方式一定是讲的让别人能听懂,对于初学者,我认为好的方法应该是这样的:
从实际案例出发(比如我们在浏览器输入一个网址到展示出内容中间发生了什么事情)计算机网络出现的背景是什么?遇到了什么问题?是为了解决什么问题?不能一下子就陷入细节,一开始应该快速入门,了解其概貌。入门后,然后再进阶学习,建议从自顶向下的方式来学习。一定要多实战,通过抓包工具查看实际的数据包长啥样,通过动手实现一个聊天工具等。什么是计算机网络?通俗的说,计算机网络是指将各个计算机设备连接起来使其能够相互交换数据和共享资源。这些连接的设备之间使用被称作交换协议的规则来通过物理或无线设施传输信息。
我的宫伀号【编程学习指南】有更多编程学习干货,欢迎围观~
computer network, two or more computers that are connected with one another for the purpose of communicating data electronically. Besides physically connecting computer and communication devices, a network system serves the important function of establishing a cohesive architecture that allows a variety of equipment types to transfer information in a near-seamless fashion. Two popular architectures are ISO Open Systems Interconnection (OSI) and IBM’s Systems Network Architecture (SNA).
一个计算机网络示例:
我的宫伀号【编程学习指南】有更多编程学习干货,欢迎围观~
为什么要学习计算机网络?网络十分重要,在当前这个社会,离开了网络几乎无法生存。
而工作中,无论我们从事哪个方向,我们也必须掌握基础的网络知识。
虽然我们实际写的代码可能只有CRUD,不会亲自写底层框架,但是当我们遇到问题需要排查,或者要做性能优化,那么网络知识必不可少了。
企业级应用,服务器都是集群部署,那么就会涉及服务器之间的网络通信,不管是服务同步调用还是消息中间件异步通信。RPC调用,如果失败了,怎么排查失败原因?失败了是否要重试?消息中间件进行消息通信,消息消费失败,是否要重试?如何保证一致性?
比如我最近就在实际的工作中遇到一个线上问题:
系统中调用一个依赖的下游服务,总是概率性出现报错,maybe write overflow。
通过查阅netty相关资料,发现是参数过大导致超过netty buffer限制,被限流了,这个调用根本没发出去。
后面通过调整JVM参数中netty buffer大小予以解决。
我的宫伀号【编程学习指南】有更多编程学习干货,欢迎围观~
那么计算机网络到底应该如何学习呢?
为什么大家都觉得计算机网络难学啃不动?
学习讲究循序渐进,入门和进阶的学习路线跟大家分享一下:
计算机网络-基础入门(一)视频课程推荐
哈工大-《计算机网络》
https://www.icourse163.org/course/HIT-154005
本课程分为三个单元,分别介绍了计算机网络基础、计算机网络内部原理以及网络安全威胁相关知识。
B站视频:
https://www.bilibili.com/video/av10101468/
(二)书籍推荐
①《网络是怎么连接的》
我的宫伀号【编程学习指南】有更多编程学习干货,欢迎围观~
本书以一个实际的案例开始:浏览器中输入一个网址,到最终浏览器展示内容,中间经历了什么?逐步探索,给出了非常多的图解,讲述了网络的全貌。
图文并茂,通俗易懂,是一本非常棒的网络入门书籍。
②《图解HTTP》
我的宫伀号【编程学习指南】有更多编程学习干货,欢迎围观~
http协议入门书籍,读完对http会有基本认知。
③《图解TCP/IP》
我的宫伀号【编程学习指南】有更多编程学习干货,欢迎围观~
以图文的方式介绍了TCP/IP网络的每一层。
计算机网络-进阶学习(一)国外经典公开课
推荐CS144,具体来说就是跟着cs144的课程安排走一遍,完成课程的lab啦。
课程链接:
https://www.scs.stanford.edu/10au-cs144/
https://cs144.github.io/
视频:
https://www.youtube.com/playlist?list=PLvFG2xYBrYAQCyz4Wx3NPoYJOFjvU7g2Z
我的宫伀号【编程学习指南】有更多编程学习干货,欢迎围观~
不能翻墙的B站也可以看:
https://www.bilibili.com/video/BV1Tt411s7ei/
我的宫伀号【编程学习指南】有更多编程学习干货,欢迎围观~
配套的LAB非常给力,跟着一步一步可以实现一个协议栈。
再推荐一个CS144自己实现的网友学习笔记:
https://zhuanlan.zhihu.com/p/175998415
(二)书籍推荐
①《计算机网络-自顶向下》
我的宫伀号【编程学习指南】有更多编程学习干货,欢迎围观~
这本书堪称计算机网络的圣经书籍,非常经典,被众多海外名校用作教科书。
翻译质量也不错,一层一层进行剖析,而且并不局限于某个具体的协议,从宏观角度来解释计算机网络。
②《TCP/IP详解 卷一》
我的宫伀号【编程学习指南】有更多编程学习干货,欢迎围观~
讲透TCP/IP,英文水平OK的话可以直接读英文原版。
看了那么多理论的书籍,我们还需要结合实战来加强理解。
首先是动手抓包分析,用工具查看报文的详细信息。
抓包书籍推荐:
①《Wireshark网络分析就这么简单》
我的宫伀号【编程学习指南】有更多编程学习干货,欢迎围观~
作者行文幽默风趣,由浅入深的用Wireshark分析了常见的网络协议,还提供了很多实际的案例,通过这些案例可以更好的加深对协议的理解。
②《wireshark网络分析的艺术》
我的宫伀号【编程学习指南】有更多编程学习干货,欢迎围观~
和第一本书是同一个作者,这本书实际中的案例更多。
实战项目推荐开发一些网络工具,如聊天工具、p2p。
推荐网友分享的一些优秀实战项目: