我本来只想几十个字推荐下Mosh,说着说着不免科普起了计算机网络

从 ssh 掉线说起计算机网络

ssh 一瞥

从 ssh 的起源说起

话说自从有了计算机之后,就有了远程工作的需求。最开始的时候是主机共享,一个大型主机,外接多个显示器和键盘。用户只需要用键盘和显示器就能分享这个电脑了。我为什么没提到鼠标,那会儿鼠标还没有发明。

共享式主机

这种共享式的主机,不就是现在网吧的无盘操作系统么。网吧一开始就像我们家里的台式机一样,就是放上一台台电脑。跟我们家里的台式机一样。网吧为了降低硬件成本和维护费用,将分散的主机一个一个集中在了统一的机房,通过高速网络与用户的终端相连。用户使用的电脑中是没有硬盘的。所有的游戏在打开的时候都是通过内部高速网络从机房中的服务器里临时加载到本地内存中。

当然了,因为游戏很吃显卡,所以用户的终端里还少不了显卡(显卡之于游戏,就像发动机之于汽车,发动机功率越大百公里加速越快,显卡性能越强,玩游戏画面越流畅,一个好的显卡三四千,一个好的发动机,哦哦,这个不了解)普通笔记本一般就四五千,只会搭载一个初级显卡,就像奇瑞QQ的发动机一样,你用它日常通行没有任何问题,但你若想用奇瑞QQ来和别人赛个车,那你一定能体会到什么叫做绝望。

很多游电脑小白买了一个笔记本后,最关心的就是自己的笔记本能不能吃鸡?能不能流畅的玩《英雄联盟》,《穿越火线》或者《守望先锋》?

在这里科普下,腾讯家的网络游戏为了利益最大化(为了大多数人的电脑都能流畅的玩他家游戏,购买他家的QQ币,游戏币,红黄蓝绿蓝靛紫钻石,一般优化的非常好)普通电脑玩玩是没有任何问题的。

但是对于大型单机游戏,比如《使命招呼》《罪恶都市》《机械纪元》之类的游戏,玩起来可能就比较吃力了。就像用奇瑞QQ 强行120码上坡一样(性能不足)~

如果你看过我伦的《头文字D》可能会说,人家的 AE86 一辆孙豆腐的日用车不也能赛车么,还是秋名山车神呢。别忘了,主角他爸可是个曾经的赛车手世界冠军!人家的AE86表面上看起来是一个普通的送豆腐的车,但实际上被他爸改装+调教的远超普通赛车。更别说,AE86 最后一场比赛居然安装了飞机的引擎,靠~

MJ曾给我推荐过一部网络小说《回到当代》,主角是2080年的基因改造者,拥有绝对领先当代的知识。能在半小时内写出媲美 Intel 的多核控制算法,使用未来科技改装了自己的奇瑞QQ,在小说里比坦克硬,比跑车快。虽然,人家还是长着QQ的外表

所以说,看人看事不能只看表面~~~~

ssh 面世之前

telnet tel 远程,net 网络,telnet 即远程网络
telnel 是一个远程管理工具,在ssh出现之前,大多用这个工具。它的功能和 ssh 类似,但是因为传输数据没有加密,容易被有心人捕获你的管理员账号和密码。

话说早期的互联网大家还没有意识到在网络中数据被监听的问题,坊间传闻早期的 QQ 也没有加密,登陆的时候是明文传输账号和密码的,有人曾在网吧里开着抓包工具一天能嗅探到几十个QQ账号。

后来这种明文传输数据的危险被大家广泛的意识到就出现了各种加密的手段,ssh -> secure shell 安全的shell 是一个加密的管理软件,在登陆远程主机的时候,认证过程是加密的,即便别人拦截到了你的数据包,看到的也是一串乱码。要破解这些乱码,可能用普通的笔记本跑上一千年都找不到答案。

但是,如果量子计算机出现,它的运行速度高了现在计算机的几个数量级。那时候我可不敢打包票,可能一炷香眼的功夫,现在的大多数加密通讯就被其破解了。不必说,到时候肯定会有基于量子计算的新型加密手段,正所谓“魔高一尺道高一丈”。

跑题了,赶紧拉回来

说着说着貌似就跑题了,没法子,我喜欢计算机,喜欢网络,一说起来简直能说三天三夜,无人自嗨了。回归正题,让我接着安利 Mosh

ssh 使用过程的问题

  • 延迟卡顿

延迟卡顿就是你输入了一个 ls 却发现按下回车没有反应,或者 cd 的时候迟迟屏幕上没有回显

  • 频繁掉线

登上主机正在更新,看着满屏的滚动代码甚是炫酷,突然你看到屏幕不动了,更新卡住了。啊,原来是因为网络不稳定(可能因为同一个局域网中你的舍友或者同事正在用迅雷下载大姐姐跑光了网速),你给掉线了
linux update pic

