TCP长连接

  • TCP连接建立后只要不关闭,逻辑上连接一直存在。
  • TCP是有保活定时器的,可以打开保活定时器来维持长连接,设置SO_KEEPALIVE才会开启,时间间隔默认7200s,也就是2h,这个默认是关闭的。
  • HTTP中的keep-alive和TCP中的keepalive的原理不一样

NAT超时

因为 IP v4 的 IP 量有限,运营商分配给手机终端的 IP 是运营商内网的 IP,手机要连接 Internet,就需要通过运营商的网关做一个网络地址转换(Network Address Translation,NAT)。简单的说运营商的网关需要维护一个外网 IP、端口到内网 IP、端口的对应关系,以确保内网的手机可以跟 Internet 的服务器通讯。

大部分移动无线网络运营商都在链路一段时间没有数据通讯时,会淘汰 NAT 表中的对应项,造成链路中断。

长连接心跳间隔必须要小于NAT超时时间(aging-time),如果超过aging-time不做心跳,TCP长连接链路就会中断,Server就无法发送Push给手机,只能等到客户端下次心跳失败后,重建连接才能取到消息。

NAT设备会在IP封包通过设备时修改源/目的IP地址. 对于家用路由器来说, 使用的是网络地址端口转换(NAPT), 它不仅改IP, 还修改TCP和UDP协议的端口号, 这样就能让内网中的设备共用同一个外网IP. 举个例子, NAPT维护一个类似下表的NAT表:

内网地址 外网地址
192.168.0.2:5566 120.132.92.21:9200
192.168.0.3:7788 120.132.92.21:9201
192.168.0.3:8888 120.132.92.21:9202

NAT设备会根据NAT表对出去和进来的数据做修改,比如将192.168.0.3:8888发出去的封包改成120.132.92.21:9202,外部就认为他们是在和120.132.92.21:9202通信。同时NAT设备会将120.132.92.21:9202收到的封包的IP和端口改成192.168.0.3:8888,再发给内网的主机,这样内部和外部就能双向通信了,但如果其中192.168.0.3:8888 == 120.132.92.21:9202这一映射因为某些原因被NAT设备淘汰了,那么外部设备就无法直接与192.168.0.3:8888通信了。
  国内移动无线网络运营商在链路上一段时间内没有数据通讯后,会淘汰NAT表中的对应项, 造成链路中断。

心跳包

  • 心跳的原因:虽然理论tcp连接后一直不断,但实际上会断网。见:比如 NAT超时,更多
    影响TCP连接寿命的因素
  • 心跳包的主要作用是告知对方连接端,我还活着,心还在跳。
  • 心跳时长多少?
    现实是残酷的, 根据网上的一些说法, 中移动2/3G下, NAT超时时间为5分钟, 中国电信3G则大于28分钟, 理想的情况下, 客户端应当以略小于NAT超时时间的间隔来发送心跳包。
地区/网络 NAT超时时间
中国移动3G和2G 5分钟
中国联通2G 5分钟
中国电信3G 大于28分钟
美国3G 大于28分钟
台湾3G 大于28分钟

wifi下,NAT超时时间都会比较长,据说宽带的网关一般没有空闲释放机制, GCM有些时候在wifi下的心跳比在移动网络下的心跳要快,可能是因为wifi下联网通信耗费的电量比移动网络下小。

心跳包和轮询的区别

心跳包和轮询看起来类似,都是客户端主动联系服务器,但是区别很大:

  • 轮询是为了获取数据, 而心跳是为了保活TCP连接
  • 轮询得越频繁, 获取数据就越及时, 心跳的频繁与否和数据是否及时没有直接关系
  • 轮询比心跳能耗更高, 因为一次轮询需要经过TCP三次握手, 四次挥手, 单次心跳不需要建立和拆除TCP连接

