首页 > 其他分享 >P2P 通信原理

P2P 通信原理

时间:2024-07-14 20:30:22浏览次数:10  
标签:通信 ip2 ip1 P2P NAT 服务器 原理 port2 port1

P2P 是指2台电脑之间相互通信。当2台电脑之间在不同的局域网下面是怎么互相通信的呢?

首先了解微信是怎么通信的,微信是通过微信服务器转发我们消息的

如客户端A和B之间通信,是借助了服务器131.12.12.1转发的。

服务器131.12.12.1启动微信程序后,绑定的端口是1111,客户端A和B均在线时,也就是A和B同时登陆到微信服务器,此时服务器和A和B均建立一个通道,有人可能会问,别人不在线我也能发送消息呢,那是因为服务器帮你把消息缓存在服务器,等对方上线后,在进行转发。这种情况下的消息过程是

因为目的地址是131.12.12.1 A先把消息转发到网关上,也是就192.168.10.1上,此时A应用服务器启动的端口假设是1111,这里会进行NAT转换.

NAT分为两种,一种是NAT, 一种是NAPT, 前者只进行IP地址转换,后者还会进行传输层的端口转换

发送方地址会变成172.1.13.1,端口假设是2222,然后目的地址任然是131.12.12.1,服务器接收到消息后。找到B的通信地址,这里其实就是141.1.1.2:2222,

B的路由器接收到消息后,这里其实有一个NAT转换表,也就是发送到141.1.1.2:2222端口上的数据会被转发到192.168.20.2:1111上,这样B就接收到消息了

整个过程:

192.168.10.2:1111 ---> 172.1.13.1:2222 ---->131.12.12.1:3333----> 141.1.12:2222----->192.168.20.2:1111

WAN LAN
141.1.1.2:2222 192.168.20.2:1111

 

 

上面其实不是一个P2P,P2P是A和B之间直接访问,而不需要借助服务器。

可能会说A直接发给B的外网地址 141.1.12:2222,B发给A的外网地址172.1.13.1:2222,不就可以实现通信了吗,但是很多NAT服务器其实为了安全,这种情况不会进行转发的。

先了解NAT转换类型,有以下几种:

类型 描述
锥型NAT(Full-cone NAT) 内网ip1:port1会映射到公网ip2:port2,ip1:port1发往外网的包都将通过ip2:port2发出;外部任何ip3:port3都可以通过发送数据包给ip2:port2从而与ip1:port1进行通信。
(地址)限制型锥型NAT((Address)-restricted-cone NAT) 内网ip1:port1会映射到公网ip2:port2,ip1:  port1发往外网的包都将通过ip2:port2发出;外部只有收到过ip2:port2数据包的ip3才可以发送数据包给ip2:port2从而与ip1:port1进行通信。
端口限制型锥型NAT(Port-restricted cone NAT) 内网ip1:port1会映射到公网ip2:port2,ip1:  port1发往外网的包都将通过ip2:port2发出;外部只有收到过ip2:port2数据包的ip3:port3才可以发送数据包给ip2:port2从而与ip1:port1进行通信。
对称性NAT(Symmetric NAT) 内网ip1:port1任何一个发往外网ip3:port3的请求,都将使用独有的公网ip2:port2;外部只有收到过ip1:port1数据包的服务才能返回数据。

锥型NAT先天支持,

限制型锥型NAT 和 端口限制型锥型NAT这里加了限制,如果一个陌生的IP发到对应端口,是不会进行转发的。所以要解决P2P,这里需要借助服务器进行P2P打洞。

当服务器同时接收到A和B的消息后,首先服务器要A发一个消息到B的外网141.1.1.2:2222(UDP就行),此时B不会进行消息转发,然后服务器要B发送一个消息到A的外网172.1.13.1:2222, 由于A已经发送过消息到B,所以A的路由器会接收B的消息,并转发到A,这样后面A和B就可以正常通信了,不需要借助服务器进行转发了

 

标签:通信,ip2,ip1,P2P,NAT,服务器,原理,port2,port1
From: https://www.cnblogs.com/minblog/p/18301792

