Linux虚拟网络之tun(四)虚拟VPN
来源:互联网 发布:三方博弈矩阵 编辑:程序博客网 时间:2024/05/22 14:11
学习了几天tun,突然想到前面几篇文章描述的应用场景,不就是跟vpn一样的原理吗?看看vpn的示意图:
按着这个思路一搜,发现了云风的mptun,大体框架如下(本文借用了这里 的一些图片和内容):
一、关于为什么VPN使用UDP而不是TCP
虽然VPN可以使用TCP,但是类似于OpenVPN都默认使用UDP传输,而不是TCP,因为使用tun接口实现VPN是把IP数据包发送出去,如果这个IP数据包里面包含的是一个TCP数据包,而我们在传输的时候也使用TCP传输的话,就相当于在TCP之上再构建了一个TCP层,遗憾的是这两个TCP层对于传输速度,丢包重发,时延等等处理都不同,可能导致整个VPN不可用,详细分析可以见: Why TCP Over TCP Is A Bad Idea
二、关于vpn的详细流程图
可以参考这里: http://www.cis.syr.edu/~wedu/seed/Labs/VPN/VPN.pdf
这里有两张图可以清晰的展示利用tun通信的网络传输:
三、测试和mptun的一些问题
在容器中测试了一下mptun,下载速率大约为24MB/s,我在前文Linux虚拟网络之tun(三) 中的代码在相同测试环境下可以达到约65MB/s 以上的速率。排除增加了加解密和多链路功能,mptun应该还是有一些可以改进的地方。
- 并发的不够。代码中有多个socket,虽然用了select,但是本质上并没有很好的并发,多核利用不足;
- 收发操作是串行的;
- 内存空间申请释放太频繁,每次收发包、加解密都存在内存空间的申请释放;
针对上面的问题,写一个golang版本的,应该效率会高一些。
四、golang版本的mptun
待补充。。。。。。
参考:
[1]: http://blog.chinaunix.net/uid-28587158-id-5193052.html 利用/dev/tun实现点对点VPN
- Linux虚拟网络之tun(四)虚拟VPN
- Linux虚拟网络之tun(一)基本使用
- Linux虚拟网络之tun(二)Raw包转发
- Linux虚拟网络之tun(三)隔离网络下的Raw转发
- LINUX 虚拟网卡tun例子
- Linux虚拟网卡TUN/TAP
- Linux虚拟网卡TUN/TAP
- LINUX 虚拟网卡tun例子
- linux TUN 虚拟网卡设备
- LINUX 虚拟网卡tun例子
- linux TUN 虚拟网卡设备
- Linux-虚拟网络设备-tun/tap
- linux TUN/TAP虚拟网卡
- VPN介绍--虚拟网络
- VPN(虚拟专用网络)
- VPN-虚拟专用网络
- 网络虚拟化技术(二): TUN/TAP MACVLAN MACVTAP
- 网络虚拟化技术(二): TUN/TAP MACVLAN MACVTAP
- GBDT
- jsp
- Machine Learning第十讲[大规模机器学习]
- linux高级网络配置基础team和网桥
- Python-基础学习笔记(六)
- Linux虚拟网络之tun(四)虚拟VPN
- HDOJ 2027 统计元音
- crontab
- 错误:Property of 'java.util.Set<?>' type cannot be injected by 'List'的解决方案
- Multiply Strings(大数相乘)
- Q107:Linux系统下GDB对PBRT-V3进行debug
- unity 鼠标悬停事件
- js创建型设计模式--简单工厂模式
- SmsManager发短信_随笔