какая-то ерунда с портами

NataNata

Есть написанный сервер, который принимает подключение по 3 портам
Есть клиент, который подключается к серверу, подследовательно устанавливая соединения по 3 портам (т.е. сначала подключается к порту №1, убеждается, что все ок, потом к порту 2 и т.д.)
Сервер находится в локалке.
Клиенты, подключающиеся к серверу в локалке, нормально подключаются.
Почти все клиенты, находящиеся на удаленных машинах (в т.ч. и в других странах тоже нормально подключаются к серверу.
Но вот есть одна машина, из которой клиент к серверу подключиться не может, потому что подключение по 1-ому порту проходит, а подключение по 2-ому порту сбрасывается так:
Лог ethereal-а со стороны сервера (для примера):
03:23:29.436847, clientIP, serverIP, TCP, 2721 > 9100 [SYN]
03:23:29.436871, serverIP, clientIP, TCP, 9100 > 2721 [SYN, ACK] <- первый порт подключился
03:23:30.234836, clientIP, serverIP, TCP, 2722 > 9200 [SYN]
03:23:30.234874, serverIP, clientIP, TCP, 9200 > 2722 [SYN, ACK] <- второй порт подключился
03:23:30.244977, clientIP, serverIP, TCP, 2722 > 9200 [RST] <- @#%$!
У клиента вылезает аналогичная картина, только там уже от сервера приходит RST. Как следствие, происходят ошибки на socket.recv и socket.send. Попытка вставить задержку между этапами 2 и 3 в 10 секунд ничего не дает. Попытка поменять местами порты (скажем, 9200 -> 9000) ничего не дает.
Пробовали на клиенте отрубать антивирусы, файрволы - 0 эффекта.
На сервере файрвол железный, циска какая-то, порты открыты в режиме stealth.
Вопрос: какая сволочь может так подсирать с RST?

Marinavo_0507

великий китайский файрвол, говорят, примерно так работает

kataich

У клиента вылезает аналогичная картина, только там уже от сервера приходит RST.
В приведенном тобой выводе сервер не посылает RST. Ты просто не показал этого?
Если запустить сниффер одновременно на клиенте и на сервере, то учитывая разницу
во времени, кто кому посылает RST первый? Посылал ли действительно клиент
"03:23:30.244977, clientIP, serverIP, TCP, 2722 > 9200 [RST] <- @#%$!", или битик RST
проставился на промежуточном hop'e?

NataNata

ситуация стала еще интереснее
В общем смысл такой, что на одну попытку подключению к серверу от клиента исходит ДВА практически одинаковых пакета с SYN (различаются checksum-ами, и, что очень странно, identification number-ами на единичку разница между timestamp-ами 8 тысячных секунды. Поиск в инете ничего не дал. Почему таковое может быть?
З.Ы. подключение осуществляется через .net-ный код, делается socket.BeginConnect, не суть важно, думаю. Но я по логам отследил, что этот самый BeginConnect вызывается всего 1 раз
то есть, выглядит все так, как будто кто-то раздвоил пакет на подключение

kataich

Все равно не понятно, посылает ли клиент RST пакет?
В логах это есть? Или RST бит ставят по пути следования пакета?
Оставить комментарий
Имя или ник:
Комментарий: