Skip to content

计算机网络和因特网

因特网是一个世界范围的计算机网络,即它是互联了遍及世界数十亿计算设备的网络。

在之前,计算设备多数是传统的桌面 PC、Linux 工作站以及所谓的服务器(它们用于存储和传输 Web 页面和电子邮件报文等信息)

然而,越来越多的非传统的因特网“物品”(如便携机、智能手机、平板电脑、电视、游戏机、温度调节器装置、家用安全系统、家用电器、手表、眼镜、汽车、运输控制系统等)正在与因特网相连

的确,在许多非传统设备连接到因特网的情况下,计算机网络(computer network)这个术语开始听起来有些过时了

用因特网术语来说,所有这些设备都称为主机(host)或端系统(end system)。

互联网概述

计算机网络(简称为网络)由若干结点和连接这些结点的链路组成。
网络中的结点可以是计算机、集线器、交换机或路由器等。

网络之间还可以通过路由器互连起来,这就构成了一个覆盖范围更大的计算机网络。这样的网络称为互连网

网络把许多计算机连接在一起,而互连网则把许多网络通过路由器连接在一起。
与网络相连的计算机常称为主机

还有一点也必须注意,就是网络互连并不是把计算机仅仅简单地在物理上连接起来,因为这样做并不能达到计算机之间能够相互交换信息的目的。
我们还必须在计算机上安装许多使计算机能够交换信息的软件才行。
因此当我们谈到网络互连时,就隐含地表示在这些计算机上已经安装了适当的软件,因而在计算机之间可以通过网络交换信息。

互联网的组成

互联网的拓扑结构虽然非常复杂,并且在地理上覆盖了全球,但从其工作方式上看,可以划分为以下两大块:

(1) 边缘部分由所有连接在互联网上的主机组成。这部分是用户直接使用的,用来进行通信(传送数据、音频或视频)和资源共享
(2) 核心部分由大量网络和连接这些网络的路由器组成。这部分是为边缘部分提供服务的(提供连通性和交换)

我们先要明确下面的概念。
我们说:“主机 A 和 主机 B 进行通信”,实际上是指:“运行在主机 A 上的某个程序和运行在主机 B 上的另一个程序进行通信”。
由于“进程”就是“运行着的程序”,因此这也就是指:“主机 A 的某个进程和主机 B 的另一个进程进行通信”。
这种比较严密的说法通常可以简称为“计算机之间通信”

在网络边缘的端系统之间的通信方式通常可划分为两大类:客户-服务器方式(C/S 方式)和对等方式(P2P 方式)

对等连接方式
对等连接(peer-to-peer,简写为 P2P。这里使用数字 2 是因为英文的 2 是 two,其读音与 to 同,因此英文的 to 常缩写为数字 2)是指两台主机在通信时不区分哪一个是服务请求方哪一个是服务提供方哪一个是服务提供方。
只要两台主机都运行了对等连接软件(P2P 软件),它们就可以进行平等的、对等连接通信。
这时,双方都可以下载对方已经存储在硬盘中的共享文档。
因此这种工作方式也称为 P2P 方式。

互联网的核心部分

网络核心部分是互联网中最复杂的部分,因为网络中的核心部分要向网络边缘中的大量主机提供连通性,使边缘部分中的任何一台主机都能够向其他主机通信。

在网络核心部分起特殊作用的是路由器,它是一种专用计算机(但不叫做主机)。
路由器是实现分组交换的关键构件,其任务是转发收到的分组,这是网络核心部分最重要的功能。
为了弄清分组交换,下面先介绍电路交换的基本概念

电路交换的主要特点
在电话问世后不久,人们就发现,要让所有的电话机都两两相连接是不现实的。
两部电话只需要用一对电线就能够互相连接起来。但若有 5 部电话要两两连接,则需要 10 对电线。
显然,若 N 部电话要两两相连,就需要n * (n - 1) / 2对电线。
当电话机的数量很大时,这种连接方式需要的电线数量就太大了(与电话机的数量的平方成正比)。
于是人们认识到,要使得每一部电话能够很方便地和另一部电话进行通信,就应当使用电话交换机将这些电话连接起来。
每一部电话都连接到交换机上,而交换机使用交换的方法,让电话用户彼此之间可以很方便地通信。
电话发明后的一百多年来,电话交换机虽然经过多次更新换代,但交换的方式一直都是电路交换

