P2P的实现原理是什么?

SNAT的映射关系是1:1,即一个内网IP对应一个公网IP,不需要设置路由器,这种情况下需要内网主机主动向外网主机发送请求,使路由器建立映射关系。那么能不能通过手动设置映射关系让外网主机主动向内网主机发送消息?

DNAT的映射关系是1:n,即一个内网IP对应多个公网IP,需不需要设置路由器?

P2P的实现原理是哪一种,或者其他什么?

P2P(Peer-to-Peer)的实现原理是建立直接连接,即两个或多个节点之间通过互连的网络直接通信,没有单独的服务器或中心节点。在 P2P 网络中,每个节点既是客户端又是服务器,各个节点之间进行动态资源、服务和信息的交换。

对于第二个问题,无论采用 SNAT 或 DNAT,映射关系都是需要在路由器上进行设置的。SNAT 的映射关系是 1:1,是一个内网 IP 对应一个公网 IP,因此不存在一对多的映射关系,也不需要设置 DNAT。当内网主机需要主动向外网主机发送请求时,路由器会自动建立映射关系并将响应转发回来。如果要实现外网主机向内网主机发送消息,需要通过端口映射将外网主机的请求转发到内网主机上。

DNAT 的映射关系是 1:n,即一个内网 IP 对应多个公网 IP。在进行 DNAT 映射时需要在路由器上进行配置,将公网 IP 和端口映射到内网 IP 和端口,从而实现访问内网服务。

总之,无论是 SNAT 还是 DNAT,都需要在路由器上进行配置,将公网 IP 和端口映射到内网 IP 和端口,从而实现内网主机访问公网服务或者外网主机访问内网服务。

就是内网穿透,这随便一搜就能搜到
简单来说,就是路由器正常只允许你向外请求,不允许外面的请求进来
但是TCP连接是点对点的,路由器并不知道内网IP和外网IP是否在保持连接,它只判断发出的端口和接收的端口是同一个,就认为是返回的请求数据
那么只要两端内网IP设置好端口复用,然后同时建立两个连接,一个server,一个client,使用同一个端口
client用来跟服务器通信,服务器回包,这样路由器不再对这个端口进行屏蔽
此时对方直接向你的端口发起TCP连接,这样就两个IP点对点直连了
当然这只是大体的流程,细节上要解决的问题还很多

P2P(点对点)的实现原理是将整个网络连接形成一个去中心化的结构,也就是将每个节点都变成一个服务器和客户端。节点与节点之间直接相互通讯(数据传输),而不必通过专用的服务器进行转发。当某一节点需要与其他节点通信时,它将向邻近的节点请求建立直接连接,并且没有服务提供商的限制和控制。这种方式实现了对等网络的有效分布式管理和资源共享。

关于第二个问题,SNAT映射是1:1的,因此需要内网主机主动向外网主机发送请求以建立映射关系。

如果要实现外网主机向内网主机发送消息,则需要在路由器上设置端口映射(Port Mapping),将特定端口或协议的数据包从WAN口映射到某个局域网(LAN)的IP地址和端口,以便路由器能正确地将流量转发到目标主机。配合使用UPnP(Universal Plug and Play)协议,可以实现自动化的端口映射,简化配置流程。

DNAT映射是1:n的,意味着同一内网IP对应着多个公网IP,通常被用于将 Internet 上的请求映射到多台位于私有网络中的服务器上。例如,在一个公司内部网络中,可以使用 DNAT 将公司 Web 站点的请求(端口 80)映射到位于私有网络中多台 Web 服务器的公网 IP 上,以实现负载均衡和高可用性。DNAT需要在路由器上配置,将外部目标IP地址与内部主机的IP地址映射起来。