在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解析的更多相关文章

  1. c++使用mysql的api连接相关问题

    记录一下自己使用中的相关问题,方便有相同问题的同学解决. 关于在VS中的各种配置.看这里.只是须要注意一下,我如今用的mysql版本号是5.6的,已经没有[MySQL Server \lib\opt] ...

  2. mysql和连接相关的timeout

    MySQL和连接相关的timeout 今天同事问为什么查询mysql库时, 在数据量比较大时,会话总断.刚开始以为是mysql的和连接有关timeout的问题,结果是网络的不稳定的原因. 下面总结下和 ...

  3. win7中 SQL server 2005无法连接到服务器,错误码:18456

    win7中 SQL server 2005无法连接到服务器,错误码:18456.. 数据库刚装完.我用Windows登陆  结果登陆不上去.. 选中SQL Server Management Stud ...

  4. Zend_Frameowrk中进行多语言国际化的相关的配置和使用

    在使用Zend_Framework建立网站,若网站在以后的使用中面向国际,这时就需要实现网站的多语言国际化问题.使用Zend_Framework开发的网站需要进行多语言的开发时,就需要用到了Zend_ ...

  5. 【转贴】gdb中的信号(signal)相关调试技巧

    一篇不错的帖子,讲的是gdb中的信号(signal)相关调试技巧 转自Magic C++论坛  http://www.magicunix.com/index_ch.html  http://www.m ...

  6. 在 Intellij 中设置集成 Jenkins 服务器连接

    如何在 Intellij 中设置集成 Jenkins 服务器连接 在Intellij中可以很方便的设置Jenkins服务器,不用登录到浏览器中,在Intellij中即可浏览所有job,开发plugin ...

  7. SqlServer 连接 相关。

    sqlserver数据库连接池是一个客户端的东西.和sql server服务器无关. 各种provider默认的连接池大小不同. 比如:Ado.NET 中sqlserver 连接池默认的值是100. ...

  8. JAVA中通过Jedis操作Redis连接与插入简单库

    一.简述 JAVA中通过Jedis操作Redis连接与插入简单库 二.依赖 <!-- https://mvnrepository.com/artifact/redis.clients/jedis ...

  9. IdentityServer4 中文文档 -2- (简介)相关术语

    IdentityServer4 中文文档 -2- (简介)相关术语 原文:http://docs.identityserver.io/en/release/intro/terminology.html ...

随机推荐

  1. Oracle11g导入*.dmp数据文件

    imp命令导入数据:imp username/password@SID file=XXX.dmp fromuser=XXX touser=XXX tables=(XXX,XXX)  [ignore=y ...

  2. Java相关书籍推荐

    Java从入门到精通(第3版 附光盘) 作      者 明日科技 编 出 版 社 清华大学出版社 出版时间 2012-08-01 版      次 3 页      数 564 印刷时间 2012- ...

  3. 一起刷LeetCode2-Add Two Numbers

    今天看不进去论文,也学不进去新技术,于是先把题刷了,一会补别的. -----------------------------------------------------我才不是分割线------- ...

  4. SQL Server 跨库连接

    -- 开启组件 reconfigure reconfigure -- 关闭组件 reconfigure reconfigure -- 查询远程数据库 SELECT * FROM OPENDATASOU ...

  5. fx-experience-tools

    http://fxexperience.com/2012/03/announcing-fx-experience-tools/ I have some cool new stuff for you t ...

  6. Struts2的输入验证

    一.概述: ① Struts2的输入验证 –基于 XWorkValidation Framework的声明式验证:Struts2提供了一些基于 XWork Validation Framework的内 ...

  7. source insight 支持CC 文件

    今天开始阅读LevelDB的代码,用source insight建立工程,但其不支持cc后缀的C++文件. 找到这篇<source insight看cc文件> 解决的根本办法:Option ...

  8. HDU 5795 A Simple Nim (博弈 打表找规律)

    A Simple Nim 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5795 Description Two players take turns ...

  9. 面试之BI-SQL--table转换

    题目如下: Num 1 2 4 6 7 8 10 11 13 写条SQL语句转成下表: Column1  Column2 1              2 4              4 6     ...

  10. C语言经典算法100例(一)

    C语言中有有许多经典的算法,这些算法都是许多人的智慧结晶,也是编程中常用的算法,这里面包含了众多算法思想,掌握这些算法,对于学习更高级的.更难的算法都会有很大的帮助,会为自己的算法学习打下坚实的基础. ...