当电话机的数量增多时,就要使用很多彼此连接起来的交换机来完成全网的交换任务。
用这样的方法,就构成了覆盖全世界的电信网。

从通信资源的分配角度来看,交换就是按照某种方式动态地分配运输线路的资源。
在使用电路交换童话之前,必须先拨号请求建立连接。
当被叫用户听到交换机送来的振铃音并摘机后,从主叫端到被叫端就建立了一条连接,也就是一条专用的物理通路。
这条连接保证了双方通信时不会被其他用户占用。此后主叫和被叫双方就能互相通电话。
通话完毕挂机后,交换机释放刚才使用的这条专用的物理通路(即把刚才占用的所有通信资源归还给电信网)。
这种必须经过“建立连接(占用通信资源)-》通话(一直占用通信资源)-》释放连接(归还通信资源)”三个步骤的交换方式称为电路交换
如果用户在拨号呼叫时电信网的资源已不足支持这次的呼叫,则主叫用户会听到忙音,表示电信网不接受用户的呼叫,用户必须挂机,等待一段时间后再重新拨号。

下图为电路交换的示意图。
为简单起见,图中没有区分市话交换机和长途电话交换机。
应当注意的是,用户线是电话用户到所连接的市话交换机的连接路线,是用户独占的传送模拟信号的专用路线,而交换机之间拥有大量话路的中继线(这些传输线路早已都数字化了)则是许多用户共享的,正在通话的用户只占用了中继线里面的一个话路。
电路交换的一个重要特点就是在通话的全部时间内,通话的两个用户始终占用端到端的通信资源。

当使用电路交换来传送计算机数据时,其线路的传输效率往往很低。
这是因为计算机数据是突发式出现在传输线路上的,因此线路上真正用来传输数据的时间往往不到 10% 甚至 1%。
已被用户占用的通信线路资源在绝大部分时间里都是空闲的。
例如,当用户阅读终端屏幕上的信息或用键盘输入和编辑一份文件时,或计算机正在进行处理而结果尚未返回时,宝贵的通信线路资源并未被利用而是白白被浪费了

分组交换的主要特点
分组交换则采用存储转发技术。
如图表示把一个报文划分为几个分组后再进行传送。
通常我们把要发送的整块数据称为一个报文
再发送报文之前,先把较长的报文划分成为一个个更小的等长数据段,例如,每个数据段为 1024bit。
在每一个数据段前面,加上一些由必要的控制信息组成的首部(header)后,就构成了一个分组(packet).
分组又称为“”,而分组的首部也可称为“包头”。分组是在互联网中传送的数据单元。
分组中的“首部”是非常重要的,正是由于分组的首部包含了诸如目的地址和源地址等重要控制信息,每一个分组才能在互联网中独立地选择传输路径,并被正确地交付到分组传输的终点

下图(a)强调互联网的核心部分是由许多网络和把它们互连起来的路由器组成的,而主机处在互联网的边缘部分。
在互联网核心部分的路由器之间一般都用高速链路相连接,而在网络边缘的主机接入到核心部分则通常以相对较低速度的链路相连接。

位于网络边缘的主机和位于网络核心部分的路由器都是计算机,但它们的作用却很不一样。
主机是为用户进行信息处理的,并且可以和其他主机通过网络交换信息。
路由器则是用来转发分组的,即进行分组交换的。
路由器收到一个分组,先暂时存储一下,检查其首部,查找转发表,按照首部中的目的地址,找到合适的接口转发出去,把分组交给下一个路由器。
这样一步一步地(有时会经过几十个不同的路由器)以存储转发的方式,把分组交付最终的目的主机。
各路由器之间必须经常交换彼此掌握的路由信息,以便创建和动态维护路由器中的转发表,使得转发表能够在整个网络拓扑发生变化时及时更新。

