互联网的分层
第 1 层:物理层
在本节中,我们将自底向上构建互联网,从基本构建块开始,将它们组合起来形成互联网基础设施。我们将以邮政系统作为贯穿始终的类比,因为它与互联网有许多共同的设计选择。
首先,我们需要某种方式在空间中传输信号。在邮政系统中,这可能是邮递员、驿马快信、卡车、信鸽等等。
在互联网中,我们需要一种在空间中传输比特(1 和 0)的方式。所使用的技术可能包括电线上的电压、无线无线电波、光纤电缆中的光脉冲等。有 entire 电气工程领域专门研究如何在空间中传输信号,但在本课程中我们不会深入探讨细节。
第 2 层:链路层
在这个类比中,既然我们有了在空间中传输数据的方式,我们就可以用这个构建块来连接两个家庭。我们甚至可以尝试连接当地城镇的所有家庭。
在互联网中,链路用于连接两台机器。该链路可以使用任何类型的技术(有线、无线、光纤等)。如果我们使用链路连接一群附近的计算机(例如加州大学伯克利分校的所有计算机),就会形成一个局域网(LAN)。

在第 2 层,我们还可以将比特组合成称为数据包(在该层有时也称为帧)的数据单元,并定义数据包在物理信号中的起始和结束位置。我们还可以处理诸如多人同时使用同一根导线发送数据之类的问题。
第 3 层:网络层
我们现在有了连接本地所有用户的方法,但如果两个不同地区的人想要通信怎么办?一种可能的方法是在不同的本地网络之间添加大量链路,但这似乎不是很高效。(如果两个本地网络位于不同的大陆呢?)

相反,一种更明智的方法是在每个网络中引入一个邮局,然后只需将两个邮局连接起来。现在,如果网络 A 中的某人想要与网络 B 中的某人通信,他们可以将邮件发送到网络 A 中的邮局。这个邮局将邮件转发到网络 B 中的邮局,后者再将邮件递送到目的地。

在互联网中,接收并转发邮件的邮局被称为交换机或路由器。
如果我们在交换机之间建立额外的链路,就可以连接各个本地网络。有了足够的链路和本地网络,我们就可以连接世界上的每个人,从而形成互联网。

我们需要解决的一个问题是如何在网络中找到路径。当交换机收到一个数据包时,它如何知道将数据包转发到哪里,才能使它更接近最终目的地?这将是我们路由单元的重点内容。
我们还需要确保这些链路上有足够的容量来承载我们的数据。这将是我们拥塞控制单元的重点。
这张图展示了互联网的基础设施,但在本课程中,我们还将研究管理这些基础设施的运营商。在前面的类比中,这些人就是建造和管理邮局的人。在互联网中,运营商是互联网服务提供商,如 AT&T、亚马逊网络服务,甚至加州大学伯克利分校,他们拥有并运营互联网结构。除了硬件和软件基础设施,我们还需要将这些实体视为现实中的企业和组织,并考虑它们的经济和政治动机。例如,如果 AT&T 铺设了一条海底电缆,他们可能会向其他互联网服务提供商收取通过该电缆传输数据的费用。
网络的网络
互联网通常被描述为一个网络的网络。存在许多小型本地网络,本地网络内部的事情可以由本地进行管理(例如由加州大学伯克利分校管理)。然后,所有本地网络可以相互连接,形成互联网。
在网络中,不同的链路可能使用不同的第 2 层技术。有些链路可能使用有线以太网,而其他链路可能使用光纤或无线蜂窝技术。在第 2 层,我们解决如何在本地网络内部通过该网络中的链路(使用该网络中的特定技术)发送数据包的问题。然后,在第 3 层,我们利用沿链路发送数据包的能力作为构建块,将数据包发送到互联网的任何地方。当数据包在不同网络之间跳转时,它可能会通过许多不同类型的链路进行传输。

