The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как работает сервер ICQ (нельзя держать открытыми более 6553..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от FractalizeR email(ok) on 26-Ноя-06, 16:48 
Добрый день.

Меня вот заинтересовал такой вопрос. Как же работают популярные серверы мгновенных сообщений типа ICQ, Skype, если один сервер не может держать открытыми более 65535 портов одновременно? Ведь в каждый момент времени каждый сервер имеет миллионы клиентов онлайн.

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от Niam (??) on 26-Ноя-06, 17:55 
>Добрый день.
>
>Меня вот заинтересовал такой вопрос. Как же работают популярные серверы мгновенных сообщений
>типа ICQ, Skype, если один сервер не может держать открытыми более
>65535 портов одновременно? Ведь в каждый момент времени каждый сервер имеет
>миллионы клиентов онлайн.


Я думаю,что это реализовано кластером, или схожими технологиями.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от allez (ok) on 26-Ноя-06, 18:52 
>Добрый день.
>
>Меня вот заинтересовал такой вопрос. Как же работают популярные серверы мгновенных сообщений
>типа ICQ, Skype, если один сервер не может держать открытыми более
>65535 портов одновременно? Ведь в каждый момент времени каждый сервер имеет
>миллионы клиентов онлайн.

Сдается мне, что вы путаете количество TCP-портов с количеством подключений на порт.
Исходя из ваших рассуждений, на каждое соединение должен выделяться отдельный порт.
Как же тогда работают, например, веб-серверы, обслуживающие сотни одновременных запросов,
хотя у них открыт только один порт с номером 80? ;-)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от Niam (??) on 26-Ноя-06, 20:59 
>>Добрый день.
>>
>>Меня вот заинтересовал такой вопрос. Как же работают популярные серверы мгновенных сообщений
>>типа ICQ, Skype, если один сервер не может держать открытыми более
>>65535 портов одновременно? Ведь в каждый момент времени каждый сервер имеет
>>миллионы клиентов онлайн.
>
>Сдается мне, что вы путаете количество TCP-портов с количеством подключений на порт.
>
>Исходя из ваших рассуждений, на каждое соединение должен выделяться отдельный порт.
>Как же тогда работают, например, веб-серверы, обслуживающие сотни одновременных запросов,
>хотя у них открыт только один порт с номером 80? ;-)


Все это так, но при коннекте создается новый сокит. А сокит - это целый тип. =), соответсвенно есть лимит.
Это можно обойти какими-то патчами ядра, конечно.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от allez (ok) on 26-Ноя-06, 21:46 
>Все это так, но при коннекте создается новый сокит. А сокит -
>это целый тип. =), соответсвенно есть лимит.
>Это можно обойти какими-то патчами ядра, конечно.

Оп-паньки, по зрелом размышлении понял я, что сморозил глупость. Прошу прощения.
Пойду-ка еще подучу матчасть. :-)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от FractalizeR email(??) on 27-Ноя-06, 13:49 
>Сдается мне, что вы путаете количество TCP-портов с количеством подключений на порт.
>
>Исходя из ваших рассуждений, на каждое соединение должен выделяться отдельный порт.
>Как же тогда работают, например, веб-серверы, обслуживающие сотни одновременных запросов,
>хотя у них открыт только один порт с номером 80? ;-)

Разумеется, на каждое соединение выделяется отдельный порт. Вы коннектитесь к 80 порту сервера. Для общения с вами выделяется локальный порт на сервере. Во всяком случае, я так это понимаю.
http://msdn2.microsoft.com/en-us/library/system.net.sockets....

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от Niam (??) on 27-Ноя-06, 13:52 
>>Сдается мне, что вы путаете количество TCP-портов с количеством подключений на порт.
>>
>>Исходя из ваших рассуждений, на каждое соединение должен выделяться отдельный порт.
>>Как же тогда работают, например, веб-серверы, обслуживающие сотни одновременных запросов,
>>хотя у них открыт только один порт с номером 80? ;-)
>
>Разумеется, на каждое соединение выделяется отдельный порт. Вы коннектитесь к 80 порту
>сервера. Для общения с вами выделяется локальный порт на сервере. Во
>всяком случае, я так это понимаю.
>http://msdn2.microsoft.com/en-us/library/system.net.sockets....


