爆発試験室 | Network & AI | TechNews & LifeStyle 头像

消息来源频道

爆発試験室 | Network & AI | TechNews & LifeStyle

@boomtechreviews

频道5,371 位成员公开可见0 人在线

爆発試験俱乐部 : @boomtechclub 通用密码 : boomboomtech 三网Smokeping网络质量监控 : www.bakamai.com

成员规模5,371 位成员
在线情况0 人在线
消息总数1,334 条消息
浏览量总数730,983 次浏览

在这个频道里搜索消息……

t.me/boomtechreviews

[MPTCP小课堂] 第二章知识补充
本章节没有出现原Player和地雷女,主角设定是第一章补充知识里那位提问:”Bonding 和MPTCP 有什么区别?“的观众。因为他在1个小时的NetDev宣讲会后依然觉得MPTCP和Bonding差不多。
因此我就顺着他的思路,把MPTCP当作Bonding用,看看会发生什么。
结果简而言之就是:MPTCP续了一个TCP连接的命,但没有续整链路的命。
大家都懂互联网OSI模型一共有 7层:
MPTCP : 帮一个TCP连接续命,它在L4工作
OSPF+BFD : 帮一条网络链路续命,它在L3工作
Bonding : 帮一条物理线路续命,它在L1/L2工作
互联网是一层一层铺上去的,虽然以上三种机制都是给网络续命用,但它们提供的保障是循序渐进的,并不冲突,不应该做任何比较。你网线被狗咬断了MPTCP能搞定么 ?不插两根网线做Bonding能就救得了?
现在一条从国内到海外的路由空了,你用MPTCP能创造新路由么?显然没有这个功能。
回到正题:如何用正确的方式为下一个TCP连接续命?
【方法一】把重任交给L3(网络层),用Loopback地址,配合BFD秒切路由:
https://blog.boom.si/index.php/archives/14/
GRE隧道用静态IP起,OSPF里广播服务器Loopback的地址,2条GRE隧道里疯狂播BFD。
BFD 相当于用0.X秒一次的速度互相问候对面死了没?
你可以设定0.5秒没收到对面发来的问候就直接宣判对面已死亡,OSPF把这条线路设定为不可达,秒切另一条通畅的线路。
Shadowsocks 服务端IP用这个Loopback地址,断线之后秒切用于建立初始MPTCP的可达线路。这么一来,前一个MPTCP的Subflow命还没用完,后续的TCP连接已经续上命了。
【方法二】 把重任交给L7(应用层),用Clash的tcp-concurrent功能
我们在Clash的DNS Hosts里设定一个本地域名,2个对端IP作为A记录,就像这样:
boom2.boom.boom: [10.98.1.1, 10.99.1.1]
SS节点地址填这个本地域名,Meta设置“启用TCP并发”✔️,或者在配置文件里写“tcp-concurrent : true"。
Clash的逻辑简单粗暴:看到域名里有2个IP地址,无脑2个同时连。每次都并发,从来不像Surge那样缓存上一次的结果。每次都比谁连的快,连上之后就和另一个地址Say Goodbye。
现在Clash同时通过电信和移动向对面发起MPTCP初始连接,断线的那条显然timeout,Clash早就选另一条通畅的线路建立了连接。和第一种方法一样,无论从哪条线路发起初始连接,在两条线路都正常的情况下,每条都会有Subflow来分摊流量,并不会因为发起初始连接的线路不同而造成速度的同。
简而言之,我们的解决方案就是一个套娃双保险,目的都是为了新的MPTCP初始连接能顺利发到对面,就是切换可达路由的方式不同。
很抱歉这一章内容没办法穿插有趣的剧情,MPTCP的工作原理必须要铺垫好,否则很难让群友进一步理解MPTCP。下一章节我们争取把原Player和地雷女的故事讲下去。。。。。。
#mptcp