当前位置: 首页 > news >正文

网络相关知识总结2

1.ip隧道是什么?

        将一种网络协议的数据包封装在另一种网络协议的数据包中进行传输。比如,把 IPv6 数据包封装在 IPv4 数据包里,让它能在仅支持 IPv4 的网络中传输 。在这个过程中,源网络与传输网络边界、传输网络和目的网络边界,会用网关创建跨网络的隧道端点。发送端的隧道端点将待传输的数据包加上隧道协议的包头等进行封装后发送,接收端的隧道端点收到数据包后,去除隧道协议相关部分,还原出原始数据包,再按正常流程转发到目标设备。

        这种技术通常用于连接不同网络间的互联互通,比如若两个 IPv6 网络被 IPv4 网络隔开,可通过 IP 隧道(如 IPv6 over IPv4)将 IPv6 数据包封装在 IPv4 中传输,使两个 IPv6 网络跨越 IPv4 网络进行通信;但是无法实现 IPv4 和 IPv6 节点直接通信,因为IPv4 和 IPv6 是两种不同的网络层协议,它们的数据包格式、地址结构、报头字段等完全不同。IP 隧道仅通过封装技术让一种协议的数据包 “借道” 另一种协议的网络传输,但并未改变源节点和目的节点的协议本质。

2. 如何解决NAT潜在问题和NAT穿越?

        假设有两个用户,用户 A 在家中通过家用路由器(带有 NAT 功能)连接网络,其设备在内网的私有 IP 地址为 192.168.1.100;用户 B 在办公室,同样通过办公室的 NAT 设备连接网络,内网私有 IP 地址为 192.168.2.100 。他们想要通过 VoIP 应用进行语音通话。

未进行 NAT 穿越时的问题

        用户 A 的设备发出的数据包,源 IP 是 192.168.1.100,经过家用路由器的 NAT 转换后,源 IP 变为路由器的公网 IP,比如 202.100.1.1 。用户 B 的设备在内网,从外部网络无法直接通过 192.168.2.100 这个私有 IP 地址访问到它,反之亦然。所以,若没有 NAT 穿越机制,双方就无法建立连接进行通话 。

使用 STUN 协议实现 NAT 穿越,解决外部设备可以与内网设备建立通信,实现对等连接

  • 1.数据包发送与 NAT 转换:用户 A 的设备发出的 UDP 请求消息,其源 IP 地址是私有 IP(如 192.168.1.100 )。当这个数据包到达用户 A 所在网络的 NAT 设备(一般是家用路由器 )时,NAT 设备会对数据包进行处理。NAT 设备会将数据包的源 IP 地址从私有 IP 转换为 NAT 设备的公网 IP 地址(比如 202.100.1.1 ),同时为该连接分配一个端口号(假设为 5000 ),然后将转换后的数据包发送到 STUN 服务器(50.100.200.1 )。
  • 2.STUN 服务器响应:STUN 服务器接收到数据包后,会记录下数据包的源 IP 地址(即 NAT 设备的公网 IP )和源端口号(5000 )。然后,STUN 服务器生成响应消息,该响应消息中携带了用户 A 在 NAT 设备上对应的外部地址(NAT 设备的公网 IP )和端口号(5000 ),并将响应消息发送回 NAT 设备 。
  • 3.NAT 设备转发响应:NAT 设备收到 STUN 服务器的响应消息后,根据之前建立的 NAT 映射表,识别出该响应消息是给用户 A 的,于是将响应消息的目标 IP 地址转换为用户 A 的私有 IP 地址(192.168.1.100 ),然后转发给用户 A 。用户 A 接收到响应消息后,就能获取到自己在公网中的地址和端口信息 。

