1. 在本书中,我们将使用公共互联网(public Internet),一种特定的计算机网络,作为讨论计算机网络及其协议的主要工具。 但什么是互联网? 有几种方法可以回答这个问题。 首先,我们可以描述互联网的具体细节,即构成互联网的基本硬件和软件组件。 其次,我们可以根据为分布式应用程序提供服务的网络基础设施来描述 Internet 让我们从具体细节的描述开始,使用图 1.1 来说明我们的讨论。<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12377925/1635687185706-0eccd579-0a21-4859-a460-7605c9c740f8.png#clientId=ucf62815b-cc32-4&from=paste&height=827&id=u5ca6c93d&margin=%5Bobject%20Object%5D&name=image.png&originHeight=827&originWidth=629&originalType=binary&ratio=1&size=197219&status=done&style=none&taskId=u83cd7426-134c-49ae-bb66-f3b0cf602cf&width=629)<br />**Figure 1.1 ♦ Some pieces of the Internet**

1.1.1 详细描述 A Nuts-and-Bolts Description

互联网是一种计算机网络,它连接着全世界数十亿台计算设备。 不久前,这些计算设备主要是传统的台式计算机、Linux 工作站以及存储和传输网页和电子邮件等信息的所谓服务器。 然而,越来越多的用户使用智能手机和平板电脑连接到互联网——今天,世界上近一半的人口是活跃的移动互联网用户,预计到 2025 年这一比例将增加到 75% [Statista 2019]。此外,电视、游戏机、恒温器、家庭安全系统、家用电器、手表、眼镜、汽车、交通控制系统等非传统互联网“事物”正在连接到互联网。 事实上,考虑到许多非传统设备连接到互联网,计算机网络(computer network)这个词开始听起来有点过时了。 在 Internet 行话中,所有这些设备都称为主机或终端系统(hosts or end systems)。 据估计,2017 年大约有 180 亿台设备连接到互联网,到 2022 年这一数字将达到 285 亿 [Cisco VNI 2020]。
终端系统通过通信链路(communication links)分组交换机(packet switches)网络连接在一起。 我们将在 1.2 节中看到有多种类型的通信链路,它们由不同类型的物理介质组成,包括同轴电缆、铜线、光纤和无线电频谱。 不同的链路可以以不同的速率传输数据,链路的传输速率(transmission rate)比特/秒为单位。 当一个终端系统有数据要发送到另一个终端系统时,发送端系统对数据进行分段(segments),并为每个分段添加报头字节(header bytes)。 生成的信息包,在计算机网络行话中称为包(packets),然后通过网络发送到目标端系统,在那里它们被重新组合成原始数据。
分组交换机接收到达其传入通信链路之一的包,并在其传出通信链路之一转发该包。 分组交换机有多种形式和风格,但当今互联网中最突出的两种类型是路由器和链路层交换机(routers and link-layer switches)。 两种类型的交换机都将数据包转发到它们的最终目的地。 链路层交换机通常用于接入网络(access networks),而路由器通常用于网络核心(network core)。 数据包从发送端系统到接收端系统所经过的通信链路和数据包交换机的序列称为通过网络的路由或路径(route or path)。 思科预测,到 2022 年,年度全球 IP 流量将达到近 5 泽字节(zettabytes,1021 字节)[Cisco VNI 2020]。
分组交换网络(传输数据包)在许多方面类似于高速公路、道路和交叉路口(传输车辆)的交通网络。 例如,假设一家工厂需要将大量货物运送到位于数千公里之外的某个目的地仓库。 在工厂,货物被分割并装载到卡车车队中。然后每辆卡车独立地穿过高速公路、道路和十字路口的网络到达目的地仓库。 在目的地仓库,货物被卸载并与来自同一批货物的其余货物分组。 因此,在许多方面,数据包类似于卡车,通信链路类似于高速公路和道路,数据包交换机类似于十字路口,而终端系统类似于建筑物。 就像卡车通过运输网络走一条路径一样,数据包也通过计算机网络走一条路径(path)。
终端系统通过互联网服务提供商 (Internet Service Providers,ISP) 访问互联网,包括本地电缆或电话公司等住宅 ISP; 企业 ISP; 大学互联网服务提供商; 在机场、酒店、咖啡店和其他公共场所提供 WiFi 接入的 ISP; 和蜂窝数据 ISP(cellular data ISPs),提供对我们的智能手机和其他设备的移动访问。 每个 ISP 本身就是一个由分组交换机和通信链路组成的网络。 ISP 为终端系统提供各种类型的网络接入,包括住宅宽带接入(如有线调制解调器(cable modem)或 DSL)、高速局域网接入和移动无线接入。 ISP 还为内容提供商提供 Internet 访问,将服务器直接连接到 Internet。互联网就是将终端系统相互连接起来,因此提供对终端系统的访问的 ISP 也必须互连。 因此,这些下层(lower-tier) ISP 通过国内和国际上层(upper-tier) ISP 互连,并且这些上层 ISP 直接相互连接。 上层 ISP 由与高速光纤链路(high-speed fiber-optic links)互连的高速路由器组成。 每个 ISP 网络,无论是上层还是下层,都是独立管理的,运行 IP 协议(见下文),并符合某些命名(naming)和地址约定。 我们将在 1.3 节中更仔细地研究 ISP 及其互连。
终端系统、分组交换机和互联网的其他部分运行控制互联网内信息发送和接收的协议(protocols)传输控制协议 (Transmission Control Protocol,TCP) 和互联网协议 (Internet Protocol,IP) 是互联网中最重要的两个协议。 IP 协议规定了在路由器和终端系统之间发送和接收的数据包的格式。 Internet 的主要协议统称为 TCP/IP。 我们将在这个介绍性章节中开始研究协议。 但这只是一个开始——本书的大部分内容都与网络协议有关!
鉴于协议对 Internet 的重要性,重要的是每个人都同意每个协议的作用,以便人们可以创建交互操作的系统和产品。 这就是标准发挥作用的地方。 互联网标准(Internet standards)由互联网工程任务组 (Internet Engineering Task Force,IETF) [IETF 2020] 制定。 IETF 标准文档称为征求意见稿 (requests for comments,RFC)。 RFC 最初是作为一般性的评论请求(因此得名)来解决互联网前身所面临的网络和协议设计问题 [Allman 2011]。 RFC 往往非常技术性和详细。 它们定义了 TCP、IP、HTTP(用于 Web)和 SMTP(用于电子邮件)等协议。 目前有近 9000 个 RFC。 其他机构还规定了网络组件的标准,尤其是网络链路(network links)。 例如,IEEE 802 LAN 标准委员会 [IEEE 802 2020] 规定了以太网和无线 WiFi 标准。

