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 ...
随机推荐
- cadence异型孔
1:画route path的边框,画在board geometry的ncroute_path层上,可以用zcopy (暂时没用过) 没有的话可能:WARNING: No route path ...
- UTF编码问题小结
在编程当中经常出现乱码的问题,而由此一般会引发很多惨剧,如读文件不成功.用户名显示乱码等,所以端午节抽了一小点时间好好看了一下编码问题,以备遗忘. 首先是中文编码,除了台湾和香港常用的BIG5,国内大 ...
- 圆内,求离圆心最远的整数点 hiho一下第111周 Farthest Point
// 圆内,求离圆心最远的整数点 hiho一下第111周 Farthest Point // 思路:直接暴力绝对T // 先确定x范围,每个x范围内,离圆心最远的点一定是y轴两端的点.枚举x的范围,再 ...
- 《GettingThingsDone》--GTD学习笔记(二)-GTD实践指导
一.准备阶段的建议: 高级的工作管理方法就是学会一套系统并付诸实施,直到将这套系统和方法融入你的工作和生活中. 通过行动使自己感觉良好,要比通过使自己感觉良好而进入一种较佳的行动状态容易的多. 当你在 ...
- 怎么在 html 中 动态的加载一个 script
var script = document.createElement( 'script' );script.type = 'text/javascript';script.src = bodyStr ...
- 第二百六十三天 how can I 坚持
今天解脱了,放下了,小罗娜,不给力,话说下一步该咋办呢. 鱼不想过双十一自杀了.这都二十二号了,好快. 该把给罗娜说的那些话保存下来.可惜已经删了. 不知道做的对不对,反正就是没缘分,就这样吧. 睡觉 ...
- Linux cat命令参数及使用方法详解
cat是Linux系统下用来查看文件连续内容用的指令,字面上的含意是“concatenate”(连续)的缩写.除了用来作为显示文件内容外,cat指令也可用于标准流上的处理,如将显示的信息转入或附加另一 ...
- work_1
Github的用户名为heiheitian 教科书:代码大全第2版 重构 一维最大子数组之和: #include<stdio.h>void MaxSumSonArrays(int a[], ...
- ocp 1Z0-051 141-175题解析
141. View the Exhibitand examine the structure of CUSTOMERS and GRADES tables. You need to displayna ...
- 【转】强大的vim配置文件,让编程更随意
原文地址:http://www.cnblogs.com/ma6174/archive/2011/12/10/2283393.html 花了很长时间整理的,感觉用起来很方便,共享一下. 我的vim配置主 ...