使用TURN协议实现NAT穿越,解决对称设备(STUN 协议无法穿透这种类型的 NAT )对等连接  

  1. 获取 TURN 服务器地址和端口:用户 A 和用户 B 的 VoIP 应用向 TURN 服务器(假设 IP 地址为 60.100.300.1 )请求分配地址和端口 。TURN 服务器为用户 A 分配一个地址和端口,比如 60.100.300.1:10000;为用户 B 分配 60.100.300.1:10001 。
  2. 数据中继转发:用户 A 发送的语音数据先发送到 TURN 服务器的 60.100.300.1:10000,TURN 服务器再将数据转发给用户 B;用户 B 发送的数据也先到 TURN 服务器的 60.100.300.1:10001,再由 TURN 服务器转发给用户 A 。通过 TURN 服务器的中继转发,即使在对称 NAT 等复杂的 NAT 环境下,用户 A 和用户 B 也能实现 VoIP 通信 。

通信过程中一旦 NAT 遇到异常需重新启动时,所有的 TCP 连接都将被重置

  • STUN 和 TURN:STUN 和 TURN 通常用于 UDP 通信场景,但对于 TCP 连接,它们可以配合一些机制来应对 NAT 重启问题。比如在应用层,可以采用心跳机制来检测连接状态。当 NAT 重启后,应用通过心跳检测到连接中断,可利用 STUN 或 TURN 重新获取地址信息,重新建立连接 。此外,一些基于 STUN 和 TURN 的协议扩展也在研究如何更好地处理这种情况,例如通过在 NAT 设备上缓存部分连接信息,以便在重启后快速恢复连接 。

即使备置两台 NAT 做容灾备份,TCP 连接还是会被断开

  • STUN 和 TURN:在容灾备份场景下,通过 STUN 和 TURN 获取的公网地址和端口信息,可用于在主备 NAT 切换后,重新建立连接。应用层可以根据这些信息快速调整连接配置。例如,当主 NAT 故障切换到备 NAT 时,应用通过 STUN 或TURN重新获取备 NAT 上的映射信息,然后重新发起连接请求,尽量减少连接中断时间 。同时,一些高级的网络架构会结合负载均衡和连接迁移技术,在 NAT 容灾切换时,利用 STUN 和 TURN 辅助将连接平滑迁移到新的 NAT 设备上,降低连接断开的影响 。

3. 为什么MAC地址被限制在本地链路?

MAC地址被限制在本地链路的核心原因在于网络分层设计以及数据包在传输过程中MAC地址的逐跳更新机制。具体分析如下:


1. 网络分层的作用

  • 数据链路层(二层):MAC地址属于数据链路层,用于同一物理网络(如一个局域网、子网)内的直接通信。其设计目标是解决“如何在同一链路中准确送达数据”。

  • 网络层(三层):IP地址属于网络层,用于跨网络的逻辑寻址和路由。其目标是解决“如何在不同网络之间找到目标设备”。

MAC地址的全局唯一性仅保证其标识唯一性,但不包含位置或路由信息,因此无法直接用于跨网络通信。


2. 通信过程中的MAC地址替换

当设备需要跨网络通信时(例如从局域网访问互联网):

  1. 同一子网内通信

    • 直接使用目标设备的MAC地址(通过ARP协议解析)。

    • 例如:PC1(MAC_A)→ PC2(MAC_B)。

  2. 跨子网通信

    • 数据链路层:目标MAC地址被替换为默认网关(路由器)的MAC地址

    • 网络层:IP地址始终指向最终目标(如8.8.8.8)。

    • 例如:PC1(MAC_A)→ 路由器(MAC_R1)。

  3. 逐跳转发

    • 每经过一个路由器(一跳),MAC地址都会被更新为当前链路的源和目标MAC地址(如路由器接口的MAC地址)。

    • 最终目标设备的MAC地址仅在最后一跳的链路中出现

关键机制

  • MAC地址仅在当前链路有效,每次转发到新链路时,数据帧的MAC地址会被重写为当前链路的网关或下一跳设备的MAC地址。

  • IP地址始终不变,确保端到端的逻辑可达性。


