影响TCP连接寿命的因素
NAT超时
大部分移动无线网络运营商都在链路一段时间没有数据通讯时,会淘汰 NAT 表中的对应项,造成链路中断。NAT超时是影响TCP连接寿命的一个重要因素(尤其是国内),所以客户端自动测算NAT超时时间,来动态调整心跳间隔,是一个重要的优化点。
下表列出一些已测试过的网络的NAT超时时间(更多数据由于测试条件所限没有测到):
地区/网络 |
NAT超时时间 |
中国移动3G和2G |
5分钟 |
中国联通2G |
5分钟 |
中国电信3G |
大于28分钟 |
美国3G |
大于28分钟 |
台湾3G |
大于28分钟 |
长连接心跳间隔必须要小于NAT超时时间(aging-time),如果超过aging-time不做心跳,TCP长连接链路就会中断,Server就无法发送Push给手机,只能等到客户端下次心跳失败后,重建连接才能取到消息。
DHCP的租期(lease time)
目前测试发现安卓系统对DHCP的处理有Bug,DHCP租期到了不会主动续约并且会继续使用过期IP,这个问题会造成TCP长连接偶然的断连。
1、 DHCP租期到了不会主动续约并且会继续使用过期IP,详细描述见http://www.net.princeton.edu/android/android-stops-renewing-lease-keeps-using-IP-address-11236.html。这个问题导致的问题表象是,在超过租期的某个时间点(没有规律)会导致IP过期,老的TCP连接不能正常收发数据。并且系统没有网络变化事件,只有等应用判断主动建立新的TCP连接才引起安卓设备重新向DHCP Server申请IP租用。
2、 未到租期的一半时间,安卓设备重新向DHCP Server申请IP租用。从目前测试结果来看,这种现象恢复的比较快。
3、 移动2G/3G,联通2G没有抓到DHCP。
4、 美国3G下抓取24小时,没有抓到DHCP。
网络状态变化
手机网络和WIFI网络切换、网络断开和连上等情况有网络状态的变化,也会使长连接变为无效连接,需要监听响应的网络状态变化事件,重新建立Push长连接。
最新文章
- javascript实现键盘自动打字效果
- Maven3路程(三)用Maven创建第一个web项目(2)servlet演示
- Apache 配置 Basic 认证
- 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案
- [ionic开源项目教程] - 第5讲 如何在项目中使用全局配置
- ProgressBarLayoutView
- [wikioi]拦截导弹
- TCP/IP的三次握手协议
- PHP学习笔记-4(时间戳)
- [国嵌笔记][005][Linux命令详解]
- CheckStyle
- 修改tomcatlog输出等级
- 生产环境CPU过高问题定位
- Android studio3.1.3 打包jar,混淆
- python 判断两个列表中相同和不同的元素
- Two Sum II - Input array is sorted
- js正则 - 正则判断是否为数字与字母的混合
- hdu5242 Game (贪心+dfs序)
- python-django-ORM,常用查询方式
- Vue.js 与 Laravel 分离
热门文章
- 百万级PHP网站Poppen.de的架构分享心得
- Android 使用 DownloadManager 管理系统下载任务的方法
- MJRefresh实现刷新(使用它的Block方法)
- 为什么java构造函数的构造器只能在第一行写this() 或者super() ?
- Android多线程更新UI的方式
- Apsara Clouder专项技能认证:实现调用API接口 (笔记)
- C从控制台(stdin)输入带空格的字符串到字符数组中
- WebService_使用三要素
- UVA - 11488 Hyper Prefix Sets(trie树)
- CF上的3道小题(1)