读者问:怎么学操作系统和计算机网络呀?

2024-03-16 03:18

本文主要是介绍读者问:怎么学操作系统和计算机网络呀?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近收到不少读者留言,关于怎么学「操作系统」和「计算机网络」的留言,小林写这一块的内容也有半年多了,啃非常多的书,也看了很多视频,有好的有差的,今天就掏心掏肺地分享给大家。

操作系统和计算机网络有多重要呢?如果没有操作系统,我们的手机和电脑可以说是废铁了,自然它们都没有使用价值了,另外如果没有计算机网络,我们的手机和电脑就是一座「孤岛」了,孤岛的世界很单调,也没有什么色彩,也正是因为计算机网络,才创造出这么丰富多彩的互联网世界。

身为程序员的我们,那更应该深刻理解和掌握它们,虽然我们日常 CURD 的工作中,即使不熟悉它们,也不妨碍我们写代码,但是当出现问题时,没有这些基础知识,你是无厘头的,根本没有思路下手,这时候和别人差距就显现出来了,可以说是程序员之间的分水岭。

事实上,我们工作中会有大量的时间都是在排查和解决问题,编码的时间其实比较少,如果计算机基础学的很扎实,虽然不敢保证我们能 100% 解决,但是至少遇到问题时,我们有一个排查的方向,或者直接就定位到问题所在,然后再一步一步尝试解决,解决了问题,自然就体现了我们自身的实力和价值,职场也会越走越远。

我自己工作中就深刻体会到了它们多重要性,我最近项目就遇到 TCP 比较底层的问题,我们的一个 Web 服务运行久之后,就无法与客户端正常建立连接了,使用 tcpdump 抓包发现 TCP 三次握手过程中,服务端把客户端握手过程中最后 1 个 ack 给丢掉了。

刚开始觉得非常的莫名奇妙,后面想起自己写过一篇 TCP 半连接和全连接队列的文章,就往这个方向排查问题,于是执行 netstat -s  命令查看 TCP error 相关的信息,发现 TCP 全连接队列溢出了,接着再通过 ss -lnt 命令进一步确认,当前 TCP 全连接队列确实超过了 TCP 全连接队列最大值,这个问题就很快定位出来了。

另外,当 TCP 全连接队列溢出后,由于 tcp_abort_on_overflow 内核参数默认为 0,所以服务端会丢掉客户端发过来的 ack,如果你把该参数设置为 1,那现象将变成,服务端会给客户端发送 RST 报文,废弃掉连接。

那要扩大全连接队列也不难,TCP 全连接队列最大值取决于 somaxconn 和 backlog 之间的最小值,也就是 min(somaxconn, backlog),其中 somaxconn 是内核参数,而 backlog 是我们程序 listen 方法中指定的参数。

上面这个小例子,很明显是无法通过看应用层的代码来解决的,必须了解 TCP 的机制,才能找到解决之道。

铺垫了那么多,接下里进入正题。


计算机网络怎么学?

计算机网络相比操作系统好学非常多,因为计算机网络不抽象,你要想知道网络中的细节,你都可以通过抓包来分析,而且不管是手机、个人电脑和服务器,它们所使用的计算网络协议是一致的。

也就是说,计算机网络不会因为设备的不同而不同,大家都遵循这一套「规则」来相互通信,这套规则就是 TCP/IP 网络模型。

OSI 参考模型与 TCP/IP 的关系

TCP/IP 网络参考模型共有 4 层,其中需要我们熟练掌握的是应用层、传输层和网络层,至于网络接口层(数据链路层和物理层)我们只需要做简单的了解就可以了。

对于应用层,当然重点要熟悉最常见的 HTTP 和 HTTPS,传输层 TCP 和 UDP 都要熟悉,网络层要熟悉 IPv4,IPv6 可以做简单点了解。

我觉得学习一个东西,就从我们常见的事情开始着手。

比如, ping 命令可以说在我们判断网络环境的时候,最常使用的了,你可以先把你电脑 ping 你舍友或同事的电脑的过程中发生的事情都搞明白,这样就基本知道一个数据包是怎么转发的了,于是你就知道了网络层、数据链路层和物理层之间是如何工作,如何相互配合的了。

搞明白了 ping 过程,我相信你学起 HTTP 请求过程的时候,会很快就能掌握了,因为网络层以下的工作方式,你在学习 ping 的时候就已经明白了,这时就只需要认真掌握传输层中的 TCP 和应用层中的 HTTP 协议,就能搞明白访问网页的整个过程了,这也是面试常见的题目了,毕竟它能考察你网络知识的全面性。

