Я использую ноутбук Mac OS через обычную (то есть дрянную) беспроводную домашнюю сеть и подключаюсь к работе через VPN. Я ssh на рабочий стол Linux (Ubuntu) у меня в офисе на работе. (Когда я говорю "я ssh": я нажимаю на кнопку, которая говорит мне, что он будет использовать "ssh", и открывается окно "Терминал", и он заходит на мой рабочий стол.)
Часто (до нескольких раз в день), когда я использую 'vim', 'vim' перестает отвечать, а через минуту или две, соединение с моим рабочим столом прерывается, и Терминал сообщает мне, что соединение разорвано , Я часто открываю на своем рабочем столе несколько окон терминала, и только окно терминала, где я использую 'vim', будет разбито. Другие окна остаются подключенными и пригодными для использования.
Недавно я использовал tcpdump для отслеживания пакетов, идущих туда-сюда, и я записал трассировку, где мой сеанс vim завис и завершился. За пару минут до сбоя пакеты с моего рабочего стола приходили с постоянно уменьшающимися размерами окна, пока мы не достигли нуля, а соединение разорвалось чуть позже.
Я почти мог понять, что, скажем, я вошел в режим вставки и начал печатать символы, когда рабочий стол висел, и я заполнил окно, набрав, пока мой рабочий стол был испорчен. Начальный размер окна был около 12500, и каждый символ, который я набираю, кажется, генерирует 48-байтовый пакет, поэтому где-то около 250 символов может заполнить буфер tcp.
Однако, когда vim зависает, это больше похоже на то, что я делаю постраничную перемотку (control-f), затем вхожу в режим вставки и начинаю набирать несколько символов. Мои команды и символы отображаются, указывая, что vim получает и обрабатывает символы.
Мне не ясно, где находится буфер tpc между сокетом и vim. Предположительно, драйвер tty на самом деле выбирает символы из буфера tcp, возвращает их мне, передает их в vim и передает вывод из vim мне. Но все эти действия извлекут байты из буфера tcp, и размер окна не станет равным нулю.
Что я не понимаю о том, как работает программный стек, и почему размер моего окна становится равным нулю, и как я могу обойти или устранить проблему?
Бонусные вопросы:
1) Почему мой рабочий стол устанавливает размер окна около 12 500 вместо 64 КБ?
2) При использовании tcpdump на Mac я не получаю вывод, если использую выражения "host hostname", "host ipaddress" или "port 22" (где "hostname" и "ipaddress" заменяются на имя или IP-адрес моего рабочего стола). Если я не укажу одно из этих выражений, я получу много выходных данных, и выходные данные явно будут содержать имя хоста, ipaddress или порт, который я указал в командной строке. Есть ли что-то особенное на Mac, где tcpdump не работает? Есть ли стандартный способ испортить командную строку, и я запутался в том, что я прошу tcpdump?
спасибо, Cs