Все правильно, но опять пришли к тому, что выделяется порт. А портов не может быть более 2в32 для 32-х разрядных систем. Выход - 64-х битные системы или какие-то другие обходы.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от FractalizeR email(??) on 27-Ноя-06, 15:00 
>Все правильно, но опять пришли к тому, что выделяется порт. А портов
>не может быть более 2в32 для 32-х разрядных систем. Выход -
>64-х битные системы или какие-то другие обходы.

По-моему это вы что-то путаете. Мы к этому не пришли, а с этого начали.

Число портов для сетевых протоколов ограничено цифрой в 65535. И без разницы, 32-бит операционная система, или 64.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от Мимо проходил on 27-Ноя-06, 18:55 
>Добрый день.
>
>Меня вот заинтересовал такой вопрос. Как же работают популярные серверы мгновенных сообщений
>типа ICQ, Skype, если один сервер не может держать открытыми более
>65535 портов одновременно? Ведь в каждый момент времени каждый сервер имеет
>миллионы клиентов онлайн.

во первых основные сервисы ICQ и Skype не используют TCP,
  а для коммуникаций не  ориентированных на соединения создаётся только один порт на сервере
во вторых работают они в основном от пользователя-до-пользователя,
  то есть по возможности не привлекая ресурсов центральных серверов
  (сервер - как большой справочник к которому обращаются не так уж и часто)
и (как уже отмечали товарищи) - там стоят кластеры..

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от FractalizeR email(??) on 27-Ноя-06, 19:03 
>во первых основные сервисы ICQ и Skype не используют TCP,
>  а для коммуникаций не  ориентированных на соединения создаётся только
>один порт на сервере
Это что за коммуникации? UDP вы имеете ввиду?

>во вторых работают они в основном от пользователя-до-пользователя,
Но ведь клиент все равно висит online у сервера, получая от него оповещения о выходе в сеть пользователей из списка контактов и так далее.

>  то есть по возможности не привлекая ресурсов центральных серверов
Мы ведем разговор не о ресурсах, как вы заметили, наверное. А о портах. Я просто хочу понять, как ограничение на 65535 портов сказывается на работе серверов с большим количеством подключеней

>и (как уже отмечали товарищи) - там стоят кластеры..
Это в данном случае значения не имеет.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от vic (??) on 27-Ноя-06, 19:42 
>Мы ведем разговор не о ресурсах, как вы заметили, наверное. А о
>портах. Я просто хочу понять, как ограничение на 65535 портов сказывается
>на работе серверов с большим количеством подключеней

Прочитайте RFC по TCP и вы все поймете, там об этом все написано а так же в куче книг. Дело в том что вы путаете порты и открытые дескрипторы на сервере. Порт у сервера входящий всего один например 80, а открытых сокетов (дескрипторов!) для законнектившихся клиентов до дури (смотри лимиты системы), обычно это ограничение либо 1024 (юзер), либо MAX_INT(демон, где-то(2^32)/2).

Если клиент устанавливает соединение с сервером на порт 80, то сервер открывает для него дескриптор (сокет) с помощью которого с этим клиентом общается (например 345678), для следующего клиента открывается еще один дескриптор (например 345679) и т.д., при этом порт все равно остается тем же 80.

При привышении лимита количества соединений ставят кластеры, распределяющее нагрузку по нескольким серверам. 100 серваков - фигня вопрос =) Причем видятся они для клиентов могут как один сервер. Есть и другие способы.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от Niam (??) on 27-Ноя-06, 19:55 
>>Мы ведем разговор не о ресурсах, как вы заметили, наверное. А о
>>портах. Я просто хочу понять, как ограничение на 65535 портов сказывается
>>на работе серверов с большим количеством подключеней
>
>Прочитайте RFC по TCP и вы все поймете, там об этом все
>написано а так же в куче книг. Дело в том что
>вы путаете порты и открытые дескрипторы на сервере. Порт у сервера
>входящий всего один например 80, а открытых сокетов (дескрипторов!) для законнектившихся
>клиентов до дури (смотри лимиты системы), обычно это ограничение либо 1024
>(юзер), либо MAX_INT(демон, где-то(2^32)/2).
>
>Если клиент устанавливает соединение с сервером на порт 80, то сервер открывает
>для него дескриптор (сокет) с помощью которого с этим клиентом общается
>(например 345678), для следующего клиента открывается еще один дескриптор (например 345679)
>и т.д., при этом порт все равно остается тем же 80.
>
>
>При привышении лимита количества соединений ставят кластеры, распределяющее нагрузку по нескольким серверам.
>100 серваков - фигня вопрос =) Причем видятся они для клиентов
>могут как один сервер. Есть и другие способы.

