DennyQi's Log

01 Computer Networks Introduction

计算机网络这一学科研究的是如何利用计算机这一工具实现通信。在没有计算机之前,人们必须通过写信或者电话等等方式通信。要能够实现一个完善的基于写信的通信结构,必须要有邮局、邮车等等设施;要实现基于电话的通信结构,必须要有电话机的安装、电话线的架设等等措施。类似地,为了能够利用计算机进行通信,必须建立一个完善的通信架构。如何设计这个架构,能够保证通信能够实行,并且高效、安全,就是计算机网络这一学科的主要内容。

就好像人类通信的主体是人,计算机通信的主体是计算机。在计算机网络中,我们把主体称为端系统(end system),主要是两类:主机(host)与服务器(server)。主机就是日常生活中与人直接交互的设备,例如笔记本电脑、台式电脑、手机等。服务器通常需要专门机构来维护,相比于主机它们有大容量的存储与较高的计算性能。

计算机网络要解决的问题就是如何把一个端系统上产生的信息传输到另一个端系统上。信息在计算机网络的视角下是存储在磁盘中的高电平或低电平。因此在这里信息传输的过程必须被还原为物理过程。好在,我们可以假设存在一种物理结构(例如双铜绞线或光纤)能够以接近光速的速率传播信息(在这里,信息的形式可以不再是高电平或低电平,而是一个脉冲或一个频率变化的电磁波),这样我们就可以基于此建立一个计算机网络的抽象模型。这一模型是一个相当复杂的系统,但其在基本形式上与其他通信系统上是相同的。一个非常的类比是人类通信的邮局系统:

当Alice要给Bob写一封信,这封信是如何一步步从Alice手上来到Bob手上的呢?首先,Alice取一张白纸,用笔写上字,然后装进信封里,信封上写上Bob的地址(一般也要写上用来标识自己地址的信息,比如邮编);接着Alice把信封投进邮箱,等待邮递员来取;邮递员把信取走,在当地邮局把Alice的信与其他众多待寄出去的信一起放在一起;邮局把不同的信按照目的地分类,同类的放一组贴上标签,不同目的地的信组被装上不同的交通工具,送往各地的更高层级的邮局;到了某个高层级的邮局以后,信又被运往较低层级的邮局;最终,信到了Bob所在地的本地邮局,邮递员把Bob的信放进Bob的邮箱,Bob拆开信封,读到了Alice写的文字的内容。

我们注意到,转交一封的信过程可以被划分为很多独立的步骤。Alice所需做的只是写好信装进信封放进邮箱;邮递员所需做的是把信从邮箱转交到邮局;邮局做需要做的是把信从一个邮局运往另一个邮局。并且,不同步骤之间可以划分出层级的高低。低层级的步骤把高层级交给它的对象作为整体,只会在整体的基础上增加包装。例如,邮递员不能拆开信封,只会把信放进送往某个特定邮局的袋子里;而邮局会把许多袋子放进一个通往同一目的地的交通工具里。计算机网络也是一样,运行在端系统上的应用程序生成信息,在传输时需要标记上目的地,而下一层级要在此基础上再封装上信息,直到信息在物理信道上运输。

所以,在讨论计算机网络时,我们可以按照层级独立地讨论各个步骤。我们采用自顶向下分为五个层级的讨论方式,分别是应用层(Application Layer)、运输层(Transport Layer)、网络层(Network Layer)、链路层(Link Layer)、物理层(Physical Layer)。每个层级都描述了一些处理信息的规范,称为协议(protocol)。计算机网络的主要内容就是计算机协议。

关于计算机之间的通信,我们尤其关心以下几个方面:

通信是否可靠(reliable)?可靠是指信息在传播过程中不出现丢失或篡改,不改变相对顺序。由于各种因素的干扰,我们肯定无法在物理层保证传输可靠,这就需要更高层级设计算法来保证可靠性,例如接收方检测信息是否丢失或篡改要求发送方重发直到无误为止。

通信效率如何?如果庞大数量的信息在网络中传播,那么在通过一个交会节点时就可能引起排队阻塞。如何设计网络结构和通信方式,使得阻塞能够尽可能短,从而使得通信之间的等待时间尽量少?

通信的吞吐量(throughput)如何?也即单位时间有多少bit的数据能够从发送方传输到接收方?这在我们日常生活经常遇到,例如我们是能够以1KB/s的速率下载文件还是能够以1MB/s的速率下载文件。

通信的安全性如何?消息被窃听或被篡改以后是否会暴露信息(这主要是密码学领域)?是否因为协议设计不得当导致敌手能够攻击网络引起阻塞或服务器崩溃?如何防止病毒在网络上传播?