Чудеса IP Stack в MS Windows. Странная история
2010-Apr-03, Saturday 03:19![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Неоднократно (более 4-х раз) наблюдал в локальной сети интересный эффект, полного объяснения которому так и не раскопал.
Ни с того ни с сего компьютер перестаёт устанавливать TCP и UDP соединения на некоторую часть портов, причём поражённые номера портов TCP и UDP - совпадают (поражён 80 порт TCP - значит и UDP тоже). В других случаях пропадает ICMP.
Характерной особенностью поражения ICMP и при поражённом 53 порту DNS является несколько мусорных символов ВМЕСТО IP АДРЕСА в ответе программы ping. Примерно вот так:
Обмен пакетами с ¬h†« по 32 байт:
Через ~неделю глюк пропадает.
Так как пространство портов велико - то глюк МОЖЕТ БЫТЬ НЕЗАМЕТЕН, пока в "поражённую" область не попадают 53 порт (DNS), 80 порт (http) и другие, используемые в этой конкретной сети. Или при поражении 135-139 портов пользователи сообщают, что "пропадает локальная сеть, Интернет работает".
Условия возникновения и выявления:
Наиболее буйным был период 2003-2005 года, когда глюк плавно путешествовал по на тот момент поддерживаемым мной сетям - последовательно от сетей с используемыми адресами 192.168.10.* к сетям с используемыми адресами 192.168.0.*, поражая сначала в основном "высокие" номера портов (993, 1025) и не давая большой пищи для анализа.
Затем глюк пришёл по типовому порту прокси 3128 - и ОПЯТЬ прошёлся в последовательности убывания номеров подсеток. Именно тогда я начал подозревать закономерность и успел провести 1 эксперимент.
Далее "задело" 80 и 53 порт, но не все мак-адреса. В результате мной наблюдалась сетка, где пахало многое - но не SQL сервер, например.
Мой краткий вывод - ошибка наличествует где-то в коде TCP/UDP стека протоколов виндов, более всего похоже на порчу какой-то области памяти по Wild Pointer, порождаемому сочетанием текущего времени системы, IP адресов в пришедшем пакете и мак-адресом сетевой карты.
Ни с того ни с сего компьютер перестаёт устанавливать TCP и UDP соединения на некоторую часть портов, причём поражённые номера портов TCP и UDP - совпадают (поражён 80 порт TCP - значит и UDP тоже). В других случаях пропадает ICMP.
Характерной особенностью поражения ICMP и при поражённом 53 порту DNS является несколько мусорных символов ВМЕСТО IP АДРЕСА в ответе программы ping. Примерно вот так:
Обмен пакетами с ¬h†« по 32 байт:
Через ~неделю глюк пропадает.
Так как пространство портов велико - то глюк МОЖЕТ БЫТЬ НЕЗАМЕТЕН, пока в "поражённую" область не попадают 53 порт (DNS), 80 порт (http) и другие, используемые в этой конкретной сети. Или при поражении 135-139 портов пользователи сообщают, что "пропадает локальная сеть, Интернет работает".
Условия возникновения и выявления:
- Машины на MS Windows любой версии из списка: NT4SP6, W95PE, W98SE, W2KSP2, W2KSP4, XP, XPSP1.
- Никаких особенных программ не запущено, система может быть свежепоставленной.
- Глюк зависит от времени на компьютерах - смена даты на всех компах на месяц назад (когда его не было) его устраняет.
- Глюк наблюдается в течение ~недели.
- Глюк зависит от IP адресов. Если всю сетку перекинуть на другое пространство (например сменить 192.168.* на 223.103.*) - глюк пропадает.
- Глюк зависит И от адреса компьютера самого, И от АДРЕСОВ В ПАКЕТАХ, которые прилетают на компьютер в поражённой сетке. Смена адреса компа А на адрес "непоражённого" компа Б при наличии в сетке другого "поражённого" компа В поражает комп А. В результате в ряде случаев это выглядит как совершенно мистическое "заражение ранее незаражённых адресов" при перестановке их на "заражённые" компы.
- Глюк ЗАВИСИТ от мак-адресов сетевух, но я так и не смог отследить - каким образом. По крайней мере если поменять в компах А и Б сетевухи И адреса одновременно - то поражённость оказывается привязана к сетевухе. Если поменять сетевухи, но статические адреса сохранить за компами - поражённость может оказаться ЛЮБОЙ. См. предыдущий пункт
- Зависит от предыстории. Если несколько раз менять статические адреса на сетевом интерфейсе - скорее всего, поразишь не только этот комп, но и другие. Перезагрузка НЕ ВСЕГДА меняет состояние.
- IPX/SPX и NETBEUI одновременно с этим глюком не затрагиваются никак и продолжают работать как работали.
Наиболее буйным был период 2003-2005 года, когда глюк плавно путешествовал по на тот момент поддерживаемым мной сетям - последовательно от сетей с используемыми адресами 192.168.10.* к сетям с используемыми адресами 192.168.0.*, поражая сначала в основном "высокие" номера портов (993, 1025) и не давая большой пищи для анализа.
Затем глюк пришёл по типовому порту прокси 3128 - и ОПЯТЬ прошёлся в последовательности убывания номеров подсеток. Именно тогда я начал подозревать закономерность и успел провести 1 эксперимент.
Далее "задело" 80 и 53 порт, но не все мак-адреса. В результате мной наблюдалась сетка, где пахало многое - но не SQL сервер, например.
Мой краткий вывод - ошибка наличествует где-то в коде TCP/UDP стека протоколов виндов, более всего похоже на порчу какой-то области памяти по Wild Pointer, порождаемому сочетанием текущего времени системы, IP адресов в пришедшем пакете и мак-адресом сетевой карты.