1.1.2 一个服务描述 A Services Description

我们上面的讨论已经确定了构成 Internet 的许多部分。但我们也可以从一个完全不同的角度来描述互联网——即,将互联网描述为为应用程序提供服务的基础设施(an infrastructure that provides services to applications)。除了电子邮件和网上冲浪(e-mail and Web surfing)等传统应用外,互联网应用还包括移动智能手机和平板电脑应用,包括互联网报文、实时道路交通信息映射、音乐流电影和电视流、在线社交媒体、视频会议、多人游戏和基于位置的推荐系统。这些应用程序被称为分布式应用程序(distributed applications),因为它们涉及相互交换数据的多个终端系统。重要的是,互联网应用程序在终端系统上运行——它们不在网络核心的分组交换机中运行。尽管分组交换机促进了终端系统之间的数据交换,但它们并不关心作为数据源或接收器的应用程序。
让我们进一步探讨一下为应用程序提供服务的基础设施是什么意思。 为此,假设您对分布式 Internet 应用程序有一个令人兴奋的新想法,它可能会极大地造福于人类,或者可能只会让您变得富有和出名。 您将如何将这个想法转变为实际的 Internet 应用程序? 因为应用程序在终端系统上运行,您将需要编写在终端系统上运行的程序。 例如,您可以使用 Java、C 或 Python 编写程序。 现在,由于您正在开发分布式 Internet 应用程序,运行在不同终端系统上的程序将需要相互发送数据。 在这里,我们遇到了一个核心问题——这个问题导致了将互联网描述为应用程序平台的另一种方式。 在一个终端系统上运行的一个程序如何指示 Internet 将数据传送到另一个终端系统上运行的另一个程序?
连接到 Internet 的终端系统提供一个套接字接口(socket interface),用于指定在一个终端系统上运行的程序如何要求 Internet 基础设施将数据传送到在另一个终端系统上运行的特定目标程序。这个 Internet 套接字接口是发送程序必须遵循的一组规则,以便 Internet 可以将数据传送到目标程序。我们将在第 2 章详细讨论 Internet 套接字接口。现在,让我们利用一个简单的类比,我们将在本书中经常使用它。假设 Alice 想使用邮政服务向 Bob 发送一封信。当然,爱丽丝不能只是写信(数据)然后把信扔出她的窗外。相反,邮政服务要求爱丽丝把信放在信封里;在信封中央写上鲍勃的全名、地址和邮政编码;密封信封;在信封的右上角贴上邮票;最后,将信封放入官方邮政服务邮箱。因此,邮政服务有自己的“邮政服务接口”或一组规则,Alice 必须遵循这些规则才能让邮政服务将她的信件发送给 Bob。以类似的方式,Internet 有一个套接字接口,发送数据的程序必须遵循该接口才能让 Internet 将数据传递给将接收数据的程序。
当然,邮政服务为其客户提供的服务不止一种。 提供快递、接收确认、普通使用等服务。 以类似的方式,互联网为其应用程序提供多种服务。 当您开发 Internet 应用程序时,您也必须为您的应用程序选择 Internet 服务之一。 我们将在第 2 章中描述 Internet 的服务。
我们刚刚对互联网进行了两次描述; 一个是硬件和软件组件,另一个是为分布式应用程序提供服务的基础设施。 但也许您仍然对互联网是什么感到困惑。 什么是数据包交换和 TCP/IP? 什么是路由器? Internet 中存在哪些类型的通信链路? 什么是分布式应用?恒温器或体重秤如何接入互联网? 如果您现在对这一切感到有些不知所措,请不要担心——本书的目的是向您介绍 Internet 的具体细节以及控制其工作方式和原因的原则。 我们将在以下部分和章节中解释这些重要的术语和问题。

