TCP/IP 网络设备与基础概念


  1. 背景
  2. 协议栈
  3. 网络设备
    1. 路由器
      1. 路由选择
      2. 分组转发
      3. TTL
    2. 交换机
      1. VLAN
      2. 三层交换机
    3. 集线器
  4. 简单测试

作者序

本文目的在于按照自己的理解,解释清楚网络中的一些基本概念,以及支撑概念落地的网络设备的工作原理。从而解决网络联通性问题,以及为定量分析网络性能问题打基础。如有错漏,欢迎指正:

  1. 什么是 WAN vs LAN?
  2. 什么是子网、网关?
  3. LAN vs 子网有什么区别?
  4. 路由器、交换机、集线器 有什么区别?
  5. LAN vs VLAN ?
  6. L2 交换机 vs L3
  7. 交换机有什么区别?

背景

网络世界与现实世界在许多方面运作方式相似。就像现实世界中的地址一样,划分国家、省市、街道、小区。邮递员以此高效的将快递正确送达每家每户。在网络世界中,IP 地址是用于唯一标识网络中的设备的,但是当网络规模变得很大时,就需要将 IP 地址进行划分,划分为若干个子网。子网使网络更高效。通过子网划分,网络流量传播距离更短,无需通过不必要的路由器即可到达目的地。

子网划分的过程需要在网络层上进行,可以通过在 IP 地址中使用子网掩码(Subnet Mask)来划分子网。子网掩码是一个 32 位的二进制数,与 IP 地址进行逻辑运算,可以将网络号和主机号进行区分。

例如,如果将 IP 地址(192.168.1.0)分成 4 个子网,可以使用 255.255.255.192 的子网掩码进行划分,得到四个子网:

  • 192.168.1.0/26
  • 192.168.1.64/26
  • 192.168.1.128/26
  • 192.168.1.192/26

不难看出,网络世界的运作很类似“分治策略”,可以将以上网络模型简化为 “子问题”(广域网 WAN) + 初始值(局域网 LAN)

局域网(LAN, Local Area Network)是指在较小的地理范围内,由计算机、打印机、服务器等设备组成的局域网,它们可以通过物理链路或者无线信号相互连接,形成一个逻辑上的网络。在 LAN 中,所有设备可以直接通信,不需要经过路由器进行 IP 路由,因此都处于同一个广播域内。

广域网(WAN, Wide Area Network)是一种大型计算机网络,用于远距离连接不同的计算机组。大型企业通常使用 WAN 来连接其办公网络;每一办事处通常有自己的局域网(或 LAN),这些 LAN 通过 WAN 相连。

在此模型下,首先回顾下协议栈的分层;然后,再来认识网络设备是如何落地协议栈,并完成工作的。

协议栈

TCP/IP 包含如下两个头部。

  • MAC 头部(以太网协议)
  • IP 头部(IP 协议)

协议栈分层中 IP 和 Ethernet 分开的目的在于支撑除了以太网在内的各种通信技术,例如无线局域网、ADSL、FTTH 等。它们都可以替代以太网的角色帮助 IP 协议来传输网络包。


两个头部分别具有不同的作用。首先,发送方将包的目的地,也就是要访问的服务器的 IP 地址写入 IP 头部中。如此就知道这个包应该发往哪里,IP 协议就可以根据这一地址查找包的传输方向,从而找到下一个路由器的位置。接下来,IP 协议会委托以太网协议将包传输过去。IP 协议会查找下一个路由器的以太网地址(MAC 地址),将包将地址写入 MAC 头部中。如此,以太网协议就知道要将这个包发到哪一个路由器。

同时,也意味着,经过每一跳的网络设备都会经过“解包”和“封包”,最核心的变化是 MAC 地址会被更新为下一跳的网络设备的地址(IP 地址保持不变)

网络设备

现如今,网络设备的集成度越来越高,像上图这样使用独立设备的情况很少见。例如家用路由器,集成了集线器和交换机的功能。

不过,把每个功能独立出来更容易理解,而且理解了这种模式之后,也就能理解集成多种功能的设备,因此下面将所有功能独立出来,逐个来进行探索。

  • 三层网络设备,支持物理层, 数据链路层及网络层协议,例如:路由器
  • 二层网络设备,支持物理层和数据链路层协议,例如:以太网交换机
  • 一层网络设备,只支持物理层协议,例如:HUB

