UDP 构建p2p打洞过程的实现原理(持续更新)

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: UDP 构建p2p打洞过程的实现原理(持续更新) 发表于7个月前(2015-01-19 10:55)   阅读(433) | 评论(0) 8人收藏此文章, 我要收藏 赞0 8月22日珠海 OSC 源创会正在报名,送机械键盘和开源无码内裤   摘要 UDP 构建p2p打洞过程的实现原理   ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 双方都在局域网内就没有办法TCP直连了,所以像QQ等都会尽量使用UDP直连的   IP地址转换不需要你处理,网关默认就已经进行了转换。

UDP 构建p2p打洞过程的实现原理(持续更新)

发表于7个月前(2015-01-19 10:55)   阅读( 433) | 评论(0) 8人收藏此文章, 我要收藏
0

8月22日珠海 OSC 源创会正在报名,送机械键盘和开源无码内裤  

摘要 UDP 构建p2p打洞过程的实现原理

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
双方都在局域网内就没有办法TCP直连了,所以像QQ等都会尽量使用UDP直连的
 
IP地址转换不需要你处理,网关默认就已经进行了转换。服务器接收到DatagramPacket中getAddress和getPort已经是网关的端口
 
 
UDP打洞的过程大致如此:
1 、双方都通过UDP与服务器通讯后,网关默认就是做了一个外网IP和端口号 与你内网IP与端口号的映射,这个无需设置的,服务器也不需要知道客户的真正内网IP
2 、用户A先通过服务器知道用户B的外网地址与端口 
3 、用户A向用户B的外网地址与端口发送消息, 
4 、在这一次发送中,用户B的网关会拒收这条消息,因为它的映射中并没有这条规则。 
5 、但是用户A的网关就会增加了一条允许规则,允许接收从B发送过来的消息 
6 、服务器要求用户B发送一个消息到用户A的外网IP与端口号 
7 、用户B发送一条消息,这时用户A就可以接收到B的消息,而且网关B也增加了允许规则 
8 、之后,由于网关A与网关B都增加了允许规则,所以A与B都可以向对方的外网IP和端口号发送消息

对于这个过程的了解,可以看以下博客

http://blog.csdn.net/jdh99/article/details/6667648

------------------------------------------------------------------------------------------

通过UDP路由验证实现NAT穿越是一种在处于使用了NAT的私有网络中的Internet主机之间建立双向UDP连接的方法。由于NAT的行为是非标准化的,因此它并不能应用于所有类型的NAT。

其基本思想是这样的:让位于NAT后的两台主机都与处于公共地址空间的、众所周知的第三台服务器相连,然后,一旦NAT设备建立好UDP状态信息就转为直接通信,并寄希望于NAT设备会在分组其实是从另外一个主机传送过来的情况下仍然保持当前状态。

这项技术需要一个圆锥型NAT设备才能够正常工作。对称型NAT不能使用这项技术。

这项技术在P2P软件和VoIP电话领域被广泛采用。它是Skype用以绕过防火墙和NAT设备的技术之一。

相同的技术有时还被用于TCP连接——尽管远没有UDP成功。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
4月前
|
存储 网络协议 Ubuntu
【Linux开发实战指南】基于UDP协议的即时聊天室:快速构建登陆、聊天与退出功能
UDP 是一种无连接的、不可靠的传输层协议,位于IP协议之上。它提供了最基本的数据传输服务,不保证数据包的顺序、可靠到达或无重复。与TCP(传输控制协议)相比,UDP具有较低的传输延迟,因为省去了建立连接和确认接收等过程,适用于对实时性要求较高、但能容忍一定数据丢失的场景,如在线视频、语音通话、DNS查询等。 链表 链表是一种动态数据结构,用于存储一系列元素(节点),每个节点包含数据字段和指向下一个节点的引用(指针)。链表分为单向链表、双向链表和循环链表等类型。与数组相比,链表在插入和删除操作上更为高效,因为它不需要移动元素,只需修改节点间的指针即可。但访问链表中的元素不如数组直接,通常需要从
266 2
|
4月前
|
网络协议 网络架构
【网络编程入门】TCP与UDP通信实战:从零构建服务器与客户端对话(附简易源码,新手友好!)
在了解他们之前我们首先要知道网络模型,它分为两种,一种是OSI,一种是TCP/IP,当然他们的模型图是不同的,如下
196 1
|
网络协议 网络架构 索引
P2P之UDP穿透NAT的原理与实现 - 增强篇
为了方便操作,推荐你使用一个远程登陆软件,可以直接在一台机器上操作所有的相关的计算机,这样很方便,一个人就可以完成所有的工作了。呵呵,本人就是这么完成的。欢迎有兴趣和经验的朋友来信批评指正,共同进步。
3183 0
|
算法 区块链
简述以太坊P2P网络之UDP
个人认为以太坊是区块链项目中带来技术重新认识和学习的不错的项目,特别是在P2P网络这一块。本文将介绍P2P网络中负责节点之间的通信连接和服务发现,本文的内容主要是对代码层级的理解,可能存在对其理解的错误,欢迎指点。
500 0
简述以太坊P2P网络之UDP
|
iOS开发 Python
Python实现简单的udp打洞(P2P)
UDP穿越NAT的具体设计    首先,Client A登录服务器,NAT 1为这次的Session分配了一个端口60000,那么Server S收到的Client A的地址是200.0.0.132:60000,这就是ClientA的外网地址了。
2448 0
|
C++
UDP 打洞示例 包含 服务器 客户端
客户端示例:     [cpp] view plain copy     #include "Net.h"   #include "../p2pInfo.h"      int main()   {       CUdp  udp;       if (0!=udp.
966 0