当我们讨论互联网的核心部分中的路由器转发分组的过程中,往往把单个的网络简化成一条链路,而路由器成为核心部分的结点,如上图(b)所示。
这种简化图看起来可以更加突出重点,因为在转发分组时最重要的就是要知道路由器之间时怎样连接起来的

现在假定图(b)中的主机 H1 向主机 H5 发送数据。
主机 H1 先将分组逐个地发往与它直接相连的路由器 A。
此时,除链路 H1-A 外,其他通信链路并不被目前通信的双方所占用。
需要注意的是,即使是链路 H1-A,也只是当分组正在此链路上传送时才被占用。
在各分组传送之间的空闲时间,链路 H1-A 仍可为其他主机发送的分组使用。

路由器 A 把主机 H1 发来的分组放入缓存。
假定从路由器 A 的转发表中查出应把分组转发到链路 A-C。
于是分组就传送到路由器 C。
当分组正在链路 A-C 传送时,该分组并不占用网络其他部分的资源。

路由器 C 继续按上述方式查找转发表,假定查出应转发到路由器 E。
当分组到达路由器 E 后,路由器 E 就最后把分组直接交给主机 H5.

假定在某一个分组的传送过程中,链路 A-C 的通信量太大,那么路由器 A 可以把分组沿另一饿路由传送,即先转发到路由器 B,再转发到路由器 E,最后把分组送到主机 H5。
在网络中可同时有多台主机进行通信,如主机 H2 也可以经过路由器 B 和 E 与主机 H6 通信。

这里要注意,路由器暂时存储的是一个个短分组,而不是整个的长报文。
短分组是暂存在路由器的存储器(即内存)中而不是存储在磁盘的。这就保证了较高的交换速率。

在图中只画了一对主机 H1 和 H5 在进行通信。
实际上,互联网可以容许非常多的主机同时进行通信,而一台主机中的多个进程(即正在运行中的多个程序)也可以各自和不同主机中的不同进程进行通信

应当注意,分组交换在传送数据之前不必先占用一条端到端的链路的通信资源。
分组在哪段链路上传送才占用这段链路的通信资源。
分组到达一个路由器后,先暂时存储下来,查找转发表,然后从一条合适的链路转发出去。
分组在传输时就这样一段一段地断续占用通信资源,而且还省去了建立连接和释放连接的开销,因而数据的传输效率更高。

互联网采取了专门的措施,保证了数据的传送具有非常高的可靠性。
当网络中的某些结点或链路突然出现故障时,在各路由器中运行的路由选择协议能够自动找到转发分组最合适的路径。

从以上所述可知,采用存储转发的分组交换,实质上是采用了在数据通信的过程中断续(或动态)分配传输带宽的策略。
这对传送突发式的计算机数据非常合适,使得通信线路的利用率大大提高了。

为了提高分组交换网的可靠性,互联网的核心部分常采用网络拓扑结构,使得当发生网络拥塞或少数结点、链路出现故障时,路由器可灵活地改变转发路由而不致引起通信的中断或全网瘫痪
此外,通信网络的主干线路往往由一些高速链路构成,这样就可以较高的数据率迅速地传送计算机数据

综上所述,分组交换的主要有点可归纳如表所示

优点 所采用的手段
高效 在分组传输过程中动态分配传输带宽,对通信链路是逐段占用
灵活 为每一个分组独立地选择最合适的转发路由
迅速 以分组作为传送单位,可以先不建立连接就能向其他主机发送分组
可靠 保证可靠性的网络协议,分布式多路由的交换网,使网络有很好的生存性

分组交换也带来一些新的问题。例如,分组在各路由器存储转发时需要排队,这就会造成一定的时延。
因此,必须尽量设法减少这种时延。
此外,由于分组交换不像电路交换那样通过建立连接来保证通信时所需的各种资源,因而无法确保通信时端到端所需的带宽。

分组交换带来的另一个问题是各分组必须携带的控制信息也造成了一定的开销。
整个分组交换网还需要专门的管理和控制机制。

