P2P通信
P2P协议打洞
TCP协议打洞

1,局域网通信分为三种情况(有两种情况不需要打洞,只有局域网之间的通信需要打洞
2,为什么要打洞,假如一个局域网IP需要跟公网的服务器通信,那么首先这个局域网IP需要通过NAT地址转换将内网IP映射为公网IP,然后才能和公网服务器通信,同理另一个摄像头要和客户端通信,那么需要通过服务器进行转发(因为NAT需要将公网的IP端口和内网的IP端口一一对应才能实现转发,另一端的net公网地址不在这个对应的表里,则包会直接被丢弃),这样的话服务器的压力会比较大
3,打洞步骤
1)服务器的连接分为主连接和协助打洞连接(比如端口分别为80 和 3478端口)
2)A,B两个客户端都连接上打洞服务器的主连接,然后A请求和B建立P2P通信,首先A会请求服务器的3478端口(协助打洞端口)
3)S服务器收到A的协助打洞连接会通知B,告诉B,A的NAT端口和NAT地址(经过转换后的公网地址)
4)B收到S的连接通知后首先与S的【协助打洞】port连接。随便发送一些数据后马上断开,这样做的目的是让S能知道B经过NAT-B转换后的公网IP和port号。
5)然后服务器将客户端的公网IP和端口告诉摄像头,也会将摄像头的公网IP和地址告诉客户端
6)客户端请求摄像头IP端口,这时候客户端所在局域网的NAT会记录一份映射,信息发到摄像头后会被丢弃,因为摄像头的NAT没有保存这个映射记录
7)摄像头主动给客户端发请求,这时重复上面步骤,会与客户端建立连接
UDP协议打洞
- 初始连接:两个希望进行P2P通信的设备(称为A和B)首先都与一个公共服务器(称为中继服务器)建立连接。中继服务器记录下它们的公共IP地址和端口号。
- 交换信息:中继服务器将A的公共IP地址和端口号发送给B,同时将B的公共IP地址和端口号发送给A。
- 打洞尝试:A和B使用从中继服务器获得的对方的公共IP地址和端口号,尝试直接向对方发送UDP数据包。由于NAT设备通常会允许内部设备发起的连接通过,因此这些数据包会在NAT设备上打开一个临时的“洞”。
- 建立连接:如果A和B的NAT设备都允许这种临时的“洞”,那么A和B就可以通过这些洞进行直接的P2P通信,而不再需要通过中继服务器。
参考链接
内网ip打洞:https://www.cnblogs.com/gccbuaa/p/7238745.html
UDP内网穿透和打洞原理与代码实现:https://www.cnblogs.com/theseventhson/p/14304321.html
简述UDP内网穿透和打洞原理:https://www.cnblogs.com/zqingyang/p/18232244#tid-DDp6jD


