networking - 对称 NAT 穿越
问题描述
假设有 2 个对等点,A 和 B,每个都在一个对称 NAT 下,并具有随机端口分配。
如果 A 在特定端口上向 B 的地址发送数据包,则 NAT 会将请求映射到它的公共 IP 地址和随机端口。
A'private: A'public: B:
192.168.0.7:8000 --> 94.109.0.76:43576 --> 35.232.76.41:5000
如果 A 一直在同一端口上向 B 的地址发送数据包,则 NAT 将继续使用相同的 IP 地址和端口组合。
A'private: A'public: B:
192.168.0.7:8000 --> 94.109.0.76:43576 --> 35.232.76.41:5000
192.168.0.7:8000 --> 94.109.0.76:43576 --> 35.232.76.41:5000
192.168.0.7:8000 --> 94.109.0.76:43576 --> 35.232.76.41:5000
如果 A 决定在不同的端口向 B 的地址发送数据包,则 NAT 将随机分配另一个端口来发送数据包。
A'private: A'public: B:
192.168.0.7:8000 --> 94.109.0.76:43576 --> 35.232.76.41:5000
192.168.0.7:8000 --> 94.109.0.76:27650 --> 35.232.76.41:5001
当 A 向 B 发送一个数据包时,如果它是从 A 发送消息的端口发送的,并且如果它具有 A 的 NAT 映射的地址/端口作为目标,则 NAT 将允许来自 B 的回复通过。
A'private: A'public: B:
192.168.0.7:8000 --> 94.109.0.76:43576 --> 35.232.76.41:5000
B: A'public: A's private
35.232.76.41:5000 --> 94.109.0.76:43576 --> 192.168.0.7:8000
理论上,如果 A 在其每个端口 (0-65535) 上向 B 发送数据包,A 允许来自 B 的任何端口的回复通过,但只有当 B 向其中一个地址发送数据包时,回复才会通过/port 由 A 的 NAT 映射,同时发送 65535 个数据包。
如果 B 向 A 的每个端口 (0-65535) 发送数据包,B 很可能会设法找到 A 的 NAT 映射的端口之一,因此将通过 A 的防火墙。
这对你们有意义还是我错过了一点?我一直在尝试使用这种技术在对称 NAT 下连接 2 个对等点,但还没有成功。
解决方案
推荐阅读
- c# - 我正在尝试使文本框中的文本成为 SQL 命令,然后使用查询结果填充 datagridview
- javascript - 单击数组中的按钮时如何执行函数?
- javascript - 如何在每个新行的开头使用 > 将块引用的 innerHTML 更改为纯文本?
- python - 如何在 Visual Code 中激活 PyMongo Intellisense?
- c++ - 有人可以解释为什么这个程序可以计算小数点后的位数吗?
- php - 从 CSV 导入数据并将其插入 Mysql
- python - Python Flask 应用程序坚持在默认端口 5000 上运行,尽管尝试更改它
- c# - 统一添加到变换移动太远
- python - 如何拆分字符串并返回字符串的一部分
- apache-kafka - Kafka 实时流与微服务