重中之重的知识就是 TCP 了,TCP 不管是建立连接、断开连接的过程,还是数据传输的过程,都不能放过,针对数据可靠传输的特性,又可以拆解为超时重新、流量控制、滑动窗口、拥塞控制等等知识点,学完这些只能算对 TCP 有个「感性」的认识,另外我们还得知道 Linux 提供的 TCP 内核的参数的作用,这样才能从容地应对工作中遇到的问题。

接下来,推荐我看过并觉得不错的计算机网络相关的书籍和视频。

入门系列

此系列针对没有任何计算机基础的朋友,如果已经对计算机轻车熟路的大佬,也不要忽略,不妨看看我推荐的正确吗。

如果你要入门 HTTP,首先最好书籍就是《图解 HTTP》了,作者真的做到完完全全的「图解」,小林的图解功夫还是从这里偷学到不少,书籍不厚,相信优秀的你,几天就可以看完了。

《图解 HTTP》

如果要入门 TCP/IP 网络模型,我推荐的是《图解 TCP/IP》,这本书也是以大量的图文来介绍了 TCP/IP 网络模式的每一层,但是这个书籍的顺序不是从「应用层 —> 物理层」,而是从「物理层 -> 应用层」顺序开始讲的,这一点我觉得不太好,这样一上来就把最枯燥的部分讲了,很容易就被劝退了,所以我建议先跳过前面几个章节,先看网络层和传输层的章节,然后再回头看前面的这几个章节。

《图解 TCP/IP》

另外,你想了解网络是怎么传输,那我推荐《网络是怎样连接的》,这本书相对比较全面的把访问一个网页的发生的过程讲解了一遍,其中关于电信等运营商是怎么传输的,这部分你可以跳过,当然你感兴趣也可以看,只是我觉得没必要看。

《网络是怎样连接的》

如果你觉得书籍过于枯燥,你可以结合 B 站《计算机网络微课堂》视频一起学习,这个视频是湖南科技大学老师制作的,PPT 的动图是我见过做的最用心的了,一看就懂的佳作。

《计算机网络微课堂》

B 站视频地址:

https://www.bilibili.com/video/BV1c4411d7jb?p=1

深入学习系列

看完入门系列,相信你对计算机网络已经有个大体的认识了,接下来我们也不能放慢脚步,快马加鞭,借此机会继续深入学习,因为隐藏在背后的细节还是很多的。

对于 TCP/IP 网络模型深入学习的话,推荐《计算机网络 - 自顶向下方法》,这本书是从我们最熟悉 HTTP 开始说起,一层一层的说到最后物理层的,有种挖地洞的感觉,这样的内容编排顺序相对是比较合理的。

《计算机网络 - 自顶向下方法》

但如果要深入 TCP,前面的这些书还远远不够,赋有计算机网络圣经的之说的《TCP/IP 详解 卷一:协议》这本书,是进一步深入学习的好资料,这本书的作者用各种实验的方式来细说各种协议,但不得不说,这本书真的很枯燥,当时我也啃的很难受,但是它质量是真的很高,这本书我只看了 TCP 部分,其他部分你可以选择性看,但是你一定要过几遍这本书的 TCP 部分,涵盖的内容非常全且细。

《TCP/IP 详解 卷一:协议》

要说我看过最好的 TCP 资料,那必定是《The TCP/IP GUIDE》这本书了,目前只有英文版本的,而且有个专门的网址可以白嫖看这本书的内容,图片都是彩色,看起来很舒服很鲜明,小林之前写的 TCP 文章不少案例和图片都是参考这里的,这本书精华部分就是把 TCP 滑动窗口和流量控制说的超级明白,很可惜拥塞控制部分说的不多。

《The TCP/IP GUIDE》

白嫖站点:

http://www.tcpipguide.com/free/t_TCPSlidingWindowAcknowledgmentSystemForDataTranspo-6.htm

当然,计算机网络最牛逼的资料,那必定 RFC 文档,它可以称为计算机网络世界的「法规」,也是最新、最权威和最正确的地方了,困惑大家的 TCP 为什么三次握手和四次挥手,其实在 RFC 文档几句话就说明白了。

TCP 协议的 RFC 文档:

https://datatracker.ietf.org/doc/rfc1644/

实战系列

