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

为NAT后面的客户端创建Tcp连接,tcp,nat,Tcp,Nat,对于Linux和Windows操作系统,有哪些软件库可用于此类任务 RFC中是否存在一些信息?人们应该如何做 我很感兴趣,我如何为我的C++项目创建功能,如在该软件中所呈现的: >如果你想通过转接中继服务器进行连接,则没有太大的区别。唯一的区别在于TCP和UDP创建连接的方式,而不是其他方式 如果要建立P2P连接,则存在一些很大的差异 如果您在同一个网络中(位于同一个NAT后面):在UDP中,您向您的对等候选用户发送一个stun绑定请求,然后如果您得到响应,则您知道您已连接。同样,在TCP中,

对于Linux和Windows操作系统,有哪些软件库可用于此类任务

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


我很感兴趣,我如何为我的C++项目创建功能,如在该软件中所呈现的:

<强> >如果你想通过转接中继服务器进行连接,则没有太大的区别。唯一的区别在于TCP和UDP创建连接的方式,而不是其他方式

如果要建立P2P连接,则存在一些很大的差异

如果您在同一个网络中(位于同一个NAT后面):在UDP中,您向您的对等候选用户发送一个stun绑定请求,然后如果您得到响应,则您知道您已连接。同样,在TCP中,您必须在一侧创建一个主动套接字,在另一侧创建一个被动套接字。然后从主动套接字发送syn,从被动套接字接收syn,然后向主动套接字发送syn ack。然后活动套接字发送一个ack并建立连接

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

TCP打孔详细信息:

您必须使用TCP同步打开套接字。该插座可在主动和被动模式下工作。双方都需要相互了解私有和公共IP:Port。 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并建立连接


还要了解从中读取的TCP同时打开连接。要了解NAT过滤行为,请参见此。

如果要通过TURN中继服务器建立连接,则没有太大区别。唯一的区别在于TCP和UDP创建连接的方式,而不是其他方式

如果要建立P2P连接,则存在一些很大的差异

如果您在同一个网络中(位于同一个NAT后面):在UDP中,您向您的对等候选用户发送一个stun绑定请求,然后如果您得到响应,则您知道您已连接。同样,在TCP中,您必须在一侧创建一个主动套接字,在另一侧创建一个被动套接字。然后从主动套接字发送syn,从被动套接字接收syn,然后向主动套接字发送syn ack。然后活动套接字发送一个ack并建立连接

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

TCP打孔详细信息:

您必须使用TCP同步打开套接字。该插座可在主动和被动模式下工作。双方都需要相互了解私有和公共IP:Port。 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并建立连接


还要了解从中读取的TCP同时打开连接。要了解NAT过滤行为,请参见此。

从客户端或服务器的角度来看,NAT上的TCP连接与没有NAT的TCP连接没有什么不同。路由器将是重新写入源IP的路由器。此外,这似乎需要一个软件建议,这不适用于stackoverflow.Mmm。从我的观点来看,“TCP连接建立”在客户端位于NAT之后时有点不同。他们可能没有自己的公共ip。当NAT背后的客户可能是您需要第三个人进行初始连接。问题是关于文章、软件库或rfc,或者关于它的一些东西…“客户端如何连接它?他们支持NAT”“请求软件库建议”-我不知道这种限制我现在知道您想要创建一个到NAT背后系统的入站tcp连接。出站TCP连接没有任何不同,但是如果没有端口转发,那么到NAT客户端的入站TCP连接将是一个难题。UltraVNC使用公共IP上的“中继器”克服了这一问题,该“中继器”将成为“第三个人”。由于它是开源的,您可以查看代码,让它重新实现类似的功能。您可以阅读帮助中心的帮助,了解有关问题限制的更多信息。它针对第4点指出:要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于堆栈溢出来说是离题的,因为这些问题往往会吸引自以为是的答案