Хм, я по-моему это и говорил.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от vic (??) on 27-Ноя-06, 20:01 
>Хм, я по-моему это и говорил.
Ага, только в ответе за номером 6, таки назвали дескриптор портом. А в остальном правильно, просто автор поста не может почувствовать разницу между портом и дескриптором как минимум уже на втором форуме :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от Мимо проходил on 28-Ноя-06, 13:35 
>>во первых основные сервисы ICQ и Skype не используют TCP,
>>  а для коммуникаций не  ориентированных на соединения создаётся только
>>один порт на сервере
>Это что за коммуникации? UDP вы имеете ввиду?
Да - UDP, если интерестно, посмотрите на генерируемый трафик (любым снифером)
Клиент периодически (скажем раз в 10-20 сек) шлёт пакет серверу,
этот пакет приходит на порт скажем 4040, на этот же порт (и тот же сокет) приходят все пакеты от других клиентов..на приёме для каждого принятого пакета на уровне приложения уже выясняется от кого конкретно он пришёл и что делать дальше

>>во вторых работают они в основном от пользователя-до-пользователя,
>Но ведь клиент все равно висит online у сервера, получая от него
>оповещения о выходе в сеть пользователей из списка контактов и так
>далее.
Есть в природе ещё и таймеры :) если от клиента в течении минуты не пришло ни одного пакета - считаем что клиент в отвале и по контакт-листу рассылаем извещение о смене состояния.. всё на уровне приложения; держать TCP чтобы отслеживать состояние клиента - слишком накладно

>>  то есть по возможности не привлекая ресурсов центральных серверов
>Мы ведем разговор не о ресурсах, как вы заметили, наверное. А о
>портах. Я просто хочу понять, как ограничение на 65535 портов сказывается
>на работе серверов с большим количеством подключеней
>
>>и (как уже отмечали товарищи) - там стоят кластеры..
>Это в данном случае значения не имеет.
Как раз имеет :) если уж очень надо обрабатывать больше 64k транспортов,
то ставяться зеркальные сервера и какой-то умный шлюз для балансировки нагрузки
В реальности балансировку начинают делать задолго до исчерпания ресурсов портов, потому как прочие ресурсы исчерпываются гоораздо раньше :)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от FractalizeR email(??) on 28-Ноя-06, 14:19 
>Да - UDP, если интерестно, посмотрите на генерируемый трафик (любым снифером)
>Клиент периодически (скажем раз в 10-20 сек) шлёт пакет серверу,
>этот пакет приходит на порт скажем 4040, на этот же порт (и
>тот же сокет) приходят все пакеты от других клиентов..на приёме для
>каждого принятого пакета на уровне приложения уже выясняется от кого конкретно
>он пришёл и что делать дальше
Да, наверное, это возможно. Правда, конечно, нужна авторизация и проверка сервером пакетов, чтобы клиент не мог притвориться другим клиентом, если коммуникация идет по UPD протоколу. Кстати, странно, что все пакеты валятся в один сокет. Это может быть только сокет типа raw. Для приема подключения от каждого клиента ведь все равно сокет надо создавать.


>>>во вторых работают они в основном от пользователя-до-пользователя,
>>Но ведь клиент все равно висит online у сервера, получая от него
>>оповещения о выходе в сеть пользователей из списка контактов и так
>>далее.
>Есть в природе ещё и таймеры :) если от клиента в течении
>минуты не пришло ни одного пакета - считаем что клиент в
>отвале и по контакт-листу рассылаем извещение о смене состояния.. всё на
>уровне приложения; держать TCP чтобы отслеживать состояние клиента - слишком накладно
Ну, засыпать сервер пингами так часто, конечно, тоже не выход. Маленький DDOS получается :)

>>>  то есть по возможности не привлекая ресурсов центральных серверов
>>Мы ведем разговор не о ресурсах, как вы заметили, наверное. А о
>>портах. Я просто хочу понять, как ограничение на 65535 портов сказывается
>>на работе серверов с большим количеством подключеней
>>
>>>и (как уже отмечали товарищи) - там стоят кластеры..
>>Это в данном случае значения не имеет.
>Как раз имеет :) если уж очень надо обрабатывать больше 64k транспортов,
>то ставяться зеркальные сервера и какой-то умный шлюз для балансировки нагрузки
>В реальности балансировку начинают делать задолго до исчерпания ресурсов портов, потому как >прочие ресурсы исчерпываются гоораздо раньше :)
А причем тут теперь 64К транспортов? И что подразумевается под транспортом?


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

15. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от vic (??) on 28-Ноя-06, 15:36 
>Кстати, странно, что все пакеты валятся в один сокет.
>Это может быть только сокет типа raw. Для приема подключения от
>каждого клиента ведь все равно сокет надо создавать.
>

Нет не странно. Сокеты udp тоже.
Только для tcp креатиться дескриптор (сокет), т.к. создается виртуальное соединение (для его идентификации как раз дескриптор и нужен).

>>Есть в природе ещё и таймеры :) если от клиента в течении
>>минуты не пришло ни одного пакета - считаем что клиент в
>>отвале и по контакт-листу рассылаем извещение о смене состояния.. всё на
>>уровне приложения; держать TCP чтобы отслеживать состояние клиента - слишком накладно
>Ну, засыпать сервер пингами так часто, конечно, тоже не выход. Маленький DDOS получается :)
Не получается. Т.к. есть разные схемы отслеживания состояния клиента и посылка уведомления о состоянии мало чем отличается от обычной активности. И в любом случае любая резализация проверки состояния - это отсылка пакета по таймауту... кстати TCP никак не отслеживает состояние клиента (исключение - включенный режим keepalive).

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

16. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от Мимо проходил on 28-Ноя-06, 15:51 
>>Да - UDP, если интерестно, посмотрите на генерируемый трафик (любым снифером)
>>Клиент периодически (скажем раз в 10-20 сек) шлёт пакет серверу,
>>этот пакет приходит на порт скажем 4040, на этот же порт (и
>>тот же сокет) приходят все пакеты от других клиентов..на приёме для
>>каждого принятого пакета на уровне приложения уже выясняется от кого конкретно
>>он пришёл и что делать дальше
>Да, наверное, это возможно. Правда, конечно, нужна авторизация и проверка сервером пакетов,
>чтобы клиент не мог притвориться другим клиентом, если коммуникация идет по
>UPD протоколу. Кстати, странно, что все пакеты валятся в один сокет.
>Это может быть только сокет типа raw. Для приема подключения от
>каждого клиента ведь все равно сокет надо создавать.
нет - для UDP это будет один сокет типа DGRAM который будет ассоциирован с одним конкретным портом (адресом) и на который все клиенты шлют пакеты..

>
>
>>>>во вторых работают они в основном от пользователя-до-пользователя,
>>>Но ведь клиент все равно висит online у сервера, получая от него
>>>оповещения о выходе в сеть пользователей из списка контактов и так
>>>далее.
>>Есть в природе ещё и таймеры :) если от клиента в течении
>>минуты не пришло ни одного пакета - считаем что клиент в
>>отвале и по контакт-листу рассылаем извещение о смене состояния.. всё на
>>уровне приложения; держать TCP чтобы отслеживать состояние клиента - слишком накладно
>Ну, засыпать сервер пингами так часто, конечно, тоже не выход. Маленький DDOS
>получается :)
опять-же нет.. к примеру на 10k клиентов постоянно держать TCP это практически гарантированный DDOS, а принимать 1k маленьких udp пакетов в секунду - просто плотненькая нагрузка (каждый клиент шлёт пакет раз в 10 сек)

>>>>  то есть по возможности не привлекая ресурсов центральных серверов
>>>Мы ведем разговор не о ресурсах, как вы заметили, наверное. А о
>>>портах. Я просто хочу понять, как ограничение на 65535 портов сказывается
>>>на работе серверов с большим количеством подключеней
>>>
>>>>и (как уже отмечали товарищи) - там стоят кластеры..
>>>Это в данном случае значения не имеет.
>>Как раз имеет :) если уж очень надо обрабатывать больше 64k транспортов,
>>то ставяться зеркальные сервера и какой-то умный шлюз для балансировки нагрузки
>>В реальности балансировку начинают делать задолго до исчерпания ресурсов портов, потому как >прочие ресурсы исчерпываются гоораздо раньше :)
>А причем тут теперь 64К транспортов? И что подразумевается под транспортом?

порт - это транспортный адрес..ip - сетевой..mac- физический :)
дескриптор - можно сказать логический в пространстве процесса
сокет - просто интерфейсное понятие в Berkeley стеке

надо бы Вам книжек почитать всяких :)
да попрактиковаться чутка

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

17. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от FractalizeR email(??) on 28-Ноя-06, 16:13 
Тогда меня еще такой вопрос интересует.

Если не существует постоянного TCP соединения между сервером ICQ и клиентом, каким образом сервер отправляет клиенту оповещение о появлении клиента Online? Ведь ICQ прекрасно работает и за NAT. В случае, если клиент находится за NAT, сервер не может инициировать соединение. Если же предположить, что отправка такой информации происходит в момент пинга клиента сервером, то тогда получается, что каждые 10 секунд сервер выполняет запрос по базе данных в поисках подключений "друзей" клиента, о которых клиент еще не оповещен.


>надо бы Вам книжек почитать всяких :)
>да попрактиковаться чутка
Я рад, что вы все знаете, а я ничего. Но тем не менее, я не вижу причины для насмешки. На форумах люди задают вопросы как раз потому, что они чего-то не знают. Если я и не знаю, как устроен UDP сокет, то очень даже неплохо разбираюсь в некоторых других вопросах. Если хотите мне порекомендовать хорошую литературу по данному - я буду рад.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

18. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от vic (??) on 28-Ноя-06, 17:28 
>Если не существует постоянного TCP соединения между сервером ICQ и клиентом, каким
>образом сервер отправляет клиенту оповещение о появлении клиента Online? Ведь ICQ
>прекрасно работает и за NAT. В случае, если клиент находится за
>NAT, сервер не может инициировать соединение.
Ну это надо у проограммистов ICQ-сервера спросить как у _них_ реализовано.

>Если же предположить, что отправка
>такой информации происходит в момент пинга клиента сервером, то тогда получается,
>что каждые 10 секунд сервер выполняет запрос по базе данных в
>поисках подключений "друзей" клиента, о которых клиент еще не оповещен.
Если преположить, то да, возможно. Но реализация может быть иной. Нет общего правила как это делать.

>>надо бы Вам книжек почитать всяких :)
>>да попрактиковаться чутка
>Я рад, что вы все знаете, а я ничего. Но тем не
>менее, я не вижу причины для насмешки.
А нету насмешки. Просят книги почитать.

>На форумах люди задают
>вопросы как раз потому, что они чего-то не знают. Если я
>и не знаю, как устроен UDP сокет, то очень даже неплохо
>разбираюсь в некоторых других вопросах.
Форумы для того чтобы обмениваться знаниями и спрашивать то что не написано в мануалах.
Если вы не знаете как устроен UDP-сокет, то в первую очередь следует прочесть про это в соответсвующей литературе или RFC, и только после этого на форум, а не наоборот.
Большенство вопросов по сетям исчезают после прочтения RFC. Причем более точного и правильного ответа чем в RFC вы не найдете ни в одном форуме.

>Если хотите мне порекомендовать хорошую литературу
>по данному - я буду рад.
RFC есть истина, книги - это комменты к RFC, гугль и man тоже рулят. А Стивенса вам уже рекламировали.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

19. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от FractalizeR email(??) on 28-Ноя-06, 18:23 
Спасибо за ответ.

Кстати, количество информации в интернете сейчас таково, что на любой вопрос можно ответить: google it. Но ведь форумы существуют не для этого, не так ли?

RFC и прочие документы я, конечно, прочту. Но займет это у меня несколько дней. И книгу прочту. Но займет это больше недели (пока она еще ко мне придет). А ответ на вопрос мне нужен был быстрее, чтобы знать, в каком направлении двигаться. Ведь в любой более-менее сложной задаче вариантов решения всегда больше одного.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

20. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от vic (??) on 28-Ноя-06, 19:08 
>Спасибо за ответ.
>
>Кстати, количество информации в интернете сейчас таково, что на любой вопрос можно
>ответить: google it. Но ведь форумы существуют не для этого, не
>так ли?

Вот-вот самый быстрый вариант погуглить. Ну а если не нашлось, то на форум. Но не наоборот! =)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

21. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от FractalizeR email(??) on 28-Ноя-06, 19:14 
А вы попробуйте погуглить :)
Например, найти ответ на вопрос о том, насколько ресурсоемко держать, скажем, 10к TCP подключений
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

22. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от vic (??) on 28-Ноя-06, 23:13 
>А вы попробуйте погуглить :)
>Например, найти ответ на вопрос о том, насколько ресурсоемко держать, скажем, 10к
>TCP подключений

