|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Eugene B. Berdnikov 2:5020/400 12 Jan 2001 01:03:46 To : All Subject : ssh/sshd bug or tcp window problem? -------------------------------------------------------------------------------- Есть накий вид спорта: изыскания на тему "почему виснет ssh?". Сегодня на очередном забеге увидел нечто вообще странное... Ситуация такая: клиент ssh-1.2.26 под Solaris-8 тянет нечто с сервера sshd-1.2.27, работающем под обычным RedHat-6.1 (ядро 2.2.16). Сначала все идет хорошо. Потом в некоторый момент (это случается во всех моих тестах, ситуация на 100% воспроизводима) линуксовый сервер выставляет размер окна в нуль. Hапример: 21:47:03.587962 eth0 > 194.190.163.123.ssh > 137.138.138.122.45334: P 24082:25360(1278) ack 1045571 win 1415 (DF) [tos 0x8] 21:47:03.712844 eth0 < 137.138.138.122.45334 > 194.190.163.123.ssh: P 1045571:1045616(45) ack 21252 win 8760 (DF) [tos 0x8] 21:47:03.731946 eth0 > 194.190.163.123.ssh > 137.138.138.122.45334: . 25360:25360(0) ack 1045616 win 1370 (DF) [tos 0x8] 21:47:03.820703 eth0 < 137.138.138.122.45334 > 194.190.163.123.ssh: . 1046986:1046986(0) ack 24082 win 8760 (DF) [tos 0x8] 21:47:03.915548 eth0 < 137.138.138.122.45334 > 194.190.163.123.ssh: . 1046986:1046986(0) ack 25360 win 8760 (DF) [tos 0x8] 21:47:04.094258 eth0 < 137.138.138.122.45334 > 194.190.163.123.ssh: P 1045616:1046986(1370) ack 21252 win 8760 (DF) [tos 0x8] 21:47:04.111948 eth0 > 194.190.163.123.ssh > 137.138.138.122.45334: . 25360:25360(0) ack 1046986 win 0 (DF) [tos 0x8] Иногда размер падает в ноль не сразу, мелькают числа вроде 540, 270, 45. Интересно, что они кратны 45, и этот размер встречается среди блоков данных. Hаконец, наступает момент, когда клиент хочет что-то сказать серверу. Hо этого вроде сделать нельзя, т.к. размер окна нулевой. :) Однако Solaris упорно проталкивает по одному октету: 21:47:11.224958 eth0 < 137.138.138.122.45334 > 194.190.163.123.ssh: . 1046986:1046987(1) ack 41792 win 8760 (DF) [tos 0x8] 21:47:11.225002 eth0 > 194.190.163.123.ssh > 137.138.138.122.45334: . 41792:41792(0) ack 1046986 win 0 (DF) [tos 0x8] Это меня вообще удивляет. Почему в последней строчке ack равен 1046986, а не на единичку больше? Hеужели линукс не хочет подтверждать октеты, вылезающие за размер окна? :))) Дальше еще интересней. Клиент на солярисе вдруг тоже снижает размер окна до нуля: 21:47:29.049486 eth0 < 137.138.138.122.45334 > 194.190.163.123.ssh: . 1046986:1046986(0) ack 117151 win 544 (DF) [tos 0x8] 21:47:29.681959 eth0 > 194.190.163.123.ssh > 137.138.138.122.45334: . 117151:117695(544) ack 1046986 win 0 (DF) [tos 0x8] 21:47:29.993004 eth0 < 137.138.138.122.45334 > 194.190.163.123.ssh: . 1046986:1046986(0) ack 117695 win 0 (DF) [tos 0x8] Спустя некоторое время оба гаврика весело обмениваются ack'ами на вставшие намертво счетчики. Полный ступор. :) При этом на стороне сервера я могу запустить strace и увидеть, что сервер висит на write(2), а netstat показывает ненулевой размер готового к посылке блока. В том, что это баг ssh, я не сомневаюсь, и даже примерно локализовал условия, в которых он возникает. Вот только интересно, как можно размер окна tcp-коннекции менять на ходу? Среди параметров setsockopt() я ничего найти не смог, и разглядывание исходников ssh не помогло... :) -- Eugene Berdnikov --- ifmail v.2.15dev5 * Origin: Institute for High Energy Physics, Protvino, Russia (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/5353c4b5568c.html, оценка из 5, голосов 10
|