3. 为什么MAC地址无法跨链路?

  • 广播域限制
    MAC地址的解析(如ARP)依赖广播,而广播只能在同一个二层网络(广播域)内传播,路由器会隔离广播域。

  • 路由器的隔离作用
    路由器是三层设备,会终结数据链路层的帧,提取IP数据包后重新封装成新帧(更新MAC地址),从而隔离不同链路的MAC地址。

  • 无位置信息
    MAC地址是平面的(无层次结构),无法像IP地址一样通过子网划分实现路由聚合,因此无法用于大规模网络的路由。

4. 路径 MTU 发现是什么?使用路径MTU是不是让ip层直接分片适应全部链路层MTU,避免路由器的再次分片?那么Linux内核中ip分片的函数又是什么?

        现代网络中,分片主要由IP层完成,链路层仅依赖MTU限制,不参与分片或聚合。路径MTU发现(PMTUD)的核心是通过动态探测路径中的最小MTU,让发送方直接将数据包大小适配为该最小MTU(如整个发送的路径中两条链路的协议不同一个MTU为1500字节,另一个为2500字节,从中选择1500字节),从而完全避免分片(无论是发送端还是中间路由器)。其机制是:发送方设置IP包的DF标志(禁止分片),若路径中某链路MTU小于包大小,路由器会丢弃包并返回ICMP错误,发送方据此调整包大小。若成功,数据包无需分片即可通过所有链路;若PMTUD失败(如ICMP被拦截)且DF标志未设置,IP层或中间路由器才会被动分片。简而言之,PMTUD是主动避免分片的优化机制,而IP分片是PMTUD失效时的补救措施,两者共同确保数据包适应不同链路的MTU限制。内核中ipv4和ipv6的分片函数分别为ip_fragment()和ip6_fragment()。

5.MTU都包含什么?

        传输层数据+传输层首部+ip层首部。不包含链路层首部。

6.CIDR和VSLM

        在 CIDR(无类别域间路由)应用初期,网络内部采用固定长度子网掩码机制,即一旦确定子网掩码长度(如 / 25 ),整个域内都用这个长度。但不同部门主机数量需求差异大,像有的部门需 500 台主机地址,有的只要 50 台。若都用统一标准,会浪费 IP 地址,难以构建高效网络。VLSM(可变长子网掩码)应运而生,它能让不同部门根据主机数量需求灵活设置子网掩码长度,提高 IP 地址利用率 。比如主机数 500 个时子网掩码长度设为 / 23 ,主机数 50 个时设为 / 26 。

三个部门(100、50、20 台主机)的子网划分表示

  1. 100 台主机的部门
    • 因为 27−2=126(减去网络地址和广播地址) ,能满足 100 台主机需求,所以子网掩码长度为 / 25 (32 - 7 = 25 )。假设网络地址是 192.168.1.0 ,那么子网为 192.168.1.0/25 ,可用 IP 地址范围是 192.168.1.1 - 192.168.1.126 。
  2. 50 台主机的部门
    • 由于 26−2=62 ,满足 50 台主机需求,子网掩码长度为 / 26 (32 - 6 = 26 )。比如从剩余地址空间取 192.168.1.128 ,子网就是 192.168.1.128/26 ,可用 IP 地址范围是 192.168.1.129 - 192.168.1.190 。
  3. 20 台主机的部门
    • 因为 25−2=30 ,满足 20 台主机需求,子网掩码长度为 / 27 (32 - 5 = 27 )。若从剩余地址取 192.168.1.192 ,子网为 192.168.1.192/27 ,可用 IP 地址范围是 192.168.1.193 - 192.168.1.222 。

