你和洛谷之间的数据交换如何完成——计算机网络技术初探(1)
0.引言
当你在在浏览器地址栏上输入 https://www.luogu.com.cn/ 或者在百度上输入“洛谷”然后选择第一个结果或者广告的时候,你是否想探究过这时发生了什么?
实际上,当你按下回车键浏览器直到渲染出洛谷 Logo 的过程中(我们暂且不考虑缓存),你的电脑,或者说计算机,和你的路由器和洛谷的承载服务器进行了非常多(至少以万字节计的)的数据交换。在这个过程中,数据和其承载形式发生了许多的变化。
打OI不懂网络,就好比学经济不懂政治。 充分理解网络是如何联通的,对处理生活中遇到的互联网相关问题,乃至真正理解互联网的技术本质,会有很大的帮助。
本文主要介绍 Internet 、 Web 和 TCP/IP协议栈 。
1.Internet 和 Web
对于初学者,一对很容易混淆的概念是 Internet 和 Web 。
Internet ,中文称为 互联网 或 因特网 。
-
简而言之,是一个由无数基于 TCP/IP协议栈 的终端设备相互连接所组成的,涵盖全球范围的计算机网络。
- 如果看不懂什么是“ TCP/IP协议栈 ”,不要惊慌,现阶段你只需要认为这是一类网络实现技术的总称即可。
Web ,a.k.a World Wide Web or WWW ,中文称为 万维网 。
-
简而言之,是通过 HTML标记语言 组织信息,基于 HTTP协议 和计算机网络向用户远程提供网页的一类网络服务。
-
HTTP协议 是 TCP/IP协议栈 中的一部分。
综上,我们可以解答以下常见问题:
-
Internet 是一个网络,而 Web 是一种服务类型。
-
我们所说的“公网”或“广域网”,绝大多数情况下指的是 Internet 。
-
HTML标记语言 是 Web 的重要组成部分,两者密不可分。有时可以通过“是否使用了 HTML标记语言 来判断某一服务是否是 Web 服务”
-
使用 Internet 不一定表示使用 Web 。只有在使用和“网页”有关的网络服务时,才会涉及到 Web 。例如:
-
游玩 Minecraft 多人游戏本身和 Web 没有关系。
-
游玩《原神》时,除登录、反馈、问卷、版本热点等页面以外,游玩本身并没有使用到 Web 。
-
还有几点需要明确:
-
HTTP协议 和 HTML标记语言 是图方便的说法。更规范的说法应该不含中文
- HTTP 的 P 和 HTML 的 ML 本身就包含了“协议”和“标记语言”的意思。
-
HTTP协议 并不是 Web 独有的。它是 Web 在服务者和用户间传输数据的方式,也是 TCP/IP协议栈 的 应用层 的协议。
-
因此,某服务使用了 HTTP协议 不代表此服务使用了 Web 。
-
我们马上会介绍 应用层 是什么东西。
-
-
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协议栈 的重点。这涉及到分层,是一种重要的思想。分层后,各个层级会有以下特性:
-
下层层级为上层提供服务。下层层级是上层层级及其内容的 载体 。
-
对下层层级而言,所有上层层级及其内容是其 负载/载荷 部分(类比:对于信封而言,信纸是载荷;对于信纸而言,上面的字是载荷。)
-
每一个层级的功能是固定的,但是实现方式可以不同。
- 如果有几个实现方式方式可以实现相同的功能,则它们在理论上应该可以互相替换。
-
每一个层级只关心自己运行时所需的信息,不关心其负载和载体的细节。
TCP/IP协议栈 设计之初分为四层,而现在我们一般将其分为五层理解。这五层分别是:
-
应用层,在上面的情境中,“相同的语言”指代的是应用层。
应用层是 TCP/IP协议栈 的最高层,在某些简单的应用场景中,应用层的 负载 就是数据本身。但在另一些应用(包括 Web)中,应用层的负载也可能是不属于TCP/IP协议栈的,使用TCP/IP协议栈服务的,更高层级内容的载体。 对于 Web 而言,这个“更高层级”可能指的是通过HTML标记语言提供的网页文档。
-
传输层,在上面的情境中,“约定的交流方式”指代的是传输层。
传输层负责建立和管理从发送端和接收端之间的 连接 。这(很多情况下是,但不一定)包括区分不同的会话,处理信息丢失等。 TCP/IP协议栈 中的 TCP 就是一种传输层协议(全名是 Transfer Control Protocol 传输控制协议 )。
-
TCP 是一种可靠的传输层协议,旨在实现可靠的连接,允许在一个连接中进行多轮信息传递的同时,能使通信双方能确认对方是否收到信息,并在确认某个信息丢失时重新发送信息,使通信双方能够准确地掌握通信的具体情况。 这可以类比即时通信应用:发送失败时会有提示并可选择重发,被拉黑可以删除好友,可以进行多轮对话。 TCP 的缺陷是由于需要许多确认过程和连接的建立和管理,通信的速度和效率相对较慢,尤其是在信息具有时效性和不需要连续多轮对话的场合。但由于传输速率本来就很快,这个缺陷一般是可以接受的。
-
与 TCP 相对的, UDP 协议是它的反面。UDP协议不进行连接,它只负责发送信息,而送达与否完全不关心(仅限传输层。应用层仍然可以维护自己的连接并实现自己的确认/重发流程)。类比大声喊话:话已经给你(应用层)带到了,对方听不听得到就不管了。如果你想知道它有没有听到,你可以约定让他喊回来(应用层实现确认/重发流程),反正我(UDP)只负责带话,至于怎么说你们(应用层)自己决定。
-
-
网络层
如果说传输层负责的是从发送端到接收端的传输控制,那么网络层负责的是数据在网络中的具体传输过程。在上面的情境中,就是和“中介设备”的对接部分。
网络层及以下的协议细节本文暂不涉及。
-
数据链路层
数据链路层处理和利用介质的物理限制。比如当电缆上同时有两个信号需要传输时,防止它们出现冲突。
-
物理层
物理层直接承载信息。
几乎每个试图详细解释 TCP/IP协议栈 如何运作的博客作者都会不得不举一个例子。但是几乎没有一个例子能够完美地反映协议栈的每一层的工作内容和区别。本文所举出的例子更是与贴切一词无关。实际上,即使是TCP/IP的设计者也承认,这个协议栈的许多内容并没有完美地实现分层。但即便如此,只要我们还要深入网络技术,就必须尽量体现层级。
关于层级和 TCP/IP协议栈 的更多信息,本系列的其它文章中会继续讨论。
下一步
我们已经简单了解了 Internet 、 Web 、 TCP/IP协议栈 的概念,并简要介绍了他们和一些我们常见概念的联系。
计算机网络是一个非常庞大的知识体系,不可能通过一两个博客介绍清楚或者学习明白。下一步,本系列计划介绍 Web 和 TCP/IP 协议栈 的联系,并介绍 HTTP协议 的基本工作流程。
由于作者个人能力所限,本文内容可能有错误,也可能晦涩难懂。如果发现上述情况,请告知我。本专栏的改进离不开读者的反馈。
本文以 CC BY-NC-SA 4.0 及更新版本分享。