在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. bzoj 2594 [Wc2006]水管局长数据加强版(LCT+最小生成树)

    [深坑勿入] [给个链接] http://blog.csdn.net/popoqqq/article/details/41348549 #include<cstdio> #include& ...

  2. poj2396 Budget(有源汇上下界可行流)

    [题目链接] http://poj.org/problem?id=2396 [题意] 知道一个矩阵的行列和,且知道一些格子的限制条件,问一个可行的方案. [思路] 设行为X点,列为Y点,构图:连边(s ...

  3. 在eclipse中配置spark 0.9.1源码的开发环境

    一.准备工作: 1.下载release版spark 0.9.1,本次用的版本是spark-0.9.1-bin-cdh4. 2.下载scala IDE 3.0.2,这个版本ide的支持scala 2.1 ...

  4. L0、L1与L2范数、核范数(转)

    L0.L1与L2范数.核范数 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化.我们先简单的来理解下常用的L0.L1.L2和核范数规则化.最后聊下规则化项参数的选择问题.这里因为篇幅比较庞大 ...

  5. pyinstaller使用小结

    安装pyinstaller pip install -U pyinstaller 生成控制台程序 pyinstaller ./example.py 在当前目录的dist文件夹内可以找到编译成功的程序 ...

  6. 为Hadoop配置Win8.1授时服务器

    启动Windows服务,顺序如下: SSTPS(secure socket tunneling protocol service)服务 Telephony服务 Remote Access Connec ...

  7. 探索ORACLE之ASM概念

    一.     ASM(自动存储管理)的来由: ASM是Oracle 10g R2中为了简化Oracle数据库的管理而推出来的一项新功能,这是Oracle自己提供的卷管理器,主要用于替代操作系统所提供的 ...

  8. JDBC学习笔记(9)——DBUtils的使用

    使用DBUtils提供的功能需要使用commons-dbutils-1.6.jar这个JAR包,在Apache官网可以下载到 使用DBUtils进行更新操 测试QueryRunner类的update方 ...

  9. InnoDB与MyISAM的区别

    MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处 ...

  10. HL7及PIX相关的测试工具

    最近在开发PIX项目时需要一些工具, 比如PIX各个Actor的测试工具, HL7消息的验证工具等等. 下面列下我找见的几个 必备工具. 1. http://hit-testing.nist.gov: ...