cob*_*bie 2 python sockets network-programming tcp hole-punching
我在这里阅读了有关TCP打孔的文章.
为此,必须绑定用于与远程主机建立TCP连接的套接字,以及本地主机用于侦听到同一端口的连接的套接字.我已经能够在Java中执行此操作,但即使为给定套接字设置了SO_REUSEADDR标志,也无法在Python中执行此操作.有人能解释一下为什么吗?是因为Python本身就是单线程的吗?
从我测试/研究的角度来看,TCP Hole Punching并不是一种适用于各种情况的可行技术.首先,NAT漏洞不能很好地支持TCP Hole Punching,它们的行为是不可预测的.
在恢复中,它依赖于发送TCP SYN数据包并接收TCP SYN数据包(在正常会话中,您将使用SYN + ACK进行响应),以便NAT将在两个主机之间打开连接.有些NAT可能会打开此连接,而其他NAT则不会.我知道实现NAT Traversal的最好方法是使用UDP.由于UDP不是面向连接的,因此您可以开始发送数据包并进行恢复,因此NAT会认为一个数据包是另一个数据包的回复.
请参阅 UDP打孔
此外,要使UDP像TCP一样可靠,您可以使用TCP over UDP的实现.
见UDT
我很抱歉我没有回答你的问题,但为什么在Java中工作,为什么Python中没有,是很难知道,它是与虚拟机的实现和系统调用,甚至您正在使用的NAT.
| 归档时间: |
|
| 查看次数: |
4676 次 |
| 最近记录: |