Data to Drag
关于这门课,首先强烈推荐参考书是机械工业出版社的《计算机网络——自顶向下方法》。该书目录清晰,按照 TCP/IP 五层模型逐层讲解,对每层涉及的技术都展开了详细讨论,基本上高校里开设的课程的教学大纲就是这本书的目录了。
如果你觉得上面这本书看着比较枯燥的话,我强烈推荐 安利你看看下面这两本非常有趣的网络相关的书籍:
- 《图解 HTTP》 : 讲漫画一样的讲 HTTP,很有意思,不会觉得枯燥,大概也涵盖也 HTTP 常见的知识点。因为篇幅问题,内容可能不太全面。不过,如果不是专门做网络方向研究的小伙伴想研究 HTTP 相关知识的话,读这本书的话应该来说就差不多了。
- 《网络是怎样连接的》 :从在浏览器中输入网址开始,一路追踪了到显示出网页内容为止的整个过程,以图配文,讲解了网络的全貌,并重点介绍了实际的网络设备和软件是如何工作的。
如果说学习计算机网络要围绕的 TCP/IP 五层模型逐层展开学习的话,那么针对每层的学习,就要以协议为单位了。一言以蔽之,我们学习计算机网络需要的协议有:
应用层协议
- HTTP 协议(超文本传输协议,网页浏览常用的协议)
- DHCP 协议(动态主机配置)
- DNS 系统原理(域名系统)
- FTP 协议(文件传输协议)
- 电子邮件协议等(SMTP、POP3、IMAP)
- P2P 架构
传输层协议
- TCP 协议
- 报文段结构
- 可靠数据传输
- 流量控制
- 拥塞控制
- UDP 协议
- 报文段结构
- RDT(可靠数据传输协议)
- 网络层协议
- IP 协议(TCP/IP 协议的基础,分为 IPv4 和 IPv6)
- ARP 协议(地址解析协议,用于解析 IP 地址和 MAC 地址之间的映射)
- ICMP 协议(控制报文协议,用于发送控制消息)
- NAT 协议(网络地址转换协议)
- RIP 协议、OSPF 协议、BGP 协议(路由选择协议)
- 链路层
- 差错检测技术
- 多路访问协议(信道复用技术)
- CSMA/CD 协议
- MAC 协议
- 以太网技术
- 物理层(对计算机专业的小伙伴来说,在课程要求中,物理层的内容可能相对不那么重要)
操作系统也是一门比较重要的学科。为何这样说呢?
操作系统中的很多思想、很多经典的算法,你都可以在我们日常开发使用的各种工具或者框架中找到它们的影子。
比如说我们开发的系统使用的缓存(比如 Redis)和操作系统的高速缓存就很像。CPU 中的高速缓存有很多种,不过大部分都是为了解决 CPU 处理速度和内存处理速度不对等的问题。我们还可以把内存可以看作外存的高速缓存,程序运行的时候我们把外存的数据复制到内存,由于内存的处理速度远远高于外存,这样提高了处理速度。同样地,我们使用的 Redis 缓存就是为了解决程序处理速度和访问常规关系型数据库速度不对等的问题。
高速缓存一般会按照局部性原理(2-8 原则)根据相应的淘汰算法保证缓存中的数据是经常会被访问的。我们平常使用的 Redis 缓存很多时候也会按照 2-8 原则去做,很多淘汰算法都和操作系统中的类似。
既说了 2-8 原则,那就不得不提命中率了,这是所有缓存概念都通用的。简单来说也就是你要访问的数据有多少能直接在缓存中直接找到。命中率高的话,一般表明你的缓存设计比较合理,系统处理速度也相对较快。
总结来说,我觉得学好操作系统能够提高自己思考的深度以及对技术的理解力。
如果你要系统地学习操作系统的话,最硬核最权威的书籍是《操作系统导论》 。你可以再配套一个 《深入理解计算机系统》 加深你对计算机系统本质的认识,美滋滋!
如果你比较喜欢动手,对于理论知识比较抵触的话,我推荐你看看《30 天自制操作系统》,这本书会手把手教你编写一个操作系统。