Network Topology
网络中节点的组织称为拓扑。
拓扑类型分为六个基本类别:点对点、菊花链、总线、环形、星形和网格。
Point to Point (点对点)
直接连接两个节点的拓扑。
Daisy Chain(菊花链)
一系列点对点连接将创建菊花链。在图 1-2 的菊花链中,从节点 C 发往节点 F 的流量必须经过节点 D 和 E。源节点和目标节点之间的中间节点通常称为跃点。
Bus Topology(总线拓扑)
总线拓扑节点共享一个共同的网络链接。有线总线网络并不常见,但这种拓扑结构却能推动无线网络的发展。有线网络上的节点会看到所有流量,并根据流量是否针对它们而选择性地忽略或接受。当节点 H 向图 1-3 总线图中的节点 L 发送流量时,节点 I、J、K 和 M 会接收到流量,但不会理会。只有节点 L 接受数据,因为它是目标接收者。虽然无线客户端可以看到彼此的信息流,但信息流通常是加密的。
Ring Topology(环形拓扑)
环形拓扑结构曾用于某些光纤网络部署,它是一种闭环结构,数据在其中单向传输。例如,在图 1-4 中,节点 N 可以通过节点 O、P 和 Q 向节点 R 发送一条消息。节点 O、P 和 Q 会重新传输该消息,直到它到达节点 R。如果节点 P 无法重新传输该消息,它将永远无法到达目的地。由于这种设计,最慢的节点可以限制数据传输的速度。假设流量顺时针传输,且节点 Q 最慢,则节点 Q 会减慢从节点 O 发送到节点 N 的流量。但是,从节点 N 发送到节点 O 的流量不受节点 Q 速度慢的限制,因为该流量不经过节点 Q。
Star Topology(星形拓扑)
在星型拓扑结构中,中心节点与所有其他节点都有独立的点对点连接。在有线网络中,你可能会遇到这种网络拓扑结构。如图 1-5 所示,中心节点通常是一个网络交换机,它是一种从原点节点接收数据并将数据转发到目的地节点的设备,就像邮政服务一样。增加节点只需将它们连接到交换机即可。在这种拓扑结构中,数据只能传输一跳。
Mesh Topology(网格拓扑)
完全连接的网状网络中的每个节点都与其他节点有直接连接(图 1-6)。这种拓扑结构消除了单点故障,因为单个节点的故障不会影响网络上其他节点之间的流量。另一方面,随着节点数量的增加,成本和复杂性也随之增加,因此这种拓扑结构不适合大规模网络。这是另一种只有在大型无线网络中才可能遇到的拓扑结构。
混合拓扑
混合拓扑是将两种或多种基本拓扑组合在一起的网络。它们通常用于大型企业网络中,以满足特定的需求和要求。混合拓扑可以提供灵活性、可扩展性和冗余性,以适应不断变化的网络环境。
star-ring
星环混合网络是一系列连接到中心节点的环形网络。
star-bus
星-总线混合网络是由总线和星形网络拓扑组合而成的分层拓扑。
混合拓扑结构旨在通过利用每种拓扑结构的优势,并将每种拓扑结构的劣势限制在单个网段上,从而提高可靠性、可扩展性和灵活性。例如,在图 1-7 中的星环混合网络中,中心节点的故障只会影响环网之间的通信。每个环网尽管与其他环网隔离,但仍能继续正常运行。在星环混合网络中,环中单个节点的故障比单个大型环网更容易诊断。此外,故障只会影响整个网络的一个子集。
Bandwidth vs. Latency
Bandwidth(带宽)
网络带宽是指在一定时间间隔内通过网络连接发送的数据量。
更快的速度并不总是意味着更高的性能。这似乎有违直觉,但带宽较低的网络连接似乎比带宽较高的网络连接性能更好,这是因为有一个特点:延迟。
Latency(延迟)
网络延迟是指从发送网络资源请求到接收响应之间所经过的时间
高延迟可能会对用户体验造成负面影响,导致用户无法使用服务,并使用户远离软件或服务。软件开发人员往往没有充分认识到管理网络软件延迟的重要性。不要误以为带宽是实现最佳网络性能的唯一关键。
网站的延迟来自几个方面:客户端和服务器之间的网络延迟、从数据存储中检索数据所需的时间、服务器端编译动态内容所需的时间以及网络浏览器渲染页面所需的时间。如果用户点击一个链接,而页面呈现所需的时间太长,那么用户很可能不会继续等待结果,而延迟会导致流量从应用程序中流失。在编写网络软件(无论是网络应用程序还是应用程序接口)时,将延迟时间控制在最低限度,就能改善用户体验,提高应用程序在常用搜索引擎中的排名。
可以通过几种方法解决最常见的延迟问题。
- 首先,可以使用内容交付网络(CDN)或云基础设施将服务设在用户附近,从而减少用户与服务之间的距离和跳数。
- 优化请求和响应大小将进一步减少延迟。
- 在网络应用中采用缓存策略可对性能产生巨大影响。
- 最后,利用 Go 的并发性优势最大限度地减少服务器端的响应阻塞也会有所帮助。
The Open System Interconnection Model (OSI)(开放系统互联模型)
OSI 参考模型将所有网络活动划分为由七层组成的严格层次。OSI 参考模型的可视化表示法(如图 1-8 所示)将各层排列成一个堆栈,第 7 层位于顶层,第 1 层位于底层。
我们很容易将这些层的名称理解为独立的代码单元。相反,它们描述的是我们赋予软件部分的抽象概念。例如,你无法在软件中加入第 7 层库。但你可以说,你编写的软件在第 7 层实现了一项服务。OSI 模型的七层如下:
第 7 层--应用层
你的网络应用程序和库最常与应用层交互,应用层负责识别主机和检索资源。网络浏览器、Skype 和 bit torrent 客户端都是第 7 层应用程序的例子。
第 6 层--呈现层
当数据向堆栈下层移动时,呈现层为网络层准备数据;当数据向堆栈上层移动时,呈现层为应用层准备数据。加密、解密和数据编码都是第 6 层功能的例子。
第 5 层--会话层
会话层管理网络节点之间的连接生命周期。它负责建立连接、管理连接超时、协调运行模式和终止连接。某些第 7 层协议依赖于第 5 层提供的服务。
第 4 层--传输层
传输层控制和协调两个节点之间的数据传输,同时保持传输的可靠性。保持传输的可靠性包括纠正错误、控制数据传输速度、对数据进行分块或分段、重新传输丢失的数据以及确认收到的数据。通常情况下,如果接收方不确认收到数据,这一层的协议可能会重新传输数据。
第 3 层--网络层
网络层负责在节点之间传输数据。它允许你向一个网络地址发送数据,而无需与远程节点建立直接的点对点连接。OSI 并不要求这一层的协议提供可靠的传输或向发送方报告传输错误。网络层是涉及路由、寻址、组播和流量控制的网络管理协议的所在地。
第 2 层--数据链路层
数据链路层处理两个直接连接节点之间的数据传输。例如,数据链路层为从计算机到交换机以及从交换机到另一台计算机的数据传输提供便利。该层的协议可识别并尝试纠正物理层上的错误。
数据链路层的重传和流量控制功能取决于底层物理介质。例如,以太网不会重传错误数据,而无线网络则会。这是因为以太网网络上的比特错误并不常见,而无线网络上的比特错误却很普遍。如果本层协议不能确保数据传输的可靠性,网络协议栈的更高层协议也能确保数据传输的可靠性,但通常效率较低。
第 1 层--物理层
物理层将比特从网络堆栈转换为适合底层物理介质的电信号、光信号或无线电信号,再从物理介质转换回比特。这一层控制比特率。比特率是数据速度的限制。每秒十亿比特的比特率意味着数据在起点和终点之间的传输速度最高可达每秒十亿比特。
在讨论网络传输速率时,一个常见的混淆是使用每秒字节数而不是每秒比特数。我们计算的是每秒可以传输的 0 和 1 的数量,即比特数。因此,网络传输速率以每秒比特为单位。在讨论传输的数据量时,我们使用每秒字节数。如果您的互联网服务提供商宣传的下载速率是 100Mbps,这并不意味着您可以在一秒钟内下载 100MB 的文件。相反,在理想的网络条件下,可能需要接近 8 秒的时间。我们可以说,在 100Mbps 的连接上,每秒最多可以传输 12.5MB 的数据。