在学习书籍资料的时候,不管是 TCP、UDP、ICMP、DNS、HTTP、HTTPS 等协议,最好都可以亲手尝试抓数据报,接着可以用 Wireshark 工具看每一个数据报文的信息,这样你会觉得计算机网络没有想象中那么抽象了,因为它们被你「抓」出来了,并毫无保留地显现在你面前了,于是你就可以肆无忌惮地「扒开」它们,看清它们每一个头信息。

那在这里,我也给你推荐 2 本关于 Wireshark 网络分析的书,这两本书都是同一个作者,书中的案例都是源于作者工作中的实际的案例,作者的文笔相当有趣,看起来堪比小说一样爽,相信你不用一个星期 2 本都能看完了。

《Wireshark 网络分析就这么简单》 与 《Wireshark 网络分析的艺术》

操作系统怎么学?

操作系统真的可以说是 Super Man,它为了我们做了非常厉害的事情,以至于我们根本察觉不到,只有通过学习它,我们才能深刻体会到它的精妙之处,甚至会被计算机科学家设计思想所震撼,有些思想实际上也是可以应用于我们工作开发中。

操作系统比较重要的四大模块,分别是内存管理、进程管理、文件系统管理、输入输出设备管理。这是我学习操作系统的顺序,也是我推荐给大家的学习顺序,因为内存管理不仅是最重要、最难的模块,也是和其他模块关联性最大的模块,先把它搞定,后续的模块学起来我认为会相对轻松一些。

学习的过程中,你可能会遇到很多「虚拟」的概念,比如虚拟内存、虚拟文件系统,实际上它们的本质上都是一样的,都是向下屏蔽差异,向上提供统一的东西,以方便我们程序员使用。

还有,你也遇到各种各样的调度算法,在这里你可以看到数据结构与算法的魅力,重要的是我们要理解为什么要提出那么多调度算法,你当然可以说是为了更快更有效率,但是因什么问题而因此引入新算法的这个过程,更是我们重点学习的地方。

你也会开始明白进程与线程最大的区别在于上下文切换过程中,线程不用切换虚拟内存,因为同一个进程内的线程都是共享虚拟内存空间的,线程就单这一点不用切换,就相比进程上下文切换的性能开销减少了很多。由于虚拟内存与物理内存的映射关系需要查询页表,页表的查询是很慢的过程,因此会把常用的地址映射关系缓存在 TLB 里的,这样便可以提高页表的查询速度,如果发生了进程切换,那 TLB 缓存的地址映射关系就会失效,缓存失效就意味着命中率降低,于是虚拟地址转为物理地址这一过程就会很慢。

你也开始不会傻傻的认为 read 或 write 之后数据就直接写到硬盘了,更不会觉得多次操作 read 或 write 方法性能会很低,因为你发现操作系统会有个「磁盘高速缓冲区」,它已经帮我们做了缓存的工作,它会预读数据、缓存最近访问的数据,以及使用 I/O 调度算法来合并和排队磁盘调度 I/O,这些都是为了减少操作系统对磁盘的访问频率。

……

还有太多太多了,我在这里就不赘述了,剩下的就交给你们在学习操作系统的途中去探索和发现了。

还有一点需要注意,学操作系统的时候,不要误以为它是在说 Linux 操作系统,这也是我初学的时候犯的一个错误,操作系统是集合大多数操作系统实现的思想,跟实际具体实现的 Linux 操作系统多少都会有点差别,如果要想 Linux 操作系统的具体实现方式,可以选择看 Linux 内核相关的资料,但是在这之前你先掌握了操作系统的基本知识,这样学起来才能事半功倍。

入门系列

对于没学过操作系统的小白,我建议学的时候,不要直接闷头看书。相信我,你不用几分钟就会打退堂鼓,然后就把厚厚的书拿去垫显示器了,从此再无后续,毕竟直接看书太特喵的枯燥了,当然不如用来垫显示器玩游戏来着香。

B 站关于操作系统课程资源很多,我在里面也看了不同老师讲的课程,觉得比较好的入门级课程是《操作系统 - 清华大学》,该课程由清华大学老师向勇和陈渝授课,虽然我们上不了清华大学,但是至少我们可以在网上选择听清华大学的课嘛。课程授课的顺序,就如我前面推荐的学习顺序:「内存管理 -> 进程管理 -> 文件系统管理 -> 输入输出设备管理」。

《操作系统 - 清华大学》

B 站清华大学操作系统视频地址:

https://www.bilibili.com/video/BV1js411b7vg?from=search&seid=2361361014547524697

