Форум: "Сети";
Текущий архив: 2008.03.16;
Скачать: [xml.tar.bz2];
ВнизВопрос по отслеживанию подключений Найти похожие ветки
← →
FireMan_Alexey © (2007-06-20 20:08) [0]Наверное вопрос переадресуют, но мне кажется что это в эту ветку!
Мне нужен совет, название и где взять программу, которая могла бы отслеживать подключения и что передается через LoopBack(127.0.0.1) без сетевой карты.
Нужно проследить сколько подключений осуществляет IE к серверу Apache и что передает (туда/обратно).
Сразу поясню для чего это нужно(чтобы снова никто не занимался телепатией).
Я написал потоковый прокси. Установил Апачи для тестирования. Через прокси соединения к Апачам осуществляются, но только до 10 соединений. После этого как я получаю 10 соединений Апачи выдают ошибку 10061 WSAECONNREFUSED и вдальнейшем не работают вообще(ну разумеется до перезагрузки Апачей, т.е. остановки и запуска. Просто пункт рестарт не дает никакого результата).
НО когда с апачами работает ИЕ, таких глюков не наблюдается. Я могу просмотреть весь сайт без потери соединения. Я хотел бы выяснить как именно ИЕ удается получить всю информацию и не потушить Апачи?
← →
FireMan_Alexey © (2007-06-20 20:14) [1]Забыл написать, что 10061 получает даже IdMappedPortTCP после 10 коннектов. ;(
← →
Anatoly Podgoretsky © (2007-06-20 20:26) [2]WinXP
← →
FireMan_Alexey © (2007-06-20 20:27) [3]>[2]
что это значит?
← →
Anatoly Podgoretsky © (2007-06-20 20:27) [4]> FireMan_Alexey (20.06.2007 20:27:03) [3]
То что ограничение на 10 подключений
← →
FireMan_Alexey © (2007-06-20 20:28) [5]Тестировал на 2000!
← →
Anatoly Podgoretsky © (2007-06-20 20:28) [6]> FireMan_Alexey (20.06.2007 20:28:05) [5]
2000 если не сервер тоже самое.
На Home вообще 5
← →
FireMan_Alexey © (2007-06-20 20:30) [7]Но тогда как работает ИЕ?
И у меня XP Professional а не Home!
← →
Anatoly Podgoretsky © (2007-06-20 20:31) [8]Потому и 10 а не 5
Насчет ИЕ к нему никаких подключений не делается.
← →
FireMan_Alexey © (2007-06-20 20:32) [9]Так а после 10 соединений сервер падает!
Т.е. даже если все соединения закрыты, то сервер выдает 10061!
← →
Anatoly Podgoretsky © (2007-06-20 20:32) [10]> FireMan_Alexey (20.06.2007 20:32:09) [9]
Это уже ошибка в программе.
← →
FireMan_Alexey © (2007-06-20 20:33) [11]В какой? в апачах?
← →
FireMan_Alexey © (2007-06-20 20:35) [12]Я чет не пойму, как ИЕ соединяется и знает сколько соединений может держать сервер?
← →
FireMan_Alexey © (2007-06-20 20:45) [13]Я наверное не правильно выразился, когда мой прокси получает 10061 от сервера, то он ждет 5 интервалов по 5 секунд и пытается коннектится снова. Но если даже мой сервер я выключаю и все соединения закрываются, то апачи постоянно выдает 10061 даже для ИЕ пока не перезагрузиш.
При чем тут соединения, когда все уже закрыто!
Или это ограничение только на 127.0.0.1
И как мой сервер держит 30 соединений по TCP!
или ты имееш ввиду Сокетов ожидающих соединения.
← →
Anatoly Podgoretsky © (2007-06-20 20:52) [14]> FireMan_Alexey (20.06.2007 20:35:12) [12]
ИЕ не знает
← →
FireMan_Alexey © (2007-06-20 20:55) [15]Я знаю что Вы проф!
Помогите пожалуйста, потому что уже скоро голова сломается :)
← →
Anatoly Podgoretsky © (2007-06-20 21:00) [16]Количество подключение можешь проверить запуском на сервере NT4/2000/2003
← →
FireMan_Alexey © (2007-06-20 21:02) [17]Получается что мне нужно ограничивать подключения?
не больше 10 или 5 и потоки запускать по мере передачи данных?
Но представим такой момент у меня к моему Прокси соединяется 6 клиентов и первые пять на сутки грузят трафик выкачивая фильмы, а шестому остается ждать сутки для просмотра какого-нибудь сайта?
Или вы имели ввиду 10 соединений для одного клиента? Тогда все становиться яснее!
← →
Anatoly Podgoretsky © (2007-06-20 21:09) [18]> FireMan_Alexey (20.06.2007 21:02:17) [17]
Я имею ввиду (точнее Микрософт) 10 соединений на сервер, в качестве которого выступает твоя машина, любых соединений.
← →
FireMan_Alexey © (2007-06-20 21:19) [19]С этим разобрались :) , теперь можно судить о том, что ИЕ использует меньше кол-во соединений чем максимальное! Но почему когда я превышаю кол-во соединений получаю 10061, после жду до тех пор пока все соединения будут закрыты и конекчусь снова я получаю 10061?
Если это особенность Апачей, то почему когда я тестировал сервер в инете я получал такие же результаты?
← →
Anatoly Podgoretsky © (2007-06-20 21:20) [20]> FireMan_Alexey (20.06.2007 21:19:19) [19]
Еще раз ИЕ не использует соединений.
← →
Anatoly Podgoretsky © (2007-06-20 21:21) [21]Ты путаешь серверные соединения с клиентскими.
← →
FireMan_Alexey © (2007-06-20 21:36) [22]Я не путаю!
1. ИЕ соединяется с моим сервером
2. Мой сервер пытается соединиться с сервером Апачей
3. Если соединяется то работает простая транспортная логика (получил/отправил)
4. Если нет включаю таймер и жду освобождения других соединений!
Вот тут то и получается, что сервер Апачей постоянно выдает 10061.
Потом выключаю свой сервер закрывая все соединения.
Переключаю ИЕ на прямую работу с Апачами и пытаюсь соединиться!
Также получаю 10061!!!! Вот этого я не могу понять!!!!!
Раз ХР поддерживает 10 серверных соединений, то почему после закрытия всех сокетов на моем сервере и перенастройке соединения ИЕ я получаю ошибку! Хотя Апачи не сообщает не о каких ошибках и делает вид как буд-то работает нормально!
← →
FireMan_Alexey © (2007-06-20 21:38) [23]В первом и втором пункте используется серверные соединения!
У моего сервера через "Ацепт" и аналогично у Апачей!
← →
Anatoly Podgoretsky © (2007-06-20 21:40) [24]> FireMan_Alexey (20.06.2007 21:36:22) [22]
KeepAlive
← →
FireMan_Alexey © (2007-06-20 21:53) [25]Даже после CloseSocket?
← →
FireMan_Alexey © (2007-06-20 22:01) [26]Server присылал Connection: Close!
← →
FireMan_Alexey © (2007-06-20 22:05) [27]После чего сервер закрывал соединения!
При закрытии соединения с сервером на уровне клиента это расценивается как отказ от запроса! Причем не важно KeepAlive или нет.
Если я в чем-то не прав поправте меня!
← →
Сергей М. © (2007-06-21 08:18) [28]
> FireMan_Alexey © (20.06.07 22:05) [27]
Возьми любую утилитку а-ля TCPMonitor, TDIMonitor и посмотри, какие гнезда открыты и какие соединения установлены Апачем в этой проблемной ситуации.
← →
Сергей М. © (2007-06-21 08:21) [29]
> где взять
Здесь
http://www.microsoft.com/technet/sysinternals/default.mspx
Только не вздумай запускать TCPMon на W2k-сервере - она тут же порушит сетевые интерфейсы
← →
FireMan_Alexey © (2007-06-22 00:16) [30]>Сергей М.
Посмотрел TCPView
Спасибо полезная программа!
Все оказалось как описывает Anatoly Podgoretsky ©
Теперь не ясно одно, когда работает мой сервер и при разрыве соединения TCPView показывает что все соединения с сервером(т.е. у сервера) имеют статус TIME_WAIT, хотя мой сервер закрыл все соединения с клиентом и сервером!
Почему именно так я не знаю!
Вот кусок кода:
Procedure Execute;
Begin...
FEvents[0]:=WSACreateEvent;
FEvents[1]:=WSACreateEvent;
WSAEventSelect(FClientS,FEvents[0],FD_READ or FD_WRITE or FD_CLOSE);
WSAEventSelect(FServerS,FEvents[1],FD_READ or FD_WRITE or FD_CLOSE or FD_CONNECT);
While Not Terminated Do
Begin
...
// Транспортная логика!
...
End;
WSACloseEvent(FEvents[0]);
WSACloseEvent(FEvents[1]);
CloseSocket(FClientS);
CloseSocket(FServerS);
End;
Причем когда я проверял мой сервер(мною написанный), то соединения закрывались нормально! Почему Апачи не закрывает сокеты, после дисконнекта к нему(от него), не понятно?! Далее получается, что накапливается 10 соединений и при этом сервер перестает отвечать на какие-либо попытки коннекта!
Да замечу, что когда мой сервер не закрывал сокет после дисконнекта статус имел значение CLOSE_WAIT а не TIME_WAIT.
Может кто знает почему именно так?
← →
FireMan_Alexey © (2007-06-22 00:34) [31]Теперь не ясно одно, когда работает мой сервер и при разрыве соединения TCPView показывает что все соединения с сервером(т.е. у сервера) имеют статус TIME_WAIT, хотя мой сервер закрыл все соединения с клиентом и сервером!
Почему именно так я не знаю!
Простите наплел сильно!
Т.е. Когда ИЕ работает через мой прокси, то после дисконнекта, который совершает Апачи, предварительно прислав Connection: close, TCPView показывает что у Апачей все открытые и закрытые на тот момент сокеты находятся в состоянии TIME_WAIT. Как заставить Апачи закрывать все сокеты я не знаю. Т.к. всегда считал, что когда я получаю событие FD_CLOSE, тем более без кода ошибки, то сервер перед этим уже закрыл свой сокет(ну не тот, который ждет подключения конечно :) ) и поэтому я не могу понять, что я сделал не так!?!?!? И как Апачам удается послать оповещение о закрытии соединения со своей стороны и оставить сокет в режиме ожидания? :)
← →
FireMan_Alexey © (2007-06-22 00:36) [32]>>Anatoly Podgoretsky
Очень нужна Ваша помощь, потому что я сам сейчас не в силах понять, то что происходит на стороне Апачей и каким образом он это делает!
← →
Anatoly Podgoretsky © (2007-06-22 00:38) [33]> FireMan_Alexey (22.06.2007 00:34:31) [31]
Не знаю как, но важно, что получается свыше 10 разрешеных соединений к серверу. О чем я несколько раз и говорил. Решение естественное, если надо свыше 5/10 соединений, надо использовать серверную платформу, где таких ограничений нет.
← →
Anatoly Podgoretsky © (2007-06-22 00:40) [34]> FireMan_Alexey (22.06.2007 00:36:32) [32]
Я не знаю, что делать с Апачем, но он держит открытыми соединения, меня этот вопрос просто не интересовал, я для этой цели использую серверную платформу - или Линукс или Win2003
Не пытаюсь на Камазе устраивать гонки по формуле 1
← →
Сергей М. © (2007-06-22 08:27) [35]Если я правильно понял, то
> CloseSocket(FClientS);
Здесь ты закрыл некое одно соединение с Апачем.
А где закрытие других соединений с ним ?
> CloseSocket(FServerS);
Здесь ты закрыл свое слушающее гнездо.
А где закрытие существующих соединений браузера с твоим сервером ?
← →
FireMan_Alexey © (2007-06-22 14:14) [36]CloseSocket(FClientS); - сокет соединение с ИЕ
CloseSocket(FServerS);- сокет соединение с Апачами(или инетом)
Слушающий сокет находится в другом код потоке!
← →
FireMan_Alexey © (2007-06-22 14:21) [37]Я не хочу обидеть, но в вопросе я указал, что прокси потоковый!
Т.е. каждое соединение находится в отдельном код потоке(TThread).
А значит по завершению потока каждый сокет будет закрыт!
Это я гарантирую! :)
← →
Сергей М. © (2007-06-25 08:50) [38]
> прокси потоковый
Я тоже не хочу обидеть, но "потоковый" твой прокси или "не потоковый" - по барабану.
> CloseSocket(FClientS); - сокет соединение с ИЕ
> CloseSocket(FServerS);- сокет соединение с Апачами(или инетом)
Страннное у тебя смысловое именование идентификаторов ..
Твой прокси по отношению к Апачу является клиентом, а сокет почему-то именуется FServerS. По отношению к браузеру твой прокси является сервером, в то время как соотв.сокет почему-то FClientS..
Это, конечно, не суть как важно, но путаницу вносит.
> каждое соединение находится в отдельном код потоке(TThread)
Мне не понятно, где ты выграл, пользуя вместо прямого API-программирования потоков готовый поточный класс TThread, в то время как транспорт программируешь непосредственно на WSAPI, не прибегая к услугам готовых классов ..
← →
FireMan_Alexey © (2007-06-27 14:26) [39]Понимаешь, для меня было удобно сделать именно так!
При чем в полной версии в каждом потоке, для отдельных клиентов имеется ограничение по скорости передачи и т.д.
Скажу сразу, я не очень люблю ловить ексепты, поэтому лучше TThread и WSAPI для Меня :)
Я поставил чужой прокси на мою машину и результат был тот же 10061 и Апачи умирают!
Из этого делаю вывод, что моя логика работает, а это все особенности самих апачей! :)
Я потом попробую поменять сервер на какой-нибудь другой
А выигрывать я не хотел! :)
Просто этот проэкт я писал еще 2004, ну а сейчас не очень хотелось бы переделывать его.
Испробывал я и компоненты TSocketClient/Server но они не удовлетворили мои запросам! тем более что в моем случае лучше было писать на WSAPI.
А насчет TThread-a, пока не хочу изобретать вилосипед заново :)
На счет названия переменных.
Мой опыт показывает, что когда на этот форум передаю исх. коды то переменные типа
l1, k1 - и т.д. тоже не показывают для чего они используются.
Мой подход насчет FClientS - т.е. на данном сокете находится клиент т.е. ИЕ,
аналогично FServerS - сокет соединен с сервером.
Для меня так легче, тем более я пишу для себя и не претендую на супер оптимальный и понятный код. :)
← →
Сергей М. © (2007-06-28 08:36) [40]
> Испробывал я и компоненты TSocketClient/Server но они не
> удовлетворили мои запросам
Интересно, каким ?
> насчет TThread-a, пока не хочу изобретать вилосипед заново
А его и не надо изобретать)
Просто тут логичней бы было использовать BeginThread(), коль уж так тебе так претят классы с ихними исключениями, кои ты так невзлюбил.
> Апачи умирают!
> Из этого делаю вывод, что моя логика работает, а это все
> особенности самих апачей
Не обратить ли тебе серьезное внимание на версию и конфигурацию Апача ?
Страницы: 1 2 вся ветка
Форум: "Сети";
Текущий архив: 2008.03.16;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.007 c