当前位置: 首页 > 知识库问答 >
问题:

什么时候使用TCP打孔技术,为什么要使用?

严誉
2023-03-14

我正在研究TCP打孔技术,从这篇文章中得到了一些知识:TCP_HOLE_PUNCHING。但我不明白下面的部分:

      Network Drawing
      Peer A ←→ Gateway A ← .. Network .. → Gateway B ←→ Peer B  

      Types of NAT
      The availability of the TCP-hole-punching technique depends 
      on the type ofcomputer port allocation used by the NAT. When 
      two peers, A and B, instantiate TCP   connections by binding 
      to local ports Pa and Pb, respectively, **they need to know 
      the remote  endpoint NAT port in order to make the connection**.

这里有几个问题,谁能帮忙解释一下吗?如有任何帮助或建议,我们将不胜感激!!

假设我们有一个客户端应用程序运行在NAT1后面,一个服务器应用程序运行在NAT2后面。他们将有消息传递和文件传输通信。模式将是服务器监听并接受来自客户端的连接。他们需要使用TCP打孔来保持TCP连接工作吗?

Q2.TCP穿孔技术是否只有在对等通信且双方都相互连接时才有必要(例如,2x CONNECT()、no LISTEN()、ACCEPT()等)?

Q3.在上面的文字中,“他们需要知道远程endpointNAT端口以便进行连接”是什么意思?为什么他们需要知道远程endpointNAT端口?他们不是只需要知道另一台机器的本地端口吗?

例如,假设这对是(ClientA,publicIPA,LocalPortA),(ClientB,publicIPB,LocalPortB)。如果ClientA希望通过TCP与ClientB通信,它可能会执行如下操作:

         clientBAddr.port = LocalPortB;
         clientBAddr.ip = inet_addr(publicIPB);
         connect(fdA, clientBAddr,...);

为什么它需要知道诸如NATPortA和NATPORTB之类的信息?如果clientA和clientB不关心NATA和NATB有什么问题吗?

共有1个答案

元阳荣
2023-03-14

既然这个帖子重新开通了,直到现在还没有人留下答案,我想根据这篇文章自己来回答:通过网络地址翻译器对等通信

关于Q1,是的。如果没有穿孔之类的机制,路由器将丢弃一方用于与另一方同步的数据包。

关于Q2,不完全是。监听插座不能直接工作。你还需要别的把戏。

 类似资料:
  • 问题内容: 奇怪的是: 似乎或多或少被定义为。通过这种方式很容易产生错误: 一些fname意外地以else块结尾。修复很简单,我们应该改用它,但是从表面上看,这似乎是一种不错的pythonic方式,并且比“正确”的方式更具可读性。 由于字符串是不可变的,所以为什么字符串错误是什么技术细节?什么时候进行身份检查更好,什么时候进行平等检查更好? 问题答案: 据我所知,检查对象身份是否相等。由于没有强制

  • 问题内容: 我有一个将客户发送到另一个站点来处理付款的应用程序。客户之外的另一个站点在我们的服务器上调用一个页面,让我们知道付款的状态。被调用页面会检查付款应用程序提供的参数,并检查我们是否知道该交易。然后,它更新数据库以反映状态。这一切都无需与客户进行任何互动即可完成。 我个人选择将此功能实现为JSP,因为将文件拖放到文件系统中比编译和打包文件然后将条目添加到配置文件中要容易得多。 考虑到页面的

  • 我对NAT表的理解是 NAT表仅映射(专用IP:端口)->(公用IP:端口) 它不关心协议或套接字连接 主机A关闭套接字并在同一本地端口(100)上打开新监听套接字 但这没用!我发现了其他复杂的实现,但我很好奇这种方式有什么问题。

  • 问题内容: 我怎么能说: 为什么函数调用中不需要括号,而最后一行呢? 问题答案: 是一个功能 调用该函数并产生该函数返回的任何值。 setTimeout的目的是在一段时间后运行代码。你需要的功能只是传递给它(这样的setTimeout可以自称在适当的时候函数),因为如果你将它传递给setTimeout的前调用的函数(用括号),将执行 现在 而不是1秒后,。

  • 一般来说,当发现 CPU 的占用率和实际业务应该出现的占用率不相符,或者对 Nginx worker 的资源使用率(CPU,内存,磁盘 IO )出现怀疑的情况下,都可以使用火焰图进行抓取。另外,对 CPU 占用率低、吐吞量低的情况也可以使用火焰图的方式排查程序中是否有阻塞调用导致整个架构的吞吐量低下。 常用的火焰图有三种: lj-lua-stacks.sxx 用于绘制 Lua 代码的火焰图 sam

  • 问题内容: 当我尝试按照本指南进行SQLAlchemy Relation Example时:基本关系模式 我有这个代码 它运作良好,但是在指南中,该模型应为: 为什么我不需要或在我的示例中?什么时候应该使用其中一个? 问题答案: 如果使用,则无需在第二个表上声明关系。 如果 不 使用,并分别定义,则如果不使用,则sqlalchemy将不知道如何连接关系,因此修改一个也将修改另一个。 因此,在您的示