我编写了一个 Java 服务器来监听端口 49474。我的客户端运行在全美各地的 Android 手机上。当然,它们会从各种网络进行连接:家庭、工作、学校、图书馆、麦当劳。服务器和客户端之间的通信通过 Java 套接字传输原始 JSON。
有人告诉我,我必须使用端口 80 或 443,并且我的流量必须是实际的 HTTP 流量,否则路由器/防火墙将检测到我的流量不是 HTTP 流量并将其丢弃。
网络管理员阻止与我的端口范围内的端口连接的情况有多常见?
另外,如果我只是将端口号切换为 443,路由器/防火墙是否会检测到我的流量不是 HTTP 流量并且甚至在知名端口上进行阻止?
答案1
网络管理员是否会阻止流向不太知名的端口的传出流量?
是的。大多数情况下管理网络可能会有防火墙限制出口流量以遵守当地政策并防止滥用。实际配置会有所不同,但您不能普遍依赖不常见的端口开放。
另外,如果我只是将端口号切换为常用端口号(例如 80 或 443),路由器/防火墙是否会检测到我的流量不是 HTTP(S) 流量并阻止它?
甚至常见的端口号也可能被阻止,用户通过代理服务器它将能够辨别有效的 HTTP 请求。
当 Web 端口实际打开且可以直接访问互联网时,防火墙仍然可以使用深度数据包检测仅允许通过 HTTP 端口使用有效的 HTTP,尽管我的印象是 DPI 并不像代理服务器那么常见。
推荐:当您为服务器使用通用的 Web 端口时,您将拥有最大的可移植性,并且您的应用程序应该遵守代理设置并使用 HTTP(S)。
答案2
简短的回答是这取决于. 与邮件服务器一样,接受哪些流量、拒绝哪些流量均由远程网络管理员决定。
确实有些网络不允许从内到外的任意连接。我根据客户端的安全需求设置了允许和不允许的连接。
如果您的流量可以合法地通过 HTTP/HTTPS 处理(您说它是 JSON,但如果我没记错的话,JSON 是一种内容协议,而不是传输协议)并且服务器在端口 80/443 上运行,那么您将最大限度地提高人们访问您服务器的机会。如果您远离标准端口,那么能够访问您的客户端就会减少。如果您在标准端口上运行非标准协议,那么能够访问您的客户端就会减少。
你真正想知道的是部分无法联系到你的客户,我不知道有任何已发表的研究对此进行量化。但目前我看不出你有任何理由不是使用标准传输协议在其标准端口上运行此服务,并且除非您证明您有这样的正当理由,否则不遵守标准是愚蠢的。