tcp打洞与udp打洞的差别

cynchanpin cynchanpin     2022-09-01     768

关键词:

为什么网上讲到的P2P打洞基本上都是基于UDP协议的打洞?难道TCP不可能打洞?还是TCP打洞难于实现?
    如果如今有内网clientA和内网clientB。有公网服务端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绑定到同一个本地port,而TCP的socket则不同意。
    这是这样一个意思:A B要连接到S,肯定首先A B两方都会在本地创建一个socket。
去连接S上的socket。创建一个socket必定会绑定一个本地port(就算应用程序里面没写
port,实际上也是绑定了的,至少java确实如此),如果为8888,这样A和B才分别建立了到
S的通信信道。

接下来就须要打洞了,打洞则须要A和B分别发送数据包到对方的公网IP。

可是
问题就在这里:由于NAT设备是依据port号来确定session。假设是UDP的socket,A B能够
分别再创建socket,然后将socket绑定到8888。这样打洞就成功了。可是假设是TCP的

socket,则不能再创建socket并绑定到8888了。这样打洞就无法成功。

转自:http://f543711700.iteye.com/blog/978887

udp打洞原理

源:UDP打洞原理 查看详情

udp打洞原理和源代码。

所谓udp打洞就是指客户端A通过udp协议向服务器发送数据包,服务器收到后,获取数据包,并且可获取客户端A地址和端口号。同样在客户端B发送给服务器udp数据包后,服务器同样在收到B发送过来的数据包后获取B的地址和端口号... 查看详情

unity3d中怎么在建好的墙上掏个洞把窗户模型放进去?

...怎么把门窗放上去,墙是Cube拉伸变换出来的你可以搜索打洞的插件之前用过一个……忘了叫什么名字了(好像是什么BooleanRT那个插件是把两个物体叠加起来一个是被打洞的物体一个是打洞的物体重叠的部分就被捞空生成新的面... 查看详情

udp方式实现广域网的p2p通信

...行客户端与服务器端通信,使用UDP协议进行客户端之间的打洞操作,UDP的方式的源码在下方。一直没有实现TCP的打洞,如果有实现的,希望分享一下经验,谢谢。源码下载 查看详情

p2p技术详解:p2p中的nat穿越(打洞)方案详解

...双方中只有一方位于NAT设备之后)3、基于UDP协议的P2P打洞技术详解3.1、原理概述3.2、典型P2P情景1:两客户端位于同一NAT设备后面(即相同内网中)3.3、典型P2P情景2:两客户端位于不同的NAT设备后面(分属... 查看详情

p2p技术详解:p2p中的nat穿越(打洞)方案详解

...双方中只有一方位于NAT设备之后)3、基于UDP协议的P2P打洞技术详解3.1、原理概述3.2、典型P2P情景1:两客户端位于同一NAT设备后面(即相同内网中)3.3、典型P2P情景2:两客户端位于不同的NAT设备后面(分属... 查看详情

udp打洞原理

1.      NAT分类根据Stun协议(RFC3489),NAT大致分为下面四类1)     FullCone这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端口的UDP数据报都可以到达A.不... 查看详情

n2n源码核心简单分析一

首先在开篇之前介绍下内网打洞原理场景:一个服务器S1在公网上有一个IP,两个私网机器C1,C2C1,C2分别由NAT1和NAT2连接到公网,我们需要借助S1将C1,C2建立直接的TCP连接,即由C1向C2打一个洞,让C2可以沿这个洞直接连接到C1主机,... 查看详情

qq通讯原理

...登陆服务器,在给对发发消息的时候,首先尝试与对方进行打洞连接,如果可以打通消息直接发送给对方,如果不能打通,则消息转发服务器,由服务器转发.现在回答你的问题1.是不是每个用户都要以TCP连接登陆了IM服务器?如果是这样,IM... 查看详情

autossh打洞

autossh介绍:autossh是一个用来启动ssh并进行监控的程序,可在需要时重启ssh,如果程序问题或者是网络问题。其灵感和机制来自于rstunnel(ReliableSSHTunnel).autossh1.2的方法已经改变:autossh使用ssh来构造一个ssh重定向循环(本地到远程和... 查看详情

如何在 pygame 表面打洞? [复制]

】如何在pygame表面打洞?[复制]【英文标题】:Howtomakeaholeinapygamesurface?[duplicate]【发布时间】:2021-02-2616:50:34【问题描述】:我有2个不同的图像A和B,B在A上是blit。我想(我猜是blit)在B上有一个洞,让我可以透过它看到A。任何... 查看详情

todoudpp2p打洞原理

参考以下两篇文章:https://my.oschina.net/ososchina/blog/369206http://m.blog.csdn.net/article/details?id=6667648  查看详情

iOS在UIView中打洞不是正方形

】iOS在UIView中打洞不是正方形【英文标题】:iOSmakeholeinUIViewothershapethansquare【发布时间】:2014-02-1300:38:19【问题描述】:我有一个UIView可以绘制不同的形状。我可以在我的图像上打一个洞让它透明,工作正常,但这个洞只是方形... 查看详情

p2p技术详解:p2p中的nat穿越(打洞)方案详解(进阶分析篇)(代码片段)

...:中间件技术5.1、原理5.2、限制6、NAT穿越技术3:打洞技术(HolePunching)6.1、原理6.2、方法6.2.1NAT行为类型与侦测方法6.2.2NAT打洞过程7、NAT穿越技术4:Relay服务器中转技术7.1、UDP协议的Relay7.1.1方式一、SendandDatamethods,... 查看详情

p2p技术详解:p2p中的nat穿越(打洞)方案详解(进阶分析篇)(代码片段)

...:中间件技术5.1、原理5.2、限制6、NAT穿越技术3:打洞技术(HolePunching)6.1、原理6.2、方法6.2.1NAT行为类型与侦测方法6.2.2NAT打洞过程7、NAT穿越技术4:Relay服务器中转技术7.1、UDP协议的Relay7.1.1方式一、SendandDatamethods,... 查看详情

免费的frp--windows内网使用argotunnel打洞到cloudflare

windows使用ArgoTunnelCloudflare的ArgoTunnel,可以将内网与Cloudflare之间打通,与之前的CloudflareWrap有点像官网:https://developers.cloudflare.com/argo-tunnel/客户端下载:https://developers.cloudflare.com/argo-tunnel/downloads/https: 查看详情

趣图:tcp与udp的差别

  趣图:程序猿和运维狗的工作日常……趣图:Java 和 PHP 之间的战斗 查看详情

p2p技术详解:p2p中的nat穿越(打洞)方案详解(进阶分析篇)(代码片段)

...:中间件技术5.1、原理5.2、限制6、NAT穿越技术3:打洞技术(HolePunching)6.1、原理6.2、方法6.2.1NAT行为类型与侦测方法6.2.2NAT打洞过程7、NAT穿越技术4&#x 查看详情