首页 » tcp » 对于TCP的一些理解

对于TCP的一些理解

 

最近在做网络流量优化,对于TCP的一些知识开始恶补
1.连接 断开,这些课本上一直反复强调,三次握手,四次挥手就没什么好说了
2.心跳机制,这部分以前都没怎么注意过,做移动端的时候开始注意这个问题,一般正常的关闭程序是会自动触发TCP的关闭的,但是一些意外情况就没法检测到了,还好,TCP自己有个keepalive机制,centos系统参数在/etc/sysctl.conf里面,相关参数三个

tcp_keepalive_time
the interval between the last data packet sent (simple ACKs are not considered data) and the first keepalive probe; after the connection is marked to need keepalive, this counter is not used any further

tcp_keepalive_intvl

the interval between subsequential keepalive probes, regardless of what the connection has exchanged in the meantime

tcp_keepalive_probes

the number of unacknowledged probes to send before considering the connection dead and notifying the application layer

第一个参数为:闲置TCP时间,即只有闲置超过这个时间范围的TCP才会被系统去检测,默认为两个小时
第二个参数:检测周期 超过第一个参数的TCP连接将接受检测,每隔 一个检测周期 去检测一次,默认75秒
第三个参数:机会次数 检测周期超过这个次数,就会被服务器认为TCP连接死掉,释放。

不过现在的推送服务器一般都会再做一个TCP 心跳监测机制,灵活,可控
3.对心跳的一些抓包

客户端对服务器心跳是通过发送一条TCP交互,正常的情况下,客户端 发送 psh&&ack 到服务器,然后服务器再返回psh&&ack,然后客户端响应ack,一来一回,消耗了将近200bytes的流量,所以这个心跳不能太频繁,后来又查找资料,google的心跳时间是1680s(实际中都是黑色的不可达包,被和谐了),微信的心跳300秒(实测不到300秒,270秒就跳了,300秒是中国2G网络的一个闲置TCP上限)。

还有微信的心跳报只有一个SSL 的 continuation data包,只有82bytes,探索实现方式中。

引用:
http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/

原文链接:对于TCP的一些理解,转载请注明来源!

0