java 打洞_TCP打洞和UDP打洞的区别 (相互直接访问)
为什么网上讲到的P2P打洞基本上都是基于UDP协议的打洞?难道TCP不可能打洞?还是TCP打洞难于实现?
假设现在有内网客户端A和内网客户端B,有公网服务端S。
如果A和B想要进行UDP通信,则必须穿透双方的NAT路由。假设为NAT-A和NAT-B。
A发送数据包到公网S,B发送数据包到公网S,则S分别得到了A和B的公网IP,
S也和A B 分别建立了会话,由S发到NAT-A的数据包会被NAT-A直接转发给A,
由S发到NAT-B的数据包会被NAT-B直接转发给B,除了S发出的数据包之外的则会被丢弃。
所以:现在A B 都能分别和S进行全双工通讯了,但是A B之间还不能直接通讯。
解决办法是:A向B的公网IP发送一个数据包,则NAT-A能接收来自NAT-B的数据包
并转发给A了(即B现在能访问A了);再由S命令B向A的公网IP发送一个数据包,则
NAT-B能接收来自NAT-A的数据包并转发给B了(即A现在能访问B了)。
以上就是“打洞”的原理。
但是TCP和UDP在打洞上却有点不同。这是因为伯克利socket(标准socket规范)的
API造成的。
UDP的socket允许多个socket绑定到同一个本地端口,而TCP的socket则不允许。
这是这样一个意思:A B要连接到S,肯定首先A B双方都会在本地创建一个socket,
去连接S上的socket。创建一个socket必然会绑定一个本地端口(就算应用程序里面没写
端口,实际上也是绑定了的,至少java确实如此),假设为8888,这样A和B才分别建立了到
S的通信信道。接下来就需要打洞了,打洞则需要A和B分别发送数据包到对方的公网IP。但是
问题就在这里:因为NAT设备是根据端口号来确定session,如果是UDP的socket,A B可以
分别再创建socket,然后将socket绑定到8888,这样打洞就成功了。但是如果是TCP的
socket,则不能再创建socket并绑定到8888了,这样打洞就无法成功。
http://www.cnblogs.com/key-ok/p/4367386.html
java 打洞_TCP打洞和UDP打洞的区别 (相互直接访问)相关推荐
- NAT穿透(UDP打洞)
1.NAT(Network Address Translator)介绍 NAT有两大类,基本NAT和NAPT. 1.1.基本NAT 静态NAT:一个公网IP对应一个内部IP,一对一转换 动态NAT:N ...
- UDP 打洞 java demo
UDP打洞的具体原理就不细说了文章还是很多,说下我的网络环境,家里台式电脑网线连的家里路由器(移动宽带),公司台式电脑网线连的公司路由器(电信宽带),一台有公网IP的华为云主机(我是试用一个月的) 1 ...
- UDP打洞、P2P组网方式研究
catalogue 1. NAT概念 2. P2P概念 3. UDP打洞 4. P2P DEMO 5. ZeroNet P2P 1. NAT概念 在STUN协议中,根据内部终端的地址(LocalIP: ...
- UDP打洞(UDP Hole Punching)原理
一. NAT分类 根据STUN协议(RFC3489),NAT大致分为下面四类: 1) Full Cone 这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端 ...
- TCP打洞和UDP打洞的区别
为什么网上讲到的P2P打洞基本上都是基于UDP协议的打洞?难道TCP不可能打洞?还是TCP打洞难于实现? 假设现在有内网客户端A和内网客户端B,有公网服务端S. 如果A和B想要进行 ...
- TCP 打洞和UDP打洞
为什么网上讲到的P2P打洞基本上都是基于UDP协议的打洞?难道TCP不可能打洞?还是TCP打洞难于实现?假设现在有内网客户端A和内网客户端B,有公网服务端S.如果A和B想要进行UDP通信,则必须穿透双 ...
- UDP打洞NAT大致分为下面四类 P2P
NAT大致分为下面四类 1) Full Cone 这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端口的UDP数据报都可以到达A.不管是不是C发过来的. 例 ...
- UDP打洞程序包的源码
C#实现UDP打洞 转自:http://hi.baidu.com/sdfiyon/blog/item/63a6e039155e02f23a87ceb1.html 下面是UDP打洞程序包的源码: //W ...
- pwnat——一种无需第三方服务器就能完成NAT点对点P2P穿透的基于UDP打洞技术的新方法
pwnat--一种无需第三方服务器就能完成NAT点对点P2P穿透的基于UDP打洞技术的新方法 简介 传统的udp打洞 UDP 打洞原理及过程 pwnat技术,无需第三方服务器! pwnat用法 pwn ...
最新文章
- MATLAB【四】 ————批量适配图片信息与excel/txt等文档信息,批量移动拷贝图片,批量存图片中点和方框
- linux pps 包 网卡,linux下安装PPS
- linux下给php安装pdo_mysql和zlib以及测试模式的选择(禅道安装过程中遇到的问题)...
- 2021年春季学期-信号与系统-第三次作业参考答案-第十道题
- 每日一皮:当最棒的程序员遇见了 Bug ...
- Android系统所有版本源码Kernel源码
- JavaScript中常用的事件代码及实例
- PHP Uploadify+jQuery.imgAreaSelect插件+AJAX 实现图片上传裁剪 仿微博头像上传功能
- 树莓派 pip安装mysql_树莓派 pip 手动安装
- 初次接触 Lottie
- 高级工计算机操作试题及答案,计算机系统操作高级工试题和答案[1]
- spring单例的bean是单例还是原型
- oppo计算机锁屏快捷键,oppo一键锁屏方法【图文教程】
- Windows10清理C盘的恶意软件
- 单细胞测序的入门操作
- MySQL报错:Duplicate entry ‘xxx‘ for key ‘xxx‘
- HTML5实时显示摄像头视频
- C#毕业设计——基于C#+asp.net+sqlserver的工作计划流程管理系统设计与实现(毕业论文+程序源码)——流程管理系统
- 力扣122题:买卖股票的最佳时机 II
- 缺失数据的Bootstrap与Jackknife方法:《Statistical Analysis with Missing Data》习题5.1 5.2