Большое число TCP retransmission (винда)
От: Kubyshev Andrey  
Дата: 01.10.13 14:28
Оценка:
Всем привет,

Давайте подумаем что может быть причиной 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);
Re: Большое число TCP retransmission (винда)
От: Kubyshev Andrey  
Дата: 01.10.13 15:41
Оценка:
Забытый нюансик, оказывается я пишу в этот сокет через WriteFile в оверлэппед моде.
Мож это как то влияет ?
Re: Большое число TCP retransmission (винда)
От: Kubyshev Andrey  
Дата: 01.10.13 16:03
Оценка:
Хочу сказать что на application level всё работает как часы. 24 часа в сутки.
Однако админы заметили эти retransmission. Я потестил и действительно ...
Re: Большое число TCP retransmission (винда)
От: Аноним  
Дата: 02.10.13 19:55
Оценка:
KA>Давайте подумаем что может быть причиной TCP retransmission.

Причина для retransmission одна — неполучение во-время ACK на переданный сегмент. Возьмите Wireshark или MS Network Monitor и посмотрите, что происходит. Честно говоря, не понятно, что можно сделать, чтобы ACKи потерять? Разве что "прозрачное прокси" что то мутит на пакетном уровне. Сознавайся.

Есть еще вариант, что неправильно закрываются соединения.
Re[2]: Большое число TCP retransmission (винда)
От: Kubyshev Andrey  
Дата: 03.10.13 02:04
Оценка:
А>Причина для retransmission одна — неполучение во-время ACK на переданный сегмент. Возьмите Wireshark или MS Network Monitor и посмотрите, что происходит. Честно говоря, не понятно, что можно сделать, чтобы ACKи потерять? Разве что "прозрачное прокси" что то мутит на пакетном уровне. Сознавайся.
А>Есть еще вариант, что неправильно закрываются соединения.

Спасибо за внимание к проблеме.
Соединения не закрываются подолгу. Я тоже думаю что б мутить с АСК надо что-то делать ниже уровнем, чем просто создал-соединил сокет. Тем более в 2 виртуалках на 1 компе где негде теряться.
Прокси ничего не делает обычно. Просто перекидывает из одного сокета в другой. Сделано на completition ports в 4 потока ..
Re[3]: Большое число TCP retransmission (винда)
От: Аноним  
Дата: 03.10.13 12:34
Оценка: 4 (1)
KA>Спасибо за внимание к проблеме.
KA>Соединения не закрываются подолгу. Я тоже думаю что б мутить с АСК надо что-то делать ниже уровнем, чем просто создал-соединил сокет. Тем более в 2 виртуалках на 1 компе где негде теряться.
KA>Прокси ничего не делает обычно. Просто перекидывает из одного сокета в другой. Сделано на completition ports в 4 потока ..

Чего то вы не договариваете )). В изначальном сообщении речь шла про прозрачный прокси. А для работы прозрачного прокси нужны манипуляции на пакетном уроне: кто-то должен отфорвардить пакеты на порт, который слушает прокси. Вот этот кто-то теряет ACK пакеты. Поставьте сниффер на клиента — и 100% увидите потерю ACK пакетов
Re[3]: Большое число TCP retransmission (винда)
От: ononim  
Дата: 03.10.13 14:25
Оценка:
А>>Причина для 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 окошком?
с одной и с другой стороны на длинном промежутке времени
Re: Большое число TCP retransmission (винда)
От: okman Беларусь https://searchinform.ru/
Дата: 03.10.13 16:55
Оценка:
Здравствуйте, Kubyshev Andrey, Вы писали:

KA>Я написал man-in-the-middle прокси прозрачное. Но вот незадача, если оно используется, то валят эти retransmission


Можете написать подробнее, по какому принципу работает Ваш прокси ?
Re: Большое число TCP retransmission (винда)
От: Kubyshev Andrey  
Дата: 04.10.13 06:55
Оценка:
Спасибо за внимание к топику, All!
Я делаю так: дллка внедряется в апликуху, перехватывается винсок. Апликуха конектится к серверу S1. Вместо этого к серверу коннекчусь я сам YA1 — S1, а апликуху коннекчу к себе A1 — YA2.
Всё засовываю в competition портс, перекидываю резво. В дальнейшем надо будет логгировать, но пока ничего не делается, просто перекладывается.
И вот на участке A1-YA2 начинаются слаться retransmissions с tcp lenght 0
В ближайщее время разчехлю wireshark и погляжу.
Re: Большое число TCP retransmission (винда)
От: Kubyshev Andrey  
Дата: 04.10.13 06:57
Оценка:
Всё работает как надо, но так как кое у кого возникло ощущение что "стало медленее", то стали вот копать и на меня сваливать.
Re[2]: Большое число TCP retransmission (винда)
От: Аноним  
Дата: 04.10.13 08:39
Оценка: 4 (1)
Здравствуйте, Kubyshev Andrey, Вы писали:

KA>Спасибо за внимание к топику, All!

KA>Я делаю так: дллка внедряется в апликуху, перехватывается винсок. Апликуха конектится к серверу S1. Вместо этого к серверу коннекчусь я сам YA1 — S1, а апликуху коннекчу к себе A1 — YA2.
KA>Всё засовываю в competition портс, перекидываю резво. В дальнейшем надо будет логгировать, но пока ничего не делается, просто перекладывается.
KA>И вот на участке A1-YA2 начинаются слаться retransmissions с tcp lenght 0

А как у вас принимаются входящие соединения? Через AcceptEx?
Какое значение backlog в вызове listen?
Re[3]: Большое число TCP retransmission (винда)
От: Kubyshev Andrey  
Дата: 04.10.13 10:06
Оценка:
Listen делается так

listen(ListenSocket,SOMAXCONN))

Потом этот ListenSocket передается в новый поток, создавется WSA Event. потом слушается WSAWaitForMultipleEvents и если случается FD_ACCEPT то делается accept, добавляется в complet. port и понеслась ..
Re[4]: Большое число TCP retransmission (винда)
От: Аноним  
Дата: 04.10.13 11:30
Оценка:
Обратите кстати внимание:
<winsock.h>
#define SOMAXCONN       5


<winscok2.h>
SOMAXCONN       0x7fffffff
Re[5]: Большое число TCP retransmission (винда)
От: Kubyshev Andrey  
Дата: 04.10.13 13:17
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Обратите кстати внимание:
А><winsock.h>

Да, спасибо! Но эти ретрансмишн, возникают даже с один клиентом в процессе неспешной работы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.