【问题标题】:Is inbound traffic allowed on open sockets?打开的套接字是否允许入站流量?
【发布时间】:2020-12-17 03:11:04
【问题描述】:

ISP 倾向于阻止所有入站流量。如果我在与远程服务器初始握手后保持套接字处于活动状态,并且协议对套接字可以保持打开的时间没有任何限制,该怎么办。服务器可以在不需要客户端首先发送请求的情况下向我发送流量吗?我在某处读到这就是推送服务器的工作方式。但我很困惑这是怎么可能的。套接字不只是两个端点(客户端和服务器)分配的资源吗?我的 ISP 应该如何知道有关打开的连接的任何信息,以免在中间丢弃入站流量?

【问题讨论】:

  • 如果 ISP 阻止所有入站流量,您的互联网连接将完全无用。离题。
  • "ISP 倾向于阻止所有入站流量" - 如果 ISP 阻止所有入站 流量,那么大多数 Internet 协议都会中断,因为服务器不会能够将响应发送回在 ISP 客户机器上运行的客户端。 ISP 通常会阻止入站连接,这样客户就不会运行自己的服务器,除非他们为该功能支付额外费用。

标签: sockets networking network-programming firewall communication


【解决方案1】:

ISP 倾向于阻止所有入站流量。

这通常不是真的。但通常情况下,NAT(网络地址转换)涉及将多个内部 IP 地址映射到单个公共可见 IP 地址。由于 NAT 的工作方式,它会隐式阻止入站流量,因为它找不到匹配的 NAT 状态。

NAT 几乎总是在家庭路由器上完成,也可能在 ISP 上完成(CGNAT - 运营商级 NAT)。

我的 ISP 应该如何知道有关打开的连接的任何信息,以免在中间丢弃入站流量?

ISP(在 CGNAT 的情况下)和您的家庭路由器有一个状态表,它将内部连接(在 NAT 之前)与重写的连接(在 NAT 之后)相匹配。如果数据来自互联网,它将尝试将这些映射到状态表并重写数据包。如果不存在状态,则丢弃数据包。

如果我在与远程服务器初始握手后保持套接字处于活动状态,并且协议对套接字可以保持打开的时间没有任何限制,该怎么办。服务器可以在不需要客户端先发送请求的情况下向我发送流量吗?

即使端口实际上被外部发起的连接阻塞,通常也可以从内部发起任意连接。那些已经建立的,可以发回任何数据。这是通过一种类似于 NAT 但没有实际地址转换的技术来实现的 - 有状态防火墙。

您提到的请求和响应模式实际上更特定于 HTTP 等协议,但其他协议(如 SSH、WebSockets 等)无论如何都不会使用这种方法。

无论是使用 NAT 还是使用状态防火墙,您都必须确保不删除统计信息。在某些(特定于设备的)不活动超时后删除状态,一旦完成,将不会转发入站数据。通过发送实际的应用程序数据或使用 TCP 保持活动(这是一个没有应用程序数据的心跳)来保持打开状态。

【讨论】:

  • 在 SIM 卡上运行的设备怎么样?他们不依赖家用路由器。
  • @Devashish:“在 sim 卡上运行” - 我假设您的意思是使用移动网络的设备。 CGNAT 在那里实现是很常见的。
  • 请注意,如果您有 IPv6,那么您可能没有 NAT。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
  • 2012-10-24
  • 2013-06-12
  • 2012-08-26
  • 1970-01-01
相关资源
最近更新 更多