我注意到Google C2DM(推送)tcp连接使用端口5228.我也知道有些防火墙会阻止80 443以外的端口(因为htttp和https),导致很多用户抱怨他们不能例如,使用他们的公司wifi在手机上使用Market app或GTalk。
现在我的问题是:为什么谷歌没有选择端口443或80作为持久的TCP连接?
答案 0 :(得分:12)
我可以想到几个原因,谷歌可能选择使用5228而不是80或443。
首先,在大多数(但绝对不是全部)情况下,5228应该不是问题(即被阻止),因为推送通知主要在设备运行时使用。这意味着他们使用的手机数据连接不会阻止此端口,也不会使用防火墙。
其次,在可能存在防火墙的环境中(即,在公司内部具有WiFi),也可能以某种方式代理或控制http流量。 C2DM不依赖于标准HTTP协议,并且预计是长期连接。这意味着在80/443上运行它可能会在这些环境中引起问题。
第三,这些服务可能在C2DM发布之前使用了5228,并且没有明确的理由进行更改。
根据我的经验,我认为如果他们使用5228作为默认值并且在其他情况下试图回落到443会是理想的(因为肯定有很多场景,当5228不会时,443会起作用)。至少在443的情况下,数据的修改比在端口80上的可能性小,因为协议通常是加密的。但是,仍有可能在443上提前终止连接。但是,这种风险存在于任何网络环境中,并且尝试时不会出现故障。
另外,在443上启用C2DM可能比谷歌看起来更难,因为他们的分布式前端服务器可能知道如何专门处理80/443流量作为HTTP并且需要大量的重新启动 - 处理C2DM的工作。
答案 1 :(得分:1)
我怀疑他们想要获得其他东西的标准端口,这样他们就可以轻松监控C2DM流量的流量水平。
他们并不孤单,苹果公司的推送实施完全相同。