Изменения в поведении TCP в Windows 7 или Vista - PullRequest
1 голос
/ 15 июня 2011

Разрешение, своего рода

На клиентском компьютере, на котором была обнаружена эта проблема, была установлена ​​программа Trend Micro Security.Этот пакет безопасности размещал службу или драйвер поверх каждого сетевого адаптера в системе.Я не удосужился продолжить отладку, когда это устаревшее приложение снова заработало.

Обновление 1

Я отключил автоматическую настройку масштаба окна TCP на Win7.

В Windows 7, если я отсоединяю кабель Ethernet, напрямую подключенный к серверу, отключение происходит примерно через 5 секунд, но происходит сбой клиентского процесса.netstat на сервере сообщает клиенту о двух TCP-соединениях, которые больше не действительны, поскольку клиентский процесс не завершил корректно завершение и закрыл соединения.

После перевода сервера в это странное состояниепосле физического отключения, если я перезапускаю клиентский процесс, он зависает при подключении к серверу (как описано в оригинале)

Если я выполняю физическое отключение на стороне XP, отключение происходит быстрее, чем наWin7.Какая-то ценность или поведение поддержания активности отличаются в XP.В то время как ssh'd (через Putty) ssh-соединение умирает быстрее на XP, чем на Win7.

Original

У меня есть устаревшее приложение клиент / сервер TCP, котороеПохоже, что портит сервер только тогда, когда клиент Windows 7 машина.

Сервером является OpenEmbedded Linux, работающим под управлением 2.6.11.

Клиент Windows 7 подключается немного и в конечном итоге переходит в состояние, когда клиент отключается через секунду или две.

Когда сервер находится в этом состоянии, если я немедленно подключаю клиента Windows XP, клиент XP также не может подключиться.

Я не могу вывести сервер в состояние с ошибками, подключившись к клиенту XPодин.

Я хотел бы знать, какие изменения были внесены в стек TCP / IP, начиная с Vista или Windows 7, чтобы я мог лучше отладить устаревший код.

Я также хотел бы знать, какие команды я могу запускать на сервере Linux, чтобы лучше понять, почему не работают соединения.

Ответы [ 2 ]

2 голосов
/ 15 июня 2011

Пожалуй, лучшее, что вы можете сделать, это запустить tcpdump или wireshark под linux и проанализировать SYN TCP, отправленный как Windows XP, так и Windows 7. Wireshark позволяет вам побитно разбивать, какой TCP параметры отправляются ... например, это то, что вы видите из окна debian lenny, устанавливающего TCP-соединение:

Transmission Control Protocol, Src Port: 58456 (58456), Dst Port: 23 (23), Seq: 0, Len: 0
    Source port: 58456 (58456)
    Destination port: 23 (23)
    Sequence number: 0    (relative sequence number)
    Header length: 40 bytes
    Flags: 0x02 (SYN)
        0... .... = Congestion Window Reduced (CWR): Not set
        .0.. .... = ECN-Echo: Not set
        ..0. .... = Urgent: Not set
        ...0 .... = Acknowledgment: Not set
        .... 0... = Push: Not set
        .... .0.. = Reset: Not set
        .... ..1. = Syn: Set
        .... ...0 = Fin: Not set
    Window size: 5840
    Checksum: 0x8b77 [correct]
        [Good Checksum: True]
        [Bad Checksum: False]
    Options: (20 bytes)
        Maximum segment size: 1460 bytes
        SACK permitted
        Timestamps: TSval 136991740, TSecr 0
        NOP
        Window scale: 6 (multiply by 64)

Я подозреваю, что вы увидите различия в RFC 1323 Window Scaling, но у меня нет машины с XP для проверки этого.

В этом ответе я дал подробный ответ о том, как анализировать TCP-соединения, используя tcptrace под linux ... Как я могу измерить производительность и TCP RTT кода моего сервера?

1 голос
/ 15 июня 2011

Я также подозреваю, что проблема масштабирования окна.Я не могу найти ссылку только в данный момент, но были жалобы, когда Vista впервые вышла, сообщая, что что-то пошло не так с некоторыми маршрутизаторами (белкинс, если я помню).Они проследили это до проблемы с одним из размеров окна, которое Vista (и, следовательно, Windows 7) изменяет по умолчанию.Маршрутизаторы будут зависать и должны будут переустанавливаться каждые несколько минут.

Вы можете выполнить несколько команд, чтобы отключить масштабирование окна, чтобы проверить, исчезла ли ваша проблема. Отсюда:

netsh interface tcp set global autotuninglevel=disabled

Редактировать:

Попробуйте отключить IPv6 в Windows 7. Ссылка о том, как это сделать.С IPv4 он должен действовать так же, как Windows XP.Загрузите wireshark на две системы и сравните различия

...