标题: 一个问题求助网友!双宽带如何实现上传和下载分开
时间: 2023-07-02
『回复列表(10|显示机器人聊天)』
简单来说,在路由器看来,最初建立的所有连接都是上传连接,如果不手写规则,路由器没办法自动发现它是下载连接。等路由器发现它是下载连接的时候,连接已经确立,失去了切换线路的机会。
在路由器的视角中,上传连接和下载连接唯一的区别只是上传连接中,你发送的数据包比收到的数据包多,而下载连接恰好相反。但这个信息只有连接建立后才能知道,而一但连接建立,就没办法切换线路了。
所以必须有人手写规则,在建立连接之前根据其他信息(比如域名、IP地址或HTTP请求类型)猜测该连接到底是上传还是下载,然后才能进行分流。如果要分析HTTP请求类型,就需要使用代理服务器,然后在代理服务器里添加规则,并借助iptables把流量转发到代理服务器进行分析。基于域名和IP地址的话可以使用路由规则(ip route或ip rule)实现。
基于IP地址是最简单的,只要建立两个WAN,然后在路由表添加条目,把特定IP或网段转发到特定的WAN即可。但是这不稳定,需要经常维护,因为服务的IP会自动变(不过可以结合智能DNS来使用,比如特定域名解析出的IP自动添加到路由表实现分流)。而且像百度网盘这样的应用,上传和下载服务器可能都是在一起的,根据IP没办法分开。
代理服务器方案复杂一点,但根据域名或请求类型进行分流还算稳定,配好了就能一直用,并且可以完美的处理HTTP类型流量。不过想让代理服务器完美处理HTTPS流量比较困难,如果想避免证书信任问题,就只能透明转发,这样就只能提取到域名,提取不到HTTP请求类型了。如果想接管HTTPS流量,根据请求类型进行分流,就会遇到证书不信任的问题。此外,代理服务器也完全没有处理UDP等游戏流量的能力。
此外,某些应用的登录状态是和IP绑定在一起的,切换线路会导致掉线或者访问被拒绝,服务无法正常使用,这样分流也就失去了意义。
综上所述,按应用进行分流是可行的,但根据上传下载进行分流比较困难,对登录状态绑定IP的应用来说甚至不可行。
【扩展讨论】
如果我们抛开家庭宽带的限制,就理论上来说,TCP/IP能不能实现上传和下载分流呢?
是可以的,但需要你有BGP公网IP。
BGP意味着你的单个IP可以同时在多家运营商的网络里使用,所以你可以通过电信的链路接收数据包,但通过联通的链路把响应包发出去,因为是同一个IP,连接不会断开,并且最终可以成功路由到对端。
不过该技术的门槛(BGP公网IP)意味着它只会出现在云服务机房里,家庭宽带肯定是用不上的。