刘金华
对于任何需要管理服务器的人来说,懂得一些基本的网络知识是必要的。它不仅能够帮你上线服务并流畅地运行服务,还能帮助你深入地诊断问题。这篇文章与操作系统无关,但在实现利用网络的功能和服务时应该非常有帮助。
基础术语
在我们开始讨论任何深度的网络之前,我们必须定义一些常见术语。
连接:在网络中,一个连接表示通过网络传输的一系列信息。这表示一个连接是在数据开始传输之前建立(遵循在协议中实现的过程),然后在数据传输结束之后解构。
数据包:一般来说,数据包是在网络上传送的最基本的单元。当通过网络通信时,包就像是是从一个端点到另一个端点携带着您的数据(以片为单位)的信封。
数据包具有包含关于分组的信息的报头部分,包括源和目的地,时间戳和网络跳Ping等。数据包的主体部分包含正被传送的实际数据。它有时被称为Body或Payload。
网络接口:网络接口可以指到网络硬件上任何类型的软件接口。例如,如果计算机中有两个网卡,则可以单独控制和配置与其关联的每个网络接口。
网络接口可以与物理设备相关联,也可以表示虚拟接口。
LAN:表示“本地网络”。它指的是广域网不可公开访问的网络或网络的一部分。家庭或办公室网络就是LAN的例子。
WAN:表示“广域网”。这是比LAN更广阔的网络。虽然WAN是用于描述一般的大型分散网络的术语,但它通常指整个互联网。
如果一个接口被连接到了广域网,通常就意味着它可以通过互联网访问。
协议:协议是一组规则和标准,基本上定义了设备可以用来进行通信的语言。在网络中广泛使用着大量协议,并且它们通常在不同的层次上实现。
一些低级协议有TCP、UDP、IP和ICMP。基于这些较低协议的应用层协议有HTTP(用于访问Web內容),SSH、TLS/SSL和FTP。
端口:端口是单个机器上可以绑定到特定软件的地址。它不是物理接口或位置,但它允许您的服务器能够使用多个应用程序进行通信。
防火墙:防火墙是一个程序,决定是否允许进入服务器或外出的流量。防火墙通常通过创建在哪些端口上可接受的流量类型的规则来工作。阻止服务器上没有被特定应用程序使用的端口。
NAT:表示网络地址转换。它是一种将传入路由服务器的请求转换到它在本地网络中已知的相关设备或服务器的方法。这通常在物理本地网络中实现,是一种将通过IP访问的请求路由到需要的后端服务器的一种方法。
VPN:就是虚拟专用网。它是通过互联网连接独立的本地网络,同时保持隐私的一种手段。通常出于安全原因,它把远程系统作为本地网络上访问。
上面这些不能穷尽你可能会遇到所有的术语,此刻我们应该了解一些基本的、高层次的概念,这将使我们能够更好地讨论接下来主题。
网络层次
虽然网络通常被认为是主机之间的水平连接,但是它在整个计算机或网络中以垂直方式分层来实现的。
这意味着,有多个技术和协议建立在彼此之上,以使通信更容易地运行。每个连续的更高层都对原始数据做进一步抽象,并使它更容易为应用程序和用户所使用。它还允许您以新的方式来利用较低层次,而无需投入时间和精力来开发处理这些类型的流量的协议和应用程序。
我们用来谈论每个分层方案的语言会根据您使用的模型而有很大差异。但是不管用于讨论的层次模型是什么,数据的流转路径是相同的。
当数据从一个机器发出时,它按照自顶向下的顺序过滤,在最低层传输到另一台机器,然后通过另一计算机的层向上传播,恢复到原来的数据。每一层都有能力在它从相邻层接收的数据周围添加自己的“包装器”,这将有助于后面的层决定在数据被传递时对数据做什么。
OSI模型
过去,谈论网络通信的不同层次的一种方法是OSI模型,OSI表示开放系统互连。
此模型定义了七个层次,分别是:
应用层:应用层是用户和用户应用最经常与之交互的层。网络通信就是讨论资源的可用性、通信对象以及数据同步。
表现层:表现层负责映射资源和创建上下文。它用于将低级网络数据转换为应用程序期望看到的数据。
会话层:会话层是一个连接处理程序。它以持久方式创建、维护和销毁节点之间的连接。
传输层:传输层负责向其上的层传递可靠的连接。可靠是指验证在连接的另一端完整接收到一条数据的能力。该层次可以重新发送已丢弃或损坏的信息,并可以确认数据是否被远程计算机接收。
网络层:网络层用于在网络上的不同节点之间路由数据。它使用地址来表示向哪台计算机发送信息。该层还可以将较大的消息拆分为较小的块,以在相对应的时候对其重新组装。
链路层:该层次使用现有物理连接,在网络上的不同节点或设备之间建立和维持可靠链路。
物理层:物理层负责处理用于建立连接的实际物理设备。该层涉及管理物理连接的裸软件以及硬件本身(如以太网等)。
基于纯硬件提供的功能,还有其他不同的层次。
TCP/ IP模型
TCP / IP模型通常被称为因特网协议组,是更简单并且已被广泛采用的另一分层模型。它定义了四个单独的层,其中一些与OSI模型重叠:
应用层:在此模型中,应用层负责在应用程序之间创建和传输用户数据。应用程序可以位于远程系统上,并且对应本地终端用户操作。
这里的通信发生在不同个体之间。
传输层:传输层负责进程之间的通信。这种层次的网络利用端口来区分不同的服务。根据你所使用的协议类型,它可以建立不可靠或可靠的连接。
网络层:这里的网络层用于在网络中从节点到节点传输数据。其只关心连接的端点,不关心如何从一个端点到另一个端点。在该层中使用IP地址作为到达远程设备的寻址方式。
链路层:链路层实现本地网络的实际拓扑,以允许网络层可以被寻址。它在相邻节点之间建立连接用来发送数据。
就像你看到的,TCP / IP模型更抽象和流畅,使它更容易实现,所以它成为了网络层次中的主流实现。
接口
接口是计算机的网络通信点。每个接口都与物理或虚拟网络设备相关联。
通常,您的机器会为每个以太网或无线互联网卡配置网络接口。
此外,它还定义了一个名为“回环”或本地接口的虚拟网络接口。这可以用作单个计算机上的不同应用程序和不同进程之间通信。在许多工具中的“lo”接口就是一个例子。
很多时候,管理员会为外网服务配置一个接口,本地网络和私有网络配置一个接口。
协议
网络通过将许多不同的协议搭载在彼此之上来工作。用这种方式,就可以使用彼此封装的多个协议来传输一条数据。
我们将讨论一些你可能会遇到的更常见的协议,并解释它们的差异,以及说明它们所做处理的上下文。这里将从较低网络层次上实现的协议开始,并逐步向上延伸到更高抽象的协议。
媒体访问控制
媒体访问控制是用于区分特定设备的通信协议。每个设备应该在制造过程中获得唯一的MAC地址,以区别于互联网上的其他设备。
通过MAC地址可以唯一地指向某台设备,即使你在操作期间通过软件更改该设备的名称。
媒体访问控制是链路层上经常使用的协议之一。
IP
IP协议是互联网工作的基本协议之一。TCP / IP地址在每个网络上都是唯一的,可以用它來找到网络的特定机器。它在TCP / IP模型的网络层实现。
网络可以链接在一起,但是网络流量必须在跨越网络边界时有对应的路由信息。此协议假定网络是不可靠,有多条路径可以到达到同一目的地,并且不同路径之间可以动态改变。
该协议有许多不同的实现。今天最常见的实现是IPv4,但是由于可用的IPv4地址越来越少,加之协议能力的改进,IPv6已越来越流行。
ICMP
ICMP表示互联网控制消息协议。它通过在设备之间发送消息以了解是否可用或者错误信息。这些数据包用于各种网络诊断工具,如ping和traceroute。
通常,当某个不同的包出现问题会发送ICMP包,它们被用作网络通信中的反馈机制。
TCP
TCP表示传输控制协议。它在TCP / IP模型的传输层实现,用于建立可靠的连接。
TCP是一种协议,它把数据封装成数据包,然后将这些数据包通过底层方法传输到远程终端。在另一端,它还可以检查错误,控制请求某些部分重新发送,并重新组装成一个逻辑块信息发送到应用层。
协议在建立一个连接开始数据传输之前,使用一个叫做“三次握手”的系统。这是一种保证两端的通信请求被接受并达成一致以及确保数据可靠性的方法。
数据发送后,使用一个类似的“四次握手”来销毁连接。
TCP协议是许多互联网最受欢迎的用法的选择,包括WWW、FTP、SSH和电子邮件。可以肯定地说,互联网没有TCP,就没有我们的今天。
UDP
UDP表示用户数据报协议。这是一个很受欢迎的TCP的伙伴协议,也在传输层实现。
TCP和UDP最主要的区别是:UDP提供不可靠的数据传输,它不确保数据已经被另一端接收。这听起来不是好事,对许多场景,这是极其重要的功能。因为它不需要等待确认数据已接收和被迫重新发送数据,UDP要比TCP快得多。它与远程主机之间不建立连接,它只是发送数据,但不关心数据有没有被接受。
它是一个简单的事务,它对于像网络资源查询等简单的通信场景是非常有用的。它也不维护状态,所以对于把数据从一台机器发送到许多实时客户端的场景非常合适。这使它非常适合于那些不能延迟的像网络电话,游戏和其他应用程序的场景。
HTTP
HTTP表示超文本传输协议。这是一个定义在应用层的协议,它构成了网络通信的基础。HTTP定义了大量的函数,用来帮你告诉远程系统你的请求。例如GET、POST和DELETE对被请求的数据以不同的方式进行交互。
FTP
FTP表示文件传输协议。它也位于应用层,并提供了将完整文件从一个主机传输到另一个主机的方法。它本质上是不安全的,因此不推荐用于任何面向外部的网络,除非它被用于公共的,仅用于下载资源的场景。
DNS
DNS表示域名系统。它是一种应用层协议,用于为互联网资源提供人性化的命名机制。它就是将域名绑定到一个IP地址,使你可以在浏览器中通过名称来访问你的网站。
SSH
SSH表示安全shell。它是在实现在应用层的加密协议,可以提供安全的方式与远程服务器通信。由于其端到端加密和无处不在,许多其他技术基于它构建。
有许多我们没有覆盖的其他协议同样重要。然而,这应该给了一个很好的概述,关于使得互联网和网络成为可能的基础技术。
此刻,您应该熟悉了一些基本的网络术语,并且了解了不同的组件是如何实现相互通信。这将有助于您理解其他文章和您的系统中的文档。