Давайте подумаем что может быть причиной TCP retransmission. Я мониторю Proc monitorом от сисинтерналс.
Я написал man-in-the-middle прокси прозрачное. Но вот незадача, если оно используется, то валят эти retransmission
Если не используется, то нормально. Может какие то параметры сокета надо поставить ?
Тестирую в 2х виртуалках в win xp
Вот так делаю сокет безфокусно:
SOCKET s = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED);
Хочу сказать что на application level всё работает как часы. 24 часа в сутки.
Однако админы заметили эти retransmission. Я потестил и действительно ...
Re: Большое число TCP retransmission (винда)
От:
Аноним
Дата:
02.10.13 19:55
Оценка:
KA>Давайте подумаем что может быть причиной TCP retransmission.
Причина для retransmission одна — неполучение во-время ACK на переданный сегмент. Возьмите Wireshark или MS Network Monitor и посмотрите, что происходит. Честно говоря, не понятно, что можно сделать, чтобы ACKи потерять? Разве что "прозрачное прокси" что то мутит на пакетном уровне. Сознавайся.
Есть еще вариант, что неправильно закрываются соединения.
А>Причина для retransmission одна — неполучение во-время ACK на переданный сегмент. Возьмите Wireshark или MS Network Monitor и посмотрите, что происходит. Честно говоря, не понятно, что можно сделать, чтобы ACKи потерять? Разве что "прозрачное прокси" что то мутит на пакетном уровне. Сознавайся. А>Есть еще вариант, что неправильно закрываются соединения.
Спасибо за внимание к проблеме.
Соединения не закрываются подолгу. Я тоже думаю что б мутить с АСК надо что-то делать ниже уровнем, чем просто создал-соединил сокет. Тем более в 2 виртуалках на 1 компе где негде теряться.
Прокси ничего не делает обычно. Просто перекидывает из одного сокета в другой. Сделано на completition ports в 4 потока ..
KA>Спасибо за внимание к проблеме. KA>Соединения не закрываются подолгу. Я тоже думаю что б мутить с АСК надо что-то делать ниже уровнем, чем просто создал-соединил сокет. Тем более в 2 виртуалках на 1 компе где негде теряться. KA>Прокси ничего не делает обычно. Просто перекидывает из одного сокета в другой. Сделано на completition ports в 4 потока ..
Чего то вы не договариваете )). В изначальном сообщении речь шла про прозрачный прокси. А для работы прозрачного прокси нужны манипуляции на пакетном уроне: кто-то должен отфорвардить пакеты на порт, который слушает прокси. Вот этот кто-то теряет ACK пакеты. Поставьте сниффер на клиента — и 100% увидите потерю ACK пакетов
А>>Причина для retransmission одна — неполучение во-время ACK на переданный сегмент. Возьмите Wireshark или MS Network Monitor и посмотрите, что происходит. Честно говоря, не понятно, что можно сделать, чтобы ACKи потерять? Разве что "прозрачное прокси" что то мутит на пакетном уровне. Сознавайся. А>>Есть еще вариант, что неправильно закрываются соединения. KA>Спасибо за внимание к проблеме. KA>Соединения не закрываются подолгу. Я тоже думаю что б мутить с АСК надо что-то делать ниже уровнем, чем просто создал-соединил сокет. Тем более в 2 виртуалках на 1 компе где негде теряться. KA>Прокси ничего не делает обычно. Просто перекидывает из одного сокета в другой. Сделано на completition ports в 4 потока ..
То, о чем вы говорите больше похоже на портмапинг
Как много веселых ребят, и все делают велосипед...
Re: Большое число TCP retransmission (винда)
От:
Аноним
Дата:
03.10.13 16:29
Оценка:
Здравствуйте, Kubyshev Andrey, Вы писали:
KA>Всем привет,
KA>Давайте подумаем что может быть причиной TCP retransmission. Я мониторю Proc monitorом от сисинтерналс. KA>Я написал man-in-the-middle прокси прозрачное. Но вот незадача, если оно используется, то валят эти retransmission KA>Если не используется, то нормально. Может какие то параметры сокета надо поставить ? KA>Тестирую в 2х виртуалках в win xp KA>Вот так делаю сокет безфокусно:
KA>
KA>SOCKET s = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED);
KA>
а что там с mss окошком?
с одной и с другой стороны на длинном промежутке времени
Здравствуйте, Kubyshev Andrey, Вы писали:
KA>Я написал man-in-the-middle прокси прозрачное. Но вот незадача, если оно используется, то валят эти retransmission
Можете написать подробнее, по какому принципу работает Ваш прокси ?
Спасибо за внимание к топику, All!
Я делаю так: дллка внедряется в апликуху, перехватывается винсок. Апликуха конектится к серверу S1. Вместо этого к серверу коннекчусь я сам YA1 — S1, а апликуху коннекчу к себе A1 — YA2.
Всё засовываю в competition портс, перекидываю резво. В дальнейшем надо будет логгировать, но пока ничего не делается, просто перекладывается.
И вот на участке A1-YA2 начинаются слаться retransmissions с tcp lenght 0
В ближайщее время разчехлю wireshark и погляжу.
Здравствуйте, Kubyshev Andrey, Вы писали:
KA>Спасибо за внимание к топику, All! KA>Я делаю так: дллка внедряется в апликуху, перехватывается винсок. Апликуха конектится к серверу S1. Вместо этого к серверу коннекчусь я сам YA1 — S1, а апликуху коннекчу к себе A1 — YA2. KA>Всё засовываю в competition портс, перекидываю резво. В дальнейшем надо будет логгировать, но пока ничего не делается, просто перекладывается. KA>И вот на участке A1-YA2 начинаются слаться retransmissions с tcp lenght 0
А как у вас принимаются входящие соединения? Через AcceptEx?
Какое значение backlog в вызове listen?
Потом этот ListenSocket передается в новый поток, создавется WSA Event. потом слушается WSAWaitForMultipleEvents и если случается FD_ACCEPT то делается accept, добавляется в complet. port и понеслась ..