应当指出,从本质上讲,这种断续分配传输带宽的存储转发原理并非是完全新的概念。
自古代就有的邮政通信,就其本质来说也属于存储转发方式。
而在 20 实际 40 年代,电报通信也采用了基于存储转发原理的报文交换。
在报文交换中心,一份份电报被接收下来,并穿成纸带。
操作员以每份报文为单位,撕下纸带,根据报文的目的站地址,拿到相应的发报机转发出去。
这种报文交换的时延较长,从几分钟到几小时不等。现在报文交换已不使用了。
分组交换虽然也采用存储转发原理,但由于使用了计算机进行处理,就使分组的转发非常迅速。
例如 ARPANET 建网初期的经验表明,在正常的网络负荷下,当时横跨美国东西海岸的端到端平均时延小于 0.1 秒。
这样,分组交换虽然采用了某些古老的交换原理,但实际上已变成了一种崭新的交换技术。

下图表示电路交换、报文交换和分组交换的主要区别。

图中的 A 和 D 分别是源点和终点,而 B 和 C 是在 A 和 D 之间的中间结点。
图中的最下方归纳了三种交换方式在数据传送阶段的主要特点:

  • 电路交换:整个报文的比特流连续地从源点直达终点,好像在一个管道中传送
  • 报文交换: 整个报文先传送到相邻结点,全部存储下来后查找转发表,转发到下一个结点
  • 分组交换:单个分组(这只是整个报文的一部分)传送到相邻结点,存储下来后查找转发表,转发到下一个结点

从图可看出,若要连续传送大量的数据,且其传送时间远大于连接建立的时间,则电路交换的传输速率较快。
报文交换和分组交换不需要预先分配传输带宽,在传送突发数据时可提高整个网络信道的利用率。
由于一个分组的长度往往远小于整个报文的长度,因此分组交换比报文交换的时延小,同时也就有更好的灵活性。

计算机网络的类别

按照网络的作用范围进行分类

(1) 广域网 WAN(Wide Area Network),广域网的作用范围通常为几到几千公里,因而有时也称为远程网。广域网是互联网的核心部分,其任务是通过长距离(例如,跨越不同的国家)运送主机所发送的数据。连接广域网各结点交换机的链路一般都是高速链路,具有较大的通信容量
(2) 城域网 MAN(Metropolitan Area Network),城域网的作用范围一般是一个城市,可跨越几个街区甚至整个城市,其作用距离约为 5 到 50km。城域网可以为一个或几个单位所拥有,但也可以是一种公用设施,用来将多个局域网进行互连。
(3) 局域网 LAN(Local Area Network),局域网一般用微型计算机或工作站通过高速通信线路相连(速率通常在 10Mbit/s 以上),但地理上则局限在较小的范围(如 1km 左右)。在局域网发展初期,一个学校或工厂往往只拥有一个局域网,但现在局域网已非常广泛地使用,学校或企业大都拥有许多个互连的局域网(这样的网络常称为校园网或企业网)
(4) 个人区域网 PAN(Personal Area Network),个人区域网就是在个人工作的地方把属于个人使用的电子设备(如便携式电脑等)用无限技术连接起来的网络,因此也常称为无线个人区域网 WPAN(Wireless PAN),其范围很小,大约在 10 m 左右

顺便指出,若中央处理机之间的距离非常近(如仅 1 米的数量级或甚至更小些),则一般就称之为多处理机系统而不称它为计算机网络

按照网络的使用者进行分类

(1) 公用网(public network) 这是指电信公司(国有或私有)出资建造的大型网络。“公用”的意思就是所有愿意按电信公司的规定交纳费用的人都可以使用这种网络。因此公用网也可以称为公众网
(2) 专用网(private network) 这是某个部门为满足本单位的特殊业务工作的需要而建造的网络。这种网络不向本单位以外的人提供服务。例如,军队、铁路、银行、电力等系统均有本系统的专用网

计算机网络的性能

