In computing, Mosh is a tool used to connect from a client computer to a server over the Internet, to run a remote terminal. Mosh is similar to SSH, with additional features meant to improve usability for mobile users. The major features are:
Mosh maintains its session even when "roams", for example by moving to a different Wi-Fi network or when changing from Wi-Fi to 3G.
Mosh maintains the terminal session even when a user loses their Internet connection or puts their client to "sleep." In comparison, SSH can lose its connection in such cases because TCP times out.
Mosh client attempts to be responsive to keyboard events without waiting for network lag. It uses an adaptive system that predicts whether the application running on the server will decide to echo the user's keystrokes or deletions.
The main [|drawbacks] of mosh are additional prerequisites to the server, that it lacks some special features of SSH and the lack of a nativeWindows client.
Design
Mosh works at a different layer from SSH. Whereas SSH transmits a stream of bytes in each direction using TCP, Mosh runs a terminal emulator at the server to figure out what should be on the screen. The server then transmits this screen to the client at a varying frame rate, depending on the speed of the network. This allows Mosh to save on network traffic on slow or intermittent connections.
Mosh is built on the State-Synchronization Protocol, which supports single-packet roaming. After the client has switched to a new IP address, a single packet that successfully reaches the server is enough to "roam" the connection. The client does not need to know it has roamed.
Packet loss
In the Mosh research paper, the creators tested SSP on a link with 29% packet loss, and found that SSP reduced the average response time by a factor of 50 compared with SSH, which uses TCP. A different study, by students at Stanford University, found that SSP reduced the average response time by a factor of 30.
Local echo
According to Mosh's developers, the program was found to be able to predict and immediately display 70% of user keystrokes, reducing the median response time to a keystroke to less than 5 milliseconds. A different study, by students at Stanford University, found that Mosh was able to quickly echo 55% of user keystrokes.
Drawbacks
Compared to the more popular SSH, mosh has the following drawbacks:
Prerequisites on the server
The major drawback of mosh is that it requires the server to fulfill additional prerequisites which are not needed by ssh itself. Due to its design, mosh needs the server to allow direct connections via UDP. Servers not fulfilling these prerequisites cannot be used by mosh. Examples of such systems include servers behind firewalls which restrict connections to the ssh-port via TCP. Also problematic are servers which are only indirectly reachable. The latter is usually accommodated by ssh via the 'ProxyCommand' option, but this is not supported by mosh.
One port per connection
By default, the server tries to allocate the first free UDP port in the range 60001–61000, per connection. This dynamic port allocation is considered an extra burden and risk for firewall maintenance. A significant part of the firewall-filtering happens through connection tracking, so called stateful filtering, this is based on the SYN/ACK flags in TCP segments, UDP packets don't have such flags. Mitigation:
The UDP port on the server can be set per mosh connection, so that only a limited number of ports need to be opened
Scrollback is not supported in the current release of mosh, and when using it in a terminal emulator with scrollbars they disappear, but is planned for the 1.3 release. This functionality is trade-off for garbage cleaning, as binary output is wiped away. One way to mitigate this currently is by using mosh in combination with a terminal multiplexer like screen or tmux.