博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
成功进行了一次UDP打洞
阅读量:6171 次
发布时间:2019-06-21

本文共 997 字,大约阅读时间需要 3 分钟。

测试环境:

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

说明:

当A端用UDP向服务端发送了一个包后,在服务端就得到A端来路的IP和端口:xxx.xxx.xxx.101:5841
当B端用UDP向服务端发送了一个包后,在服务端就得到B端来路的IP和端口:xxx.xxx.xxx.105:12584

*上面的IP和端口获取方式,C#用socket.RemoteEndPoint,VB的Winsock控件用RemoteHostIP和RemotePort属性

这时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为主,可以说马化腾当时的设计是激进而大胆的。

模仿并不意味着追随和落后,重要的能够在一个旧框架下注入新的思维。这也应该是马成功的必然性之一吧。

转载于:https://www.cnblogs.com/xiii/p/5052586.html

你可能感兴趣的文章
LNMP 安装
查看>>
Linux基础命令
查看>>
CentOS 7 巨大变动之 systemd 取代 SysV的Init
查看>>
VS工具使用
查看>>
CISCO交换机端口安全
查看>>
我的友情链接
查看>>
修改input框中placeholder的字体颜色
查看>>
关于ELK
查看>>
DG 查询/切换的相关命令
查看>>
Dbutils 介绍和使用
查看>>
VMwareESX/ESXi与厚置备(thick)虚拟机磁盘转换精简置备(thin)磁盘
查看>>
恒生电子的一道笔试题
查看>>
学习Android Studio里的Gradle
查看>>
mysql主从复制
查看>>
How to Install and Configure Zabbix on CentOS 7
查看>>
Lucene查询结果高亮
查看>>
【转载】ARX如何得到当前CAD打印设备列表及其他打印设置内容
查看>>
MathType编辑双向斜箭头的教程
查看>>
对于MathType中公式与文字错位的问题怎么解决
查看>>
正则表达式
查看>>