套接字如何通过无线连接工作?


15

我只在使用Android的客户端(特别是移动)应用程序上工作,其中所有网络都是使用框架提供的组件(如HttpUrlConnection)在HTTP层进行处理的。

但是推送消息系统(如Websockets / XMPP等)都保持与服务器的持久连接。甚至包含在支持Google Play的设备中的Google GCM都可以保持与服务器的持久连接。

我的问题是,如何在不耗尽电池的情况下工作?如果我们依次发出连续的HTTP请求,则电池电量将大量消耗。如何在不遇到相同问题的情况下维持这些持久连接?


您对套接字或Web套接字有疑问吗?那是两件事。
svick 2014年

@svick我的问题与套接字有关。
Vinay S Shenoy 2014年

Answers:


23

打开的TCP连接是一种逻辑状态。这并不意味着总是来回发送数据。初始三向握手后,您已进入“已连接”状态。您处于这种状态,直到发生三向断开连接或保持活动失败。

在连接的生命周期内,可以建立来自底层“物理”介质的资源以进行该连接的数据传输。对于有线连接,这是在周围传输以太网帧的问题。在3G / 4G无线连接的情况下,可以通过根据需要与较低层协议建立连接来实现。

因此,在连接的整个生命周期中,不存在物理的基础数据连接。相反,它处于休眠状态,等待TCP连接中的任何对等点需要发送数据。

另一个问题是TCP 基于ack。TCP对等方可以非常有效地使彼此了解已明确收到的内容。失败时,TCP将重新传输。这对于相当可靠的物理链接很有用,但在诸如无线连接之类的嘈杂/断开的链接中往往会崩溃。您可以想象,在这些环境中,ack / retransmissions会非常频繁地发生。

因此,通常,基础无线协议会尽其所能减少对TCP重传的需求。例如,无线层内置了许多错误检查功能。无线领域(基站/电话)中的对等方还使用基于nak的协议来告知对方何时收到任何信息。被NAK以减少检查错误(我们假设样样精,除非对方称它不是)的开销。它还有助于解决错误之前它们冒泡到TCP层-从而避免了很多TCP重传的尝试。而且,它减少了向无线对等方的任何重传范围-电话不需要再向Internet上的服务器询问数据包,只需通过无线链路向基站询问。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.