如何通过网络允许/拒绝数据包[关闭]
Posted
技术标签:
【中文标题】如何通过网络允许/拒绝数据包[关闭]【英文标题】:How packet are allowed/denied over the network [closed] 【发布时间】:2013-05-28 10:35:32 【问题描述】:在开始一个网络项目之前,我正在尝试完全理解 TCP/UDP 协议。
假设我有一个 TCP 服务器。我知道如果我想通过 Internet 与某人通信,我需要打开我的侦听端口:路由器/防火墙让它通过并将其重定向给我。
一个 TCP 客户端正在连接到我,现在两个系统之间有一个绑定的套接字。但是如果这个端口被阻塞,服务器如何向客户端发送数据:
端口是动态选择的,防火墙/路由器如何知道它需要允许来自我的服务器的数据,是因为我已经向它发送了一些东西并且现在知道存在某种连接吗?
如果是,是否意味着对于 UDP,两台机器都需要解锁端口?
【问题讨论】:
好吧,在客户端告诉他他在哪里之前,服务器永远不知道客户端在哪里。客户端知道服务器在哪里(IP 地址),因此他应该将他的位置传达给服务器。因此,服务器可以向客户端发送数据的唯一方法是让他知道客户端在哪里,要么是因为客户端告诉了他,要么是因为他已经知道了他的位置。客户端可能使用不同的协议/端口组合将其位置传达给服务器。 (这主要是一种预感/想法..) 我完全同意。但是防火墙/路由器呢?为什么监听服务器被阻止而不是客户端? 可能是因为端口被阻止进入连接。 TCP Hole Punching的可能重复 这是我的问题的答案,而不是问题本身。不过谢谢,这很有趣。 【参考方案1】:我不完全理解它是如何工作的,但这就是我目前得到的:
-
服务器正在监听端口 X
客户端尝试在端口 X 上连接到服务器(生成随机端口 Y)
服务器现在可以在端口 Y 上响应客户端
端口 Y 保持开放,这要归功于 TCP 与 keep-alive 数据包。 防火墙/路由器让它“打开”了一段时间……几秒钟?因为他的网络有传出数据包(等待传入?)
这就是两个 UDP 客户端例如可以通信的方式: http://en.wikipedia.org/wiki/UDP_hole_punching
Skype 示例: http://www.h-online.com/security/features/How-Skype-Co-get-round-firewalls-747197.html
如果我错了或者你觉得你不太好,请纠正我。
谢谢
编辑
因此,NAT 路由器会保存有关哪台内部计算机与哪台外部计算机进行通信以及两者使用了哪些端口的表格。
这就是让防火墙“解锁”我们的端口的技巧。
【讨论】:
以上是关于如何通过网络允许/拒绝数据包[关闭]的主要内容,如果未能解决你的问题,请参考以下文章