该清华大学的视频教学搭配的书应该是《现代操作系统》,你可以视频和书籍两者结合一起学,比如看完视频的内存管理,然后就看书上对应的章节,这样相比直接啃书相对会比较好。

《现代操作系统》

清华大学的操作系统视频课讲的比较精炼,涉及到的内容没有那么细,《操作系统 - 哈工大》李治军老师授课的视频课程相对就会比较细节,老师会用 Linux 内核代码的角度带你进一步理解操作系统,也会用生活小例子帮助你理解。

《操作系统 - 哈工大》

B 站哈工大操作系统视频地址:

https://www.bilibili.com/video/BV1d4411v7u7?from=search&seid=2361361014547524697

深入学习系列

《现代操作系统》这本书我感觉缺少比较多细节,说的还是比较笼统,而且书也好无聊。

推荐一个说的更细的操作系统书 —— 《操作系统导论》,这本书不仅告诉你 What,还会告诉你 How,书的内容都是循序渐进,层层递进的,阅读起来还是觉得挺有意思的,这本书的内存管理和并发这两个部分说的很棒,这本书的中文版本我也没找到资源,不过微信读书可以免费看这本书。

《操作系统导论》

当然,少不了这本被称为神书的《深入理解计算机系统》,豆瓣评分高达 9.8 分,这本书严格来说不算操作系统书,它是以程序员视角理解计算机系统,不只是涉及到操作系统,还涉及到了计算机组成、C 语言、汇编语言等知识,是一本综合性比较强的书。

《深入理解计算机系统》

它告诉我们计算机是如何设计和工作的,操作系统有哪些重点,它们的作用又是什么,这本书的目标其实便是要讲清楚原理,但并不会把某个话题挖掘地过于深入,过于细节。

看看这本书后,我们就可以对计算机系统各组件的工作方式有了理性的认识。在一定程度上,其实它是在锻炼一种思维方式 —— 计算思维。


最后

文中推荐的书,我都已经把电子书整理好给大家了,只需要扫描下方二维码,后台回复「我要学习」,即可获取百度网盘下载链接,但是需要注意的是,压缩包都是加密的,解压密码是「xiaolin123」,目的是防止链接失效。

????长按上方二维码 2 秒
回复「我要学习」即可获取资料

好了,本次的分享就到这里了,不知道推荐的书和视频是否和你的「口味」,同时也 欢迎你在留言区里分享你是怎么学习它们的,又有什么好书推荐给大家呢?

这篇关于读者问:怎么学操作系统和计算机网络呀?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/814105

相关文章

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。

速盾高防cdn是怎么解决网站攻击的?

速盾高防CDN是一种基于云计算技术的网络安全解决方案,可以有效地保护网站免受各种网络攻击的威胁。它通过在全球多个节点部署服务器,将网站内容缓存到这些服务器上,并通过智能路由技术将用户的请求引导到最近的服务器上,以提供更快的访问速度和更好的网络性能。 速盾高防CDN主要采用以下几种方式来解决网站攻击: 分布式拒绝服务攻击(DDoS)防护:DDoS攻击是一种常见的网络攻击手段,攻击者通过向目标网

禁止复制的网页怎么复制

禁止复制的网页怎么复制 文章目录 禁止复制的网页怎么复制前言准备工作操作步骤一、在浏览器菜单中找到“开发者工具”二、点击“检查元素(inspect element)”按钮三、在网页中选取需要的片段,锁定对应的元素四、复制被选中的元素五、粘贴到记事本,以`.html`为后缀命名六、打开`xxx.html`,优雅地复制 前言 在浏览网页的时候,有的网页内容无法复制。比如「360

计算机网络基础概念 交换机、路由器、网关、TBOX

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、VLAN是什么?二 、交换机三、路由器四、网关五、TBOXTelematics BOX,简称车载T-BOX,车联网系统包含四部分,主机、车载T-BOX、手机APP及后台系统。主机主要用于车内的影音娱乐,以及车辆信息显示;车载T-BOX主要用于和后台系统/手机APP通信,实现手机APP的车辆信息显示与控

Wondows dos下怎么编写bat批处理文件

最近搞php,在运行时,以Nginx+php-cgi.exe方式运行Wordpress项目 打开dos,先cd到php-cgi.exe文件当前目录下执行启动命令:php-cgi.exe -b 127.0.0.1:9001再打开一个dos,再cd到nginx.exe文件当前目录下执行启动命令:start nginx 大概过程要经过这些步骤,觉得很麻烦,就学下怎么编写一个bat文件,以双击运行代替