![如果您阻止所有传入连接,您如何仍然使用互联网?](https://linux22.com/image/1444836/%E5%A6%82%E6%9E%9C%E6%82%A8%E9%98%BB%E6%AD%A2%E6%89%80%E6%9C%89%E4%BC%A0%E5%85%A5%E8%BF%9E%E6%8E%A5%EF%BC%8C%E6%82%A8%E5%A6%82%E4%BD%95%E4%BB%8D%E7%84%B6%E4%BD%BF%E7%94%A8%E4%BA%92%E8%81%94%E7%BD%91%EF%BC%9F.png)
如果您的 ISP 或防火墙阻止了所有传入连接,Web 服务器如何仍能将数据发送到您的浏览器?您发送请求(传出),服务器发送数据(传入)。如果您阻止了所有传入连接,Web 服务器如何响应?
那么使用 UDP 的视频流和多人游戏呢?UDP 是无连接的,因此无需建立连接,那么防火墙或 ISP 将如何处理?
答案1
“传入阻止”是指传入新连接被阻止,但已确立的允许流量。因此如果出站新连接是允许的,那么对话的传入部分就可以了。
防火墙通过跟踪连接状态来管理这一点(这种防火墙通常称为“状态防火墙”)。它看到传出的 TCP SYN 并允许它。它看到传入的 SYN/ACK,并可以验证它是否与它看到的出站 SYN 匹配,并让它通过,依此类推。如果它允许三方握手(例如,根据防火墙规则允许),它将允许该对话。当它看到该对话结束时(FIN 或 RST),它会将该连接从允许的数据包列表中删除。
UDP 的操作方式类似,尽管它涉及防火墙记住足够多的信息以假装 UDP 具有连接或会话(而 UDP 没有)。
答案2
@gowenfawr 给出了一个高层次的描述。不过,我想补充一些关于如何执行连接跟踪“匹配”的细节,因为对于外行来说,这可能听起来像魔术。
每个 TCP 连接都有各自的端口号。大多数技术人员都知道,HTTP 服务器在端口 80 上运行。当您的浏览器连接到 Web 服务器时,它会要求操作系统生成一个“本地”端口号,该端口号将是随机的,例如 29672,并且该计算机的任何其他 TCP 连接都不会使用该端口号(操作系统可以这样做是因为它知道所有活动的 TCP 连接)。然后,初始 TCP 设置数据包将从您的计算机的 IP(IP_YOURS)和端口号 29672 发送到 Web 服务器的 IP(IP_WEBSERVER)和端口号 80。此时,状态防火墙会说“啊哈,从 IP_WEBSERVER 端口 80 到 IP_YOURS 端口 29672 的未来数据包不是新连接,它们是对现有连接的响应,并且是允许的”。状态防火墙维护一个表,如果长时间没有看到任何数据包在任一方向传输,则该表的所有内容最终都会过期。
答案3
我猜防火墙只是为了阻止未经授权的传入连接。当您向 DNS 发送请求时,DNS 会回复,这不是未经授权的传入连接。
答案4
我不是在运行服务器,而是访问某些服务器。我希望连接更安全。我的想法是始终通过您指定的一个端口调用服务器。永远不要允许服务器调用您