先来说说关于计算机网络学习的一点感想:
我在大学期间,学习计算机网络课程的教材是谢希仁的《计算机网络》,先不说这本书好不好,至少是非常不适合热门。枯燥的行文方式,上来就是深入到网络各层的细节,知识点那么多,令人云里雾里,直接劝退。然后考试也是各种死记硬背的题目,令人毫无兴趣。
好的教学方式一定是讲的让别人能听懂。
计算机专业必看经典书籍(附pdf下载),全部豆瓣评分9.0以上~对于初学者,我认为好的方法应该是这样的:
从实际案例出发(比如我们在浏览器输入一个网址到展示出内容中间发生了什么事情)计算机网络出现的背景是什么?遇到了什么问题?是为了解决什么问题?不能一下子就陷入细节,一开始应该快速入门,了解其概貌入门后,然后再进阶学习,建议从自顶向下的方式来学习一定要多实战,通过抓包工具查看实际的数据包长啥样,通过动手实现一个聊天工具等一张图来开始本回答的正式内容:
Part 1:什么是计算机网络?维基百科给出的解释:
计算机网络(英语:computer network),通常也简称网络,是指容许节点分享资源的数字电信网络。在电脑网络,电脑设备会透过节点之间的连接(数据链路)互相交换数据。传输介质可分为有线及无线两类——有线的可用到双绞线、光纤电缆等介质;无线则可用到Wi-Fi、NFC。通俗的说,计算机网络是指将各个计算机设备连接起来使其能够相互交换数据和共享资源。这些连接的设备之间使用被称作交换协议的规则来通过物理或无线设施传输信息。
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).

一个计算机网络示例:
Part 2:为什么要学习计算机网络?网络十分重要,在当前这个社会,离开了网络几乎无法生存。
而工作中,无论我们从事哪个方向,我们也必须掌握基础的网络知识。
虽然我们实际写的代码可能只有CRUD,不会亲自写底层框架,但是当我们遇到问题需要排查,或者要做性能优化,那么网络知识必不可少了。
企业级应用,服务器都是集群部署,那么就会涉及服务器之间的网络通信,不管是服务同步调用还是消息中间件异步通信。RPC调用,如果失败了,怎么排查失败原因?失败了是否要重试?消息中间件进行消息通信,消息消费失败,是否要重试?如何保证一致性?我最近就在实际的工作中遇到一个线上问题,系统中调用一个依赖的下游服务,总是概率性出现报错,maybe write overflow。通过查阅netty相关资料,发现是参数过大导致超过netty buffer限制,被限流了,这个调用根本没发出去。后面通过调整JVM参数中netty buffer大小予以解决。
计算机专业必看经典书籍(附pdf下载),全部豆瓣评分9.0以上~Part 3:入门阶段视频课程推荐:
哈工大-《计算机网络》
https://www.icourse163.org/course/HIT-154005
本课程分为三个单元,分别介绍了计算机网络基础、计算机网络内部原理以及网络安全威胁相关知识。
B站视频:https://www.bilibili.com/video/10101468/
下面是书籍推荐:
(1)《网络是怎么连接的》
本书以一个实际的案例开始:浏览器中输入一个网址,到最终浏览器展示内容,中间经历了什么?逐步探索,给出了非常多的图解,讲述了网络的全貌。图文并茂,通俗易懂,是一本非常棒的网络入门书籍。
(2)《图解HTTP》
http协议入门书籍,读完对http会有基本认知。
(3)《图解TCP/IP》
以图文的方式介绍了TCP/IP网络的每一层。
Part 4:进阶学习国外经典公开课:
CS144课程链接:
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
书籍推荐:
(1)《计算机网络-自顶向下》
这本书堪称计算机网络的圣经书籍,非常经典,被众多海外名校用作教科书。翻译质量也不错,一层一层进行剖析,而且并不局限于某个具体的协议,从宏观角度来解释计算机网络。
(2)《TCP/IP卷一》
讲透TCP/IP,英文水平OK的话可以直接读英文原版。
看了那么多理论的书籍,我们还需要结合实战来加强理解。
首先是动手抓包分析,用工具查看报文的详细信息。
抓包书籍推荐:
(1)《Wireshark网络分析就这么简单》
作者行文幽默风趣,由浅入深的用Wireshark分析了常见的网络协议,还提供了很多实际的案例,通过这些案例可以更好的加深对协议的理解。
(2)《wireshark网络分析的艺术》
和第一本书是同一个作者,这本书实际中的案例更多。
Part 5:实战开发一些网络工具,如聊天工具、p2p。
推荐网友分享的一些优秀实战项目:
(1)浅谈ja实现一个聊天软件:
https://netcan.github.io/2016/12/15/%E6%B5%85%E8%B0%88Ja%E5%AE%9E%E7%8E%B0%E4%B8%80%E4%B8%AA%E8%81%8A%E5%A4%A9%E8%BD%AF%E4%BB%B6/
(2)ja实现简单的聊天工具:
https://www.jianshu.com/p/fd7352adf0ef
(3)J-IM:JA语言开发的轻量、高性能、单机支持几十万至百万在线用户IM
https://gitee.com/xchao/j-im
Part 6:一些推荐学习网站RFC:https://www.ietf.org/standards/rfcs/tutorialspoint:https://www.tutorialspoint.com/computer_fundamentals/computer_networking.htmgeeksforgeeks:https://www.geeksforgeeks.org/basics-computer-networking/最后再来唠叨几句:
学习计算机一定不要想着速成,没有什么捷径和超能力。要下苦功夫去啃那些经典书和源码,然后自己动手写,所有技术大佬都是一行行代码敲,一本本书啃出来的。
我看过的书籍里的一部分我在大学期间,为了把专业学好,看了大量经典的专业书籍,整理了这份计算机必读的高分经典书籍:
需要的戳下面链接下载这份书单对于CS学习的同学帮助非常大且十分系统,这些书籍的电子版已经整理好了。
需要的直接戳这里领:计算机必看经典书籍(附pdf下载),请注意查收~
我的下面这些回答如果感兴趣的话也可以一起看看:
1、计算机专业如何高质量的走完大学四年?毕业成为offer收割机?
没学过计算机竞赛的大学计算机萌新,应该怎么弥补和竞赛大佬的差距?342 赞同 · 9 评论回答343 赞同 · 9 评论回答346 赞同 · 9 评论回答346 赞同 · 9 评论回答2、给计算机大一新生的建议,获得了7900+赞和收藏:
有哪些给计算机科学与技术专业大一新生的建议?3、关于大学四年的专业课学习规划,我之前写过一个2万+字的回答,非常之详细:
计算机专业应该怎样规划自己的大学四年,如果要自学,从什么开始比较好?4、阿里老学长的血泪经验贴,看完你肯定会有所收获:
一个优秀的计算机系学生应该有哪些好习惯?5、大厂校招计算机专业学生最看重的5点:
大厂校招计算机专业学生看重什么?6、学习语言的话,首先多看专业书籍,另外就是多实战,熟能生巧。
以Ja为例,Ja技术栈的学习路径可以按照下面来安排:
夏天:零基础自学从入门到进阶,有什么值得推荐的Ja书籍?如果是C++,可以按照下面的学习路径:
自学C语言和C++,有什么好书推荐吗?希望本回答能对你有所帮助~