参考:
关于TCP长连接,NAT超时,心跳包
NAT(Network Address Translation)
HTTP keep-alive和TCP keepalive的区别,你了解吗?
TCP中已有SO_KEEPALIVE选项,为什么还要在应用层加入心跳包机制??

TCP长连接与NAT超时相关推荐

  1. 网络:tcp长连接与短连接

    当网络通信采用tcp协议时,在真正的读写操作之前,sever与client之间必须建立一个连接,当读写操作完成之后,对方不再需要这个连接时他们可以释放这个链接,连接的连接需要三次握手,释放需要四次握手 ...

  2. TCP长连接与短连接、心跳机制

    转自: 1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是 ...

  3. TCP握手机制、TCP长连接和短连接、TCP 保活机制 、心跳机制

    参考: https://www.cnblogs.com/Andya/p/7272462.html 1. TCP连接(3次握手建立连接.4次挥手关闭连接) 当网络通信时采用TCP协议时,在真正的读写操作 ...

  4. TCP长连接实践与挑战

    本文介绍了tcp长连接在实际工程中的实践过程,并总结了tcp连接保活遇到的挑战以及对应的解决方案. 作者:字节跳动终端技术 --- 陈圣坤 概述 众所周知,作为传输层通信协议,TCP是面向连接设计的, ...

  5. TCP长连接与短链接

    1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次 ...

  6. TCP长连接和短连接

    2019独角兽企业重金招聘Python工程师标准>>> 1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操 ...

  7. java mina长连接短连接_MINA实现TCP长连接(四)——断开重连

    前言 今天涉及以下内容: mina官网及实现客户端需要的jar包 客户端实现重连接涉及到的几个类 重连接在Activity中的使用 效果图和项目结构图 重连接涉及到的类源码 先来波效果图 image. ...

  8. TCP长连接与短连接的区别(转)

    1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次 ...

  9. TCP长连接,短连接

    1. TCP短连接 我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接.client向server 发送消息,server回应client, ...

最新文章

  1. 2022-2028年中国饮水机市场投资分析及前景预测报告
  2. 真赞!IDEA中这么玩MyBatis,让编码速度飞起!
  3. zabbix企业应用之报表功能
  4. 用 Arthas 神器来诊断 HBase 异常进程
  5. oracle 12c chad,ORACLE 12.2RAC之问题 ora.chad OFFLINE
  6. WatchOS系统开发大全(7)-WKInterfaceImage
  7. atoi函数_吊打面试官 | 腾讯经典考点写代码实现atoi函数
  8. Pearson相关系数
  9. 在线VS Code阅读源码神器 github1s
  10. [Oracle]使用非滚动游标
  11. java 反射解读理解
  12. python 对目录下文件过滤删除
  13. linux单片机烧录软件下载,在Linux下烧录51单片机
  14. setPositiveButton和setNegativeButton和setNeutralButton
  15. 《生物信息学:导论与方法》--本体论、分子通路鉴定--听课笔记(十八)
  16. MikTex中如何使用BibTeX添加参考文献
  17. Typora如何将图片使用相对路径保存到统一文件夹中(解决.md文档传输丢图片的方法)
  18. android/IOS NTP 获取在线的GMT 网络时间
  19. JavaSE自学笔记013_Real(抽象类、接口、两种设计模式)
  20. 计算机专业二本可以考cfa,计算机专业备考CFA一年经验分享

热门文章

  1. 网格布局中 grid-template
  2. 怎样的目标管理能真正实现目标?做到这3点就对了
  3. css !important的用法
  4. 在CentOS上安装Xfce
  5. avalonia 控件DataGrid
  6. H3C 交换机使用ACL限制非法用户通过Telnet登录控制台
  7. 绘制文字(QFont字体)
  8. AVPlayer自定制视频播放器(1)——视频播放器基本实现
  9. php Sign in with Apple(苹果授权登录PHP后端接口)
  10. 苹果12app显示服务器无响应,苹果iPhone12变卡或APP卡死怎么办 iPhone卡顿原因及解决方法...