7.如果没有设置边界,组播发送会向全世界加入一个组播地址组的所有ip发送数据包吗? 

        在没有设置边界的情况下,组播发送理论上会向全世界加入该组播地址组的所有 IP 发送数据包,但实际中受到多种因素限制。

        在 IPv4 中,组播地址范围是 224.0.0.0 到 239.255.255.255。其中,224.0.0.0 到 224.0.0.255 为预留的组播地址,用于路由协议等;224.0.1.0 到 224.0.1.255 是公用组播地址,可用于 Internet;239.0.0.0 到 239.255.255.255 为本地管理组播地址,仅在特定本地范围内有效。如果使用的是本地管理组播地址,即使没有设置边界,也不会在全球范围发送,而是局限在特定本地网络。

        同时,网络服务提供商(ISP)通常会进行一些限制和管理,不会任由组播流量在全球范围内无节制传播,以避免网络拥塞等问题。并且,组播路由器需要运行相应的组播路由协议(如 PIM - SM、PIM - DM 等)来正确转发组播数据包。如果网络中的路由器配置不当或不支持组播,也会影响组播数据包的传输范围,导致其无法到达全世界的组播组成员。

        在 IPv6 中,组播地址以 FF 开头,其范围字段指示组播组的应用范围,如同一本地网络、同一站点、同一机构或全球地址空间。但同样,实际中也会受到网络配置和管理策略的限制。

8.为什么对 192.168.2.0 子网掩码是 24 和 192.168.3.0 子网掩码是 24 这两个网段聚合成 192.168.2.0 子网掩码是 23,而不是聚合成 192.168.0.0 子网掩码是 16 呢? 

聚合原则

CIDR 地址聚合遵循最长匹配原则,即尽可能选择能包含所有要聚合网段的最小地址块。192.168.2.0/23 这个地址块刚好能精确包含 192.168.2.0/24 和 192.168.3.0/24 这两个网段,而 192.168.0.0/16 虽然也能包含这两个网段,但它包含的范围过大,会把 192.168.0.0 到 192.168.255.255 之间的所有网段都包含进来,这不符合最长匹配原则,会导致路由表条目不够精确,增加路由查找的负担和出错的可能性。

网络拓扑与管理

在实际网络拓扑中,通常希望路由聚合能够与网络的物理布局或逻辑划分相匹配。如果将这两个网段聚合成 192.168.0.0/16,可能会导致一个较大的网络范围被错误地视为一个逻辑网络,不利于网络的管理和故障排查。而聚合成 192.168.2.0/23 更符合局部网络的逻辑划分,能够更准确地反映网络的实际结构,便于网络管理员进行针对性的管理和维护。

0voice · GitHub 

相关文章:

  • 基于神经网络的文本分类的设计与实现
  • P3379 【模板】最近公共祖先(LCA)【题解】(重链剖分法)
  • Python 装饰器(Decorators)
  • 华为虚墙配置实验
  • FLEXlm如何通过web调用
  • 银河麒麟高级服务器操作系统基础docker镜像封装http和docker端口映射操作
  • 大模型AI Agent:简介(第一部分)—— 特性、组件、运作及应用全景
  • Nature招牌1区Top认证!可解释多模态融合模型取得重大突破!
  • 座舱与智驾“双轮驱动”,芯擎科技打造智能汽车“芯”标杆
  • 香港电讯企业托管服务,助企业实现高效IT管理与运营
  • MySQL8.4 InnoDB Cluster高可用集群使用指南
  • 嵌入式c学习第十天
  • 留记录excel 模板导入
  • 深度学习处理时间序列(3)
  • AOA与TOA混合定位,MATLAB例程,三维空间下的运动轨迹,滤波使用EKF,附下载链接
  • Promise详解
  • 食品级低聚木糖市场报告​:2024年全球食品级低聚木糖市场销售额达到了0.35亿美元
  • Spring Cloud ReactorServiceInstanceLoadBalancer 自定义负载均衡
  • Codeforces Round 1013 (Div. 3)-F
  • 信息系统项目管理师知识体系
  • 盲人不能刷脸认证、营业厅拒人工核验,央媒:别让刷脸困住尊严
  • 以色列总理:以哈谈判内容包括“结束战争的框架”
  • 上海交大曾小勤:科技传播不应停留于知识搬运,要做科学思维的播种机
  • 没有握手,采用翻译:俄乌三年来首次直接会谈成效如何?
  • 幼儿园教师拍打孩子额头,新疆库尔勒教育局:涉事教师已被辞退
  • 俄乌代表团抵达谈判会场