成功进行了一次UDP打洞
本次测试参数:
服务端是公网固定IP;两个客户端A和B分别位于不同电脑,不同宽带,不同型号路由后面(一个家庭路由,一个企业路由),且路由没有经过特别的设置。
测试没有什么特别的地方,只是依照网络资料进行实验。如下图:

说明:
当A端用UDP向服务端发送了一个包后,在服务端就得到A端来路的IP和端口:xxx.xxx.xxx.101:5841
当B端用UDP向服务端发送了一个包后,在服务端就得到B端来路的IP和端口:xxx.xxx.xxx.105:12584
这时A、B两端的路由就相当于是打开一个通道来给A、B向外通信。不光是服务端可以和A、B通信,由于通道已经打开了,那么:
A就可以向B已经打开的通道(B=xxx.xxx.xxx.105:12584)直接发送信息。
同理:
B也可以向A已经打开的通道(A=xxx.xxx.xxx.101:5841)直接发送信息。
注意:A、B之间通信貌似有一个先后顺序,我忘记了~,反正都发送试试就行了
最后:UDP通信在一些情况下比TCP要“灵敏”一些(可能用词有点不妥,我也不知道该怎么形容)。
比如有的时候宽带已经拨号成功了,TCP却怎么都连接不上服务器,浏览器打开网页也一样,要等很久的时间后TCP才能正常通信。
而在TCP不能连接的这段时间,UDP却是正常的。
但是使用UDP绝对不是一个省心的活:
--需要设计一套合理的包协议
--对信息完整性要求高的话,还需要重发处理
--对适应性要求高的需要配合TCP使用
现在的网络环境都比较好,UDP发送的成功率能达到98、99%,甚至更高吧(我没有做足够大量的测试,只是感觉)。
在当时复杂,不稳定的网络环境下,QQ竟然选择以UDP为主要的通信协议,而同期的ICQ和MSN等都以TCP为主,可以说马化腾当时的设计是激进而大胆的。
模仿并不意味着追随和落后,重要的能够在一个旧框架下注入新的思维。这也应该是马成功的必然性之一吧。
成功进行了一次UDP打洞的更多相关文章
- UDP打洞、P2P组网方式研究
catalogue . NAT概念 . P2P概念 . UDP打洞 . P2P DEMO . ZeroNet P2P 1. NAT概念 在STUN协议中,根据内部终端的地址(LocalIP:Local ...
- UDP"打洞"原理
1. NAT分类 根据Stun协议(RFC3489),NAT大致分为下面四类 1) Full Cone 这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端口 ...
- UDP 打洞 原理解释
终于找到了一份满意的UDP打洞原理解释,附上正文,自己整理了一下源码 3.3. UDP hole punching UDP打洞技术 The third technique, and the one o ...
- udp打洞( NAT traversal )的方法介绍
http://www.cnblogs.com/whyandinside/archive/2010/12/08/1900492.html http://www.gzsec.com/oldversion/ ...
- Python实现简单的udp打洞(P2P)
UDP穿越NAT的具体设计 首先,Client A登录服务器,NAT 1为这次的Session分配了一个端口60000,那么Server S收到的Client A的地址是200.0.0.132:600 ...
- UDP ------ UDP打洞
为什么需要UDP打洞 处于两个不同局域网的主机不能直接进行UDP通信 UDP"打洞"原理 1. NAT分类 根据Stun协议(RFC3489),NAT大致分为下面四类 ...
- C# p2p UDP穿越NAT,UDP打洞源码
思路如下(参照源代码): 1. frmServer启动两个网络侦听,主连接侦听,协助打洞的侦听. 2. frmClientA和frmClientB分别与frmServer的主连接保持联系. 3. 当f ...
- Udp打洞原理和源代码。
所谓udp打洞就是指客户端A通过udp协议向服务器发送数据包,服务器收到后,获取数据包,并且 可获取客户端A地址和端口号.同样在客户端B发送给服务器udp数据包后,服务器同样在收到B发送过来 的数据包 ...
- p2p的UDP打洞原理
>>>>>>>>>>>>>>>>>>>>>>>>> ...
随机推荐
- Nessus的安装/激活/更新
0x1,安装 百度:Nessus,随意下载一个就好了. 0x2,激活 开启代理,获取register code,如图: 获取到register code,填写,进行激活,意外报错: NOTICE: A ...
- 基于dom的xss漏洞原理
原文:http://www.anying.org/thread-36-1-1.html转载必须注明原文地址最近看到网络上很多人都在说XSS我就借着暗影这个平台发表下自己对这一块的一些认识.其实对于XS ...
- ThinkPHP 事务处理 (事务回滚) 、异常处理
$tran_result = true; $trans = M(); $trans->startTrans(); try { ...
- java8--类加载机制与反射(java疯狂讲义3复习笔记)
本章重点介绍java.lang.reflect包下的接口和类 当程序使用某个类时,如果该类还没有被加载到内存中,那么系统会通过加载,连接,初始化三个步骤来对该类进行初始化. 类的加载时指将类的clas ...
- 微信网页版APP - 网页微信客户端电脑版体验
微信网页版很早就出来了,解决了很多人上班不能玩手机的问题.微信电脑版-网页微信客户端,直接安装在桌面的微信网页版,免去了开浏览器的麻烦.双击就启动了,和其他的应用程序一样:运行过程中可以隐藏在桌面右下 ...
- Windows - 杀死占用某个端口号的进程
Windows不像Linux,Unix那样,ps -ef 查出端口和进程号,然后根据进程号直接kill进程. Windows根据端口号杀死进程要分三步: 第一步 根据 端口号 寻找 进程号 C:\&g ...
- html嵌入样式表
1.针对文件中的字体还有属性进行设置主要设置文字的大小及其颜色问题,未涉及div飘操作 处理页面CSS 先检测该内容部分是否已经设定了样式,如果没有单独设定再按照总体设计进行限定. eg: h1 h ...
- php生成随机字符串
<?php echo make_random_str(); function make_random_str() { $arr = ["A","B",&q ...
- socket的IO多路复用
IO 多路复用 I/O多路复用指:通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作. Linux Linux中的 select,poll, ...
- python3简单爬虫
最近在抽空学了一下python,于量就拿爬是练了下手,不得不说python的上手非常简单.在网上找了一下,大都是python2的帖子,于是随手写了个python3的.代码非常简单就不解释了,直接贴代码 ...