# p2p **Repository Path**: MemoryFast/p2p ## Basic Information - **Project Name**: p2p - **Description**: p2p穿透demo - **Primary Language**: C - **License**: LGPL-2.1 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2021-06-26 - **Last Updated**: 2021-06-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # p2p #### 项目介绍 p2p概念介绍:https://blog.csdn.net/u011164819/article/details/111598464 p2p穿透demo #### 软件架构 p2p穿透demo udp #### 安装教程 p2p穿透demo gcc server.c client.c -lpthread #### 使用说明 p2p穿透demo #### 参与贡献 https://blog.csdn.net/u011164819 #### 码云特技 https://blog.csdn.net/u011164819 #### ice服务器通信步骤 | | 客户端::::服务器 | 协议 | 说明 | | ---- | ---------------- | ---- | :----------------------------------------------------------- | | 1 | -> | udp | 发送任何内容都ok | | | <- | udp | 两个peer端获得各自外网地址。并和自己ip做比较,如果相同则自己处于公网环境,否则处于nat之后的网络环境。 | | 2 | -> | udp | 请求服务器使用另外一个Ip和端口发送udp包到客户端。 | | | <- | udp | 服务器(ip2:port2)给客户端发送udp消息。接收到:客户端为全锥形nat /未接收到: 继续检测。 | | 3 | -> | udp | 向服务器(ip2:port2)发送数据包。 | | | <- | udp | 收到c端的外围ip和port发来的消息,将c端外网ip和port返回去,如果这个port和step1中的一样,那么这个客户端nat为一个锥形nat.否则为对称型nat. | | 4 | -> | udp | 向默认ip和port发送数据包,要求服务器使用默认ip和port2返回一个数据给客户端。 | | | <- | udp | 如果B收到了,那也就意味着只要IP相同,即使port不同,NAT也允许UDP包通过。显然这是ip受限锥形NAT。如果没收到,端口受限锥形NAT. | 因为只有一个测试服务器,所以只有一个外网ip地址,所以 | | 客户端::::服务器 | 协议 | 说明 | | ---- | ---------------- | ---- | ------------------------------------------------------------ | | 1 | -> | udp | 向服务器(ip:port)发送数据包。发送任何内容都ok | | | <- | udp | 两个peer端获得各自外网地址。并和自己ip做比较,如果相同则自己处于公网环境,否则处于nat之后的网络环境。 | | 2 | -> | udp | 向服务器(ip:port2)发送数据包。 | | | <- | udp | 收到c端的外网ip和port发来的消息,将c端外网ip和port返回去,如果这个port和step1中的一样,那么这个客户端nat为一个锥形nat.否则为对称型nat. | | 3 | -> | udp | 向默认ip和port发送数据包,要求服务器使用默认ip和port2返回一个数据给客户端。 | | | <- | udp | 如果B收到了,那也就意味着只要IP相同,即使port不同,NAT也允许UDP包通过。显然这是ip受限锥形NAT。如果没收到,端口受限锥形NAT. | **对称nat**:目的地址的IP和port有任何一个改变,那么NAT都会重新分配一个port使用。