封面

图灵出的网络基础相关的书我也看了不少了,像《HTTP权威指南》、《图解HTTP》、《HTTPS权威指南:在服务器和Web应用上部署SSL/TLS和PKI》、《HTTP 小书》专门讲述 HTTP/HTTPS协议;《图解TCP/IP》、《TCP/IP详解》专门介绍TCP/IP协议;《图解网络硬件》、《图解服务器端网络架构》、《以太 网权威指南》则主要介绍网络硬件。像本书一样囊括主要的网络协议、网络硬件等综合性的书,图灵倒好像是出的第一本。 要说类似本书这样介绍网络基础原理的书,市面其实还是很多的,一般名字就叫《计算机网络原理/计算机网络概论》,通常出自各大学出版社,如果你是计算机系的学生,那这门课是要必过的。但是这些都是典型的教材风格,内容嘛,大概只能以枯燥来形容,要不是为了考试,你可能是很难啃下去的。而《网络是怎样连接的》这本书的原版(日文)竟然已经重印了32次,号称“蹲马桶就能看懂”,并且适合“向老妈、女友等普及计算机知识”,究竟是如何做到?让我们来看一看吧……


全书围绕着一张网络旅程地图来说,每一章的内容都在这张图上 ——

万一在旅途中迷失了方向,请务必回来看一看这张地图

探索之旅路线图

如果打开几本大学版《计算机网络》的目录,你会发现,它们的目录几乎都是一样的:第一章:概述、第二章:物理层、第3章:数据链路层、第4章:网络层、第5章:传输层、第6章:应用层、第7章:网络安全。按部就班的介绍网络协议栈的每一层,而且还是从离用户“最远”的物理层说起。

本书没有采用这种套路,而是从每个网民都会的“上网”(三步:打开浏览器、输入网址、浏览网页)这件事说开去,揭示了“上网”背后的全过程。作者从“上网”这个常见的场景切入,把整个网络的全貌清晰地展现出来,并引导着读者在思考“网络是怎样连接的”过程中层层递进,环环相扣的不断追问与回答。并最终“实现” “不理解网络的全貌,也就无法理解每一种网络技术背后的本质意义”的目标。


本书的特点不是生硬的列出概念,而是用比较浅显易懂的词语来解释概念,比如以DNS域名结构为例:

某《计算机网络原理》教材中如是说——

在分层结构的DNS域名中,必须有一个是顶级域名,然后在这个顶级域名下面再申请,或者注册二级、三级,甚至更多级别的域名,各级域名间同样是以小圆点(.)分隔、连接的。最右边的部分代表的是顶级域名,左边部分代表的是子域名,而且是级别最低的域名写在最前面,级别最高的域名写在最后面。下级域名必须隶属于上级域名。例如,itct.com.cn这个DNS域名是一个三级域名,其中itct是三级域名(在本域名中级别最低),它隶属于其二级域名com,而二级域名com又隶属于其一级域名(又称顶级域名)cn。

《网络是怎样连接的》则是用了大家比较熟悉的 事业集团、部门、科室 来举例 ——

DNS服务器中的所有信息都是按照域名以分层次的结构来保存的。层次结构这个词听起来可能有点不容易懂,其实就类似于公司中的事业集团、部门、科室这样的结构。层次结构能够帮助我们更好地管理大量的信息。DNS中的域名都是用句点来分隔的,比如www.lab.glasscom.com,这里的句点代表了不同层次之间的界限,就相当于公司里面的组织结构不用部、科之类的名称来划分,只是用句点来分隔而已A。在域名中,越靠右的位置表示其层级越高,比如www.lab.glasscom.com这个域名如果按照公司里的组织结构来说,大概就是“com事业集团glasscom部lab科的www”这样。其中,相当于一个层级的部分称为域。因此,com域的下一层是glasscom域,再下一层是lab域,再下面才是www这个名字。

很显然,“向老妈、女友等”普及DNS域名的知识用公司里面的组织结构来举例更好令人理解。


日式科普书有个特点,就是喜欢在书中设计几个人物,以打诨插科的方式伴随读者的阅读过程,把一些值得思考的问题或者是重要的概念通过幽默的问答方式展现出来,让人轻松的就能记住知识要点。本书当中的人物是探索队员与探索队长,下面一段关于socket(套接字)的对话就很典型——

探索队员: Socket库也好,套接字(socket)也好,这个名字到底是怎么来的呢?

探索队长: 你知道灯泡 💡 的插座吗?就是灯具里面把灯泡 💡 拧进去的那个孔。

队员: 知道呀。

队长: 其实那个就是socket。

队员: 啥?你说Socket库就是灯泡💡 的插座?

队长: 你想象一下,假设我们有一段程序,把它“咔”一下插到一个套接字里,于是我们就可以开始通信了,就跟灯泡 💡 插进去就亮一样。

队员: 似乎有点牵强吧?

队长: 哪有?套接字的背后就是传输数据的通道,这个通道和我们的通信对象是相连接的,就像流过电线的电流一样,数据就在这个通道中流动,所以我们插进去一个程序,就可以和对方通信了,能理解不?

看了这一段对话,你对于向向老妈或者女友解释什么是“套接字”就一定很有信心了吧😄 ! 灯泡💡  vs Socket

再看看某《计算机网络原理》教材里关于Socket的解释——

前面介绍OSI/RM的传输层服务时,提到过传输通信两端的端点就是TSAP地址,对应的就是传输层协议端口。在TCP/IP网络中,同样有端点的概念,但它并不是直接采用OSI/RM中的TSAP叫法,而是称为“套接字”(Socket),就像在TCP中仍然把所传输的数据称为“数据段”,而没有采用OSI/RM中的TPDU叫法一样。当然,需要说明的是,Socket并不能直接等同于TSAP,它们只是类似,实际上Socket只是利用了TSAP地址,因为在它所包括的一组参数中就有TSAP地址—端口。“套接字”最早使用于UNIX操作系统中,后来被广泛地应用于Windows和Linux系统中,成为了事实上的TCP标准。

Socket可以看成是在两个网络应用程序进行通信连接时的一个端点(或者称为“逻辑接口”),它是连接应用程序和网络驱动程序的桥梁,如图10-35所示。从位置上看,它与本章前面介绍的TSAP是不一样的,因为TSAP是位于传输层上边缘(但仍属于传输层),而Socket是完全位于应用层,但它调用了传输层的端口。Socket包括了TSAP地址,同样它还包括了在本章前面所介绍的服务原语。

看着上面这一堆的缩写、术语、你懵逼了没有呢?上面固然也用了“桥梁”来做比喻,可是哪有

就像流过电线的电流一样,数据就在这个通道中流动,所以我们插进去一个程序,就可以和对方通信了。

这样的比喻来的浅显易懂呢?

很多年前,我买的第一本编程书,满篇都是“句柄”(handler) 、“宏”(Macro)这样令人费解的词,看得我很快就从入门到放弃了。如今,有这样一本读起来轻松愉快的《网络是怎样连接的》就在你面前,不快下手还等什么呢? lucky