你和洛谷之间的数据交换如何完成——计算机网络技术初探(1)

· · 科技·工程

0.引言

当你在在浏览器地址栏上输入 https://www.luogu.com.cn/ 或者在百度上输入“洛谷”然后选择第一个结果或者广告的时候,你是否想探究过这时发生了什么?

实际上,当你按下回车键浏览器直到渲染出洛谷 Logo 的过程中(我们暂且不考虑缓存),你的电脑,或者说计算机,和你的路由器和洛谷的承载服务器进行了非常多(至少以万字节计的)的数据交换。在这个过程中,数据和其承载形式发生了许多的变化。

打OI不懂网络,就好比学经济不懂政治。 充分理解网络是如何联通的,对处理生活中遇到的互联网相关问题,乃至真正理解互联网的技术本质,会有很大的帮助。

本文主要介绍 InternetWebTCP/IP协议栈

1.Internet 和 Web

对于初学者,一对很容易混淆的概念是 InternetWeb

Internet ,中文称为 互联网因特网

Web ,a.k.a World Wide Web or WWW ,中文称为 万维网

综上,我们可以解答以下常见问题:

  1. Internet 是一个网络,而 Web 是一种服务类型。

  2. 我们所说的“公网”或“广域网”,绝大多数情况下指的是 Internet

  3. HTML标记语言Web 的重要组成部分,两者密不可分。有时可以通过“是否使用了 HTML标记语言 来判断某一服务是否是 Web 服务”

  4. 使用 Internet 不一定表示使用 Web 。只有在使用和“网页”有关的网络服务时,才会涉及到 Web 。例如:

    • 游玩 Minecraft 多人游戏本身和 Web 没有关系。

    • 游玩《原神》时,除登录、反馈、问卷、版本热点等页面以外,游玩本身并没有使用到 Web

还有几点需要明确:

  1. HTTP协议HTML标记语言 是图方便的说法。更规范的说法应该不含中文

    • HTTPPHTMLML 本身就包含了“协议”和“标记语言”的意思。
  2. HTTP协议 并不是 Web 独有的。它是 Web 在服务者和用户间传输数据的方式,也是 TCP/IP协议栈应用层 的协议。

    • 因此,某服务使用了 HTTP协议 不代表此服务使用了 Web

    • 我们马上会介绍 应用层 是什么东西。

  3. Web 可以通过 Internet 提供服务,也可以通过其它基于 TCP/IP协议栈 的计算机网络提供服务。

    • 一个常见的例子是局域网网站(形如http://10.11.45.14/),关于“局域网”的内容,如果有机会,会在本系列其它文章中继续提及。

2.Internet 和 TCP/IP 协议栈

现在我们已经知道, Internet 是一个计算机网络。同时我们也知道,计算机网络(显然)不只 Internet 一个。

事实上, Internet 和其它计算机网络在很多情况下(不是全部)是相通的,这既指物理上相通,也指原理上相通。而这种相通,包括 Internet 本身,都是由 TCP/IP协议栈 驱动的。

TCP/IP协议栈 之于计算机网络,类似于CPython之于Python,或者Windows之于操作系统。它是计算机网络的实现方式之一,也是最普遍使用的一种。

请看下面的情境:

无论是计算机之间组成网络,还是网络与网络之间互相连接,在这之前,他们都必须统一他们的交流方式。只有在双方有一个 相同的语言约定的交流方式(类比纸笔、电话) 的前提下,他们才能够交流。

除了相同的语言和相通的交流方式以外,如果它们的距离较远,可能还需要其它设备中转信息。为此,它们需要将信息包装切片(如果数据过大),然后 标记一些中介设备必须的信息 (对方的地址、信息的优先级——如果中介设备服务很多设备的话)。

无论是否存在中介设备,都必须通过某种 介质(类比走路、开车) ,并 处理传输过程中的限制条件和意外情况(类比限速、撞车)

以上十分粗略地介绍了 TCP/IP协议栈 的各个 层级 的功能和内容。对层级的理解是 TCP/IP协议栈 的重点。这涉及到分层,是一种重要的思想。分层后,各个层级会有以下特性:

  1. 下层层级为上层提供服务。下层层级是上层层级及其内容的 载体

  2. 对下层层级而言,所有上层层级及其内容是其 负载/载荷 部分(类比:对于信封而言,信纸是载荷;对于信纸而言,上面的字是载荷。)

  3. 每一个层级的功能是固定的,但是实现方式可以不同。

    • 如果有几个实现方式方式可以实现相同的功能,则它们在理论上应该可以互相替换。
  4. 每一个层级只关心自己运行时所需的信息,不关心其负载和载体的细节。

    TCP/IP协议栈 设计之初分为四层,而现在我们一般将其分为五层理解。这五层分别是:

几乎每个试图详细解释 TCP/IP协议栈 如何运作的博客作者都会不得不举一个例子。但是几乎没有一个例子能够完美地反映协议栈的每一层的工作内容和区别。本文所举出的例子更是与贴切一词无关。实际上,即使是TCP/IP的设计者也承认,这个协议栈的许多内容并没有完美地实现分层。但即便如此,只要我们还要深入网络技术,就必须尽量体现层级

关于层级TCP/IP协议栈 的更多信息,本系列的其它文章中会继续讨论。

下一步

我们已经简单了解了 InternetWebTCP/IP协议栈 的概念,并简要介绍了他们和一些我们常见概念的联系。

计算机网络是一个非常庞大的知识体系,不可能通过一两个博客介绍清楚或者学习明白。下一步,本系列计划介绍 WebTCP/IP 协议栈 的联系,并介绍 HTTP协议 的基本工作流程。

由于作者个人能力所限,本文内容可能有错误,也可能晦涩难懂。如果发现上述情况,请告知我。本专栏的改进离不开读者的反馈。

本文以 CC BY-NC-SA 4.0 及更新版本分享。