相关文章

  • 网络编程原理
    1、什么是IO多路复用I/O多路复用的本质是使用select,poll或者epoll函数,挂起进程,当一个或者多个I/O事件发生之后,将控制返回给用户进程。以服务器编程为例,传统的多进程(多线程)并发模型,在处理用户连接时都是开启一个新的线程或者进程去处理一个新的连接,而I/O多路复用则可以在......
  • Spring MVC 中视图的实现原理,在Spring MVC 中实现重定向和转发,以及访问静态资源
    1.SpringMVC中视图的实现原理,在SpringMVC中实现重定向和转发,以及访问静态资源@目录1.SpringMVC中视图的实现原理,在SpringMVC中实现重定向和转发,以及访问静态资源1.1SpringMVC视图支持可配置1.2SpringMVC支持的常见视图1.3实现视图机制的核心接口1.4实现视图机制......
  • Spring MVC 中视图的实现原理,在Spring MVC 中实现重定向和转发,以及访问静态资源
    1.SpringMVC中视图的实现原理,在SpringMVC中实现重定向和转发,以及访问静态资源文章目录1.SpringMVC中视图的实现原理,在SpringMVC中实现重定向和转发,以及访问静态资源1.1SpringMVC视图支持可配置1.2SpringMVC支持的常见视图1.3实现视图机制的核心接口1.4......
  • STMF4串口通信使用
    目录STMF4串口通信使用USART的使用流程注意STMF4串口通信使用前提回顾:串口通信概念介绍1STM32串口通信概念介绍2针对特定stm32F4板子的串口接线折叠文本USART指的是通用同步异步收发器,是STM32中的串行通信设备,STM32F407ZET6一共提供了6个串行接口供用户使用,其中4个为US......
  • C#与PLC通信——如何检测电脑与PLC之间的网络是否通畅
    前言:电脑和PLC的IP地址设置好以后,可以先通过一些手段来测试电脑和PLC之间的网络是否通畅,如果确认了网络通畅以后,我们再测试通信程序。1、同时按下键盘的windows键+"R"键,如下图:下面两张图是两种键盘的情况,并且能弹出”运行“窗口2、在窗口中输入“cmd”,然后点击“确定......
  • 【tomcat】Tomcat如何扩展Java线程池原理
    池化技术在后端中,对于经常使用池化就是来提升系统性能,比如数据库连接池、线程池连接池等,本质都是利用空间换时间的来提升性能,用来避免资源的频繁创建和销毁,以此提高资源的复用率,所以合理设置系统所需的线程池大小非常重要,一般都需要结合线程启动监控系统来观察,查看设置的是......
  • STM32串口通信概念介绍2
    STM32串口通信(1) 硬件接线说明采用4针的串口(TXD、RXD、GND、VCC),然后通过CH340芯片进行转换,就可以直接通过USB口转串口的方式达到和计算机通信的目的。如果采用有线方式与PC机进行通信,则需要用到CH340转换芯片,数据会通过USART1串口传输。(1) 串口通信参数串口通信属于全双......
  • 【vue教程】二. Vue特性原理详解
    目录回顾本章涵盖知识点Vue实例和选项创建Vue实例Vue实例的选项Vue模板语法插值表达式指令v-bindv-modelv-on自定义指令创建自定义指令在模板中使用自定义指令自定义指令的`钩子函数`自定义指令的实例演示指令注册局部注册指令过滤器数据绑定和响应式原理响应......
  • 概率论原理精解【1】
    文章目录测度概述集类笛卡尔积定义例子多集合的笛卡尔积定义计算方法注意事项有限笛卡尔积的性质1.定义2.性质2.1基数性质2.2空集性质2.3不满足交换律2.4不满足结合律2.5对并和交运算满足分配律3.示例4.结论参考链接测度概述所谓测度,通俗的讲就是测量......
  • nacos 服务注册原理
    springboot的各种starter会根据SPI机制,读取META-INFO/spring.factories文件,自动注册一些bean,spring-cloud-starter-alibaba-nacos-discovery的spring.factories如下:org.springframework.cloud.bootstrap.BootstrapConfiguration=\com.alibaba.cloud.nacos.discover......