新一代L3虚拟网络接入解决方案(畅想)

目前L3虚拟网络接入解决方案主要有以下两个方案:

1、tun2socket + 正向代理服务器

     tun2socks、bad、PPP + VEthernet

2、FULL NAT(NAT 远程服务器)

     PPP stand、PPTP、L2TP、SSTP、WireGuard、SoftEther、OpenVPN、ToyVPN

tun2socket 为本地服务器理解来自虚拟网卡的 “ip、tcp、udp、icmp” 报文,并且将这些协议报文按照其对应协议栈转换为 sys-socket

新一代L3虚拟网络接入解决方案(畅想)_第1张图片

FULL NAT 为远程服务器理解来自客户端从虚拟网卡读入的 “ip、tcp、udp、icmp” 报文,并且将这些协议报文进行 NAT(基于地址转换映射) && PNAT(基于端口与地址转换映射)

但本人思索了一种船新版本的虚拟网络解决方案,因为上述两种方案都有各自的巨大缺点,本文将先预先说明两者方案的一些问题。

一:

FULL NAT 解决方案的巨大缺陷是服务器端基本是依赖于 “pf_ring、raw-socket、libpcap、DPDK” 来处理L3/L4层协议报文的NAT做工转发,这带来一个问题,虽然从RTT的角度来说非常低,因为它只是做类似路由器TTL,及路由表L3层转发,而目前来说除了TCP/IP协议,其它协议的网络乱序都非常严重,这带来的结果就是网络吞吐速度非常慢,而且TCP/IP协议吞吐速度,依赖于目的服务器的TCP/IP协议栈单边加速,但实际上根本没有多大效果,因为FULL NAT服务器本身采用了非TCP/IP协议来做物理层传输,但即便是采用TCP/IP协议来承载物理层,仍旧没有办法提高太多的带宽吞吐量,无法每秒吞吐宽频起飞就是一个重大原罪。

另外:FULL NAT 解决方案无法让服务器本身为接入客户端提供单边加速,如果要实现单边加速就需要 FULL NAT 服务器自行实现 “流量追踪,快速重传、超发补包”,采用类似 “serverspeeder 锐速” 基于旁路超发重传的单边加速的方法

二:

tun2socket 解决方案的巨大缺陷是本地客户端适配器上面存在大量 Open file descriptor handles(打开文件描述符句柄)而在多数操作系统上面难以扩大最大打开文件描述符数量,例如:“Android” 没有足够的系统权限让人去折腾,而且不是 close 关闭了 socket-fd 就必定意味着资源已被操作系统内核释放,访问资源频繁非常容易搞爆,最大打开文件描述符上限。

“Windows” 桌面系统允许打开的文件描述符数量是有最大值的,并不是人们正确 closesocket,即可以被立即释放的,使用 netstat -ano、tcpview 系统内部工具,人们即使看到没有任何打开的 socket-fd,但重新尝试申请分配 socket-fd 都将失败,因为人们将得到以下操作系统错误:由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作”。

上面聊了聊,两个解决方案之间存在的问题,那么有没有一种更好的解决方案,要获得多级单边加速的同时,而且还要速度非常快?

简单的说:融合两者的解决方案,取长补短?

我本人思索了一种不是太完美的新型解决方案,即为:把 tun2socket 的做工放到服务器上面,而不是在客户端完成,人们可以在 vnat 上做一个公网被弃用的IP段上面(例被APNIC管理的不分配公网IP地址段:30.82.0.0/16【等内网专用地址段】),但要确保让操作系统内核可以使用BBR、BBR+、BBR 2拥塞控制协议来单边加速,而客户端适配器只做从虚拟网卡读入报文与轻度NAT链路追踪等相关的事务,把它封装到TCP/IP隧道协议上面通过WAN网传输到服务器上进行处理。

对于TCP_SYN/TCP_RCVD/TCP_ESTABLISH的同步状态这个很容易处理,例如:TCP_SYN IP 1.1.1.1 PORT 50000,肯定是无法连接的,客户端应该表现是一直连接直到客户端操作系统协议栈触发 “连接到服务器被积极拒绝” 错误。

新一代L3虚拟网络接入解决方案(畅想)_第2张图片

为什么要用TCP/IP来承载呢?这是为了解决大多数ASN对于UDP/IP, L4协议满满的恶意,刻意非人道的高QOS/低SLA,大量面积让UDP/IP报文乱序,如果采用UDP/IP承载速度非常差,采用TCP/IP协议承载,反倒每秒宽频吞吐量还能上GE口起飞。

客户端客户端建立多个TCP/IP通道与服务器保持连接,把从虚拟网卡的输入都通过 v-switches,封装传到经过WAN,传输到服务器上面进行处理,跟踪状态是为了防止当与服务器连接断开的时,可以清理相应的资源,并且对于TCP/IP的链路该RST(Connection Reset)的RST,让本地计算机内核TCP/IP协议栈的状态改变为期望的状态。

你可能感兴趣的:(Extension,网络,服务器,运维)