我使用带有 KDE Plasma 的 Ubuntu 18,并且无法同时使用 2 个网络接口。我有“有线连接1“来自我的 IPS(以太网电缆)和”有线连接2“使用我的手机”USB 网络共享“,总是只有一个接口有效,如果我使用手机的连接它可以工作,如果我使用我的 ISP 的连接它也可以工作,但如果两个都连接,则只有一个有效,另一个就像 0 KB/s,我尝试了几次速度测试。
这是来自ip addr
:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether d8:50:e6:54:28:d1 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.25/24 brd 192.168.1.255 scope global dynamic noprefixroute enp3s0
valid_lft 599667sec preferred_lft 599667sec
inet6 fe80::6bd6:81a4:afcf:564f/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 52:54:00:3c:0c:63 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:3c:0c:63 brd ff:ff:ff:ff:ff:ff
18: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master virbr0 state UNKNOWN group default qlen 1000
link/ether fe:54:00:e7:18:69 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fee7:1869/64 scope link
valid_lft forever preferred_lft forever
19: enp0s20u7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
link/ether 0e:67:33:17:48:a0 brd ff:ff:ff:ff:ff:ff
inet 192.168.42.188/24 brd 192.168.42.255 scope global dynamic noprefixroute enp0s20u7
valid_lft 7175sec preferred_lft 7175sec
inet6 fe80::b0e:b959:2f6a:926e/64 scope link noprefixroute
valid_lft forever preferred_lft forever
enp0s20u7
是我的手机连接。
答案1
首先介绍一些背景知识,并简化一些细节,这样我就不必编写一整本关于网络的教科书了:)
要“下载”某些内容,需要在计算机和某个远程计算机之间建立 TCP 连接。如果由路由表(技术上称为 FIB,即转发信息库)决定,则为该连接选择哪个接口,输入 后会显示结果ip route list
。您会看到目的地列表(地址/前缀长度)以及相应的接口。被选中的接口是具有最长匹配目标 IP 地址。通常,这些目标中的大多数都是本地网络中的内容,再加上默认路由,所有与互联网其余部分的连接都将使用此路由。
当您(好吧,不是您,而是您机器上的某个进程!)打开 TCP 连接时,该连接由三元组(源 IP 地址、源端口、目标 IP 地址、目标端口)识别。实际运行的代码通常从将源 IP 地址和端口设置为 0 开始,实际值在第一个数据包离开机器时填写,源 IP 地址当然是传出接口的 IP 地址(暂时忽略 NAT 的影响)。
如果您有多个传出接口(例如 DSL 和 LTE 链路),则相应地会有两个default
路由。由于它们都具有相同的前缀长度(即 0),因此选择哪一个取决于路由度量. 指标较低的那个将被选中。
Linux总是选择具有较低度量的路由。如果您希望能够使用两个接口,则必须将接口度量调整为相同的数字。您可以手动执行此操作,也可以通过在 NetworkManager 中指定度量或其他方式执行此操作。
然而,这将仍然不发送属于到同一个连接两个接口都发出数据包。这是因为如果您尝试将一个带有源 IP 地址的数据包从一个接口发送到另一个接口,ISP 将(如果其行为符合当前最佳做法)丢弃该数据包并拒绝转发(为什么会这样超出了本文的讨论范围)。因此,一旦连接的第一个数据包发出,该连接的所有后续数据包都将从同一接口发出。我无法想象 Windows 在这方面的工作方式会有什么不同。
但是,如果你同时进行多笔转帐,和如果您的传出接口具有相同的指标,那么大约一半的连接将从一个接口传出,另一半将从另一个接口传出。例如,如果您的 DSL 接口比 LTE 更快,并且您希望更多连接以这种方式传出,则可以调整哪一部分流量将从一个接口传出,哪一部分流量将从另一个接口传出,但这涉及设置策略路由,而这需要多个命令。
有些人提到了接口绑定;这个概念在这里不适用,因为它需要“另一方”的合作,而由于您正在与不同的 ISP 交谈,因此您显然没有这样的合作。