想要成为一流的 PostgreSQL 内核工程师,就必须对计算机网络有良好的了解,因此,依托于《计算机网络》,我展开了学习,并将学习的心得,记录于此。
计算机网络关注的核心问题,就是信息的交换问题,换而言之,找出一种合理有效的方式,对计算机的数据进行传输。
我们将从两个角度对计算机网络进行考察。
宏观层面:金字塔式的万物互联
所有的数据传输,归根结底就是电子信号的传输,而布局于各个城市的有线网络,就这么串珠成链式地搭建起了全球互联的骨架。
而无线网络(如 WiFi,卫星)等,也只是为各个设备接入有线网络而服务的。
因此,宏观层面地网络实际上就是一张巨大的网络,他们包罗万象,但并不无序,事实上,他们保持着金字塔式的结构,逐层上升,最终到到“全球 ISP"的顶点。
但是对于我们而言,我们一般喜欢从微观层面研究我们的网络,因为这更加符合我们日常开发的特点。
微观层面:两台主机的互联互通
在宏观层面上,我们的网络,是金字塔式的,但是在微观的角度上面看,我们的网络,就成为了“点对点"的见面。
换而言之,我们可以将其理解为“主机连接主机"
区别就在于,两台主机,究竟是直接连接,还是需要经过中转站,进行间接连接。
开发者层面:远程文件读写
同时,我们也要看到,在实际的开发之中,操作系统的存在让一切变得更加简单,一方面,操作系统屏蔽了硬件操作的细节,让硬件资源的管理负担在开发者这一层几近于无,而另一方面,操作系统对我们开放了大量的操作系统调用接口,用简化的设计帮助我们更有效的开发程序。
以我们开发 PostgreSQL 时所使用的 Linux 操作系统为案例,它将网络数据包的收发,抽象为了“远程文件读写"。
而其它复杂的管理工作,则由操作系统进行代劳。
我们只需要关注:
- 我们需要连接到哪个网络地址(类比为打开一个已知地址的文件)
- 我们需要读写多少数据(类比于读写文件)
- 我们是否需要结束连接(类比于关闭文件)
当然,在实际开发之中,情况远远比这三点复杂,而我们在这里所提及的关注点,更加类似于客户端的思路,这就需要引入新的理念与新的知识。
这超出了本文的篇幅,所以我打算放在后面进行讨论。