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

2023-11-10

本文目的在于按照自己的理解,解释清楚网络中的一些基本概念,以及支撑概念落地的网络设备的工作原理。从而解决网络联通性问题,以及为定量分析网络性能问题打基础。如有错漏,欢迎指正:
  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,形成如下所示的三角形环路。不知道你答对了吗?

转自https://www.cyningsun.com/03-19-2023/network-device-and-concept.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP/IP 网络设备与基础概念 的相关文章

  • c# 从另一个类中的另一个静态事件引发事件

    需要帮助从另一个班级调用事件 我有已声明事件的课程 public class MxPBaseGridView GridView public event AddNewItemsToPopUpMenuEventHandler AddNewIt
  • IEnumerable 的 String.Join(string, string[]) 的类似物

    class String包含非常有用的方法 String Join string string 它从数组创建一个字符串 用给定的符号分隔数组的每个元素 但一般来说 它不会在最后一个元素之后添加分隔符 我将它用于 ASP NET 编码 以用
  • XPATH 查询、HtmlAgilityPack 和提取文本

    我一直在尝试从名为 tim new 的类中提取链接 我也得到了解决方案 给出了解决方案 片段和必要的信息here https stackoverflow com questions 2982862 extracting a table ro
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 将 OpenCV Mat 转换为数组(可能是 NSArray)

    我的 C C 技能很生疏 OpenCV 的文档也相当晦涩难懂 有没有办法获得cv Mat data属性转换为数组 NSArray 我想将其序列化为 JSON 我知道我可以使用 FileStorage 实用程序转换为 YAML XML 但这不
  • C 中“complex”的默认类型

    根据我读过的文档 C99 和更高版本的支持float complex double complex and long double complex作为复杂类型 但是 此代码在使用时编译时不会发出警告gcc Wall Wextra inclu
  • 为什么需要数字后缀?

    C 语言 我确信还有其他语言 需要在数字文字末尾添加后缀 这些后缀指示文字的类型 例如 5m是一个小数 5f是一个浮点数 我的问题是 这些后缀真的有必要吗 或者是否可以从上下文中推断出文字的类型 例如 代码decimal d 5 0应该推断
  • 在 C# 中何时使用 ArrayList 而不是 array[]?

    我经常使用一个ArrayList而不是 正常 array 当我使用时 我感觉好像我在作弊 或懒惰 ArrayList 什么时候可以使用ArrayList在数组上 数组是强类型的 并且可以很好地用作参数 如果您知道集合的长度并且它是固定的 则
  • 用于连接 DataTable 上的动态列的动态 LINQ

    我目前遇到的情况不确定如何继续 我有两个从数据库填充的数据表 我还有一个可用的列名称列表 可用于将这两个数据表连接在一起 我希望编写一组 LINQ 查询 这些查询将 显示两个数据表中的行 内部联接 用于从一个数据表更新另一个数据表 显示一个
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • 确定我可以向文件句柄写入多少内容;将数据从一个 FH 复制到另一个 FH

    如何确定是否可以将给定数量的字节写入文件句柄 实际上是套接字 或者 如何 取消读取 我从其他文件句柄读取的数据 我想要类似的东西 n how much can I write w handle n read r handle buf n a
  • Resharper:IEnumerable 的可能多重枚举

    我正在使用新的 Resharper 版本 6 在我的代码中的几个地方 它给一些文本加了下划线 并警告我可能存在IEnumerable 可能的多重枚举 我理解这意味着什么 并在适当的情况下采纳了建议 但在某些情况下 我不确定这实际上是一个大问
  • 无法为 wsdl 文件创建服务引用

    I have wsdl文件和xsd我本地机器上的文件 我想在项目中添加服务引用 我没有网络服务 我只有wsdl file 我收到以下错误 The document was understood but it could not be pro
  • 如何使用 CSI.exe 脚本参数

    当你运行csi exe 安装了 Visual Studio 2015 update 2 您将得到以下语法 Microsoft R Visual C Interactive Compiler version 1 2 0 51106 Copyr
  • 使用多线程进行矩阵乘法?

    我应该使用线程将两个矩阵相乘 有两件事 当我运行程序时 我不断得到 0 我还收到消息错误 对于每个错误 它在粗体行上显示 警告 从不兼容的指针类型传递 printMatrix 的参数1 我尝试打印输出 还要注意 第一个粗体块 这是我解决问题
  • 无法在 C# 中为 EventArgs 分配使用派生类型的事件处理程序

    所以我有一个事件声明如下 public event EventHandler OnChangeDetected 然后我有以下处理程序被分配给该事件 myObject OnChangeDetected OnTableChanged 我的理解是
  • 从 NumPy 数组到 Mat 的 C++ 转换 (OpenCV)

    我正在围绕 ArUco 增强现实库 基于 OpenCV 编写一个薄包装器 我试图构建的界面非常简单 Python 将图像传递给 C 代码 C 代码检测标记并将其位置和其他信息作为字典元组返回给 Python 但是 我不知道如何在 Pytho
  • “必须声明标量变量”错误[重复]

    这个问题在这里已经有答案了 必须声明标量变量 Id SqlConnection con new SqlConnection connectionstring con Open SqlCommand cmd new SqlCommand cm
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad
  • 嵌入式二进制资源 - 如何枚举嵌入的图像文件?

    我按照中的说明进行操作这本书 http www apress com book view 9781430225492 关于资源等的章节 我不太明白的是 如何替换它 images Add new BitmapImage new Uri Ima