速率
我们知道,计算机发送出的信号都是数字形式的。比特(bit)来源于 binary digit,意思是一个“二进制数字”,因此一个比特就是二进制数字中的一个 1 或 0.速率是计算机网络中最重要的一个性能指标。速率的单位是 bit/s

带宽
在计算机网络中,带宽用来表示网络中某通道传送数据的能力,因此网络带宽表示在单位时间内网络中的某信道所能通过的“最高数据率”。
这种意义的带宽的单位就会数据率的单位 bit/s,是“比特每秒”

吞吐量
吞吐量表示在单位时间内通过某个网络(或信道、接口)的实际的数据量。吞吐量更经常地用于对现实世界中的网络的一种测量,以便知道实际上到底有多少数据能够通过网络。显然,吞吐量受网络的带宽或网络的额定速率的限制。例如,对于一个 1Gbit/s 的以太网,就是说其额定速率是 1Gbit/s,那么这个数值也是该以太网的吞吐量的绝对上限值。
因此,对 1Gbit/s 的以太网,其实际的吞吐量可能也只有 100MBit/s,或甚至耕地,并没有达到其额定速率

时延
时延是指数据(一个报文或分组,甚至比特)从网络(或链路)的一端传送到另一端所需的时间。时延是个很重要的性能指标,它有时也称为延迟或迟延。

总时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延

TCP/IP简介

因为互联网协议包含了上百种协议标准,但是最重要的两个协议是 TCP 和 IP 协议,所以,大家把互联网的协议简称 TCP/IP 协议

TCP/IP 协议定义了网络通信过程,更重要的是,定义了数据单元的格式和内容,以便接收计算机能够正确解释接收到的消息。
TCP/IP 及其相关的协议构成了一套在 TCP/IP 网络中如何处理、传输和接收数据的完整系统,相关协议的系统,例如 TCP/IP 协议,被称为协议簇(protocol suite)

IP 协议

在通信时,通信双方必须知道对方的标识,好比发送快递必须知道对方的地址。
互联网上每个计算机的唯一标识就是 IP 地址。IP 地址实际上是一个 32 位整数(称为 IPv4),它是以字符串表示的 IP 地址,如 172.16.254.1,实际上是把 32 位整数按 8 位分组后的表示,目的是便于阅读

IP 协议负责把数据从一台计算机通过网络发送到另一台计算机。数据被分割成一小块一小块,类似于将一个大包裹拆分成几个小包裹,然后通过 IP 包发送出去。
由于互联网链路复杂,两台计算机之间经常有多条线路,因此,路由器就负责决定如何把一个 IP 包转发出去。
IP 包的特点是按块发送,途经多个路由,但不保证都能到达,也不能保证顺序到达

TCP 协议

TCP 协议则是建立在 IP 协议之上的。TCP 协议负责在两台计算机之间建立可靠连接,保证数据包按顺序到达。TCP 协议会通过 3 次握手建立可靠连接

然后需要对每个 IP 包进行编号,确保对方按顺序收到,如果包丢了,就自动重发

许多常用的更高级的协议都是建议在 TCP 协议基础上的,比如用于浏览器的 HTTP 协议、发送邮件的 SMTP 协议等

一个 TCP 报文除了包含要传输的数据外,还包含源 IP 地址和目标 IP 地址、源端口和目标端口

端口有什么作用?在两台计算机通信时,只发送 IP 地址是不够的,因为同一台计算机上运行着多个网络程序。一个 TCP 报文来了之后,到底是交给浏览器还是 QQ,就需要端口号来区分。
每个网络程序都向操作系统申请唯一的端口号,这样,两个进程在两台计算机之间建立网络连接就需要各自的 IP 地址和各自的端口号

一个进程也可能同时与多个计算机建立连接,因此它会申请很多端口。
端口号不是随意使用的,而是按照一定的规定进行分配。例如,80 端口分配给 HTTP 服务,21 端口分配给 FTP 服务

UDP简介