Даже гуглить не буду, ответ знаю - зависит от реализации. И не потому что я что-то знаю про TCP, просто вопрос из серии "сколько поместится ангелов на кончике иглы".

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

23. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от FractalizeR email(ok) on 29-Ноя-06, 00:18 
>Даже гуглить не буду, ответ знаю - зависит от реализации. И не
>потому что я что-то знаю про TCP, просто вопрос из серии
>"сколько поместится ангелов на кончике иглы".


Не согласен. Насколько я понял из нашего обсуждения, дело не в реализации. При любой реализации программы типа ICQ messenger использование TCP будет неоптимально с точки зрения просто расходования ресурсов сервера.
Например, вот тут http://msdn.microsoft.com/msdnmag/issues/05/08/HighPerforman... проводится опыт по количеству одновременных подключений для сервера. Выясняется, что компьютер автора не держит одновременно более 4000 тысяч просто подключений TCP и объясняется причина. А с толку меня сбил Editor Update про ephemeral port range. Я его неправильно понял.

В принципе, обсуждение можно считать закрытым. Ответ такой: сервер ICQ при приеме клиентских подключений использует UDP порт. При приеме данных от клиентов все данные валятся в один этот порт, потому что UDP connectionless протокол. Новые сокеты на каждого клиента не создаются.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

24. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от PavelR (??) on 29-Ноя-06, 07:22 

>В принципе, обсуждение можно считать закрытым. Ответ такой: сервер ICQ при приеме
>клиентских подключений использует UDP порт. При приеме данных от клиентов все
>данные валятся в один этот порт, потому что UDP connectionless протокол.
>Новые сокеты на каждого клиента не создаются.

Если вы говорите именно про реализацию ICQ  - то говорите глупости про UDP порты.
Не используются они там. Равно как не используются они и в Jabber.


Любое TCP соединение можно идентифицировать по набору {локальный ip,локальный порт, удаленный ip, удаленный порт}.

При установке соединения локальная система может выделять номер локального порта самостоятельно, если он не указан программой, открывающей соединение.
посмотреть например можно netstat -an |grep ESTABLISHED

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

27. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от FractalizeR email(??) on 29-Ноя-06, 12:51 
>Если вы говорите именно про реализацию ICQ  - то говорите глупости
>про UDP порты.
>Не используются они там. Равно как не используются они и в Jabber.
Да, вы правы. Сейчас не используются. Раньше, правда, использовались:
http://icq2000cc.hobi.ru/page1.html
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

25. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от vic (??) on 29-Ноя-06, 12:24 
>
>Не согласен. Насколько я понял из нашего обсуждения, дело не в реализации.
Неправильно поняли. Именно в реализации.

>При любой реализации программы типа ICQ messenger использование TCP будет неоптимально
>с точки зрения просто расходования ресурсов сервера.
Вы реализовывали чтобы так говорить?

>Например, вот тут http://msdn.microsoft.com/msdnmag/issues/05/08/HighPerforman... проводится опыт по количеству одновременных подключений для сервера.
Не надо приводить ссылки на MSDN в форуме для *nix :) Вас не поймут.

>Выясняется, что компьютер автора не держит одновременно более 4000 тысяч просто
>подключений TCP и объясняется причина. А с толку меня сбил Editor
>Update про ephemeral port range. Я его неправильно понял.
Так тож винда :) Для нее и одно соединение TCP ресурсоемко))

>
>В принципе, обсуждение можно считать закрытым. Ответ такой: сервер ICQ при приеме
>клиентских подключений использует UDP порт. При приеме данных от клиентов все
>данные валятся в один этот порт, потому что UDP connectionless протокол.
>Новые сокеты на каждого клиента не создаются.

Замечательно, а как вы тогда объясните почему у меня работает аська, если я за прокси сижу, который UDP не пускает, только http-траффик (т.е. собственно TCP) =)
Мистика какая-то=)

Все таки надо читать мануалы... и не за подписью мирософта...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

26. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от Niam (??) on 29-Ноя-06, 12:49 
>Замечательно, а как вы тогда объясните почему у меня работает аська, если
>я за прокси сижу, который UDP не пускает, только http-траффик (т.е.
>собственно TCP) =)
>Мистика какая-то=)

А не через прокси сидиш?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

28. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от FractalizeR email(??) on 29-Ноя-06, 13:03 
>>
>>Не согласен. Насколько я понял из нашего обсуждения, дело не в реализации.
>Неправильно поняли. Именно в реализации.
Тогда помогите мне понять, какова должна быть оптимальная реализация.

