TCP长链接问题

今天看到一关于Android推送实现的文章,想记录下来

 

因为是一片关于一个服务推广的广告文章,所以地址就不给出来了。

 

摘“为了解决数据同步的问题,在手机平台上,常用的方法有2种。一种是定时去服务器上查询数据,也叫Polling,还有一种手机跟服务器之间维护一个 TCP 长连接,当服务器有数据时,实时推送到客户端,也就是我们说的 Push。”

 

在做过的项目中需要使用一个远程的链接,链接进入局域网中进行远程的管理。实现的功能很简单,所以想都没想就使用UDP实现了,但一实验发现问题的所在。。。UDP在NAT的环境中通信会有问题的。

 

忙乎了一个晚上才把UDP的换成TCP的链接,这样就OK了

 

这样做是因为TCP链接可以穿越NAT,与外部建立一个通信通道进行数据传输,也就是所谓的TCP长链接。

 

之所以TCP能有长链接而UDP没有首先是因为TCP是面向链接的,而UDP则不是,其实还有一个重要的角色发挥着重要的作用,那就是NAT。

 

因为TCP面向链接的特性使得NAT会为TCP的链接保持一个地址端口缓存,TCP的链接可以通过这个缓冲顺利的与外网通信而不受NAT的阻拦。

 

UDP是非面向链接的,所以NAT不会为UDP保持一个地址端口缓存,UDP出去容易,但再进来则就不可能了。

 

当然,一个TCP的链接不可能无限制的一直存在着,比如程序异常关闭链接,NAT缓存清理等等,这些都会导致TCP链接的断开,这些就需要一个轮询的机制,保证链接一直存在着,达到所谓的“TCP长链接”

 

其实这也算是一种NAT穿越技术了。

 

 

 

你可能感兴趣的:(tcp,UDP)