1. 什么是P2P
正常情况下的数据交互:Client_1想要发送数据给 Client_2,需要经历下图所示的步骤:
不同客户端进行数据交互的时候,数据都需要通过服务器进行转发。因为所有数据都通过服务器进行转发,当有大量客户端进行连接的时候,服务器接收发送的数据量很大,会导致数据交互延时,所以Client_1 与 Client_2 进行大量数据交互的时候,速度会受到Server性能的限制。
当Client_1 与 Client_2 能够直接进行数据交互,而不通过服务器进行数据转发的话,能够提升数据交互的速度且不受服务器性能的限制。P2P的功能就是为了实现 Point To Point 的通讯方式。
如下图所示,就是P2P的通信方式
2.什么是NAT
简单来说,在NAT网关上会有一张映射表,表上记录了内网向公网哪个IP和端口发起了请求,然后如果内网有主机向公网设备发起了请求,内网主机的请求数据包传输到了NAT网关上,那么NAT网关会修改该数据包的源IP地址和源端口为NAT网关自身的IP地址和任意一个不冲突的自身未使用的端口,并且把这个修改记录到那张映射表上。最后把修改之后的数据包发送到请求的目标主机,等目标主机发回了响应包之后,再根据响应包里面的目的IP地址和目的端口去映射表里面找到该转发给哪个内网主机。这样就实现了内网主机在没有公网IP的情况下,通过NAPT技术借助路由器唯一的一个公网IP来访问公网设备。
3.实现P2P
4.demo(C语言)