相对于 TCP 协议,UDP 协议则是面向无连接的协议。使用 UDP 协议时,不需要建立连接,只需要知道对方的 IP 地址和端口号,就可以直接发数据包。
但是,数据无法保证一定到达。虽然用 UDP 传输数据不可靠,但它的优点是比 TCP 协议的速度快。对于不要求可靠到达的数据而言,就可以使用 UDP 协议

协议层次及其服务模型

协议分层

为了给网络协议的设计提供一个结构,网络设计者以分层(layer)的方式组织协议以及实现这些协议的网络硬件和软件。

因特网的协议栈由 5 个层次组成:物理层、链路层、网络层、运输层、和应用层。
自顶向下方法就是首先处理应用层,然后向下进行处理。

应用层
应用层是网络应用程序及它们的应用层协议存留的地方。
因特网的应用层包括许多协议,例如 HTTP(它提供了 Web 文档的请求和传送)、SMTP(它提供了电子邮件报文的传输)和 FTP(它提供两个端系统之间的文件传送)。
我们将看到,某些网络功能,如将像 www.ietf.org 这样对人友好的端系统转换为 32 比特的网络地址,也是借助于特定的应用层协议即域名系统(DNS)完成的。

应用层协议分布在多个端系统上,而一个端系统中的应用程序使用协议与另一个端系统中应用程序交换信息分组。
我们把这种位于应用层的信息分组称为报文(message)

运输层
因特网的运输层在应用程序端点之间传送应用层报文。
在因特网中,有两种运输协议,即 TCP 和 UDP,利用其中的任一个都能运输应用层报文。
TCP 向它的应用程序提供了面向连接的服务。这种服务包括了应用层报文向目的地的确保传递和流量控制(即发送方/接收方速率匹配)。
TCP 也将长报文划分为短报文,并提供拥塞控制机制,因此当网络拥塞时,源抑制其传输速率。
UPD 协议向它的应用程序提供无连接服务。这是一种不提供不必要服务的服务,没有可靠性,没有流量控制,也没有拥塞机制。
我们把运输层的分组称为报文段(segment)

网络层
因特网的网络层负责将称为数据报(datagram)的网络层分组从一台主机移动到另一台主机。
在一台源主机的因特网运输层协议(TCP 或 UDP)向网络层递交运输层报文段和目的地址,就像你通过邮政服务寄信件时提供一个目的地址一样。

链路层
因特网的网络层通过源和目的地之间的一系列路由器路由数据报。
为了将分组从一个节点(主机或路由器)移动到路径上的下一个节点,网络层必须依靠该链路层的服务。
特别是在每个节点,网络层将数据报下穿给链路层,链路层沿着路径将数据报传递给下一个节点。
在该下一个节点,链路层将数据报上传给网络层。

物理层
虽然链路层的任务是将整个帧从一个网络元素移动到邻近的网络元素,而物理层的任务是将该帧中一个个比特从一个节点移动到另一个节点。
在这层中的协议仍然是链路相关的,并且进一步与该链路(例如,双绞铜线、单模光纤)的实际传输媒介相关。
例如,以太网具有许多物理层协议:一个是关于双绞铜线的,另一个是关于同轴电缆的,还有一个是关于光纤的,等等。
在每种场合中,跨越这些链路移动一个比特是以不同的方式进行的。

OSI模型

详细地讨论过因特网协议栈后,我们应当提及它不是唯一的协议栈。
特别是在 20 世纪 70 年代后期,国际标准化组织(ISO)提出计算机网络围绕 7 层来组织,称为开放系统互连(OSI)模型[ISO 2016]。

OSI 参考模型的 7 层是:应用层、表示层、会话层、运输层、网络层、数据链路层和物理层。
这些层次中,5 层的功能大致与它们名字类似的因特网对应层的功能相同。
所以,我们来考虑 OSI 参考模型中附加的两个层,即表示层和会话层。

表示层的作用是使通信的应用程序能够解释交换数据的含义。
这些服务包括数据压缩和数据加密(它们是自解释的)以及数据描述(这使得应用程序不必担心在各台计算机中表示/存储的内部格式不同的问题)。

会话层提供了数据交换的定界和同步功能,包括了建立检查点和恢复方案的方法。