Вручну примушувати TCP-з'єднання до повторної спроби


2
  1. У мене є з'єднання TCP (наприклад, сеанс SSH для деяких комп'ютерів)
  2. Мережа раптово знижується і скидає всі пакети (відключений кабель, поза діапазоном).
  3. TCP знову і знову пересилає пакети, повторно намагаючись збільшити затримки.
  4. Я бачу цю проблему і підключаю кабель назад (або повертаю мережу).
  5. TCP-з'єднання, нарешті, успішно пересилає певний пакет і продовжує.

Проблема в тому, що мені потрібно чекати деякого тайм-аут на точку 5. Я хочу використовувати мій відкритий сеанс SSH зараз і не чекати 5-10 секунд, поки не з'ясує, що з'єднання працює знову.

Як змусити всі з'єднання TCP пересилати дані без затримок у GNU / Linux?

Відповіді:


1

Чи знаєте ви, що IP-з'єднання було встановлено в момент часу (4)? З DHCP / WiFi / WPA / ARP / Zeroconf відбувається перегляд даних каналу, який може легко зайняти 5 секунд між оператором і можливістю передавати навіть один пакет IP.

Якщо це так, сеанс SSH не може бути обмеженням, і примусове передавання TCP не допоможе взагалі.

Оновити:

Не знаю, я не можу його відтворити. У мене був відкритий SSH-зв'язок між машиною .2 і .3 з .3 друкуванням часу на висновок кожну секунду. Дві машини працюють під управлінням ванільної Ubuntu Lucid і з'єднані через нудний WAP / Switch / Router. Машини налаштовані на DHCP. Я витягнув кабель з машини .3 і чекав науково точного інтервалу 60 годин. Ось трасування пакета:

No.  Time        Source                Destination           Protocol Info
  18 8.479990    192.168.2.3           192.168.2.2           SSH      Encrypted response packet len=48
  19 8.480024    192.168.2.2           192.168.2.3           TCP      56670 > ssh [ACK] Seq=1 Ack=433 Win=1002 Len=0 TSV=2804876 TSER=44100246
  20 87.619215   AsustekC_f1:59:70     Broadcast             ARP      Who has 192.168.2.2?  Tell 192.168.2.3
  21 87.619221   AsustekC_24:9c:85     AsustekC_f1:59:70     ARP      192.168.2.2 is at 00:1a:92:24:9c:85
  22 87.619527   192.168.2.3           192.168.2.2           SSH      Encrypted response packet len=48
  23 87.619545   192.168.2.2           192.168.2.3           TCP      56670 > ssh [ACK] Seq=1 Ack=481 Win=1002 Len=0 TSV=2824661 TSER=44120031

Для відновлення сесії знадобилося близько 200 мікросекунд. Я використовував стандарт Wireshark для перехоплення пакетів.


Це два комп'ютери, пов'язані з кабелем Ethernet зі статичними IP-адресами. Існує також програмний міст ( brctl addbr br0 ).
Vi.

Протестовано за допомогою звичайного TCP (без SSH) і без мосту. Те ж результат.
Vi.

0

Погляньте на наступні записи процесу

/ proc / sys / net / ipv4 /

tcp_keepalive

tcp_retries

tcp_keepalive:

Кількість секунд, коли підключення повинно бути неактивним перед TCP починає розсилати зонди, що живуть. Це можна змінити, виконавши наступну команду

echo 20 & gt; / proc / sys / net / ipv4 / tcp_keepalive_time.

За замовчуванням значення становить 7200 секунд (2 години).

tcp_retries:

Кількість спроб перед закриттям з'єднання TCP

echo 45 & gt;   / proc / sys / net / ipv4 / tcp_retries2

Не впевнений, що це дійсно допоможе, коли мова йде про з'єднання SSH, оскільки це дійсно може залежати від швидкості зв'язку та конфігурації SSH.

Привітання Кріс


Не допомагає. Я встановив і tcp_keepalive_intvl і tcp_keepalive_time до 1, але коли я витягу кабель, тягніть його назад, я все ще чекати близько 10 секунд, перш ніж з'єднання йде добре.
Vi.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.