Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.009 c
2-1203445068
Igor23
2008-02-19 21:17
2008.03.16
Как вывести одной строкой сумму всех строк текстового файла


15-1202114841
Tornado
2008-02-04 11:47
2008.03.16
Выбор видеокамеры


6-1181510267
NeyroSpace
2007-06-11 01:17
2008.03.16
Как в Indy 10 обработать ошибки подключения?


15-1202197190
Шмелъ
2008-02-05 10:39
2008.03.16
Оффтоп. Linux. /dev/null


6-1182162320
vishnia
2007-06-18 14:25
2008.03.16
Загрузка файла с компа пользователя на сервер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский