我刚刚测试了 udp 发送器/接收器代码,但我不太理解端口转发。
A我的电脑是否处于非端口转发网络中,并且乙是我的 vps 上的一个 UDP 服务器,它是端口转发的。
- 情况1:
A 开始监听端口上的 udp 数据包X. VPS(B)从端口发送数据包是但是 A 没有收到它们,因为它没有端口转发。
- 情况 2:
但是当 A 向服务器(B)发送某些内容并且服务器响应时,我就会得到响应。为什么这不需要端口转发?
A 可能位于具有多个连接设备的 LAN 中。路由器如何知道在情况 2 中数据包必须转发给 A,而在情况 1 中则不必转发?
答案1
A 可以位于具有多个连接设备的 LAN 中。路由器如何知道在情况 2 中数据包必须转发给 A,而在情况 1 中则不必?
由于路由器、防火墙和使用NAT(网络地址转换)有一个 NAT 表,用于跟踪将被 NAT 并发送到目的地的传入数据包。
NAT 表包括源设备 IP 地址、端口号和协议(TCP/UDP)。因此当A确实发送数据包到乙(vps),NAT 设备会在 NAT 表中添加一条记录,这样当数据包从乙,它读取目标 IP、端口和协议,并尝试在 NAT 表中找到匹配项,然后将响应 NAT 回服务器A。
A 开始在端口 X 上监听 udp 数据包。vps(B)从端口 Y 发送数据包,但 A 无法收到这些数据包,因为它没有端口转发。
服务器A不会收到数据包,因为它会被路由器丢弃。因为没有端口转发,NAT 表不包含与目标 IP、端口和协议匹配的记录。
当你的设备位于防火墙或路由器后面,并且你正在使用 NAT 时,你需要使用端口转发,以便路由器知道从乙包括目标 IP 地址、端口号和服务器协议A,需要转发到服务器A,且未被丢弃。
我希望我回答了你的问题。
答案2
A开始对话乙。 但乙无法开始对话A。
一次A已经开始与乙,乙可以回应那个对话。但他仍然无法开始一个A。
技术性更强
和A您正在启动 UDP 套接字。一旦该 UDP 套接字启动,A可以发送包裹到乙和乙可以通过将响应写入套接字来对其进行响应。A然后读取响应。 乙无法交谈A因为A不允许它与它们启动套接字。
他怎么知道是你?嗯乙不知道你是谁。路由器只是跟踪套接字关联,这导致A。
这很像你浏览网页时的情况。你正在下载文件并查看它们。你正在打开一个连接,然后下载文件。而不是相反。网络服务器只是响应你的请求。