TCP长连接与NAT超时
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超时相关推荐
- 网络:tcp长连接与短连接
当网络通信采用tcp协议时,在真正的读写操作之前,sever与client之间必须建立一个连接,当读写操作完成之后,对方不再需要这个连接时他们可以释放这个链接,连接的连接需要三次握手,释放需要四次握手 ...
- TCP长连接与短连接、心跳机制
转自: 1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是 ...
- TCP握手机制、TCP长连接和短连接、TCP 保活机制 、心跳机制
参考: https://www.cnblogs.com/Andya/p/7272462.html 1. TCP连接(3次握手建立连接.4次挥手关闭连接) 当网络通信时采用TCP协议时,在真正的读写操作 ...
- TCP长连接实践与挑战
本文介绍了tcp长连接在实际工程中的实践过程,并总结了tcp连接保活遇到的挑战以及对应的解决方案. 作者:字节跳动终端技术 --- 陈圣坤 概述 众所周知,作为传输层通信协议,TCP是面向连接设计的, ...
- TCP长连接与短链接
1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次 ...
- TCP长连接和短连接
2019独角兽企业重金招聘Python工程师标准>>> 1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操 ...
- java mina长连接短连接_MINA实现TCP长连接(四)——断开重连
前言 今天涉及以下内容: mina官网及实现客户端需要的jar包 客户端实现重连接涉及到的几个类 重连接在Activity中的使用 效果图和项目结构图 重连接涉及到的类源码 先来波效果图 image. ...
- TCP长连接与短连接的区别(转)
1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次 ...
- TCP长连接,短连接
1. TCP短连接 我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接.client向server 发送消息,server回应client, ...
最新文章
- 2022-2028年中国饮水机市场投资分析及前景预测报告
- 真赞!IDEA中这么玩MyBatis,让编码速度飞起!
- zabbix企业应用之报表功能
- 用 Arthas 神器来诊断 HBase 异常进程
- oracle 12c chad,ORACLE 12.2RAC之问题 ora.chad OFFLINE
- WatchOS系统开发大全(7)-WKInterfaceImage
- atoi函数_吊打面试官 | 腾讯经典考点写代码实现atoi函数
- Pearson相关系数
- 在线VS Code阅读源码神器 github1s
- [Oracle]使用非滚动游标
- java 反射解读理解
- python 对目录下文件过滤删除
- linux单片机烧录软件下载,在Linux下烧录51单片机
- setPositiveButton和setNegativeButton和setNeutralButton
- 《生物信息学:导论与方法》--本体论、分子通路鉴定--听课笔记(十八)
- MikTex中如何使用BibTeX添加参考文献
- Typora如何将图片使用相对路径保存到统一文件夹中(解决.md文档传输丢图片的方法)
- android/IOS NTP 获取在线的GMT 网络时间
- JavaSE自学笔记013_Real(抽象类、接口、两种设计模式)
- 计算机专业二本可以考cfa,计算机专业备考CFA一年经验分享
热门文章
- 网格布局中 grid-template
- 怎样的目标管理能真正实现目标?做到这3点就对了
- css !important的用法
- 在CentOS上安装Xfce
- avalonia 控件DataGrid
- H3C 交换机使用ACL限制非法用户通过Telnet登录控制台
- 绘制文字(QFont字体)
- AVPlayer自定制视频播放器(1)——视频播放器基本实现
- php Sign in with Apple(苹果授权登录PHP后端接口)
- 苹果12app显示服务器无响应,苹果iPhone12变卡或APP卡死怎么办 iPhone卡顿原因及解决方法...