searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

P2P 内网穿透简介

2024-08-30 09:39:29
66
0

传统网络模式

传统的 cs 模式,如上图。多个客户端向一个中央服务器请求资源,统一由中央服务器提供资源响应。但这样的模式,对于大文件下载(比如影视片文件),中央服务器将要承担很大的性能压力。包括带宽压力,服务器本身的性能压力。 如果客户端测的带宽高,但服务端的带宽上限较低,客户的下载体验受到制约。尤其当多个人同时下载时,卡顿尤为显著。 我们也能看出这种模式存在的一些劣势:

  1. 风险高,中央服务器挂了,一切都完了。所有资源都无法下载了
  2. 网络的资源利用率低,所有的用户都只能从这个中央服务器下载资源。兴许客户端 A 要的资源,客户端 B 正好有呢

P2P 网络特点

为了解决以上问题,P2P(peer-to-peer)网络模型应用而生。它的核心思想即:所有人的资源都可以被别人找到并使用,而不依赖中央服务器

这里涉及寻找资源和下载资源。大致步骤如下

  1. 假设 ClientA 想要下载一份《程序员自我修养》这本电子书。会给他的邻居发出一份询问,咨询有没有这本电子书
  2. 被问到的节点没有资源会接着转发给它的邻居。这样层层转发下去知道一个叫 ClientN 的说他这有这本书。
  3. ClinetN 给 ClientA 发消息,告知它那有资源可以下载
  4. 于是 ClientA 和 ClientN 就直接通讯上了,直接进行了资源的下载

在 p2p 里面,可以理解为所有人即是服务器又是客户端。以上看着很美好,但也有其缺点

  1. 占带宽,这种地毯式的搜索资源的方式毕竟在占用带宽。
  2. 安全
  3. 自私,我不共享资源,但我下载资源。如果没有一定的奖惩机制,也很难组织一个大型的 p2p 网络
  4. 知识产权的管理问题

使用场景

  • 个人组建自己的 p2p 网络,比如家与公司的两个局域网穿透,相互访问。 比如利用  开源的openp2p,实现内网穿透。让你在公司也能访问家里的内网设备
  • 还有某 T 下载等

 

背后原理

P2P 内网穿透是一种使得位于 NAT(网络地址转换)或防火墙后面的设备能够直接通信的技术。其核心目的是绕过 NAT 设备的限制,从而实现不同网络之间的 P2P 通信。

内网穿透的原理

  1. NAT 和防火墙的概念

    • NAT:网络地址转换,将私有 IP 地址转换为公共 IP 地址,允许多台设备共享一个公共 IP。
    • 防火墙:控制和监测进出网络的流量,通常会阻止未授权的访问。
  2. P2P 通信

    • 直接在设备之间进行数据传输,而无需通过中心服务器转发所有流量,从而降低延迟并节省带宽。

内网穿透的常见方法

  1. STUN(Session Traversal Utilities for NAT)

    • 用于确定 NAT 类型和公共 IP 地址。
    • 客户端向 STUN 服务器发送请求,STUN 服务器返回其公共 IP 和端口。设备可以使用这些信息与其他设备建立连接。
  2. TURN(Traversal Using Relays around NAT)

    • 当直接 P2P 连接无法建立时,使用 TURN 服务器作为中继。这种方法比 STUN 更为消耗资源,但在 NAT 类型较复杂时仍然有效。
  3. ICE(Interactive Connectivity Establishment)

    • 结合 STUN 和 TURN,尝试多种连接方式并选择最佳路径进行通信。

内网穿透实现步骤

  1. 注册客户端

    • 客户端连接到一个公共服务器(例如信令服务器),注册自己。服务器记录客户端的公共 IP 和端口。
  2. 交换地址信息

    • 客户端通过公共服务器交换彼此的地址和端口信息。这是信令的过程。
  3. 尝试直接连接

    • 客户端根据交换的地址尝试直接建立连接。如果连接成功,则直接进行 P2P 通信。
  4. 处理 NAT 问题

    • 如果连接失败,可能是因为 NAT 类型的原因。这时,客户端可能通过 TURN 服务器进行数据中转。
  5. 建立连接并传输数据

    • 连接建立后,客户端可以直接发送和接收数据。

示例

假设有两个设备 A 和 B 都在 NAT 后,需要建立 P2P 连接:

  1. A 和 B 向信令服务器注册。
  2. 服务器返回 A 的公共地址和 B 的公共地址。
  3. A 尝试直接连接 B 的地址。
  4. 如果连接成功,A 和 B 可以开始 P2P 通信。
  5. 如果连接失败,A 可以通过 TURN 服务器将数据发送给 B。

常见应用

  • 实时通信(如视频会议、VoIP)。
  • 文件共享。
  • 在线游戏。

总结

P2P 内网穿透利用 STUN、TURN 和 ICE 等技术手段,实现了在 NAT 和防火墙后设备之间的直接通信。它的核心在于通过公共服务器交换信息并尝试直接连接,从而避免通过中心服务器转发所有流量。这种方式有效提高了通信效率,降低了延迟。

0条评论
0 / 1000
肖****凯
4文章数
0粉丝数
肖****凯
4 文章 | 0 粉丝
肖****凯
4文章数
0粉丝数
肖****凯
4 文章 | 0 粉丝
原创