因为 ssh 是基于 TCP 协议的, 所以对网络的稳定性比较敏感(超过多长时间没有响应链接可能就被强制中断)
关于 TCP 的介绍,百度百科里可谓是给的很全面,但对于不懂得人可能会看的一头雾水,在这里我分享下自己的理解,TCP 协议为网络中分布在不同地点的主机之间建立了一条或多条通道,网络可以理解为现代的高速路,整个网络就是一个世界互联的公路系统(我为什么说公路系统而不是高速路系统,因为网络世界的速度和现实的公路一样,也分为低速路、高速路低速路用普通电缆传输数据,高速路用光纤传输数据)。

数据从上海浦东发送到西安,物理距离有 1100km,光的速度是 30 万km/s,光速每秒钟能绕地球八圈多。理论消耗时间是 (3.0×10^8 m/s) / (1.1×19^6m) = 0.003666s = 3.667ms
从上海到西安光需要的时间

但实际测试发现有 60ms 理论与实际相差了20倍,一个数量级啊有木有。在这里解释下延迟产生的几个原因:
从山海到西安的延迟

  1. 路由 – 十字路口

    从 上海到背景 1000 多公里,你开着一辆跑车,以 100 码的速度理论上十个小时。考虑到现在的交通法规定不允许连续驾驶超过三个还是四个小时,人很难连续驾驶10个小时,我们想象只是一辆来自美国特斯拉的无人驾驶跑车,或者《霹雳游侠》里面的凯特智能车

别管他是跑车还是自动驾驶,都不可能在理论的时间到达目的地。
首先,会有十字路口,会有匝道,还会有堵车(咳咳)

网络传输也一样,会有路由选择,数据拥堵,数据包乱序,超时重传

  1. 存储转发 — 收费站

数据在经过路由器之间的时候需要转发,路由器的存储、转发这需要客观的时间,存储是要将数据写入告诉内存,转发是经过路由器的计算要将这个数据包投递到哪一个出口

对应的就是汽车进入收费站,收费和选择路线

  1. 超时重传

和现实不同,汽车从一个收费站到达下一个收费站这件事情是确定的,我们都知道它是客观发生了。但是计算机网络必定是不如我们人类智能的,他们路由器A 向路由器D转发了三个数据包,却发现 D 迟迟没有回复自己说 “老铁,你的三个数据包我已经收到,还有没有接着来啊”,A就会认为B没有收到,于是会重新发送。但实际上数据包可能只是打了个盹,哦不,我是说 D同学可能只是业务正忙,这会儿处理的数据包太多了,将A 发来的包放在了缓存里,没有及时回复A.这时候A就会重新发送一遍,这就是所谓的“超时重传”

聪明到你是不是想到了一个优化,对,就是如果这个超时时间大一点不就可以避免了重复发送的问题了吗?你以为发明 TCP 协议的那群家伙们没有想到,实际上这是一个取舍问题。这个超时的时间也不能设定的太大,比如给设计个一秒钟。

你想想,从上海到北京的路上有多少个路由器(十字路口),如果在每一个每一次转发过程中超过一秒才判定数据没有及时送到位从重发,那到时候的实际延迟可能就不是多少毫秒了,而是多少秒。虽然听起来还挺快,秒!但是你打开百度的时候,让他卡顿个三五秒试试,你一定会觉得非常漫长。如果你不巧合用的是一个联通还是移动,你可能就会说,辣鸡移动,渣渣网速~

但实际上并不是移动或者联通的问题,往往是这个时候有海量的用户在刷“抖音”或者“快手”,这些视频类软件消耗流量,也消耗网络带宽。他们的数据包在网络上传输,就像马路上的一个半挂。想一想在八车道的高速路上并排行驶了九两半挂,而你开的是最新潮的特斯拉跑车被压在后面是什么体验。

Mosh 呼之欲出

Mosh 官方网站

基于UDP协议,不需要保持数据链路稳定

  • 安装

注意,安装需要分别在远程主机和本地分别安装。
在这里我只列出一种 debian 系的命令。如果你用的是 OpenSUSE、Fedora、Centos、Arch 替换为对应的包管理命令就成。

sudo apt install -y mosh
  • 使用

直接在你自己的电脑上输入这行命令

mosh root@vps.ip

就是这么简单,就是这么任性。使用了Mosh,从此不知道什么叫做断线~

你可以在 vps 上写代码,累了盖上你的笔记本睡一觉,起来后打开屏幕继续写。

我知道这里有较真的家伙就要说,这个 screen (tmux) 也行啊,当然,对于掉线这种问题的解决方法也是八仙过海各显神通了。scree tmum 网络上的介绍已经很多,我就不再复制粘贴了。

我推荐 Mosh 的原因就一个,因为使用简便,完全就是ssh 的使用方法,没有任何学习成本(还是有一点点成本的,就是你安装了Mosh之后,可能下次连接vps的时候忘记了你曾经装过这个玩意)我是因为在高铁上要做一个网络实验,网络不稳定,ssh连续掉线了两次之后,想起了曾听说过Mosh这个东西,就随手装了一个,到现在经过了24个小时,我已经换了3个WiFi用热点消耗了近1G流量之后,我的Mosh链接依然稳如老狗~

2 条评论
  1. 从奇瑞QQ到霹雳游侠到mosh,哈哈哈哈

    1. 本来想好好介绍下mosh 的,但觉得一上来就说有些突兀,于是就发散到姥姥家去了

发表一条评论