1.1.3 What Is a Protocol?

现在我们已经对互联网有了一些了解,让我们考虑一下计算机网络中的另一个重要流行词:协议(protocol)。 什么是协议? 协议有什么作用?

一个人类类比 A Human Analogy

通过首先考虑一些人类类比,可能最容易理解计算机网络协议的概念,因为我们人类一直在执行协议。考虑一下当您想询问某人一天中的时间时您会怎么做。典型的交流如图 1.2 所示。人类礼仪(或至少是礼貌)要求一个人首先打招呼(图 1.2 中的第一个“嗨”)以开始与其他人的交流。对“Hi”的典型响应是返回“Hi”消息。含蓄地,然后人们将亲切的“嗨”响应作为可以继续并询问一天中的时间的指示。对最初的“嗨”做出不同的回应(例如“别打扰我!”或“我不会说英语”或一些无法印出的回复)可能表明不愿意或无法沟通。在这种情况下,人类协议不会询问一天中的时间。有时,一个问题根本得不到回应,在这种情况下,人们通常会放弃询问那个人的时间。请注意,在我们的人类协议中,有我们发送的特定消息,以及我们为响应收到的回复消息或其他事件(例如在给定的时间内没有回复)而采取的特定操作。显然,发送和接收的消息,以及发送或接收这些消息或发生其他事件时采取的行动,在人类协议中起着核心作用。如果人们运行不同的协议(例如,如果一个人有礼貌而另一个人没有,或者如果一个人理解时间的概念而另一个人不理解),这些协议就不能交互操作并且无法完成任何有用的工作。在网络中也是如此——它需要两个(或更多)运行相同协议的通信实体才能完成一项任务。
image.png
Figure 1.2 ♦ A human protocol and a computer network protocol
让我们考虑第二个人类类比。 假设您正在上大学课程(例如,计算机网络课程!)。 老师正在喋喋不休地谈论协议,而你很困惑。 老师停下来问:“有什么问题吗?” (发送给所有不睡觉的学生并由其接收的消息)。 你举手(向老师传达一个隐含的信息)。 你的老师微笑着认可你,说:“Yes…” (鼓励您提出问题的传输信息——老师喜欢被问到问题),然后您提出您的问题(即,将您的信息传输给您的老师)。 您的老师听到您的问题(接收您的问题消息)并回答(向您发送回复)。我们再一次看到消息的传输和接收,以及在发送和接收这些消息时采取的一组常规操作,是这个问答协议的核心。

网络协议 Network Protocols

网络协议类似于人类协议,不同之处在于交流消息和采取行动的实体是某些设备(例如,计算机、智能手机、平板电脑、路由器或其他具有网络功能的设备)的硬件或软件组件。 Internet 中涉及两个或更多通信远程实体的所有活动都受协议管理。 例如,两台物理连接的计算机中的硬件实现协议(hardware-implemented protocols)控制着两个网络接口卡之间“线路(wire)”上的比特流; 终端系统中的拥塞控制协议(congestion-control protocols)控制数据包在发送方和接收方之间传输的速率; 路由器中的协议确定数据包从源到目的地的路径。 协议在互联网上无处不在,因此本书的大部分内容都是关于计算机网络协议的。
作为您可能熟悉的计算机网络协议的一个示例,请考虑当您向 Web 服务器发出请求时会发生什么,也就是说,当您在 Web 浏览器中键入 Web 页面的 URL 时。 该场景如图 1.2 的右半部分所示。 首先,您的计算机将向 Web 服务器发送连接请求报文(connection request message)并等待回复(reply)。 Web 服务器最终会收到您的连接请求报文并返回连接回复报文(connection reply message)。 知道现在可以请求 Web 文档了,您的计算机随后会在 GET 报文中发送它想要从该 Web 服务器获取的网页的名称。 最后,Web 服务器将网页(文件)返回到您的计算机。
鉴于上述人员和网络示例,报文的交换以及发送和接收这些报文时采取的操作是协议的关键定义元素:

协议定义了在两个或多个通信实体之间交换的报文的格式和顺序,以及对报文或其他事件的传输和/或接收所采取的操作。(A protocol defines the format and the order of messages exchanged between two or more communicating entities, as well as the actions taken on the transmission and/or receipt of a message or other event.)

  1. Internet 和一般的计算机网络广泛使用协议。 不同的协议用于完成不同的通信任务。 当您通读本书时,您将了解到一些协议简单明了,而另一些协议则复杂而深入。 掌握计算机网络领域就相当于了解网络协议的内容、原因和方式。