P2P 内网穿透简介

2024-08-30 09:39:29
66
0

传统网络模式

传统的 cs 模式,如上图。多个客户端向一个中央服务器请求资源,统一由中央服务器提供资源响应。但这样的模式,对于大文件下载(比如影视片文件),中央服务器将要承担很大的性能压力。包括带宽压力,服务器本身的性能压力。 如果客户端测的带宽高,但服务端的带宽上限较低,客户的下载体验受到制约。尤其当多个人同时下载时,卡顿尤为显著。 我们也能看出这种模式存在的一些劣势:

  1. 风险高,中央服务器挂了,一切都完了。所有资源都无法下载了
  2. 网络的资源利用率低,所有的用户都只能从这个中央服务器下载资源。兴许客户端 A 要的资源,客户端 B 正好有呢

P2P 网络特点

为了解决以上问题,P2P(peer-to-peer)网络模型应用而生。它的核心思想即:所有人的资源都可以被别人找到并使用,而不依赖中央服务器

这里涉及寻找资源和下载资源。大致步骤如下

  1. 假设 ClientA 想要下载一份《程序员自我修养》这本电子书。会给他的邻居发出一份询问,咨询有没有这本电子书
  2. 被问到的节点没有资源会接着转发给它的邻居。这样层层转发下去知道一个叫 ClientN 的说他这有这本书。
  3. ClinetN 给 ClientA 发消息,告知它那有资源可以下载
  4. 于是 ClientA 和 ClientN 就直接通讯上了,直接进行了资源的下载

在 p2p 里面,可以理解为所有人即是服务器又是客户端。以上看着很美好,但也有其缺点

  1. 占带宽,这种地毯式的搜索资源的方式毕竟在占用带宽。
  2. 安全
  3. 自私,我不共享资源,但我下载资源。如果没有一定的奖惩机制,也很难组织一个大型的 p2p 网络
  4. 知识产权的管理问题

使用场景

  • 个人组建自己的 p2p 网络,比如家与公司的两个局域网穿透,相互访问。 比如利用  开源的openp2p,实现内网穿透。让你在公司也能访问家里的内网设备
  • 还有某 T 下载等

 

背后原理

P2P 内网穿透是一种使得位于 NAT(网络地址转换)或防火墙后面的设备能够直接通信的技术。其核心目的是绕过 NAT 设备的限制,从而实现不同网络之间的 P2P 通信。

内网穿透的原理

  1. NAT 和防火墙的概念

    • NAT:网络地址转换,将私有 IP 地址转换为公共 IP 地址,允许多台设备共享一个公共 IP。
    • 防火墙:控制和监测进出网络的流量,通常会阻止未授权的访问。
  2. P2P 通信

    • 直接在设备之间进行数据传输,而无需通过中心服务器转发所有流量,从而降低延迟并节省带宽。

内网穿透的常见方法

  1. STUN(Session Traversal Utilities for NAT)

    • 用于确定 NAT 类型和公共 IP 地址。
    • 客户端向 STUN 服务器发送请求,STUN 服务器返回其公共 IP 和端口。设备可以使用这些信息与其他设备建立连接。
  2. TURN(Traversal Using Relays around NAT)

    • 当直接 P2P 连接无法建立时,使用 TURN 服务器作为中继。这种方法比 STUN 更为消耗资源,但在 NAT 类型较复杂时仍然有效。
  3. ICE(Interactive Connectivity Establishment)

    • 结合 STUN 和 TURN,尝试多种连接方式并选择最佳路径进行通信。

内网穿透实现步骤

  1. 注册客户端

    • 客户端连接到一个公共服务器(例如信令服务器),注册自己。服务器记录客户端的公共 IP 和端口。
  2. 交换地址信息

    • 客户端通过公共服务器交换彼此的地址和端口信息。这是信令的过程。
  3. 尝试直接连接

    • 客户端根据交换的地址尝试直接建立连接。如果连接成功,则直接进行 P2P 通信。
  4. 处理 NAT 问题

    • 如果连接失败,可能是因为 NAT 类型的原因。这时,客户端可能通过 TURN 服务器进行数据中转。
  5. 建立连接并传输数据

    • 连接建立后,客户端可以直接发送和接收数据。

示例

假设有两个设备 A 和 B 都在 NAT 后,需要建立 P2P 连接:

  1. A 和 B 向信令服务器注册。
  2. 服务器返回 A 的公共地址和 B 的公共地址。
  3. A 尝试直接连接 B 的地址。
  4. 如果连接成功,A 和 B 可以开始 P2P 通信。
  5. 如果连接失败,A 可以通过 TURN 服务器将数据发送给 B。

常见应用

  • 实时通信(如视频会议、VoIP)。
  • 文件共享。
  • 在线游戏。

总结

P2P 内网穿透利用 STUN、TURN 和 ICE 等技术手段,实现了在 NAT 和防火墙后设备之间的直接通信。它的核心在于通过公共服务器交换信息并尝试直接连接,从而避免通过中心服务器转发所有流量。这种方式有效提高了通信效率,降低了延迟。

文章来自个人专栏
视图流媒体
4 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0