在我们的类比中,我们可以看到家庭和邮局之间的区别。家庭之间相互发送和接收信件。邮局不发送或接收自己的邮件,而是帮助连接其他家庭。
在互联网中,终端主机是通过互联网进行通信的机器(例如服务器、笔记本电脑、手机)。相比之下,交换机(也称为路由器)是一种不发送或接收自身数据,而是用于帮助终端主机相互通信的机器。交换机的例子包括你家中的路由器,或者由互联网服务提供商(如 AT&T)部署的大型路由器。
在这些笔记中,我们通常将终端主机画成圆形,将路由器画成方形。
抽象分层
在我们构建互联网的过程中,你可能已经注意到,我们一直在将问题分解为更小的任务和抽象概念。
“基于抽象的模块化是做事的方式。”(芭芭拉・利斯科夫,图灵奖演讲)。这就是我们构建和维护大型计算机系统的方法。模块化对于互联网来说尤为重要,因为互联网由许多设备(主机、路由器)和许多现实世界的实体(用户、科技公司、互联网服务提供商)组成,让所有人都同意任务的分工是互联网能够大规模运行的原因。
这种分层的、网络的网络方法的一个主要优势是,每个网络都可以自主决定如何传输数据。例如,当你的数据包在互联网中跳转时,有些链路可能使用无线技术,而其他链路可能使用有线技术。低层协议可以在不同的跳转中发生变化,而第 3 层协议仍然可以正常工作。
分层还允许创新并行进行。不同的群体(例如硬件芯片设计师、软件开发者)可以在不同的层进行创新。
第 3 层:尽力而为服务模型
看起来我们已经构建了一个可以将数据发送到世界任何地方的系统,那么为什么不在这里停下来呢?第 3 层还有两个问题需要我们解决。
第一个问题涉及第 3 层的服务模型。如果你使用第 3 层基础设施在互联网上发送消息,网络为你(作为用户)提供什么样的服务模型?你可以将服务模型视为网络和用户之间的契约,描述网络支持什么和不支持什么。
实际的服务模型示例可能包括:网络保证数据被送达;或者,网络保证数据在某个时间限制内被送达;或者,网络不保证送达,但承诺在失败时报告错误。
互联网的设计者没有支持上述任何一种模型。相反,互联网只支持尽力而为的数据传输。如果你通过第 3 层发送数据,互联网会尽力将其送达,但不保证数据一定能被送达。互联网也不会告诉你传输是否成功。
为什么设计者选择了这样一种较弱的服务模型?一个主要原因是,构建满足这些较弱要求的网络要容易得多。
第 3 层:数据包抽象
到目前为止,在第 3 层及以下,我们一直在考虑独立地通过互联网发送每个消息。更正式地说,第 3 层的数据传输基本单位是数据包,它是通过互联网传输的一小部分字节,作为一个独立的单元在路由器之间跳转。
第 3 层的第二个问题是:数据包的大小是有限的。如果应用程序有一些大型数据要发送(例如视频),我们需要以某种方式将这些数据分割成数据包,并独立地通过网络发送每个数据包。
有了这种数据包抽象,我们现在可以观察数据包在网络中传输的生命周期。发送方将数据分解为各个数据包。数据包沿着链路传输并到达交换机。交换机将数据包转发到目的地,或者转发到更接近目的地的另一个交换机。数据包在一个或多个交换机之间跳转,每个交换机都将数据包转发到更近的地方,直到它最终到达目的地。请注意,由于尽力而为模型,任何交换机都可能丢弃数据包,并且不能保证数据包实际上到达了目的地。

第 4 层:传输层
到目前为止,我们已经确定了第 3 层的两个问题。大型数据必须被分割成数据包,而且 IP(网际协议)只提供尽力而为的服务。
为了解决这两个问题,我们将引入一个新的层 ——传输层。该层以第 3 层为构建块,并实现了额外的协议,用于重发丢失的数据包、将数据分割成数据包以及对乱序到达的数据包进行重新排序(以及其他功能)。
传输层协议使我们能够不再从数据包的角度思考,而是开始从流的角度思考,流是在两个端点之间交换的数据包序列。
第 7 层:应用层
在互联网之上构建应用层是一个强大的设计选择。如果在较低的层中,我们为终端主机之间专门传输视频构建了基础设施,那么电子邮件客户端就必须为传输电子邮件构建自己独立的基础设施。互联网的设计使其能够成为适用于任何类型应用数据的通用通信网络。
在本课程中,我们将更多地关注支持应用层的基础设施(例如邮递员、邮局),而较少关注应用程序本身(例如邮件的内容)。不过,在课程的最后,我们会介绍一些常见的应用层协议。
现在我们已经了解了所有的层,请注意,每一层都依赖于其正下方一层提供的服务,并为其正上方一层提供服务。例如,编写第 7 层(应用层)协议的人可以假定他们从第 4 层获得了可靠的数据传输。他们不必担心单个数据包丢失,因为这正是第 4 层已经处理的问题。

相邻的两层通过它们之间的接口直接交互。例如,实际上不可能跳过层而将第 7 层构建在第 3 层之上。
注意:你可能已经注意到我们跳过了第 5 层和第 6 层。在 20 世纪 70 年代,当这些层首次被标准化时,设计者认为需要这些层,但在现代互联网中它们已经过时了。如果你好奇的话,会话层(第 5 层)本应将不同的流组合成一个会话(例如加载各种图像和广告以形成一个网页),而表示层(第 6 层)本应帮助用户可视化数据。如今,这些层的功能大部分在第 7 层中实现。
(注:文档部分内容可能由 AI 生成)