路由器

路由器作为三层网络设备的代表,在其中扮演着非常重要的角色。路由器先构建路由表,以确定如何将数据包从一个网络转发到另外一个网络。

路由的核心功能可以分为两个部分,“路由选择”(确定通过网络的最佳路径的任务) 和 “分组转发”(将数据包从一个接口移动到另一个接口的任务)。就像计算机一样,通过更换网卡(NIC),路由器不仅可以支持以太网,也可以支持无线局域网。

路由选择

路由表是路由器中的一个表格,包含着可用的路由信息,包括目标网络地址和下一跳路由器的地址。当路由器接收到一个数据包时,会将数据包的目标 IP 地址与每一条路由表项的目的 IP 地址进行匹配。如果有多条匹配的路由表项,则选择最长的前缀匹配,并将数据包转发到该前缀所对应的网络。

最长的前缀匹配指的是,路由表项中目的 IP 地址的子网掩码位数最长的项。例如,路由表中有以下三条路由表项:

  • 10.0.0.0/8
  • 10.1.0.0/16
  • 0.0.0.0/0

当路由器收到一个目标 IP 地址为 10.1.2.3 的数据包时,会先与第二个路由表项(10.1.0.0/16)进行匹配,因为它的前缀长度更长(16 位)比第一个路由表项(8 位)更精确。因此,路由器会将数据包转发到与第二个路由表项对应的下一跳路由器。

路由器拥有内网的 IP 路由表,同时还拥有一条神奇的路由 0.0.0.0/0。0.0.0.0/0 路由是一种默认路由,也称为默认网关或缺省路由。它指示路由器在找不到更具体的路由表项来匹配目标 IP 地址时,将数据包发送到默认网关,最终到达核心网。

路由器有一个非常独立的控制体系。先有控制层面,再有数据层面。先有控制层面,才会知道一个一个网络怎么走,知道网络怎么走之后,再基于数据层面,接收数据,查读路由表,来进行数据转发。路由表的构建方式有以下几种方式:

  1. 直连路由:路由器会扫描每个接口,确定网络地址和掩码,并将其添加到路由表中。
  2. 静态路由:管理员可以手动配置静态路由信息,包括目标网络地址和下一跳路由器的地址。
  3. 动态路由协议:路由器可以使用动态路由协议来动态学习路由信息。常见的动态路由协议包括 OSPF、BGP、RIP 等。
分组转发

接收到的数据包由链路层协议控制器处理,该控制器处理物理链路(电缆)上使用的链路层协议,会检查接收到的帧的完整性(大小、校验和、地址等)。有效帧通过去除链路层报头(解封)转换为数据包,并在接收队列中排队。这通常是一个先进先出 (FIFO) 队列,通常采用内存缓冲区环的形式。

每个传出数据包都需要添加一个新的链路层协议报头(封装),并将目标地址设置为下一个接收数据包的系统。链路协议控制器还维护与接口相关的 硬件地址表。 通常涉及使用地址解析协议 ( ARP) 找出直接连接到同一电缆(或 LAN )的其他计算机或路由器的硬件(MAC 地址).  数据包最终使用媒体接口发送,硬件地址设置为下一跳系统。

TTL

为了确保 IP 数据包在网络上具有有限的生存期,所有 IP 数据包都有一个 8 位的 TTL(IPv4)或 Hop Limit(IPv6)报头字段和值,当一个路由器接收到一个数据包时,它会将 TTL 或 Hop Limit 减 1,然后再将数据包转发到下一个路由器。如果 TTL 或 Hop Limit 的值减少到 0,路由器将丢弃数据包并向源主机发送 ICMP 错误消息,通知它数据包已经超时。

交换机

MAC 地址是硬件地址,与设备的网卡绑定,二层交换机通过学习连接的每个终端的 MAC 地址,将数据发送给对应的目 的终端上,避免将数据发送到无关端口,提供了网络利用率。下次再遇到相同的 MAC 地址时,可以直接从缓存中获取对应的端口信息。

