为NAT后面的客户端创建Tcp连接

bru*_*iuz 1 tcp nat

对于Linux,Windows操作系统,此类任务确实存在哪些软件库?

RFC中是否存在一些人们应该如何做的信息?

我很有意思如何为我的C++项目创建功能,如此软件中所示:https://secure.logmein.com/ru/products/hamachi/download.aspx

Tah*_*lil 5

如果要通过TURN中继服务器建立连接,则没有太大区别.唯一的区别是TCP和UDP如何创建连接而不是其他任何东西.

如果你想建立P2P连接,会有一些很大的不同.

如果您在同一个网络中(在相同的NAT后面):在UDP中,您向对等候选人发送一个眩晕绑定请求,然后如果您收到回复,则表示您已连接.在TCP中,您必须在一侧创建一个活动套接字,在另一侧创建一个被动套接字.然后从活动套接字发送syn并从被动套接字接收它,然后将syn ack发送到活动套接字.然后活动套接字发送确认并建立连接.

如果您在不同的网络中(在不同的NAT后面):您必须使用TCP打孔技术来建立连接.因为如果先前没有数据包发送到syn来自的地址,您的NAT将不允许TCP syn数据包通过.

TCP打孔细节:

您必须使用TCP同时打开的套接字.此套接字以主动和被动模式运行.两端都需要彼此了解私有和公共IP:端口.TCP同时打开将发生如下:

1)对等体A继续向对等体B发送SYN.对等体B继续向对等体A发送SYN

2)当NAT-a从对等体A接收到传出SYN时,它在其状态机中创建映射.当NAT-b从对等体B接收到传出SYN时,它在其状态机中创建映射.

3)SYN在网络路径的某处交叉,然后:

来自对等体A的SYN到达NAT-b,来自对等体B的SYN到达NAT-a根据这些事件的时间(在网络中SYN交叉的地方),至少有一个NAT会让传入的SYN通过,并映射它到内部目标对等方

4)在收到SYN后,对等体发回SYN + ACK并建立连接.

来自WIKI.

还要从这里了解TCP同时打开连接.要了解NAT过滤行为,请参阅此答案.