为什么网络情况改变后,mosh 仍能保持登录状态?

为什么网络情况改变后,mosh 仍能保持登录状态?

我在 Unix SE 的另一个问题中知道了这个应用程序。

它说:

更改IP。保持联系。

当您在互联网连接之间移动时,Mosh 会自动漫游。在火车上使用 Wi-Fi、在酒店中使用以太网、在海滩上使用 LTE:您将保持登录状态。大多数网络程序在漫游后都会失去连接,包括 SSH 和 Gmail 等网络应用程序。莫什则不同。

这怎么可能?

这是一个简单的重新连接技术吗?

答案1

主要是因为 mosh 使用无连接协议并正确处理客户端和服务器的重新关联。我自己并不能百分百确定具体细节,但据我了解,它的工作原理一般是这样的:

  1. 当您第一次使用 mosh 连接到远程主机时,它会使用常规 SSH 以您的身份登录,并启动它自己的服务器组件,该组件在不同的端口上侦听连接。
  2. 然后,Mosh 关闭原始 SSH 连接,并创建一个通过其自己的协议运行的新终端会话。此链接使用 UDP 而不是 TCP,因此它在功能上模拟无连接协议之上的连接。
  3. 如果您的客户端的 IP 地址发生变化,或者您的网络暂时中断,或者发生类似的情况,mosh 会尝试通过继续向原始服务器地址发送数据包来重新建立模拟连接。当服务器组件看到来自您的新地址的数据包时,它开始向那里发送响应数据包,而不是您的旧地址。

当然,还涉及身份验证(否则任何人都可以轻松劫持您的 mosh 会话),但这对于切换的发生方式并不是特别重要。

可能值得注意的是,许多 P2P 软件使用非常相似的技术(即,本质上相当于步骤 2 和 3,只是通过隧道传输其他内容)来提供针对网络变化的弹性。执行此类操作的软件示例包括同步事物丁克

答案2

您的报价来自网站,https://mosh.org。如果您开始阅读“技术信息”,您的问题就会得到解答:-)。

这是一个简单的重新连接技术吗?

它不是传统的重连技术,即超时+重连。一个例子是 SSH/TCP 超时 + 手动重新连接屏幕或 tmux 服务器。

mosh被专门设计为移动技术。它可以更快地适应。

使用 SSP 漫游变得容易:客户端将数据报发送到服务器,序列号不断增加,包括至少每三秒一次的“心跳”。每当服务器从客户端接收到序列号高于之前接收到的序列号的真实数据包时,该数据包的 IP 源地址就会成为服务器其传出数据包的新目标。通过以这种方式进行“无状态”漫游,可以在 NAT 内外进行漫游,甚至是那些本身可能正在漫游的漫游。即使客户端不知道其 Internet 可见 IP 地址已更改,漫游也能正常工作。当 Mosh 在一段时间内没有收到服务器的消息时,心跳允许 Mosh 通知用户(与 SSH 不同,在 SSH 中,用户可能直到尝试打字才意识到连接已断开)。

其他移动技术可能会缩短这种心跳延迟,如果客户端意识到其互联网可见的 IP 地址已更改。本节没有说明是否mosh需要这样做。 3 秒后更新已经使mosh交互式会话变得有用,并且比传统的默认设置更加强大。此外,“技术信息”还解释了 mosh 的更多新颖方面,但没有得到陷入小细节的困境:)。

至少如上所述,mosh仅实现一端的移动性:客户端。这有助于mosh避免对第三方的需求 - 与移动 IP 不同,移动 IP 需要在具有稳定 IP 地址的路由器上运行的“本地代理”。

在实现移动性时,对其进行安全控制非常重要。mosh已经包含通过 SSH 初始化的安全性。移动IP则不具备这个优势;它希望利用 IPsec。 IPsec 是 IP 的可选扩展,您必须在计算机和路由器之间进行配置。它往往只在某些狭窄的场景中使用。

moshscreen或 的使用之间还有第三个相似之处tmux:它之所以有效,是因为 SSH 服务器被配置为允许您在断开连接后让程序无限期地运行。除非您使用systemd“官方”默认配置:)。 systemd 认为缺乏控制能力是历史上 Unix 的一个明显的疏忽。请注意,在许多其他场景中,甚至在未连接时也会考虑无限期地保持资源使用危险地浪费。许多 Web 服务器被配置为在几秒钟未发送或接收大量数据后断开客户端连接。看https://en.wikipedia.org/wiki/Slowloris_(computer_security)

移动IP是一个老项目。最近的一个项目是 MP-TCP(多路径 TCP)。它为移动控制实现了简单的安全性。 MP-TCP 与 更相似mosh,因为初始连接是与不可移动的单个服务器 IP 建立的。建立连接后,理论上客户端或服务器都可以更改其 IP 地址并保持连接。但是,如果所有 IP 在同一时刻发生变化,则无法恢复。

相关内容