OpenVPN中的几个和连接相关的Timer解析
在OpenVPN中存在几个计时器,这些计时器限制着OpenVPN的一些特定行为的最长持续时间,如果设置不好,就会带来莫名其妙的断线问题,然而如何设置这些计数器也没有一个通用的方案,特定情况下不能太大也不能太小。
1.ping
该计时器定义了发送PING包的间隔(为了和ICMP ping区分,使用大写,以下使用小写),ping包的发送是一种保活机制,另外也是为了刷新状态防火墙的连接跟踪状态。
2.ping-restart
该计时器定义了在多久内没有收到对方发来的ping包就reset连接,曾经正常接收但是突然没收到对端的ping要么因为对端已死掉不发ping了,要么是因为ping包在路上丢失了,要么就是这个ping-resatrt时间小于一个RTT的一半。
3.hand-window
该计时器限制了一次密钥协商持续的最长时间,如果该时间段内密钥协商没有成功,就会reset掉该SSL连接,然而并不是马上行刑,之前上一次协商好的密钥还能用一段时间,用多久呢?用tran-window参数指示的这段时间,如果在这段时间内,重新发起了密钥协商并且成功,SSL连接就不会被reset。
4.tran-window
该计时器限制了一次密钥协商成功的密钥在新的密钥协商开始后还能使用多久,在这段时间内如果密钥协商不成功,那么老的密钥依然可用。这样的话,密钥重协商就可以和隧道数据的传输同时进行,因为即使在密钥协商的时候,也还是有一个老的密钥可以用的,这样就实现了密钥的平滑过渡。
5.tls-timeout
该计时器定义了一个控制通道的包在没有收到ACK时,重新发送的间隔,如果定义过大,一旦发生丢包-包括原始包丢失以及ACK丢失,将可能带来握手超时以及密钥协商在hand-window内超时,如果定义过小-明显小于一个RTT,将会造成频繁重发引发蝴蝶效应-网络拥塞。
6.ping-timer-rem
这并不是一个计时器,它只是规定了ping-restart的行为而已,也就是说,设置了这个参数后,只有对端实际上已经接入的情况下,才会在ping-restart计时器到期后执行restart操作,这个配置参数避免了双方僵持状态下分别restart对端的情况:
client restart -------------------------- server 正常,没发现
client 重连 -------------------------- server 等待client ping
client 重连成功 -------------------------- server ping-restart到期,restart
如果设置了ping-timer-rem,那么server端只有在client端的socket没有关闭的情况下才会restart该client。
7.总结
数据通道
其中1,2计时器通过数据通道的保活来保证随到可用,另外持续的ping也能持续激活刷新途经的状态防火墙的连接状态使之不过期
控制通道
其中3,4计时器通过限定密钥协商的时间以及密钥平滑过渡的时间来保证SSL控制通道连接的有效性。在OpenVPN的实现中,ssl.c中分别定义了TM_SIZE种session,用于密钥的平滑更新与移交。
reliable层
其中的5计时器影响了reliable层的行为,如果定义了预编译宏EXPONENTIAL_BACKOFF,它甚至影响了reliable层的退避重传算法。
OpenVPN中的几个和连接相关的Timer解析的更多相关文章
- c++使用mysql的api连接相关问题
记录一下自己使用中的相关问题,方便有相同问题的同学解决. 关于在VS中的各种配置.看这里.只是须要注意一下,我如今用的mysql版本号是5.6的,已经没有[MySQL Server \lib\opt] ...
- mysql和连接相关的timeout
MySQL和连接相关的timeout 今天同事问为什么查询mysql库时, 在数据量比较大时,会话总断.刚开始以为是mysql的和连接有关timeout的问题,结果是网络的不稳定的原因. 下面总结下和 ...
- win7中 SQL server 2005无法连接到服务器,错误码:18456
win7中 SQL server 2005无法连接到服务器,错误码:18456.. 数据库刚装完.我用Windows登陆 结果登陆不上去.. 选中SQL Server Management Stud ...
- Zend_Frameowrk中进行多语言国际化的相关的配置和使用
在使用Zend_Framework建立网站,若网站在以后的使用中面向国际,这时就需要实现网站的多语言国际化问题.使用Zend_Framework开发的网站需要进行多语言的开发时,就需要用到了Zend_ ...
- 【转贴】gdb中的信号(signal)相关调试技巧
一篇不错的帖子,讲的是gdb中的信号(signal)相关调试技巧 转自Magic C++论坛 http://www.magicunix.com/index_ch.html http://www.m ...
- 在 Intellij 中设置集成 Jenkins 服务器连接
如何在 Intellij 中设置集成 Jenkins 服务器连接 在Intellij中可以很方便的设置Jenkins服务器,不用登录到浏览器中,在Intellij中即可浏览所有job,开发plugin ...
- SqlServer 连接 相关。
sqlserver数据库连接池是一个客户端的东西.和sql server服务器无关. 各种provider默认的连接池大小不同. 比如:Ado.NET 中sqlserver 连接池默认的值是100. ...
- JAVA中通过Jedis操作Redis连接与插入简单库
一.简述 JAVA中通过Jedis操作Redis连接与插入简单库 二.依赖 <!-- https://mvnrepository.com/artifact/redis.clients/jedis ...
- IdentityServer4 中文文档 -2- (简介)相关术语
IdentityServer4 中文文档 -2- (简介)相关术语 原文:http://docs.identityserver.io/en/release/intro/terminology.html ...
随机推荐
- C++ 编程第二章小结
switch()用法的注意事项 1:switch语句中的表达式只能是整形数据,字符型数据和枚举型数据,case后面的产量表达式的类型必须与switch括号后面的类型相匹配 2:各个case(包括def ...
- 《浅析各类DDoS攻击放大技术》
原文链接:http://www.freebuf.com/articles/network/76021.html FreeBuf曾报道过,BT种子协议家族漏洞可用作反射分布式拒绝服务攻击(DRDoS a ...
- Linux性能监控之Memory篇
首先说说虚拟内存和物理内存: 虚拟内存就是采用硬盘来对物理内存进行扩展,将暂时不用的内存页写到硬盘上而腾出更多的物理内存让有需要的进程来用.当这些内存页需要用的时候在从硬盘读回内存.这一切对于用户来说 ...
- Android相关图书推荐
疯狂Android讲义(第3版 附光盘) 作 者 李刚 著 出 版 社 电子工业出版社 出版时间 2015-06-01 版 次 3 页 数 780 印刷时间 2015-0 ...
- 某酒店2000W数据
某酒店2000W数据 2000万开房信息 [某酒店2000w数据 ct2000(解压密码:sjisauisa是就数据8很舒适好sjjss).rar] 国内安全漏洞监测平台乌云(WooYun.org)近 ...
- Java出现No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing
Java出现No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing ...
- 【Hadoop学习】HDFS中的集中化缓存管理
Hadoop版本:2.6.0 本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接: http://www.cnblogs.com/zhangningbo/p/4146398.html 概述 ...
- UVALive 7457 Discrete Logarithm Problem (暴力枚举)
Discrete Logarithm Problem 题目链接: http://acm.hust.edu.cn/vjudge/contest/127401#problem/D Description ...
- HDU 5680 zxa and set (数学 推导结论)
zxa and set 题目链接: http://acm.hust.edu.cn/vjudge/contest/121332#problem/G Description zxa has a set , ...
- jstat用法
jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具.它可以显示本地或者远程虚拟机进程中的类装载.内存.垃圾收集.JIT编译等运行数据 ...