随机推荐

  • 高通9008固件下载备份工具

    高通9008固件下载备份工具 www bbs 16rd com
  • Spring项目配置文件中RabbitMQ监听器各个参数的作用

    spring rabbitmq listener simple concurrency 设置监听器容器的并发消费者数量 默认为1 即单线程消费 spring rabbitmq listener simple max concurrency
  • MySql数据库varchar和java字符串length()长度tips

    Java 中字符串以 Unicode 方式编码的 其长度通常计算的是字符数 一个中文也算一个字符 public static void main String args String fileName 中文English 12345 中文
  • CTFshow之web5

    CTFshow web web5 考察md5绕过 web5 考察md5绕过 首先打开页面是一个页面源码 我们先来进行代码审计 看有没有可以利用的地方 重点审计这段代码
  • Bitlocker加密,与解除加密

    引文 应为C盘空间不够用了 想着用U盘从新给C盘分下区 操作时才发现我系统里的磁盘都是Bitlocker加密的 分区工具操作不了磁盘 所以就找到一下方法来解决 1 先讲一下解除加密 直接点击 设置 gt 隐私和安全性 gt 设备加密 gt
  • Android PackageManagerService源码分析和APK安装原理详解

    前些天发现了一个蛮有意思的人工智能学习网站 8个字形容一下 通俗易懂 风趣幽默 感觉非常有意思 忍不住分享一下给大家 点击跳转到教程 一 PackageManagerService简称PMS PackageManagerService是An
  • Unity Physics.OverlapSphere实现冲击波

    知识点1 球形射线检测 根据 层级Layer 和 半径值球形范围 内 过滤获得 Collider数组 用途 冲击波 对范围内游戏对象造成伤害 Physics OverlapSphere gameObject transform positi
  • 熔断,降级,限流区别

    熔断 限流 降级都是保持系统稳定运行的策略 但针对的场景有所不同 熔断 服务熔断的作用类似于我们家用的保险丝 当某服务出现不可用或响应超时的情况时 为了防止整个系统出现雪崩 暂时停止对该服务的调用 上面的解释中有两个很关键的词 一个是暂时
  • 推荐几个好用又好玩的vscode插件!

    推荐几个有用的插件 会提高你的开发效率 走过路过不要错过 一 koroFileHeader 先来一个镇场子的 一键生成佛祖保佑 下载koroFileHeader插件 安装之后 新建一个文件 这时候会自动生成一个模板 显示作者的相关信息 当然
  • 如何用原生JS写一个简单购物车?来这篇文章告诉你。

    首先声明这仅仅只是个人理解而已 有什么错误或者缺少大家尽管在评论区发出来 共同学习 一起进步 首先呢 我们要创建一个HTML基础代码 基础HTML代码模板如下 他是比较关键的 是我们接下来了解的属性相关 可以直接复制拿来用的哈 它的意义就是
  • Redis进阶实践之十一 Redis的Cluster集群搭建

    https www cnblogs com PatrickLiu p 8458788 html 一 引言 本文档只对Redis的Cluster集群做简单的介绍 并没有对分布式系统的所涉及到的概念做深入的探讨 本文只是针对如何设置集群 测试和
  • 人物关系图谱:ECharts 实现

    目录 1 什么是ECharts 2 开始简单配置关系图 3 完整代码 1 什么是ECharts ECharts是百度开源的纯 Javascript 图表库 目前开源可以与highcharts相匹敌的一个图表库 相信有很多国内用户使用 官网
  • 一、PID控制原理

    在模拟控制系统中 控制器最常用的控制规律是PID控制 模拟PID控制系统原理框图如下图 系统由模拟PID控制器和被控对象组成 PID控制器是一种线性控制器 它根据给定值Yd t 与实际输出值Y t 构成控制偏差 err Yd Y PID的控
  • 接口继承接口,类实现接口

    接口继承接口 1 类与类之间是单继承的 直接父类只有一个 2 类与接口之间是多实现的 一个类可以有多个接口 3 接口与接口之间是多继承的 注意事项 1 多个父接口当中的抽象方法如果重复没有关系 抽象的没事 没有方法体 2 多个父接口当中的默
  • windows为配置安全策略

    文章目录 限制 Management Manage01 05 只能从Client登录 限制 Finance F01 10 不能关闭计算机和重启计算机 所有的域计算机和域用户都能自动注册证书 证书颁发机构已经颁发过一次就不再重复颁发 除非证书
  • ChatGPT国内镜像软件推荐

    1 ChatGPT镜像是什么 ChatGPT镜像是一种技术方案 它将OpenAI的ChatGPT模型与相关技术部署在用户本地或私有服务器上 采用这种方式 用户可以在自己的环境中运行ChatGPT模型 无需依赖于OpenAI的在线API服务
  • 考研复试数据库原理课后习题(十四)——内存数据库系统

    内存数据库系统 1 内存数据库和磁盘数据库有什么区别 2 内存数据库的特点有哪些 内存是计算机存储体系结构中能够被程序可控访问 相对于硬件控制的cache 的最高层次 是能够提供大量数据存储的最快的存储层 内存数据库具有几个重要特性 高吞吐
  • 【RT-DETR】《DETRs Beat YOLOs on Real-time Object Detection》译读笔记

    DETRs Beat YOLOs on Real time Object Detection 摘要 近期 基于端到端的 transformer based的检测器 DETRs 取得了卓越的性能 然而 DETRs类模型计算成本高的问题尚未得到
  • 前沿应用丨大规模无人机集群与“虚实结合”半实物仿真系统

    一 应用背景 无人机集群在军事 安全 救援 航空监测 物流配送等领域具有广泛的应用前景 它可以提高任务执行的效率 灵活性和安全性 同时降低人力资源的需求和风险 无人机集群研究涉及多个学科领域 如机器人学 控制理论 通信技术和人工智能等 目前
  • TCP/IP 网络设备与基础概念

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