>
>>При любой реализации программы типа ICQ messenger использование TCP будет неоптимально
>>с точки зрения просто расходования ресурсов сервера.
>Вы реализовывали чтобы так говорить?
Нет, я не реализовывал, к сожалению. Я просто прочитал статью в MSDN, ссылку на которую я приводил.

>Не надо приводить ссылки на MSDN в форуме для *nix :) Вас
>не поймут.
Если это шутка, я посмеюсь вместе с вами :)) Если вы заметили, на главной странице портала opennet.ru крутится баннер Microsoft :)))
Если вы серьезно, но я не являюсь фанатом Microsoft, равно как и Linux. И не понимаю, почему меня должны побить камнями за ссылку на msdn. Разве мы живем в дикое, варварское время? :)


>>Выясняется, что компьютер автора не держит одновременно более 4000 тысяч просто
>>подключений TCP и объясняется причина. А с толку меня сбил Editor
>>Update про ephemeral port range. Я его неправильно понял.
>Так тож винда :) Для нее и одно соединение TCP ресурсоемко))
Вы и правда так ненавидите Windows?

>>В принципе, обсуждение можно считать закрытым. Ответ такой: сервер ICQ при приеме
>>клиентских подключений использует UDP порт. При приеме данных от клиентов все
>>данные валятся в один этот порт, потому что UDP connectionless протокол.
>>Новые сокеты на каждого клиента не создаются.
>
>Замечательно, а как вы тогда объясните почему у меня работает аська, если
>я за прокси сижу, который UDP не пускает
Честно говоря, я вас хотел об этом спросить :)

только http-траффик (т.е. >собственно TCP) =) >Мистика какая-то=)
Мне казалось, что HTTP и TCP - это совсем разные вещи. Разве не так? HTTP работает поверх TCP. Или вы просто к ICQ серверу законнектились на 80 порт?

>Все таки надо читать мануалы... и не за подписью мирософта...
А чем плохи мануалы за подписью Microsoft? Не разделяю вашей ненависти к БГ.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

29. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от FractalizeR email(??) on 29-Ноя-06, 14:39 
>>В принципе, обсуждение можно считать закрытым. Ответ такой: сервер ICQ при приеме
>>клиентских подключений использует UDP порт. При приеме данных от клиентов все
>>данные валятся в один этот порт, потому что UDP connectionless протокол.
>>Новые сокеты на каждого клиента не создаются.
>
>Замечательно, а как вы тогда объясните почему у меня работает аська, если
>я за прокси сижу, который UDP не пускает, только http-траффик (т.е.
>собственно TCP) =)
>Мистика какая-то=)

Я думаю, я мог бы попытаться объяснить это явление таким образом:
http://alumnus.caltech.edu/~dank/peer-nat.html
http://en.wikipedia.org/wiki/UDP_hole_punching

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

30. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от FractalizeR email(ok) on 29-Ноя-06, 14:47 
>Я думаю, я мог бы попытаться объяснить это явление таким образом:
>http://alumnus.caltech.edu/~dank/peer-nat.html
>http://en.wikipedia.org/wiki/UDP_hole_punching

Хотя нет, я не прав, конечно. Эти статьи немного другие методы описывают.

Если ваш firewall режет UDP, это значит, что ICQ у вас 2000 или старше (протокол версии 7 или старше) и работает через TCP :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

31. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от aljaba email(??) on 29-Ноя-06, 18:34 
может я глупость говорю, но не проще было посмотреть исходники какого-нибудь клиента, и там, наверника, можно увидеть какие сокеты создаются... И кстати, тогда наверное и станет понятно
как  программа работает с контакт-листом....

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

32. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от FractalizeR email(ok) on 29-Ноя-06, 19:21 
>может я глупость говорю, но не проще было посмотреть исходники какого-нибудь клиента,
>и там, наверника, можно увидеть какие сокеты создаются... И кстати, тогда
>наверное и станет понятно
>как  программа работает с контакт-листом....

Нет, вы совершенно правильно говорите. Я смотрел исходники iserverd, но разобраться, не имея хотя бы общего описания архитектуры немного сложновато. Да и ICQ протоколы поменялись сильно. Я, конечно, все же попробую.

Мне хотелось бы понять, почему ICQ-шники перешли все-таки на TCP-IP протокол с UDP.... Ведь UDP намного легче. Хотя, конечно, сбор пакета информации из кусочков, контроль очередности поступления пакетов тоже отнимают время у сервера....

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

33. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от ip (??) on 29-Ноя-06, 21:32 
вы непонимаете чем udp от tcp отличаеться
а хотите понять чем один лучше другого

PS: секьюрные системы на udp не рекомендуеться строить

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

34. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от FractalizeR email(ok) on 29-Ноя-06, 23:41 
>вы непонимаете чем udp от tcp отличаеться
>а хотите понять чем один лучше другого

Грубо говоря, IP протокол обеспечивает гарантированную доставку пакетов получателю в той последовательности, в которой они были отправлены. При отправке пакетов между двумя точками устанавливается соединение. Каждый пакет имеет свой порядковый номер так, чтобы постороннему нельзя было вставить свой пакет в середине передачи.

В случае с UDP всего этого нет. Мы просто берем пакет и выстреливаем его в порт получателя. Дойдет он или нет, мы не знаем. Возможно, он придет. Возможно, их придет два одинаковых. Возможно он не придет вообще. Соединение не устанавливается. Пакеты номера не имеют и могут приходить получателю в любой последовательности.

Я прав?

>PS: секьюрные системы на udp не рекомендуеться строить
Все зависит от реализации протокола. И на UDP можно построить защищенный протокол. Возьмите хотя бы протокол общения с Ява-картой (я имею ввиду GlobalPlatform/OpenCard). Переносим его на UDP, обеспечиваем сборку пакетов в нужной последовательности и ACK на получение пакета и получаем защищенный протокол. Чего проще-то....

Я просто пытаюсь понять, насколько открытые TCP соединения на сервере поедают ресурсы самого сервера.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

35. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от aljaba email(??) on 01-Дек-06, 16:07 
>
>Грубо говоря, IP протокол обеспечивает гарантированную доставку пакетов получателю в той последовательности,
>в которой они были отправлены. При отправке пакетов между двумя точками
>устанавливается соединение. Каждый пакет имеет свой порядковый номер так, чтобы постороннему
>нельзя было вставить свой пакет в середине передачи.
>
>В случае с UDP всего этого нет. Мы просто берем пакет и
>выстреливаем его в порт получателя. Дойдет он или нет, мы не
>знаем. Возможно, он придет. Возможно, их придет два одинаковых. Возможно он
>не придет вообще. Соединение не устанавливается. Пакеты номера не имеют и
>могут приходить получателю в любой последовательности.
>
>Я прав?
>

На сколько я разбираюсь с сокетами, то да.

>Я просто пытаюсь понять, насколько открытые TCP соединения на сервере поедают ресурсы >самого сервера...


Я думаю не много....

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

36. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от FractalizeR email(ok) on 01-Дек-06, 17:48 
>>Я просто пытаюсь понять, насколько открытые TCP соединения на сервере поедают ресурсы >самого сервера...
>
>
>Я думаю не много....

Спасибо. На всякий случай я заказал вот это: http://www.amazon.com/gp/product/159327047X/002-6458284-6508814

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

37. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от lol on 24-Фев-07, 02:55 
vista wallpaper http://vistawallpaper.8m.com


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

38. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от Владимир Данилов on 10-Янв-10, 02:45 
Ни один ответ не верный. Объясняю, в чем тут проблема. Как известно, 20 лет назад двое студентов создали айсик'ю. Но они поняли, что протокол 'ткп' им не подходит, и они создали свой протокол, который назвали так же как и свой проект. В отличии от ткп, этот протокол не включает порты, а создает уникальный идентификатор для каждого, кто вошел в систему переписки. Протокол айсик'ю постоянно обновляет список идентификаторов, для определения нахождения в состоянии онлайн.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

39. "Как работает сервер ICQ (нельзя держать открытыми более 6553..."  +/
Сообщение от FractalizeR email(??) on 10-Янв-10, 16:05 
>протокол 'ткп' им не подходит, и они создали свой протокол, который
>назвали так же как и свой проект.

Они действительно создали свой протокол, но работает он поверх TCP (который, кстати, читается как "ти-си-пи", а не "тк


>В отличии от ткп, этот протокол не включает порты, а создает уникальный идентификатор для каждого, кто вошел в систему переписки. Протокол айсик'ю постоянно обновляет список идентификаторов, для определения нахождения в состоянии онлайн.

В каком смысле "не включает порты"? Порты - это другой уровень, который обеспечивается как раз TCP.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру