【Linux网络】NAT、代理服务、内网穿透

文章目录

  • [1. NAT](#1. NAT)
    • [1.1 NAT技术背景](#1.1 NAT技术背景)
    • [1.2 NAT IP转换过程](#1.2 NAT IP转换过程)
    • [1.3 NAPT](#1.3 NAPT)
    • [1.4 NAT技术的缺陷](#1.4 NAT技术的缺陷)
  • [2. 代理服务器](#2. 代理服务器)
    • [2.1 正向代理](#2.1 正向代理)
    • [2.2 反向代理](#2.2 反向代理)
    • [2.3 NAT和代理服务器](#2.3 NAT和代理服务器)
  • [3. 内网穿透](#3. 内网穿透)
  • [4. 内网打洞](#4. 内网打洞)
  • [5. 交换机](#5. 交换机)

1. NAT

1.1 NAT技术背景

之前我们讨论了,IPv4协议中,IP地址数量不充足的问题

NAT技术于1994年被提出,其核心思路是地址复用,通过划分"公有"和"私有"地址空间,让多个设备可以共享一个或少数几个公有IP地址访问互联网。

NAT技术当前解决IP地址不够用的主要手段,是路由器的一个重要功能;

  • NAT能够将私有IP对外通信时转为全局IP,也就是一种将私有IP和全局IP相互转化的技术方法:
  • 很多学校、家庭、公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局IP;
  • 全局IP要求唯一,但是私有IP不需要;在不同的局域网中出现相同的私有IP是完全不影响的;

1.2 NAT IP转换过程

  1. 内网主机发送数据包
  • 假设内网主机 IP 为 192.168.1.200(私有地址),它要访问广域网中的服务器,目标 IP 为 122.77.241.3(公有地址)。

  • 初始数据包:src(源IP)​ = 192.168.1.200,dst(目标IP)​ = 122.77.241.3。

  1. 家用路由器执行 NAT 转换
  • 数据包到达家用路由器(例如,WAN 口 IP 为 10.1.1.2,这是运营商分配的内网地址或私有地址)。

  • 路由器将源 IP 替换为自己的 WAN 口 IP,并可能修改源端口号(图片中未显示端口,但实际NAPT会处理端口 )。转换后:src​ 变为 10.1.1.2,dst​ 仍为 122.77.241.3。

  • 路由器内部维护一个 NAT 映射表,记录 192.168.1.200:端口与 10.1.1.2:新端口的对应关系,以便回程数据包能正确转发。

  1. 运营商路由器进一步转换(可选):
  • 如果运营商网络也使用 NAT(例如,运营商路由器 WAN 口 IP 为 122.77.241.4,公有地址),数据包经过时可能再次转换:src​ 从 10.1.1.2转换为 122.77.241.4,dst​ 不变。

  • 广域网云图标两侧标注了 src:122.77.241.4, dst:122.77.241.3,表明数据包进入广域网时,源 IP 已变为运营商的公有 IP。

  1. 数据包到达目标服务器
  • 最终,服务器收到的数据包显示源 IP 为 122.77.241.4,目标 IP 为 122.77.241.3。服务器回复时,将目标 IP 设为 122.77.241.4。
  1. 返回路径的逆向转换
  • 回程数据包经过运营商路由器和家用路由器时,根据 NAT 映射表逆向转换目标 IP,最终将数据包送回内网主机 192.168.1.200,完成通信。

1.3 NAPT

那么问题来了,如果局域网内,有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的IP都是相同的,那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?

这时候NAPT来解决这个问题了,使用IP+port来建立这个关联关系

NAPT的精髓在于,它不仅转换IP地址,还同时转换传输层的端口号,用这种组合方式来唯一标识内网的每一台主机和它们的会话。

当多个内网主机访问同一个外网服务器时,对于服务器来说,它看到的所有请求都来自同一个公网IP(即NAT路由器的公网地址,图中的 202.244.174.37)。

那么,NAT路由器是如何区分的呢?

答案是:它不仅转换IP地址,还为每个会话动态分配一个不同的公网端口号,并记录在转换表里。

假设场景与图中一致

  • 内网主机A: 10.0.0.10:1025→ 访问 → 外网服务器: 163.221.120.9:80

  • 内网主机B: 10.0.0.11:1025→ 访问 → 同一台外网服务器: 163.221.120.9:80

  1. 出站阶段:建立映射
  • 主机A​ 发出请求时,NAT路由器会进行转换。它在转换表中创建一条记录:

    • 内网地址+端口:10.0.0.10:1025

    • 映射为公网地址+端口:202.244.174.37:1025

    • 目标服务器:163.221.120.9:80

    • 这样,服务器的回复地址是 202.244.174.37:1025。

  • 紧接着,主机B​ 也发出请求。NAT路由器会为其分配另一个不同的公网端口(比如:1026),并创建第二条记录:

    • 内网地址+端口:10.0.0.11:1025

    • 映射为公网地址+端口:202.244.174.37:1026

    • 目标服务器同样是:163.221.120.9:80

  1. 入站阶段:精确转发(回答核心问题)
  • 当外网服务器向这两个连接返回数据时:

  • 给主机A的回包,目的地址是:202.244.174.37:1025

  • 给主机B的回包,目的地址是:202.244.174.37:1026

NAT路由器收到回包后,会查看回包的目的IP和目的端口 ,然后查询转换表

  • 收到目的为 :1025的包 → 查表 → 对应内网 10.0.0.10:1025→ 转发给主机A。

  • 收到目的为 :1026的包 → 查表 → 对应内网 10.0.0.11:1025→ 转发给主机B。

核心要点总结

  • 唯一会话标识 :NAPT通过 (NAT公网IP, NAT公网端口, 目标服务器IP, 目标服务器端口)​ 这个四元组,来唯一标识一个网络会话。即使内网有100台主机访问同一个服务器,只要NAT分配的公网端口不同,就能精确区分。

  • 转换表是"大脑":这张动态维护的映射表,是NAT路由器能正确转发数据的核心依据。每条记录都有生命周期(通常几分钟),通信结束后会超时删除。

  • 端口号是扩展的关键:一个公网IP有65535个端口可用(实际可用少一些),这使得成百上千台内网设备可以通过一个公网IP同时上网,从根本上解决了IP地址不足的问题。


1.4 NAT技术的缺陷

NAT技术虽然解决了IPv4地址不足的问题,但也带来了一些限制和问题:

  1. 无法从外部主动连接内部主机:因为NAT表是由内部主机发起的连接建立的,外部主机不知道内部主机的私有IP和端口,也无法在NAT表中建立映射。

    这意味着,在NAT内部的服务器如果希望对外提供服务,就需要手动配置端口转发(静态NAT),或者使用UPnP、NAT穿透等技术。

  2. NAT表的生成和销毁需要开销:每个连接都需要在NAT设备上维护一个映射,这会消耗内存和CPU资源。当连接数量很大时,NAT设备可能成为性能瓶颈。

  3. NAT设备异常会导致所有TCP连接断开:因为NAT设备维护了连接的状态,如果NAT设备故障,那么所有的映射表都会丢失,导致连接中断。

    即使有热备设备,由于TCP连接的状态信息(如序列号、确认号等)在NAT设备上,备份设备可能无法立即接管这些状态,因此连接还是会中断。

  4. 破坏端到端通信:NAT修改了IP地址和端口,违背了互联网端到端通信的设计原则,使得一些网络协议(如IPsec)和应用程序(如P2P应用)变得复杂。

  5. 延迟和性能问题:NAT设备需要对每个数据包进行地址转换,这增加了数据包的处理延迟,特别是在流量大时。

  6. 安全性问题:虽然NAT提供了一定的安全隔离,但它不能替代防火墙。NAT设备可能会隐藏内部网络的结构,但一旦攻击者能够通过NAT,内部网络就可能暴露。

  7. 日志和审计困难:由于多个内部主机共享一个公网IP,当出现恶意流量时,难以追踪到具体的内部主机。


2. 代理服务器

2.1 正向代理

概述
正向代理(Forward Proxy) 是一种常见的网络代理方式,它位于客户端和目标服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。通过这种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问控制等。

正向代理的工作原理

正向代理的工作流程可以清晰地概括为以下几个步骤,这个过程也很好地体现了其"代理客户端"的本质:

  1. 客户端配置:用户需要在客户端(如浏览器或系统网络设置)中明确配置代理服务器的地址和端口。

  2. 请求转发:当客户端想要访问一个网站(例如 http://example.com)时,请求不再直接发送给目标网站,而是被发送到已配置好的正向代理服务器。

  3. 代理发出请求:代理服务器接收请求后,会代替客户端向目标网站 http://example.com发起请求

  4. 返回响应:目标网站将响应返回给代理服务器。

  5. 交付客户端:最后,代理服务器再将收到的响应数据转交给最初的客户端。

对于目标网站来说,它看到的所有访问请求都来自于代理服务器的IP地址,而无法知晓也无法直接接触到真正的客户端,这就实现了隐藏客户端身份的效果。

功能特点

  • 缓存功能:正向代理服务器可以充当一个共享缓存。当多个客户端请求同一个远程资源(如软件更新包、热门新闻页面)时,代理服务器可以将该资源临时存储下来。后续再有客户端请求相同资源时,便可直接从本地缓存中提供,极大地提升了响应速度,并减少了对外部网络带宽的消耗。
  • 内容过滤:正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告、阻止恶意网站等。
  • 访问控制:通过正向代理,可以实现对特定网站的访问控制,如限制员工在工作时间访问娱乐网站。
  • 隐藏客户端身份:这是正向代理的基础能力。当客户端通过正向代理访问目标服务器时,目标服务器记录到的访问来源是代理服务器的IP地址,而无法追踪到真正的客户端。这为客户端提供了一层隐私保护。
  • 负载均衡:在多个目标服务器之间分配客户端请求,提高系统的可扩展性和可靠性。

应用场景

  • 企业网络管理:这是正向代理最经典的应用场景之一。企业通过部署正向代理,可以统一管理和监控员工对互联网的访问,确保工作资源被合理使用,同时防止访问恶意网站带来的安全风险,并能够通过缓存机制提升办公效率。
  • 公共网络环境:在公共场所如图书馆、学校等提供的网络环境中,通过正向代理可以实现对网络资源的合理分配和管理,确保护网络使用的公平性和安全性。
  • 内容过滤与保护:家张可以通过设置正向代理来过滤不良内容,保护孩子免受网络上的不良信息影响。
  • 提高访问速度 :对于经常访问的网站或资源,正向代理可以通过缓存机制提高访问速度,减少网络延
    迟。
  • 跨境电商与海外访问:对于跨境电商或需要访问海外资源的企业和个人,通过配置能够访问这些资源的正向代理,正向代理可以帮助他们突破网络限制,顺畅地访问海外网站和资源。

2.2 反向代理

概述

反向代理服务器是一种网络架构模式,其作为Web服务器的前置服务器,接收来客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客户端。客户端并不知道它访问的是一个反向代理,而是以为它就是最终的服务器。这种架构模式可以提升网站性能、安全性和可维护性等

基本原理

反向代理的工作流程可以清晰地概括为以下几步,这也体现了其"代理服务器"的本质 :

  1. 接收请求:客户端(如用户的浏览器)向公开的域名(例如 www.example.com)发起请求。DNS 将该域名解析到反向代理服务器的公网 IP,因此请求实际上被发送到了反向代理。

  2. 转发请求:反向代理服务器接收请求后,根据预设的规则(如负载均衡策略),将请求转发到后方某台真实的后端服务器(也称上游服务器)。客户端完全不知道后端服务器的存在。

  3. 返回响应:后端服务器处理请求,将生成的结果返回给反向代理。

  4. 交付客户端:反向代理最终将响应返回给原始的客户端。

对于客户端而言,它始终认为是在与反向代理服务器直接通信,从而实现了后端服务器的隐藏 。

应用场景

  • 负载均衡:反向代理服务器可以根据配置的负载均衡策略,将客户端的请求分发到多个后端服务器上,以实现负载均衡。这有助于提升网站的整体性能和响应速度,特别是在高并发场景下。
  • 安全保护:反向代理服务器可以隐藏后端Web服务器的真实IP地址,降低其被直接攻击的风险。同时,它还可以配置防火墙、访问控制列表(ACL)等安全策略,对客户端的请求进行过滤和限制,以保护后端服务器的安全。
  • 缓存加速:反向代理服务器可以缓存后端Web服务器的响应内容,对于重复的请求,它可以直接从缓存中返回响应,而无需再次向后端服务器发起请求。这可以大大减少后端服务器的负载,提升网站的响应速度。
  • 内容过滤和重写:反向代理服务器可以根据配置的规则对客户端的请求进行过滤和重写,例如添加或删除请求头、修改请求路径等。这有助于实现一些特定的业务需求,如URL重写、用户认证等。
  • 动静分离:在大型网站中,通常需要将静态资源和动态资源分开处理。通过将静态资源部署在反向代理服务器上,可以直接从反向代理服务器返回静态资源的响应,而无需再次向后端服务器发起请求。这可以大大提升静态资源的访问速度。
  • CDN(Content Delivery Network,内容分发网络) :CDN可以理解为反向代理思想的规模化应用。它通过在全球各地部署边缘节点(反向代理服务器),结合全局负载均衡技术,将用户请求导向离他最近的节点,极大提升跨地域访问速度。

与正向代理的关键差异

为了更深刻地理解反向代理,可以与它的对应物------正向代理进行对比。核心区别在于代理的对象不同​。

  • 正向代理是客户端的代理:它代表客户端出面,去访问互联网上的任意资源。典型的用途是让客户端能够访问外部资源,并保护客户端的身份。

  • 反向代理是服务器的代理:它代表服务器出面,接收所有客户端的请求。典型的用途是负载均衡、安全防护和加速网站访问。

简单来说,正向代理保护的是客户端,而反向代理保护的是服务器。

常见反向代理软件

在实际应用中,有多种优秀的软件可以实现反向代理功能,其中最著名的包括 :

  • Nginx:以高性能、高稳定性和低内存消耗而闻名,是目前最流行的反向代理和 Web 服务器软件之一。

  • Squid:一款老牌且功能全面的代理缓存软件,同样支持反向代理模式。


2.3 NAT和代理服务器

路由器往往都具备NAT设备的功能,通过NAT设备进行中转,完成子网设备和其他子网设备的通信过程,代理服务器看起来和NAT设备有一点像,客户端像代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器; 服务器返回结果后,代理服务器又把结果回传给客户端.

那么NAT和代理服务器的区别有哪些呢?

  • 从应用上讲,NAT设备是网络基础设备之一,解决的是IP不足的问题,代理服务器则是更贴近具体应用,比如通过代理服务器进行翻墙,另外像迅游这样的加速器,也是使用代理服务器.
  • 从底层实现上讲,NAT是工作在网络层,直接对IP地址进行替换,代理服务器往往工作在应用层.
  • 从使用范围上讲,NAT一般在局域网的出口部署,代理服务器可以在局域网做,也可以在广域网做,,也可以跨网.
  • 从部署位置上看,NAT一般集成在防火墙,路由器等硬件设备上,代理服务器则是一个软件程序,需要部署在服务器上.

代理服务器是一种应用比较广的技术

代理服务器技术在广域网和局域网环境下的应用确实差异很大。"翻墙"主要解决的是广域网中的访问限制问题,而负载均衡则主要优化局域网或数据中心内部的服务提供能力

广域网代理:"翻墙"的原理与过程

"翻墙"中的"墙"通常指的是国家级的网络防火墙,它通过分析网络流量,对访问特定境外网站或服务的请求进行拦截或阻断。而"翻墙"的本质,就是利用代理服务器在客户端和目标网站之间建立一个"中转通道",从而绕过这种封锁。

  1. 建立加密隧道:当你在本地设备上运行翻墙软件(客户端)时,它会将你原本要直接发送给境外网站(如Google)的请求,先进行加密,然后发送到一个位于境外、可以自由访问互联网的代理服务器上

  2. 代理服务器代为请求:境外的代理服务器收到请求后,会对其进行解密,然后以自身的身份代为访问你原本想要访问的那个被封锁的网站。

  3. 数据返回:代理服务器获取到网站的数据后,再次将数据加密,通过之前建立的通道传回给你的本地客户端。本地客户端收到数据后解密,最终呈现给你。

这个过程在用户看来,就像是直接访问了境外网站,但实际上所有的通信都经过了代理服务器的中转。由于流量被加密,防火墙难以检测到具体的访问内容,从而实现了"翻墙"。目前主流的翻墙技术(如Shadowsocks、V2Ray等)已不仅仅是简单的VPN,它们更侧重于流量的伪装和混淆,使其看起来像普通的HTTPS流量,更不易被识别和干扰。

局域网代理:负载均衡的原理与过程

负载均衡的核心目标是将大量的用户请求智能地、合理地分发到后端多台服务器上,以防止任何单一服务器因压力过大而响应缓慢或宕机,从而提升整个系统的服务能力。

其工作过程同样涉及代理机制:

  1. 请求汇集:所有用户请求首先到达负载均衡器。对用户而言,他们只感知到一个统一的访问入口(如一个网站域名或IP地址),并不知道背后有多少台服务器在工作。

  2. 算法分发:负载均衡器根据预设的算法策略,从后端的服务器池(Server Pool)中选择一台最合适的服务器来处理当前请求。常见的算法包括:

    • 轮询:将请求依次发给每台服务器,实现简单分配。

    • 加权轮询:给性能强的服务器分配更高权重,使其处理更多请求,合理利用资源。

    • 最少连接数:将新请求动态分配给当前连接数最少的服务器,适合请求处理时长不一的情景。

    • IP哈希:根据客户端IP地址计算哈希值,将同一IP的请求固定发给某台服务器,利于保持会话(Session)。

  3. 健康检查:负载均衡器会持续对后端服务器进行健康检查。如果发现某台服务器故障,它会自动将后续请求分流到其他正常服务器,保证服务高可用性。

  4. 响应返回:被选中的服务器处理完请求后,将结果返回给负载均衡器,再由负载均衡器返回给用户。有些模式也可由服务器直接返回给用户。


3. 内网穿透

内网穿透 ,也称为NAT穿透 ,是一种从公网主动访问位于内网(私有网络)中设备的技术

内网穿透要解决什么问题?

在之前学习的NAT技术中,我们了解到:处于内网(如公司网络)中的设备(私有IP)可以主动访问外网但外网无法主动访问内网设备。这是因为NAT路由器只"记住"了内网主动发起的连接,并将其映射出去。

首先要明确一个网络限制:普通的公司路由器都启用了NAT(网络地址转换)和防火墙功能。这导致:

  1. 外部无法直接访问内部:内网设备(如公司的Linux开发机)使用的是私有IP地址(如192.168.1.100),这个地址在公网上无效。虽然内部设备可以主动访问外网,但外部网络无法主动发起一个连接到内网的某台特定设备。

  2. 没有固定的公网入口:对于家庭或小型,其从运营商获得的公网IP可能是动态变化的,甚至本身就是一个大局域网内的地址(运营商级NAT),这使得从外部连入变得极为困难。

内网穿透的目的,就是为这些"藏在"内网里的设备,在公网上开一个"固定的、可访问的入口"。

图解内网穿透(FRP方案)全过程

图中的方案使用了一个名为 FRP​ 的工具,它分为服务端(frps)客户端(frpc) 。其核心思想是:让内网设备主动、持续地连接到一个拥有固定公网IP的云服务器,在两者之间建立一条"隧道",所有外部访问都通过这条隧道被转发到内网。

第一步:建立隧道(图中步骤1)

  1. 准备"中转站":你需要一台拥有固定公网IP地址的服务器(图中顶部的"")。在这台服务器上安装并运行 FRP 服务端。

  2. 内网设备主动"报到" :在你希望被访问的内网设备上(图中公司的Linux机器),安装 FRP 客户端,并进行关键配置:

    • 告诉客户端服务端在哪:配置服务端的公网IP和端口。

    • 定义映射规则 :配置一条规则,例如:"将我(内网机器)本地的22号端口(SSH服务),映射到服务端的8888端口上。"

  3. 连接 :内网的FRP客户端启动后,会主动向外连接云服务器上的FRP服务端。由于这是内网设备主动发起的"出站"连接,它成功地穿过了公司/家庭路由器的NAT和防火墙,在两者之间建立了一条稳定的控制通道。

第二步:通过隧道访问(图中步骤2)

  1. 外部用户发起访问 :当你在家(或任何能访问公网的地方)需要连接公司那台Linux机器时,你不再直接尝试连接公司的内网IP(这不可能成功),而是连接云服务器的公网IP和指定的端口(例如:云服务器IP:8888)

  2. 服务端转发请求 :云服务器上的FRP服务端一直在监听8888端口。它收到你的连接请求后,会通过第一步已经建立好的那条控制通道,将这个请求转发给内网的FRP客户端。

  3. 客户端送达目标 :内网的FRP客户端收到转发的请求后,再将这个请求发送给本机的22号端口(SSH服务)。

  4. 完成连接:于是,一个完整的连接链路就建立了:你的电脑 ↔ 云服务器 ↔ 公司内网Linux机器。对你而言,感觉就像直接连上了那台内网机器。

FRP的角色

  • frps(服务端):部署在公网,负责接收客户端连接、监听外部访问端口、进行请求转发。

  • frpc(客户端):部署在内网,负责主动连接服务端,并定义将本地的哪些服务端口映射出去。

这种方案的优点是配置相对简单,无需在路由器上做复杂的端口映射(这对于没有公网IP或没有路由器管理权限的情况尤其有用),并且能穿透多级NAT环境。

需要注意的是,由于所有流量都经过云服务器,其带宽、延迟和稳定性会直接影响你的访问体验。同时,也需要做好云服务器和FRP服务本身的安全配置,防止未授权访问。


4. 内网打洞

内网打洞(或称NAT穿透、P2P穿透) ,这是一种在两个位于不同内网(如"公司"和"家")的设备之间,建立点对点(P2P)直连的高效技术。

整个过程可以清晰地分为三个阶段:

第一阶段:注册与信息交换(依靠云服务器)

  1. 主动连接 :Client A(公司网络,内网IP假设为192.168.1.100)和Client B(家庭网络,内网IP假设为10.0.0.200)各自主动 连接到一个拥有公网IP的云服务器(也称为信令服务器或STUN服务器)。

  2. 记录:当它们连接时,会分别穿过各自的NAT设备。

    • A的NAT设备会将该连接记录为:内网 A:端口A↔ 公网IP_A:映射端口A(图中显示为1.2.3.4:XXXX)。

    • B的NAT设备同理,记录为:内网 B:端口B↔ 公网IP_B:映射端口B(图中显示为4.3.2.1:YYYY)。

    • 关键点 :云服务器看到并记录的不是它们的私有IP,而是它们经过NAT转换后的公网IP和端口(即1.2.3.4:XXXX和 4.3.2.1:YYYY)。

  3. 信息交换:云服务器将A的公网地址(1.2.3.4:XXXX)告诉B,同时将B的公网地址(4.3.2.1:YYYY)告诉A。如图中文字所示:"云服务器将双方ip交换发送给对方"。

第二阶段:尝试"打洞"与建立直连(最关键的一步)

  1. 发起连接 :收到对方公网地址后,A和B几乎同时尝试向对方的这个公网地址发送一个数据包。

    • A向 4.3.2.1:YYYY发送。

    • B向 1.2.3.4:XXXX发送。

  2. "打洞"的实质:这个发送动作至关重要。以A为例,当它首次向B的公网地址发送数据时,A的NAT设备会创建一个新的"洞"(即一条临时的、松散的转发规则)。这个规则大致是:"允许从4.3.2.1:YYYY这个地址发来的数据包,通过之前A出去时用的通道1.2.3.4:XXXX,转发回内网的A。"

    • 这个"洞"之所以能被打开,是因为NAT设备通常认为:"既然内网主机A主动发了一个包给外部的4.3.2.1:YYYY,那么从那里回来的包很可能是A所期待的回复,应该放行。"
  3. 连接建立:由于双方都向对方发送了数据包,从而在各自的NAT设备上都为对方"开了洞"。当B发送的数据包到达A的NAT(1.2.3.4)时,因为匹配了A刚刚打开的"洞",就会被放行并送达A。同理,A的数据包也能到达B。一旦第一对数据包成功交换,一条稳定的P2P双向通道就建立起来了。

第三阶段:P2P直连通信

"洞"打开后,A和B就可以完全绕过云服务器,直接通过这条通道进行高速、低延迟的数据通信。后续所有数据包都如图中蓝色实线所示,直接在两个客户端之间流动。

技术核心与必要条件

  • 依赖"锥形NAT":打洞技术能成功,要求双方的NAT设备是完全锥型NAT或受限锥型NAT。这类NAT的特点是:只要是从同一个内网主机和端口发出的包,无论目的地是哪里,NAT都给它分配同一个公网端口(如上面提到的端口XXXX和YYYY)。这样,对方才能通过这个固定的端口访问进来。

  • 对称型NAT是障碍:如果一方是对称型NAT,则每次连接不同外部地址时,NAT会分配不同的公网端口。这会导致对方无法用一个固定的端口访问它,从而使打洞失败。此时就需要TURN服务器进行中转。

  • 服务器的作用是"介绍人":云服务器(STUN服务器)不中转业务数据,只扮演"介绍人"角色,帮助双方交换联系方式(公网地址)。


5. 交换机

交换机 vs. 集线器

理解交换机优势的一个好方法是与它的前身------集线器进行对比。

  • 集线器:它工作在物理层,没有任何智能。当一个端口收到数据时,它会简单地将信号复制到所有其他端口。所有设备共享同一带宽,属于一个"冲突域",同一时刻只能有一台设备发送数据,否则就会产生冲突,效率低下 。

  • 交换机:基于MAC地址进行智能转发,允许同时建立多个专用的通信通道。例如,A与B通信的同时,C也可以与D通信,它们互不干扰,独享带宽。这大大提升了网络效率和性能 。


交换机最核心的价值:将一个大范围的、共享的、易产生冲突的网络(如使用集线器的网络),划分为多个独立的、并行的、高效的"碰撞域"

交换机如何"划分碰撞域"

"碰撞域"指的是网络中一个共享的通信通道,在同一时刻,只能有一个设备成功发送数据。如果有两个设备同时发送,就会产生"碰撞",导致数据发送失败,所有设备都需要等待并重试。早期的 集线器​ 网络就是一个大的碰撞域。

交换机的革命性在于:它为每一个端口(或每组端口)都提供了一个独立的碰撞域。如图中所示:

  • 主机A​ 和 主机D​ 之间的通信,是一个独立的碰撞域。

  • 主机B、主机C、主机E​ 所连接的网络("以太网"),可以被视为另一个或几个碰撞域(取决于它们之间是交换机还是集线器连接)。

  • 关键在于,A和D之间的数据流,与B、C、E之间的数据流,可以同时、全速进行,互不干扰!​ 这就像把一条单车道的乡村公路,升级为多车道的高速公路,每对车辆都在自己的车道上并行。

交换机的工作原理:学习与智能转发

为了实现这种高效的并行通信,交换机内部进行着两件核心工作:

  1. 学习:构建"地址-端口"地图(MAC地址表)

交换机内部有一个MAC地址表。当一台设备(比如主机A)首次发送数据时,交换机会:

  • 查看​ 数据帧中的源MAC地址(这是设备网卡唯一的物理标识,比如 AA:BB:CC:00:11:22)。

  • 记录​ 下"MAC地址 AA:BB:CC:00:11:22来自 端口A"。

  • 图中交换机内部标注的A、B、C、D、E,就代表了它已经学习到了哪个设备连接在哪个端口上。这张表是动态的,会更新。

  1. 转发:基于地图的智能决策

当交换机需要转发一个数据帧时,它会:

  • 查看​ 数据帧中的目标MAC地址。

  • 查表​ 去MAC地址表中寻找这个目标MAC地址对应哪个端口。

  • 决策

    • 单播(已知单播):如果找到了(比如目标地址是主机D的MAC,对应端口D),并且目标端口与源端口不同,交换机就会将这个数据帧精准地、只从端口D发送出去。不会打扰、C、E。这实现了点对点的高效通信。

    • 广播/泛洪:如果在表中找不到目标MAC地址,或者数据帧是广播帧(发给所有人),交换机会将这个帧从除接收端口外的所有其他端口发送出去。这确保了即使不知道目标在哪,信息也能被送达。这也是新设备加入网络时被发现的方式。

    • 丢弃:如果数据帧的目的MAC地址对应的端口正好是它进来的那个端口,交换机就会丢弃这个帧,因为数据不需要发回它来的网段 。

进阶功能与概念

现代交换机还具备更多强大功能,以适应复杂的网络需求:

  • 虚拟局域网:VLAN允许管理员在单台物理交换机上划分出多个逻辑上独立的网络。不同VLAN之间的设备就像接在不同的交换机上一样,无法直接通信,必须通过路由器或三层交换机。这起到了隔离广播域(缩小广播影响范围)、增强安全性和简化网络管理的作用 。

  • 全双工通信:交换机支持全双工模式,这意味着设备的发送和接收通道是独立的,可以同时进行发送和接收数据,从而使网络带宽理论上翻倍。这与集线器时代的半双工(不能同时收/发)有天壤之别 。

  • 三层交换:传统交换机是二层设备。三层交换机集成了路由器的部分功能,能基于IP地址进行数据转发,既具备交换的高速性,又能实现不同VLAN或网段间的路由,广泛应用于网络核心层 。

相关推荐
feathered-feathered4 小时前
网络套接字——Socket网络编程(TCP编程详解)
java·网络·后端·网络协议·tcp/ip
DeeplyMind4 小时前
AMD rocr-libhsakmt分析系列3-1: Apertures
linux·amdgpu·rocm·kfd·rocr
无奈笑天下6 小时前
银河麒麟桌面OS使用分区编辑器将/backup分区删除并扩容至根分区参考教程
linux·数据库·经验分享·编辑器
盐焗西兰花8 小时前
鸿蒙学习实战之路 - 网络重连最佳实践
网络·学习·harmonyos
CheungChunChiu13 小时前
Linux 内核设备模型与驱动框架解析 ——以 rk-pcie 为例
linux·运维·ubuntu
列逍13 小时前
Linux进程(三)
linux·运维·服务器·环境变量·命令行参数
水天需01014 小时前
VS Code Ctrl+Shift+V 预览 Markdown 无效的解决方案
linux
义一14 小时前
华为eNSP示例说明网关地址和终端IP地址不在同一网段能正常通信吗
网络
赖small强16 小时前
【Linux C/C++开发】Linux 平台 Stack Protector 机制深度解析
linux·c语言·c++·stack protector·stack-protector·金丝雀机制