【发布时间】:2013-05-28 10:35:32
【问题描述】:
在开始一个网络项目之前,我正在尝试完全理解 TCP/UDP 协议。
假设我有一个 TCP 服务器。我知道如果我想通过 Internet 与某人通信,我需要打开我的侦听端口:路由器/防火墙让它通过并将其重定向给我。
一个 TCP 客户端正在连接到我,现在两个系统之间有一个绑定的套接字。但是如果这个端口被阻塞,服务器如何向客户端发送数据:
端口是动态选择的,防火墙/路由器如何知道它需要允许来自我的服务器的数据,是因为我已经向它发送了一些东西并且现在知道存在某种连接吗?
如果是,是否意味着对于 UDP,两台机器都需要解锁端口?
【问题讨论】:
-
好吧,在客户端告诉他他在哪里之前,服务器永远不知道客户端在哪里。客户端知道服务器在哪里(IP 地址),因此他应该将他的位置传达给服务器。因此,服务器可以向客户端发送数据的唯一方法是让他知道客户端在哪里,要么是因为客户端告诉了他,要么是因为他已经知道了他的位置。客户端可能使用不同的协议/端口组合将其位置传达给服务器。 (这主要是一种预感/想法..)
-
我完全同意。但是防火墙/路由器呢?为什么监听服务器被阻止而不是客户端?
-
可能是因为端口被阻止进入连接。
-
TCP Hole Punching的可能重复
-
这是我的问题的答案,而不是问题本身。不过谢谢,这很有趣。
标签: sockets networking network-programming