对于任何管理服务器的人来说,了解网络是非常重要的。它不仅对于将您的服务上线并顺利运行至关重要,还能让您深入诊断问题。
本文将概述一些常见的网络概念。我们将讨论术语、常见协议以及网络不同层的责任和特性。
本指南与操作系统无关,但在您的服务器上实现利用网络的功能和服务时应该非常有帮助。
首先,我们将定义一些您将在本指南以及其他关于网络的指南和文档中看到的常见术语。
这些术语将在接下来的适当部分中进行扩展:
连接:在网络中,连接指的是通过网络传输的相关信息。一般来说,在数据传输之前建立连接(按照协议中规定的程序),在数据传输结束时可能会拆除连接。
数据包:数据包是有意传输到网络上的最小单位。在网络通信中,数据包是从一个端点到另一个端点传输数据的信封。
数据包有一个包含有关数据包的信息的头部部分,包括源和目的地、时间戳、网络跳数等。数据包的主要部分包含实际传输的数据。有时被称为主体或有效载荷。
网络接口可能与物理设备相关联,也可能是虚拟接口的表示。在大多数 Linux 环境中可用的“环回”设备是一个虚拟接口的例子,用于连接回同一台机器。
LAN:LAN 指的是“局域网”。它指的是一个网络或网络的一部分,不对更广泛的互联网公开。家庭或办公网络是 LAN 的一个例子。
WAN:WAN 指的是“广域网”。它指的是比 LAN 要广泛得多的网络。虽然 WAN 是用来描述一般的大型分散网络的相关术语,但通常指的是互联网作为一个整体。
如果说某个接口连接到 WAN,通常假定它可以通过互联网访问。
一些低层协议包括 TCP、UDP、IP 和 ICMP。建立在这些低层协议之上的一些应用层协议的熟悉例子包括 HTTP(用于访问网络内容)、SSH 和 TLS/SSL。
端口:端口是单台计算机上可以与特定软件关联的地址。它不是物理接口或位置,但它允许您的服务器能够使用多个应用程序进行通信。
防火墙:防火墙是一个决定是否允许服务器上的流量进出的程序。防火墙通常通过为哪种类型的流量在哪个端口上是可接受的创建规则来工作。通常,防火墙会阻止服务器上未使用的端口。
NAT:NAT 指的是网络地址转换。这是一种重新打包并将传入请求发送到 LAN 上的相关设备或服务器的路由服务器的方法。这通常在物理 LAN 中实现,作为通过一个 IP 地址将请求路由到必要的后端服务器的方法。
VPN:VPN 指的是虚拟专用网络。这是一种通过互联网连接分开的 LAN 的方法,同时保持隐私。这用于连接远程系统,就像它们在本地网络上一样,通常是出于安全原因。
还有许多其他术语,这个列表并不详尽。我们将在需要时解释其他术语。在这一点上,您应该了解一些高层概念,这将使我们能够更好地讨论接下来的主题。
虽然网络通常以水平方式在主机之间讨论拓扑,但在任何给定的计算机或网络中,它的实现是分层的。
这意味着有多种技术和协议是相互叠加的,以使通信功能正常运行。每个连续的更高层都会对原始数据进行一些抽象。
它还允许您以新的方式利用较低层,而无需投入时间和精力来开发处理这些类型流量的协议和应用程序。
我们用来讨论每个分层方案的语言取决于使用的模型。无论使用哪种模型来讨论层,数据的路径是相同的。
当数据从一台机器发送出去时,它从堆栈的顶部开始并向下过滤。在最低层,实际传输到另一台机器。此时,数据会通过另一台计算机的各层向上传输。
每个层都有能力在从相邻层接收的数据周围添加自己的“包装”,这将帮助后续的层在移交数据时决定如何处理数据。
TCP/IP 模型,更常被称为互联网协议套件,是一种被广泛采用的分层模型。它定义了四个独立的层次:
应用层:在该模型中,应用层负责在应用程序之间创建和传输用户数据。这些应用程序可以位于远程系统上,并且应该表现为对最终用户来说是本地操作。这种通信被称为对等通信。
传输层:传输层负责进程之间的通信。这种网络层次利用端口来定位不同的服务。
网络层:网络层用于在网络中的节点之间传输数据。该层知道连接的端点,但不关心从一个地方到另一个地方所需的实际连接。IP 地址在该层中被定义为一种可寻址远程系统的方式。
链路层:链路层实现了本地网络的实际拓扑结构,使得网络层能够呈现一个可寻址的接口。它建立相邻节点之间的连接以发送数据。
正如你所看到的,TCP/IP 模型是抽象且灵活的。这使得它成为了实现的热门选择,并使其成为网络层次被分类的主导方式。
接口是计算机的网络通信点。每个接口都与物理或虚拟网络设备相关联。
通常,您的服务器将为每个以太网或无线互联网卡配置一个可配置的网络接口。
此外,它将定义一个名为“环回”或本地主机接口的虚拟网络接口。这用作将单台计算机上的应用程序和进程连接到其他应用程序和进程的接口。您可以在许多工具中看到它被称为“lo”接口。
许多时候,管理员会配置一个接口来服务于互联网流量,另一个接口用于局域网或私有网络。
在启用了私有网络的数据中心(包括 DigitalOcean Droplets),您的 VPS 将有两个网络接口。 “eth0” 接口将被配置为处理来自互联网的流量,而 “eth1” 接口将用于与私有网络通信。
网络通过在彼此之上堆叠多种不同的协议来工作。这样,一条数据可以使用多个封装在彼此之内的协议进行传输。
我们将从实现在较低网络层的协议开始,逐步向具有更高抽象的协议发展。
媒体访问控制是一种用于区分特定设备的通信协议。每个设备在制造时都应该获得一个唯一的、硬编码的媒体访问控制地址(MAC 地址),以使其与互联网上的每个其他设备区分开来。
通过 MAC 地址寻址硬件,即使上层软件在操作过程中可能会更改该特定设备的名称,您也可以通过唯一值引用设备。
MAC 地址是您可能经常与之交互的低级链路层中的协议之一。
IP 协议是使互联网工作的基本协议之一。IP 地址在每个网络上是唯一的,它们允许机器在网络上相互寻址。它在 TCP/IP 模型的网络层上实现。
网络可以连接在一起,但是在跨网络边界时,流量必须进行路由。该协议假定网络不可靠,并且有多条到达相同目的地的路径,它可以在这些路径之间动态切换。
该协议有许多不同的实现。今天最常见的实现是 IPv4 地址,遵循模式 123.123.123.123
,尽管由于 IPv4 地址数量有限,IPv6 地址也因此变得越来越受欢迎,其遵循模式 2001:0db8:0000:0000:0000:ff00:0042:8329
。
ICMP 代表互联网控制消息协议。它用于在设备之间发送消息,指示它们的可用性或错误条件。这些数据包用于各种网络诊断工具,如 ping
和 traceroute
。
通常,当不同类型的数据包遇到问题时,ICMP 数据包会被传输。它们被用作网络通信的反馈机制。
TCP 代表传输控制协议。它实现在 TCP/IP 模型的传输层,并用于建立可靠的连接。
TCP 是将数据封装成数据包的协议之一。然后,它使用底层可用的方法将这些数据包传输到连接的远程端。在另一端,它可以检查错误,请求重新发送某些数据,并将信息重新组装成一个逻辑整体发送到应用层。
该协议在数据传输之前建立连接,使用一种称为三次握手的系统。这是通信的两端确认请求并同意一种确保数据可靠性的方法。
数据发送后,连接使用类似的四次握手进行关闭。
TCP 是互联网上许多最流行用途的首选协议,包括 WWW、SSH 和电子邮件。
UDP 代表用户数据报协议。它是 TCP 的一种流行的伴侣协议,同样实现在传输层。
UDP 和 TCP 的根本区别在于 UDP 提供不可靠的数据传输。它不验证数据是否已经在连接的另一端接收到。这听起来可能不太好,对于许多目的来说确实如此。然而,对于一些功能来说,这也是非常重要的。
因为不需要等待确认数据是否已经接收并强制重新发送数据,UDP 比 TCP 快得多。它不与远程主机建立连接,只是在没有确认的情况下发送数据。
因为它是一个直接的交易,所以它对于像查询网络资源这样的通信非常有用。它也不维护状态,这使得它非常适合将数据从一台机器传输到许多实时客户端。这使得它非常适合 VOIP、游戏和其他不能容忍延迟的应用程序。
HTTP 代表超文本传输协议。它是在应用层定义的协议,构成了网络通信的基础。
HTTP 定义了一些动词,告诉远程系统你正在请求什么。例如,GET、POST 和 DELETE 都以不同的方式与请求的数据交互。要查看不同的 HTTP 请求在实际中的示例,请参考《如何在 Express 中定义路由和 HTTP 请求方法》。
DNS 代表域名系统。它是一个应用层协议,用于为互联网资源提供人性化的命名机制。它将域名与 IP 地址绑定在一起,允许您通过浏览器名称访问站点。
SSH 代表安全外壳协议。它是在应用层实现的加密协议,可以用于安全地与远程服务器通信。许多其他技术都建立在这个协议之上,因为它具有端到端加密和普遍性。
还有许多其他重要的协议我们没有涵盖到。然而,这应该为您提供了一些使互联网和网络通信成为可能的基本技术的概述。
到目前为止,您应该熟悉一些网络术语,并能够理解不同组件如何能够相互通信。这应该有助于您理解其他文章和系统文档。
接下来,作为一个高层次的现实世界示例,您可能想阅读《如何在 Go 中进行 HTTP 请求》。