通过互联网和本地网络通过 SSH 连接到本地机器有什么区别?

通过互联网和本地网络通过 SSH 连接到本地机器有什么区别?

我可以通过两种方式通过 SSH 连接到本地网络上的机器:

  1. 通过本地 IP:ssh 192.168.1.xxx

  2. 通过互联网使用端口转发:ssh -p xxx mydomain.com

有什么区别?

具体来说,一种方法是否比另一种方法更快?

ssh ... echo hello使用方法“1”大约快 10 毫秒。对于 100 MB 的 SCP 传输,我没有检测到任何速度差异。)

答案1

对于您的问题来说,本地化是最快和最有效的,所以(1)。

这一切都涉及到你的数据包如何在网络中路由。

从您此处的简单描述中,我可以立即识别出使用网关与直接访问 PC 的区别。通过访问外部地址,您将使用路由器(默认网关)及其资源来建立连接。如果此路由器的使用率很高,您会注意到流量吞吐量显著减少。

我首先建议检查本地系统上的路由表

    user@server:~$ route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         10.11.0.1       0.0.0.0         UG    0      0        0 eth0
    10.11.0.0       0.0.0.0         255.255.252.0   U     0      0        0 eth0

您可以从我的配置中看到,如果我引用本地网络上的系统(即 10.11.2.200),它将直接转到该系统。如果我有它的 NAT 地址(即 10.11.2.200 NAT www.somedomain.net),它将首先转到路由器,然后再通过 NAT 返回网络。

您可以通过对内部 IP 地址运行跟踪路由,然后将其与 NAT 后的 IP 地址进行比较来测试这一点。(最好在跟踪路由上禁用名称解析)。

    user@server:~$ traceroute -n www.xxx.yyy.zzz
    traceroute to www.xxx.yyy.zzz (www.xxx.yyy.zzz), 30 hops max, 60 byte packets
     1  10.11.0.1  0.598 ms  0.717 ms  0.792 ms
     2  10.10.1.3  0.710 ms  0.788 ms  0.896 ms
     3  www.xxx.yyy.zzz  0.609 ms  0.496 ms  0.439 ms

您应该注意到,在返回网络之前,您会转到默认网关(路由器)。

将其与您的直接跟踪路由进行比较

    user@server:~$ traceroute -n 10.11.0.64
    traceroute to 10.11.0.64 (10.11.0.64), 30 hops max, 60 byte packets
     1  10.11.0.64  0.349 ms  0.343 ms  0.336 ms

小文件传输速度之所以明显,是因为文件非常小,需要花费时间来分配路由器上的资源。对于较大的文件传输,由于您打开了连接并保持连接打开,因此时间在统计上并不显著。一个会给您不同结果的测试是发送小文件,但运行 X 次以等于您的 100MB 文件大小。尝试使用脚本执行命令 20,000,000 次,您应该会得到 100MB。

    cmd="ssh ... echo hello"; for ((i=0;i<10000000;i++)); do $cmd;done

(执行 10,000,000 次,因为“echo_hello”有 10 个字节,尽管输出比从 SCP 的简单 ACK 数据包接收到的要多)。这个脚本只是一个快速的概念证明。

我希望这能正确解决您的问题。我想补充一点,如果源系统和/或目标系统在不同网络上有多个接口,情况会变得更加复杂。

相关内容