另外一种情况,由于广播域(二层互通)的存在,每个设备都能够直接访问到同一广播域内的所有其他设备。如果是没有学习到的 MAC 地址,或者想跟网段内所有终端进行通信,交换机会使用广播方式,将数据帧进行泛洪,无需对目标设备进行地址解析和寻址,可以更快速地定位和转发数据包。然后只有相应的接收者才接收包,而其他设备则会忽略这个包。

举例,有三台电脑连接同一台交换机,计算机的 MAC 地址简化为 AAA、BBB 和 CCC。现在,假设计算机 A 要向计算机 B 发送一些信息:

交换机将建立一个 MAC 地址表,并且只从源 MAC 地址中学习。此时,它刚刚得知计算机 A 的 MAC 地址在接口 1 上。它现在将在其 MAC 地址表中添加此信息。但交换机目前没有计算机 B 所在位置的信息。因此只能将此帧从其所有除来源之外的接口中洪泛出来。计算机 B 和计算机 C 将接收该以太网帧。

由于计算机 B 将其 MAC 地址视为该以太网帧的目的地,它知道它是为他准备的,计算机 C 将丢弃它。计算机 B 将响应计算机 A,构建一个以太网帧并将其发送给交换机。此时,交换机将学习计算机 B 的 MAC 地址。

VLAN

当同一个交换机下主机越来越多,网络规模越大,广播域就越大,泛洪流量也越来越大,降低通信效率。在一个广播域内的任意两台主机之间可以任意通信,通信数据有被窃取的风险。

有两种方案可以解决这个问题:

  1. 物理隔离:使用更多的交换机,配置为不同的子网
  2. 逻辑隔离:即,VLAN,使用交换机虚拟出来多个子网

对于分布在不同交换机之下同一个 VLAN 的主机如何互达呢?对于支持 VLAN 的交换机,有一种口叫作 Trunk 口。它可以转发属于任何 VLAN 的口。交换机之间可以通过这种口相互连接,即可保证同一个 VLAN 互达。

三层交换机

二层交换机通过使用 VLAN 分隔广播域,位于同一个 VLAN 下的终端才能进 行数据帧交互。对于不同 VLAN 的终端有通信需求时,就必须使用路由功能, 也就是需要额外添加路由器。二层交换机和路由器组合使用,才能完成跨 VLAN 的通信。基于类似的需求,三层交换机应运而生。使用三层交换机就不需要其它网络设备,能够直接完成不同 VLAN 之间的通信。

集线器

集线器工作在物理层,以太网 LAN 的一种中继器形式,具有多个端口(它们有时也称为“多端口中继器”或“活动星形网络”)。

每个端口(或接口)允许一台设备连接到集线器。通过端口 F 连接的系统正在向端口 C 连接的系统发送一帧数据。集线器由于工作于物理层,无法识别帧头中的地址,因此无法识别要发送到哪个端口到。因此,采用“广播模式”,每一帧都被发送到每个输出端口,然后让主机来判断是否需要。

简单测试

举例来源:《Wireshark 网络分析就这么简单》

两台服务器 A 和 B 的网络配置如下图,B 的子网掩码本应该是 255.255.255.0,被不小心配成了 255.255.255.224。它们还能正常通信吗?

  • 答案 1:“A 和 B 不能通信,因为……如果这样都行的话,子网掩码还有什么用?”(这位的反证法听上去很有道理!)
  • 答案 2:“A 和 B 能通信,因为它们可以通过 ARP 广播获得对方的 MAC 地址。”(那子网掩码还有什么用?楼上的反证法用来反驳这位正好。)
  • 答案 3:“A 和 B 能通信,但所有包都要通过默认网关 192.168.26.2 转发。”(请问这么复杂的结果你是怎么想到的?)
  • 答案 4:“A 和 B 不能通信,因为 ARP 不能跨子网。”(这个答案听上去真像是经过认真思考的。)

以上哪个答案是正确的?还是都不正确?如果这是你第一次听到这道题,不妨停下来思考一下。

答案揭晓:B 先把请求交给默认网关,默认网关再转发给 A。而 A 收到请求后直接回复给 B,形成如下所示的三角形环路。不知道你答对了吗?

本文作者 : cyningsun
本文地址https://www.cyningsun.com/03-19-2023/network-device-and-concept.html
版权声明 :本博客所有文章除特别声明外,均采用 CC BY-NC-ND 3.0 CN 许可协议。转载请注明出处!

# Network