Re[3]: Как работает сервер ICQ (нельзя открыть более65535 по
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 27.11.06 15:12
Оценка: 59 (8)
Здравствуйте, FractalizeR, Вы писали:

N>>Хехе. Вот например SMTP-сервер. К нему соединились на порт 25. Вы думаете, это только запрос пошёл на 25-й, а соединение установлено с другим портом? Нет, всё с тем же 25.


FR>Я не совсем понимаю этот механизм установки соединения. Вы не могли бы мне разъяснить? Я задавал этот вопрос на нескольких форумах и убедился, что в основной массе народ не понимает этого механизма.


Я не знаю, как разъяснить, потому что не понимаю, что тут непонятно.:)) Уточните вопрос.

FR>Сервер. К нему коннектятся клиенты на порт, скажем, 3306. Разве для приема подключения от клиента не выделяется другой локальный порт?


_Порт_ — не выделяется. Выделяется _сокет_ (в модели BSD sockets), endpoint (в модели TLI/XTI). Но у этого сокета оказывается локальный адрес (хост, порт) такой же как у слушающего.

Пожалуй, чтобы понять это, надо понять следующие вещи:

1. Устанавливаемое, установленное или заканчивающееся соединение идентифицируется 4-мя параметрами: {хост1, порт1, хост2, порт2} и соединение с такими четырьмя параметрами может быть (для хост1, хост2) только одним. Совпадение номера порта с одной стороны с номером порта какого-то другого соединения не имеет никакого значения: идентификация соединения идёт по всем четырём параметрам.
Так как сокет установленного TCP соединения не может быть переделан во что-то другое — можно только закрыть его и соединение — тут конфликта нет.

2. Сокет слушающий — это другой тип сокета. У него есть только локальный адрес (хост и порт, причём хост может быть INADDR_ANY). Но когда приходит запрос на соединение и если этот запрос начинает отрабатываться положительно (то есть сервер принимает это соединение) — мы уже имеем дело со всеми четырьмя параметрами, то есть получается случай 1.
Поэтому может получиться картина вот такого вот типа (живой листинг из FreeBSD, только адреса замаскированы)

d6822140 tcp4 0 48 10.0.0.107.25 10.0.0.11.57138 ESTABLISHED
d6834c80 tcp4 0 0 10.0.0.107.25 192.168.32.30.62075 ESTABLISHED
d67eb3c0 tcp4 0 0 10.0.0.107.25 10.0.0.133.62261 ESTABLISHED
d685c700 tcp4 0 0 10.0.0.107.25 10.0.0.104.55962 ESTABLISHED

первая колонка — адрес структуры сокета в ядре, пятая — локальный адрес (a.b.c.d.порт), шестая — удалённый.
Здесь 4 живых соединения — у всех локальный адрес 10.0.0.107:25 — на нём сервер принимает соединения. А удалённые адреса при этом все разные. И процессы все разные, в общем случае могут даже принадлежать разным пользователям.

А теперь почему при исходящих соединениях все порты разные (что Вас наверняка и привело к идее что все порты всегда разные). Вообще-то это недооптимизация. Исходящие соединения могут быть с заранее заданным локальным адресом (тут понятно, что нужен свой отдельный порт) и без заранее заданного (таких большинство). Так вот, во втором случае никто не мешает в принципе всем таким назначить такой порт, что среди занятых другими соединениями и удалённые адреса не совпадают (а то был бы конфликт идентификации соединений). Например, если один установил коннект с 10.0.0.107:25, а ему дали локальный 10.0.0.200:1024; второй — на 10.0.0.106:25, ему дали тот же 10.0.0.200:1024; третий — снова на 10.0.0.107:25, ему нельзя дать такой же, дают 10.0.0.200:1025. Да, можно и так сэкономить порты. Просто пока никого настолько не припекло. А вот если локальный порт зафиксирован (например, сообщить в другом соединении о разрешении файрволлу) — опаньки, такое занимать уже нельзя, потому что может быть конфликт соединений в будущем.

И, наконец, для UDP такой идентификации соединений и разбрасывания по сокетам и процессам не получится — поэтому там одному порту соответствует один сокет, или же начнутся дикие извраты с балансировкой. Вот там бывает, что договариваются о других портах. Но это уже явный договор, а не происки ядра.

Я понятно рассказал?
The God is real, unless declared integer.
Re: Как работает сервер ICQ (нельзя открыть более65535 порто
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 26.11.06 14:18
Оценка: 2 (2) +4
Здравствуйте, FractalizeR, Вы писали:

FR>Добрый день.


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


Хехе. Вот например SMTP-сервер. К нему соединились на порт 25. Вы думаете, это только запрос пошёл на 25-й, а соединение установлено с другим портом? Нет, всё с тем же 25.

Установленные соединения для TCP определяются четырьмя параметрами — {хост1, порт1, хост2, порт2}. Если хост1, порт1 зафиксированы (как у обычного сервера), хост2 и порт2 могут быть любыми и от этого конфликта не возникает. Потому и не нужно на каждое такое соединение свой порт заводить. И соединений может быть хоть миллион, всё равно с серверной стороны достаточно одного хоста и порта.

(Впрочем, в случае ICQ вполне возможно, что там ещё специальный переходник "разбрасывает" соединения на разные внутренние хосты в зависимости, например, от хэша построенного на {хост2, порт2}. Ничего в стеке этому не противоречит.)
The God is real, unless declared integer.
Re[3]: peer2peer
От: remark Россия http://www.1024cores.net/
Дата: 30.11.06 16:32
Оценка: 6 (2)
Здравствуйте, FractalizeR, Вы писали:

_>>один из вариантов: login сервер переадресовывает запрос на подключение на один из виртуальных серверов в кластере.


FR>Да, это возможно. Но.... Я только что зашел в Скайп. Он показывает — 6 530 813 пользователей онлайн. Что составит примерно 100 серверов.Неужели у них датацентр такой?


В Скайп нет серверов — это peer2peer — каждый клиентский компьютер — сервер. В т.ч. и твой Если он не за NAT.
Именно в этом причина его безграничной масштабируемости и возможности поддерживать миллионы клиентов.


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[4]: peer2peer
От: FractalizeR  
Дата: 30.11.06 17:46
Оценка: +2
R>В Скайп нет серверов — это peer2peer — каждый клиентский компьютер — сервер. В т.ч. и твой Если он не за NAT.
R>Именно в этом причина его безграничной масштабируемости и возможности поддерживать миллионы клиентов.

Вы не правы. Как тогда я могу отправить сообщение на скайп своего друга? Кто подскажет, на какой IP Skype должен отправить сообщение? Кто уведомит меня о том, что мой друг вышел online с такого-то IP? Кто обеспечит поддержку UDP hole punching, чтобы клиенты, которые оба сидят за NAT могли обмениваться сообщениями? Кто обеспечит поддержку SkypeOut, SkypeIn?
Re[9]: Как работает сервер ICQ (нельзя открыть более65535 по
От: remark Россия http://www.1024cores.net/
Дата: 06.03.07 11:22
Оценка: -2
Здравствуйте, FractalizeR, Вы писали:


FR>http://www.coversant.net/Products/SoapBoxServer/Features/tabid/98/Default.aspx


FR>Scalability

FR>Independently verified tests show SoapBox Server 2007 Enterprise Edition scales to over 100,000 simultaneous users on a single machine. The server is designed for high traffic volumes. Речь идет о сервере типа messanger, написанного целиком на C#.

FR>http://www.coversant.net/dotnetnuke/Coversant/Blogs/tabid/88/EntryID/10/Default.aspx — это тоже интересно.

FR>This architecture is where we’re at today. It handles over 100,000 simultaneous users without breathing hard, and has been over 500,000 a few times in the lab (the issue has always been client firepower, not server horsepower)

Спасибо за ссылочки
Ребята уже решают проблему МегаЮзера, а Kegel всё со своим С10К
Windows


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[8]: Как работает сервер ICQ (нельзя открыть более65535 по
От: FractalizeR  
Дата: 05.03.07 10:37
Оценка: 18 (1)
http://www.coversant.net/Products/SoapBoxServer/Features/tabid/98/Default.aspx

Scalability
Independently verified tests show SoapBox Server 2007 Enterprise Edition scales to over 100,000 simultaneous users on a single machine. The server is designed for high traffic volumes. Речь идет о сервере типа messanger, написанного целиком на C#.

http://www.coversant.net/dotnetnuke/Coversant/Blogs/tabid/88/EntryID/10/Default.aspx — это тоже интересно.
This architecture is where we’re at today. It handles over 100,000 simultaneous users without breathing hard, and has been over 500,000 a few times in the lab (the issue has always been client firepower, not server horsepower)
Re[5]: peer2peer
От: squiz  
Дата: 09.12.06 11:18
Оценка: 16 (1)
Здравствуйте, FractalizeR, Вы писали:

FR>Вы не правы. Как тогда я могу отправить сообщение на скайп своего друга? Кто подскажет, на какой IP Skype должен отправить сообщение? Кто уведомит меня о том, что мой друг вышел online с такого-то IP? Кто обеспечит поддержку UDP hole punching, чтобы клиенты, которые оба сидят за NAT могли обмениваться сообщениями? Кто обеспечит поддержку SkypeOut, SkypeIn?


Советую почитать здесь skype_BHEU06.handout.pdf и ваши вопросы отпадут.
Never underestimate those behind you...
Re[7]: peer2peer
От: remark Россия http://www.1024cores.net/
Дата: 04.12.06 17:43
Оценка: 10 (1)
Здравствуйте, FractalizeR, Вы писали:

R>>Определённые сервера, конечно, есть. Но они только являются инфраструктурной поддержкой, они не являются серверами в традиционном смысле этого слова, т.е. все не направляют к ним все запросы.


FR>Если обмен сообщениями между клиентами невозможен в силу того, например, что оба клиента находятся за NAT сервер должен транслировать эти сообщения обоим клиентам.


Да. Только в роли сервера в Skype не выступает некий Сервер_Который_Специально_Для_Этого_Установил_Skype. В роли сервера выступает любой peer-компьютер, (1) на который установлен Skype, (2) которой сам не находится за NAT. Вопрос его локации — отдельный вопрос. В этом может посодействовать какой-то централизованный Сервер_Который_Специально_Для_Этого_Установил_Skype, либо это может быть peer-компьютер, который выбран в качестве сервера, или его адрес может быть банально кэширован, тогда вообще никаких обращений ни к каким централизованным серверам не будет. Но даже если для локации компьютера-посредника было обращение к центролизованному серверу, всё остальное будет обрабатываться уже посредником. Т.о. централизованным серверам не надо держать миллионы коннектов.


FR>Кто-то должен проверять логин клиента при его подключении и обеспечить безопасность соединения, чтобы один клиент не выдал себя за другого. Эти серверы являются основными серверами Skype сети, без которых сеть не сможет работать.


Что будет, если американские телекоммуникационные компании лоббируют закон, что бы все американские интернет-провайдеры закрыли доступ к Skype-серверам? Skype будет недоступен в Америке? А вот и неправильно! Skype будет работать как работал!


FR>Разумеется, мой компьютер этого сделать не сможет. Ему может даже быть неизвестен адрес гейта NAT в интернет. Мне кажется, вы плохо представляете себе как происходит обмен информацией между клиентами, находящимися за NAT. Попробуйте прочитать вот это: http://www.brynosaurus.com/pub/net/p2pnat/


Похоже это Вы плохо представляете как работают p2p
Скайп установлен? Посмотри лицензионное соглашение повнимательнее. Строчки типа "... через пользовательский компьютер может проходить служебный трафик системы Skype..." Как ты думаешь, о чём это?



1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[9]: peer2peer
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 15.06.07 06:47
Оценка: 4 (1)
Здравствуйте, ironwit, Вы писали:

I>Здравствуйте, netch80, Вы писали:


I>оффтопный вопрос.

I>где такими вещами занимаются? имеется в виду сервера, распределенные сервера, SIP итд?
I>реально мне интересна такая тема. чтото похожее делаю на текущей работе но приходится просто много изобретать велосипедов. с большим бы удовольствием ушел в крепкую команду студентом :) хоть вроде и не сильно студент :)

www.portaone.com
программисты — в Киеве.
The God is real, unless declared integer.
Re[7]: Как работает сервер ICQ (нельзя открыть более65535 по
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 28.02.07 20:34
Оценка: 1 (1)
Здравствуйте, Ed.ward, Вы писали:

N>>Кто на ком стоял?

N>>По-моему, Вы ничего не поняли. Или же очень странно излагаете. Попробуйте переформулировать.
EW>Кто стоял на ком стоял, это к чему вообще?

К стилю изложения.

EW>Когда я вызываю accept у listen сокета он мне возвращает сокет причем локальный порт у этого сокета не равен порту у listen сокета...


Вы в этом точно уверены? Именно локальный порт, именно после accept? Тогда расскажите, где можно такую интересную реализацию найти. Потому что ни BSD sockets, ни Winsock такого не даёт.

EW>Хотелось бы узнать как повторить вот такую чарующую картину

EW>

EW>d6822140 tcp4 0 48 10.0.0.107.25 10.0.0.11.57138 ESTABLISHED
EW>d6834c80 tcp4 0 0 10.0.0.107.25 192.168.32.30.62075 ESTABLISHED
EW>d67eb3c0 tcp4 0 0 10.0.0.107.25 10.0.0.133.62261 ESTABLISHED
EW>d685c700 tcp4 0 0 10.0.0.107.25 10.0.0.104.55962 ESTABLISHED


Я для неё ничего особенного не делал. Стандартные listen() и accept().

EW>>>При этом все равно остаются какие-то ограничения? На кол-во сокетов? На кол-во входящих TCP соединений.

N>>Естественно, есть определённые системные ограничения.
EW>Ессно есть, какие?
EW>На кол-во сокетов? сколько?

В вашей системе — без малейшего понятия, сколько. У себя я вот так могу посмотреть:

$ sysctl -a | grep maxfiles
kern.maxfiles: 8168
kern.maxfilesperproc: 7351

это на всё что ядру видно в качестве "файлового объекта", хотя ограничения на разном уровне (первое — на уровне ofile, второе — filedesc).

EW>а кол-во входящих TCP соединений? сколько?

EW>еще какие-нибудь?

Опять же, без малейшего понятия. Изучайте документацию по вашей системе.

EW>>>Меня вопрос как сделать сервер очень интересует

EW>>>И хотя 65535 клиентов будет вряд-ли, хотелось бы сделать что-нить расширяемое...
EW>>>Например можно открывать сокет только для отправки данных, а потом сразу его закрывать.
N>>Чушь.
EW>Гемоглобин 200!
EW>>> ( Сильно, кстати, нагрузит сервер именно постоянная обработка входящих соединений? )
N>>Ровно на столько, на сколько он должен быть нагружен.
EW>Я спрашивал про accept.

Не понимаю, каким образом из словосочетания "постоянная обработка входящих соединений" можно было сделать вывод, что вопрос про accept() и какие-то странные оценки его производительности (при чём тут она? в любом случае затраты на accept() будут ничтожны по сравнению с работой приложения)

EW>>>Или проверять сколько времени он не использовался и закрывать...

EW>>>Для keep alive использовать UDP...
N>>Поверх TCP? Смените траву.
EW>Поверх какого TCP?????
EW>Для передачи данных — TCP с закрытием сразу или по неактивности, для keep alive — UDP.
EW>Сменить не против — подЕлитесь своей?

Моя Вам не подойдёт. А какой смысл открывать ещё и связь по UDP? Что-то у Вас в дизайне сильно не то.

EW>>>Но это все равно не гарантирует, что не будет 65535 одновременно входящих соединений

EW>>>Как быть?
N>>Прочитать наконец учебную литературу и перестать бредить.
EW>Посоветуйте же мне учебную литературу в электронном варианте, научно-популярную — мне skype не писать...

Тут на сайте есть несколько неплохих начальных статей.
В остальном я бы рекомендовал Стивенса. Где берут в электронном виде — не знаю.
The God is real, unless declared integer.
Re[12]: peer2peer
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 05.12.06 20:01
Оценка: :)
Здравствуйте, FractalizeR, Вы писали:

N>>Так разговор-то уже установлен, учётная запись уже сработала и до следующего разговора не требуется. Сигнализация и голосовой поток идут напрямую, или через ещё одного клиента.

FR>Как это установлен? Ведь по условию задачи доступ к серверу Skype блокировали злобные лоббисты. Вернее, лоббировали злобные блокисты. Нет. Короче, блокировали ведь доступ. Или мы вот разговаривали, вдруг блокисты нас лоббировали, а мы еще можем говорить? Ну в этом я не сомневаюсь.

Видите ли... я не знаю skype, совсем. И не планирую его знать (разве что чтобы изучить конкурентов). Но я знаю SIP, на котором строятся практически такие же сети. Моя текущая работа — поддержка программных реализаций SIP. Так вот — в SIP оно может быть устроено многими различными методами, но вот например один из методов. Представим себе: vasya@1.2.3.4 хочет поговорить с petya@pupkin.com. Он вызывает SRV запись для _sip._udp.pupkin.com, получает 100.101.102.103:5060, посылает на него (100.101.102.103:5060) INVITE petya@pupkin.com и получает 302 с редиректом на petya@5.6.7.8. Теперь он посылает INVITE petya@5.6.7.8 на 5.6.7.8:5060, там его принимают. В INVITE было сказано слать голосовой поток на 1.2.3.4:16400, в ответе просят слать встречный поток на 5.6.7.8:39000, обе стороны начинают генерировать голосовой трафик на взаимно согласованном кодеке на хост/порт указанные другой стороной, и успешно производят свой разговор.

Видите, при чём тут центральный сервер? Он просто разместил объя...^W^W сказал, где реально живёт вызываемый участник. Всё дальнейшее взаимодействие, и сигнализация, и голосовой поток — не идёт через него.

FR>Мне показалось, что уважаемый netch80 имел ввиду, что центральный сервер скайпа вообще никакой критической роли не выполняет. Ну не будет его — никто и не заметит.


Нет и ещё раз нет. Он нужен, чтобы сказать где искать вызываемого. Его не будет — все, кто пытается позвонить, это сразу заметят. Но дальнейшие операции могут идти без него. А могут — и с ним, если этого захотят те кто строит сервер. И такой подход тоже имеет смысл, если надо скрыть, где второй участник.
The God is real, unless declared integer.
Как работает сервер ICQ (нельзя открыть более65535 портов)?
От: FractalizeR  
Дата: 26.11.06 13:53
Оценка:
Добрый день.

Меня вот заинтересовал такой вопрос. Как же работают популярные серверы мгновенных сообщений типа ICQ, Skype, если один сервер не может держать открытыми более 65535 портов одновременно (каждое клиентское подключение занимает один порт)? Ведь в каждый момент времени каждый сервер имеет миллионы клиентов онлайн.
Re: Как работает сервер ICQ (нельзя открыть более65535 порто
От: denisio_mcp  
Дата: 26.11.06 13:59
Оценка:
Здравствуйте, FractalizeR, Вы писали:

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


один из вариантов: login сервер переадресовывает запрос на подключение на один из виртуальных серверов в кластере.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Re: Как работает сервер ICQ (нельзя открыть более65535 порто
От: Michael Chelnokov Украина  
Дата: 26.11.06 14:01
Оценка:
Здравствуйте, FractalizeR, Вы писали:

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


Все очень просто. Там далеко не один сервер и/или на серверах далеко не по одному интерфейсу.
Re[2]: Как работает сервер ICQ (нельзя открыть более65535 по
От: FractalizeR  
Дата: 26.11.06 14:02
Оценка:
_>один из вариантов: login сервер переадресовывает запрос на подключение на один из виртуальных серверов в кластере.

Да, это возможно. Но.... Я только что зашел в Скайп. Он показывает — 6 530 813 пользователей онлайн. Что составит примерно 100 серверов.Неужели у них датацентр такой?
Re[3]: Как работает сервер ICQ (нельзя открыть более65535 по
От: Michael Chelnokov Украина  
Дата: 26.11.06 14:08
Оценка:
Здравствуйте, FractalizeR, Вы писали:

_>>один из вариантов: login сервер переадресовывает запрос на подключение на один из виртуальных серверов в кластере.


FR>Да, это возможно. Но.... Я только что зашел в Скайп. Он показывает — 6 530 813 пользователей онлайн. Что составит примерно 100 серверов.Неужели у них датацентр такой?


Если один сервер выгребает такое количество клиентов, то просто назначают N IP-адресов на один интерфейс. Так что там может быть не 100 серверов, а 10 и по 10 IP-адресов на каждый. Ессно, ядро ОС в этом случае должно быть настроено на возможность открытия, скажем, миллиона файлов (сокетов).
Re[4]: Как работает сервер ICQ (нельзя открыть более65535 по
От: FractalizeR  
Дата: 26.11.06 14:13
Оценка:
MC>Если один сервер выгребает такое количество клиентов, то просто назначают N IP-адресов на один интерфейс. Так что там может быть не 100 серверов, а 10 и по 10 IP-адресов на каждый. Ессно, ядро ОС в этом случае должно быть настроено на возможность открытия, скажем, миллиона файлов (сокетов).

Да, похоже, вы правы. Это логично.
Re: Как работает сервер ICQ (нельзя открыть более65535 порто
От: _vvs Россия  
Дата: 26.11.06 22:33
Оценка:
Как точно работает ICQ сервер не скажу
Но то, что он использует несколько серверов для распределения нагрузки — 100%
Это хорошо видно на серверах, на которых установлен прокси, через который по протоколу ICQ общаются пользователи вашей сети
Если в 2-х словах, то в протоколе ICQ это реализовано следующим образом. Сначала вы в рамках протокола ICQ соединяетесь с ICQ сервером login.icq.com. Данный сервер выдает вам адрес сервера (называется BOS-сервером), через который вы будете вести всё свое дальнейшее общение

Здравствуйте, FractalizeR, Вы писали:

FR>Добрый день.


FR>Меня вот заинтересовал такой вопрос. Как же работают популярные серверы мгновенных сообщений типа ICQ, Skype, если один сервер не может держать открытыми более 65535 портов одновременно (каждое клиентское подключение занимает один порт)? Ведь в каждый момент времени каждый сервер имеет миллионы клиентов онлайн.
Re: Как работает сервер ICQ (нельзя открыть более65535 порто
От: TarasCo  
Дата: 27.11.06 07:43
Оценка:
Здравствуйте, FractalizeR, Вы писали:

FR>Добрый день.


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


По моему, icq сервер использует набор фиксированных портов ( 5190 и еще несколько ). Соответственно, абстрактный сервер с абстрактной ОС сможет обслуживать любое количество клиентов. Естественно, в реальной жизни будет ограничение — на число одновременно установленных ТСР соединений. Но с номерами портов это никак не связано. scype думается мне, также использует фиксированный порт.
Да пребудет с тобою сила
Re[2]: Как работает сервер ICQ (нельзя открыть более65535 по
От: FractalizeR  
Дата: 27.11.06 14:52
Оценка:
N>Хехе. Вот например SMTP-сервер. К нему соединились на порт 25. Вы думаете, это только запрос пошёл на 25-й, а соединение установлено с другим портом? Нет, всё с тем же 25.

Я не совсем понимаю этот механизм установки соединения. Вы не могли бы мне разъяснить? Я задавал этот вопрос на нескольких форумах и убедился, что в основной массе народ не понимает этого механизма.

Сервер. К нему коннектятся клиенты на порт, скажем, 3306. Разве для приема подключения от клиента не выделяется другой локальный порт?
Re[3]: Как работает сервер ICQ (нельзя открыть более65535 по
От: TarasCo  
Дата: 27.11.06 14:58
Оценка:
Здравствуйте, FractalizeR, Вы писали:

Позапускайте утилиту netstat -na при работе сетевых приложений. Возможно, вопросы сами уйдут
Да пребудет с тобою сила
Re[3]: Как работает сервер ICQ (нельзя открыть более65535 по
От: Аноним  
Дата: 28.11.06 02:38
Оценка:
FR>Я не совсем понимаю этот механизм установки соединения. Вы не могли бы мне разъяснить? Я задавал этот вопрос на нескольких форумах и убедился, что в основной массе народ не понимает этого механизма.
Стивенса потому что не читали. Читай Стивенса; там все об этом хорошо написано.

FR>Сервер. К нему коннектятся клиенты на порт, скажем, 3306. Разве для приема подключения от клиента не выделяется другой локальный порт?

Не выделяется.
Re[4]: Как работает сервер ICQ (нельзя открыть более65535 по
От: FractalizeR  
Дата: 28.11.06 10:14
Оценка:
Здравствуйте, Аноним, Вы писали:

FR>>Я не совсем понимаю этот механизм установки соединения. Вы не могли бы мне разъяснить? Я задавал этот вопрос на нескольких форумах и убедился, что в основной массе народ не понимает этого механизма.

А>Стивенса потому что не читали. Читай Стивенса; там все об этом хорошо написано.

Что за книгу вы имеете ввиду?
Re[5]: Как работает сервер ICQ (нельзя открыть более65535 по
От: Аноним  
Дата: 28.11.06 10:25
Оценка:
Здравствуйте, FractalizeR, Вы писали:

FR>Здравствуйте, Аноним, Вы писали:


FR>>>Я не совсем понимаю этот механизм установки соединения. Вы не могли бы мне разъяснить? Я задавал этот вопрос на нескольких форумах и убедился, что в основной массе народ не понимает этого механизма.

А>>Стивенса потому что не читали. Читай Стивенса; там все об этом хорошо написано.

FR>Что за книгу вы имеете ввиду?


не иначе эту ВЕЩЬ: http://www.ozon.ru/context/detail/id/1390985/
Re[5]: peer2peer
От: remark Россия http://www.1024cores.net/
Дата: 04.12.06 16:00
Оценка:
Здравствуйте, FractalizeR, Вы писали:

R>>В Скайп нет серверов — это peer2peer — каждый клиентский компьютер — сервер. В т.ч. и твой Если он не за NAT.

R>>Именно в этом причина его безграничной масштабируемости и возможности поддерживать миллионы клиентов.

FR>Вы не правы. Как тогда я могу отправить сообщение на скайп своего друга? Кто подскажет, на какой IP Skype должен отправить сообщение? Кто уведомит меня о том, что мой друг вышел online с такого-то IP? Кто обеспечит поддержку UDP hole punching, чтобы клиенты, которые оба сидят за NAT могли обмениваться сообщениями? Кто обеспечит поддержку SkypeOut, SkypeIn?


Определённые сервера, конечно, есть. Но они только являются инфраструктурной поддержкой, они не являются серверами в традиционном смысле этого слова, т.е. все не направляют к ним все запросы.

По поводу SkypeOut, SkypeIn — тут, конечно, определённо должны быть традиционные сервера.
А вот по поводу всего остального — вопрос. К сожалению в своё время не смог найти детальной информации. Вполне возможно, что все остальные роли выполняют peer-компьютеры. Локация которых происходит по некоторым алгоритмым.

Кто обеспечит поддержку UDP hole punching, чтобы клиенты, которые оба сидят за NAT могли обмениваться сообщениями


Например, твой компьютер
Смотри выше — уже писал.


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[6]: peer2peer
От: FractalizeR  
Дата: 04.12.06 17:07
Оценка:
R>Определённые сервера, конечно, есть. Но они только являются инфраструктурной поддержкой, они не являются серверами в традиционном смысле этого слова, т.е. все не направляют к ним все запросы.

Если обмен сообщениями между клиентами невозможен в силу того, например, что оба клиента находятся за NAT сервер должен транслировать эти сообщения обоим клиентам. Кто-то должен проверять логин клиента при его подключении и обеспечить безопасность соединения, чтобы один клиент не выдал себя за другого. Эти серверы являются основными серверами Skype сети, без которых сеть не сможет работать.

R>А вот по поводу всего остального — вопрос. К сожалению в своё время не смог найти детальной информации. Вполне возможно, что все остальные роли выполняют peer-компьютеры. Локация которых происходит по некоторым алгоритмым.

Какие все остальные роли? Как можно произвести локацию клиентского компьютера, имея только Nickname клиента в Skype? Никак.

R>

R>Кто обеспечит поддержку UDP hole punching, чтобы клиенты, которые оба сидят за NAT могли обмениваться сообщениями


R>Например, твой компьютер

R>Смотри выше — уже писал.

Разумеется, мой компьютер этого сделать не сможет. Ему может даже быть неизвестен адрес гейта NAT в интернет. Мне кажется, вы плохо представляете себе как происходит обмен информацией между клиентами, находящимися за NAT. Попробуйте прочитать вот это: http://www.brynosaurus.com/pub/net/p2pnat/
Re[7]: peer2peer
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 05.12.06 08:31
Оценка:
Здравствуйте, FractalizeR, Вы писали:

R>>

R>>Кто обеспечит поддержку UDP hole punching, чтобы клиенты, которые оба сидят за NAT могли обмениваться сообщениями

R>>Например, твой компьютер :)
R>>Смотри выше — уже писал.
FR>Разумеется, мой компьютер этого сделать не сможет. Ему может даже быть неизвестен адрес гейта NAT в интернет. Мне кажется, вы плохо представляете себе как происходит обмен информацией между клиентами, находящимися за NAT. Попробуйте прочитать вот это: http://www.brynosaurus.com/pub/net/p2pnat/

Это ты, по-моему, ничего не понял:) Адрес гейта ему и не нужно знать: ему нужно знать, что ему на определённый порт (который он передал в соответствующем месте протокола) должен прийти пакет определённого содержания, а уже по его обратному адресу (хост, порт) можно будет вычислить, какой адрес оказался внешним для порта данных каждого клиента. С другой стороны, ты прав в том смысле, что это (связывание клиентов за NAT'ом), если оно может быть успешно выполнено без mediaproxy, незачем переваливать на другие (клиентские) хосты — это сложнее чем сделать поддержку на центральных серверах. (Хотя они могли это и намеренно увести к клиенту...)

А вот если все эти панчинги не прошли (по мнению автора статьи, 18% NAT'ов их не поддерживает; значит, в ~32% случаев не получится сделать простой punching) — потребуется явный mediaproxy на хосте с мировым адресом. И вот тут-то твой компьютер и заюзают ради чужого трафика.

Я с этими пробоями NAT'ов наобщался, хотя с SIP сигнализацией:)

Кстати, что авторы STUN, что автор твоей ссылки слишком упрощённо представляют себе типы NAT'а — например, FreeBSD'шный natd+libalias в их схему не укладывается. Они потеряли как минимум фактор времени (маппинг статический или динамический) — NAT с динамическим назначением, который до истечения времени жизни пробы будет port restricted cone, после такого истечения спокойно может стать детектируемым как symmetric.
The God is real, unless declared integer.
Re[8]: peer2peer
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 05.12.06 08:38
Оценка:
Здравствуйте, remark, Вы писали:

FR>>Кто-то должен проверять логин клиента при его подключении и обеспечить безопасность соединения, чтобы один клиент не выдал себя за другого. Эти серверы являются основными серверами Skype сети, без которых сеть не сможет работать.

R>Что будет, если американские телекоммуникационные компании лоббируют закон, что бы все
американские интернет-провайдеры закрыли доступ к Skype-серверам? Skype будет недоступен в Америке? А вот и неправильно! Skype будет работать как работал!

НЕТ. Будут работать текущие разговоры. Могут быть установлены разговоры на направления, адреса которых уже известны (ибо закэшированы). Операция установления соединения с произвольным получателем, до этого неизвестным, сорвётся по причине невозможности достучаться до вызываемого абонента — его адрес и порт неизвестен, а даже если известен — он может быть 192.168.0.2:1030:), и надо будет послать запрос с центрального сервера (определённые хост и порт) "начни командное взаимодействие с вот этим посредником" чтобы пробить этот NAT в направлении внутрь.

Без центральной группы серверов, которая даёт первичную идентификацию в среде, не будет работать ничего. Те P2P которые не имеют одного выделенного центрального сервера — вместо этого имеют их много и схему установления контактов друг с другом. Но всё равно какой-то первичный локальный центр есть.

А вот дальше уже можно и другие узлы нагружать ролью локальных связывателей (это ещё ничего) и медиапрокси (а вот это уже диверсия).
The God is real, unless declared integer.
Re[9]: peer2peer
От: FractalizeR  
Дата: 05.12.06 15:17
Оценка:
N>НЕТ. Будут работать текущие разговоры. Могут быть установлены разговоры на направления, адреса которых уже известны (ибо закэшированы). Операция установления соединения с произвольным получателем, до этого неизвестным, сорвётся по причине невозможности достучаться до вызываемого абонента — его адрес и порт неизвестен, а даже если известен — он может быть 192.168.0.2:1030, и надо будет послать запрос с центрального сервера (определённые хост и порт) "начни командное взаимодействие с вот этим посредником" чтобы пробить этот NAT в направлении внутрь.
И все равно я не понимаю. Как будут работать текущие разговоры, если клиенты залогинится не могут на сервер? База данных, хранящая учетные записи клиентов ведь на сервере лежит
Re[10]: peer2peer
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 05.12.06 15:50
Оценка:
Здравствуйте, FractalizeR, Вы писали:

N>>НЕТ. Будут работать текущие разговоры. Могут быть установлены разговоры на направления, адреса которых уже известны (ибо закэшированы). Операция установления соединения с произвольным получателем, до этого неизвестным, сорвётся по причине невозможности достучаться до вызываемого абонента — его адрес и порт неизвестен, а даже если известен — он может быть 192.168.0.2:1030:), и надо будет послать запрос с центрального сервера (определённые хост и порт) "начни командное взаимодействие с вот этим посредником" чтобы пробить этот NAT в направлении внутрь.

FR>И все равно я не понимаю. Как будут работать текущие разговоры, если клиенты залогинится не могут на сервер? База данных, хранящая учетные записи клиентов ведь на сервере лежит

Так разговор-то уже установлен, учётная запись уже сработала и до следующего разговора не требуется. Сигнализация и голосовой поток идут напрямую, или через ещё одного клиента.
The God is real, unless declared integer.
Re[11]: peer2peer
От: FractalizeR  
Дата: 05.12.06 16:05
Оценка:
N>Так разговор-то уже установлен, учётная запись уже сработала и до следующего разговора не требуется. Сигнализация и голосовой поток идут напрямую, или через ещё одного клиента.

А-а Ну так и ICQ если вырубится, теоретически можно продолжить разговор, если Direct Connection установлено.
Re[11]: peer2peer
От: FractalizeR  
Дата: 05.12.06 18:32
Оценка:
N>Так разговор-то уже установлен, учётная запись уже сработала и до следующего разговора не требуется. Сигнализация и голосовой поток идут напрямую, или через ещё одного клиента.

Как это установлен? Ведь по условию задачи доступ к серверу Skype блокировали злобные лоббисты. Вернее, лоббировали злобные блокисты. Нет. Короче, блокировали ведь доступ. Или мы вот разговаривали, вдруг блокисты нас лоббировали, а мы еще можем говорить? Ну в этом я не сомневаюсь.

Мне показалось, что уважаемый netch80 имел ввиду, что центральный сервер скайпа вообще никакой критической роли не выполняет. Ну не будет его — никто и не заметит.



R>Что будет, если американские телекоммуникационные компании лоббируют закон, что бы все американские интернет-провайдеры закрыли доступ к Skype-серверам? Skype будет недоступен в Америке? А вот и неправильно! Skype будет работать как работал!
Re[13]: peer2peer
От: remark Россия http://www.1024cores.net/
Дата: 06.12.06 05:18
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, FractalizeR, Вы писали:


N>>>Так разговор-то уже установлен, учётная запись уже сработала и до следующего разговора не требуется. Сигнализация и голосовой поток идут напрямую, или через ещё одного клиента.


Например, через компьютер FractalizeR


FR>>Мне показалось, что уважаемый netch80 имел ввиду, что центральный сервер скайпа вообще никакой критической роли не выполняет. Ну не будет его — никто и не заметит.


Это был я

N>Нет и ещё раз нет. Он нужен, чтобы сказать где искать вызываемого. Его не будет — все, кто пытается позвонить, это сразу заметят. Но дальнейшие операции могут идти без него. А могут — и с ним, если этого захотят те кто строит сервер. И такой подход тоже имеет смысл, если надо скрыть, где второй участник.


С этим никто не спорит. Но почему именно центральный сервер? Почему не просто сервер? Если Skype "грязно" юзает любой попавшийся комп для посреднечества в разговоре, почему Вы отрицаете возможность юзания самих компьютеров p2p сети в качестве серверов и для других операций?
Как-то же он, кстати, выбирает комп для посреднечества. Возможно, этро комп, который поближе, а не на другом конце света. Он может так же адаптивно выбирать сервера для авторизации, а потом распространять списки этих серверов. А потом те сервера начнут делать тоже самое. И т.д. У Skype даже в названии есть что-то похожее со Skynet из терминатора
Вы поглядите какая крысота получается. Допустим есть локальная сеть района, члены которой активно переговариваются с помощью Skype, и через некоторое время внутри этой сети выбираются сервера и все локальные компьютеры о них узнают и понимают, что это действительно самые близкие и быстрые сервера. И разговоры внутри сети становятся автономными. Крысота.



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[14]: peer2peer
От: Аноним  
Дата: 06.12.06 17:08
Оценка:
R>С этим никто не спорит. Но почему именно центральный сервер? Почему не просто сервер? Если Skype "грязно" юзает любой попавшийся комп для посреднечества в разговоре, почему Вы отрицаете возможность юзания самих компьютеров p2p сети в качестве серверов и для других операций?
R>Как-то же он, кстати, выбирает комп для посреднечества. Возможно, этро комп, который поближе, а не на другом конце света. Он может так же адаптивно выбирать сервера для авторизации, а потом распространять списки этих серверов. А потом те сервера начнут делать тоже самое. И т.д. У Skype даже в названии есть что-то похожее со Skynet из терминатора

Блин, ну вот центральный сервер выключили, загрузил ты винду, запустил скайп.
Вперёд коннектиться к компьютеру в p2p сети.
Только вот где он этот компьютер, такой близкий и быстрый?

Можно поискать броадкастами в локалке. Но, не всякое подключение это локалка и не во всякой локалке обязательно будут другие скайпы.
Можно ломануться к старым скайпам, известным с прошлого запуска. Но они тоже могут быть выключены или их IP могут поменяться (типичный случай для dialup/DSL).

Ну, ты готов пользоваться технологией, которая периодически будет тебе говорить: "Сегодня не судьба, позвонишь завтра"?

Я уж молчу про случай, когда все сидят за фаерволами.
Re[15]: peer2peer
От: FractalizeR  
Дата: 06.12.06 17:34
Оценка:
А>Можно поискать броадкастами в локалке. Но, не всякое подключение это локалка и не во всякой локалке обязательно будут другие скайпы.
А>Можно ломануться к старым скайпам, известным с прошлого запуска. Но они тоже могут быть выключены или их IP могут поменяться (типичный случай для dialup/DSL).
А>Ну, ты готов пользоваться технологией, которая периодически будет тебе говорить: "Сегодня не судьба, позвонишь завтра"?
А>Я уж молчу про случай, когда все сидят за фаерволами.

Странная у нас беседа получилась, вы не находите?


R>С этим никто не спорит. Но почему именно центральный сервер? Почему не просто сервер?

Мне кажется, разницы в терминологии нет. Хоть это один сервер сети, хоть их группа, хоть они главные, хоть нет — если их вырубить — сетка Skype работать не будет.

R>Если Skype "грязно" юзает любой попавшийся комп для посреднечества в разговоре, почему Вы отрицаете возможность юзания самих компьютеров p2p сети в качестве серверов и для других операций?

Ну, хотя бы потому, что было бы крайним идиотизмом хранить на компьютере не принадлежащем Скайп-компании учетные данные клиентов для логина. Компьютеры клиентов могут только трафик передавать, и то я сомневаюсь, чтобы они это делали, ибо смысла в этом я не вижу. Хотя бы потому, что задержки в разговоре стали бы неприемлемыми. А передавать трафик через пользователей модемов — это вообще бессмысленно.

R>Как-то же он, кстати, выбирает комп для посреднечества. Возможно, этро комп, который поближе, а не на другом конце света. Он может так же адаптивно выбирать сервера для авторизации, а потом распространять списки этих серверов.

А базу логинов как реплицировать на эти компы? У меня вот 800Кбит интернет канал. Но я не думаю, чтобы на моем компе лежала база данных клиентов скайпа.Да и вообще, как вы представляете себе безопасность использования клиентского компьютера в качестве сервера авторизации сети Skype?

R>А потом те сервера начнут делать тоже самое. И т.д. У Skype даже в названии есть что-то похожее со Skynet из терминатора [] Вы поглядите какая крысота получается. Допустим есть локальная сеть района, члены которой активно переговариваются с помощью Skype, и через некоторое время внутри этой сети выбираются сервера и все локальные компьютеры о них узнают и понимают, что это действительно самые близкие и быстрые сервера. И разговоры внутри сети становятся автономными. Крысота.

Это что-то из области терминатора. Завтра мой компьютер станет сервером нашей локальной сети Скайп, я поправлю базу данных логинов, позвоню другу и скажу, что звонит это не Вася, а Петя на самом деле. И никто не узнает, что я Вася, ибо я — сервер! И потом, получается, что узнать online клиент или нет, нужно опросить сервер, на котором находится его учетная запись. А как узнать, что это за сервер? А может, таких серверов несколько? Их ведь надо оповестить о том, что я вышел online.....

Нет, саморегулирующийся автономный Скайп — это что-то фантастическое, мне кажется. Служебный трафик сети может через ваш компьютер по разным причинам и с разным назначением проходить. Не понимаю, почему вы считаете, что это именно голосовой трафик.
Re[16]: peer2peer
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 06.12.06 19:11
Оценка:
Здравствуйте, FractalizeR, Вы писали:

FR>Нет, саморегулирующийся автономный Скайп — это что-то фантастическое, мне кажется.


Ничего фантастического нет. Если Skype реализовать на открытом протоколе и не с одним центральным сервером, а со многими, получится SIP. Что давно уже многие используют: дают для контактов адрес вида "sip:bob@biloxi.com", и средствами протокола можно найти ответственные за этот домен сервера, послать им INVITE и установить разговор.

У Skype немного преимуществ перед подобными открытыми сетями. Первое — кодеки, очень хорошо работающие в любых условиях вплоть до среднезагруженного диалапа. Второе — формально работающая защита от подмены своего identity в сети (что позволяет строить фильтры по контакт-листам без дополнительной авторизации). Третье — готовая криптография во флаконе с остальным. Больше преимуществ нет. Канала даже на 128Kbit/s достаточно, чтобы использовать нормальный кодек без завязывания на Skype. Локальный номер тоже можно получить без особых проблем (разве что не так централизованно).

По сравнению с SIP Skype — как ICQ по сравнению с Jabber'ом — закрытая и глючная.

И ещё и неизвестный посторонний трафик гоняет.

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


Действительно.:)
The God is real, unless declared integer.
Re[14]: peer2peer
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 06.12.06 19:18
Оценка:
Здравствуйте, remark, Вы писали:

N>>Нет и ещё раз нет. Он нужен, чтобы сказать где искать вызываемого. Его не будет — все, кто пытается позвонить, это сразу заметят. Но дальнейшие операции могут идти без него. А могут — и с ним, если этого захотят те кто строит сервер. И такой подход тоже имеет смысл, если надо скрыть, где второй участник.

R>С этим никто не спорит. Но почему именно центральный сервер? Почему не просто сервер? Если Skype "грязно" юзает любой попавшийся комп для посреднечества в разговоре, почему Вы отрицаете возможность юзания самих компьютеров p2p сети в качестве серверов и для других операций?

Этих центральных серверов могут быть тысячи. Но Вы сами себе ответите на этот вопрос, если обдумаете следующие вопросы:
1. Клиент запустился, ему надо откуда-то узнать адреса тех, кто на ближайшее время будет выступать в роли сервера сети для него. Откуда он узнает эти адреса?
2. Клиент запустился, откуда-то нашёл адрес ближайшего такого сервера и зарегистрировался на нём. Хорошо, своей локалке он представился ("я online, звонить вот сюда"). Как и откуда узнает его статус и адрес абонент на другом конце планеты?

Думаю, после размышления над этим роль центральных серверов станет очевидна:)

R>Как-то же он, кстати, выбирает комп для посреднечества. Возможно, этро комп, который поближе, а не на другом конце света. Он может так же адаптивно выбирать сервера для авторизации, а потом распространять списки этих серверов. А потом те сервера начнут делать тоже самое. И т.д. У Skype даже в названии есть что-то похожее со Skynet из терминатора :)

R>Вы поглядите какая крысота получается. Допустим есть локальная сеть района, члены которой активно переговариваются с помощью Skype, и через некоторое время внутри этой сети выбираются сервера и все локальные компьютеры о них узнают и понимают, что это действительно самые близкие и быстрые сервера. И разговоры внутри сети становятся автономными. Крысота.

А теперь один из тех кто целый месяц держал свой ноут в этой сети района — сел на самолёт и на следующий день вошёл в Сеть из Праги. А "самые близкие и быстрые" сервера по-прежнему тычутся искать его на 10.0.43.15. Вот теперь точно крЫсота.
The God is real, unless declared integer.
Re[17]: peer2peer
От: FractalizeR  
Дата: 06.12.06 19:24
Оценка:
Здравствуйте, netch80, Вы писали:

N>Ничего фантастического нет. Если Skype реализовать на открытом протоколе и не с одним центральным сервером, а со многими, получится SIP. Что давно уже многие используют: дают для контактов адрес вида "sip:bob@biloxi.com", и средствами протокола можно найти ответственные за этот домен сервера, послать им INVITE и установить разговор.

Мы же не про SIP говорим. Да и SIP я так понимаю, использует сеть серверов, отвечающих за авторизацию пользователей. На эти серверы, видимо, реплицируется основная база данных? Кстати, посоветуйте, что можэно прочитать по архитектуре SIP. Мне стало интересно

N>У Skype немного преимуществ перед подобными открытыми сетями. Первое — кодеки, очень хорошо работающие в любых условиях вплоть до среднезагруженного диалапа. Второе — формально работающая защита от подмены своего identity в сети (что позволяет строить фильтры по контакт-листам без дополнительной авторизации). Третье — готовая криптография во флаконе с остальным. Больше преимуществ нет. Канала даже на 128Kbit/s достаточно, чтобы использовать нормальный кодек без завязывания на Skype. Локальный номер тоже можно получить без особых проблем (разве что не так централизованно).

У Skype и 56k вполне достаточно для разговора.

N>По сравнению с SIP Skype — как ICQ по сравнению с Jabber'ом — закрытая и глючная.

Глючная? Давно им пользуюсь. Вроде ничего не глючит.

N>И ещё и неизвестный посторонний трафик гоняет.

Это точно
Re[18]: peer2peer
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 06.12.06 21:35
Оценка:
Здравствуйте, FractalizeR, Вы писали:

FR>Мы же не про SIP говорим. Да и SIP я так понимаю, использует сеть серверов, отвечающих за авторизацию пользователей. На эти серверы, видимо, реплицируется основная база данных? Кстати, посоветуйте, что можэно прочитать по архитектуре SIP. Мне стало интересно :)


А у него нету какой-то распределённой или центральной архитектуры как таковой. Есть URL "куда звонить", есть поиск сервера по домену URL. Всё. Если на всех один домен — получится скайп/ICQ. Если разные — получится как в Jabber'е.

N>>У Skype немного преимуществ перед подобными открытыми сетями. Первое — кодеки, очень хорошо работающие в любых условиях вплоть до среднезагруженного диалапа. Второе — формально работающая защита от подмены своего identity в сети (что позволяет строить фильтры по контакт-листам без дополнительной авторизации). Третье — готовая криптография во флаконе с остальным. Больше преимуществ нет. Канала даже на 128Kbit/s достаточно, чтобы использовать нормальный кодек без завязывания на Skype. Локальный номер тоже можно получить без особых проблем (разве что не так централизованно).

FR>У Skype и 56k вполне достаточно для разговора.

Ну если g.729 применить — и 24k IP потока достаточно. Но он платный. Свободные — ну где-то 30 потребуют. Но загвоздка не в них, а в том, чтобы их все поддерживали. Коммерческие изделия обычно умеют g.711/g.729/g.723.1/g.726, бесплатные — g.711/gsm/ilbc/speex. Гарантированное пересечение — только по g.711. А это 80k. У скайпа гарантирован договор на диалапной скорости, и это существенно. Реализации на открытых стеках до такого только года через два дойдёт.

Впрочем, это детали не SIP, это всех VoIP протоколов (хоть H.323).

N>>По сравнению с SIP Skype — как ICQ по сравнению с Jabber'ом — закрытая и глючная.

FR>Глючная? :) Давно им пользуюсь. Вроде ничего не глючит.

Я про ICQ. Skype не настолько проблемна в этом, но жутко засекречена в деталях.
The God is real, unless declared integer.
Re[6]: Я же говорил!
От: remark Россия http://www.1024cores.net/
Дата: 11.12.06 14:11
Оценка:
Здравствуйте, squiz, Вы писали:

S>Здравствуйте, FractalizeR, Вы писали:


FR>>Вы не правы. Как тогда я могу отправить сообщение на скайп своего друга? Кто подскажет, на какой IP Skype должен отправить сообщение? Кто уведомит меня о том, что мой друг вышел online с такого-то IP? Кто обеспечит поддержку UDP hole punching, чтобы клиенты, которые оба сидят за NAT могли обмениваться сообщениями? Кто обеспечит поддержку SkypeOut, SkypeIn?


S>Советую почитать здесь skype_BHEU06.handout.pdf и ваши вопросы отпадут.


Я же говорил! [старческим дрожащим голосом ]

When a skype client has a good score (bandwidth+no firewall+good cpu) he can be promoted to supernode

That means » 20k supernodes in the world


Скайпу надо только один раз выйти в сеть по зашитому в код адресу, далее он становится автономным. Сейчас уже явно нет возможности "убить" скайп.


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[7]: Я же говорил!
От: FractalizeR  
Дата: 11.12.06 14:52
Оценка:
R>Я же говорил! [старческим дрожащим голосом ]

Ну так и о чем это говорит? Что сервер скайпа реплицирует на суперноды всю базу логинов и паролей? Да еще и приватные RSA ключи, наверное? Вы документ прочитайте.
Re[19]: peer2peer
От: remark Россия http://www.1024cores.net/
Дата: 11.12.06 15:09
Оценка:
Здравствуйте, netch80, Вы писали:

N>А у него нету какой-то распределённой или центральной архитектуры как таковой. Есть URL "куда звонить", есть поиск сервера по домену URL. Всё. Если на всех один домен — получится скайп/ICQ. Если разные — получится как в Jabber'е.


Вы сильно-сильно недооцениваете Skype. См. здесь
Автор: squiz
Дата: 09.12.06
.


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[8]: Я же говорил!
От: remark Россия http://www.1024cores.net/
Дата: 11.12.06 17:17
Оценка:
Здравствуйте, FractalizeR, Вы писали:

R>>Я же говорил! [старческим дрожащим голосом ]


FR>Ну так и о чем это говорит? Что сервер скайпа реплицирует на суперноды всю базу логинов и паролей?


Адрес центрального сервера нужен Skype только для самого первого выхода в сеть

FR>Да еще и приватные RSA ключи, наверное?


"Приватные" RSA ключи зашиты в коде программы. Все кому очень интересно могут их выцепить и расшифровать трафик, что собственно автор статьи и сделал.

FR>Вы документ прочитайте.


Почитал


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[20]: peer2peer
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 11.12.06 18:26
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, netch80, Вы писали:


N>>А у него нету какой-то распределённой или центральной архитектуры как таковой. Есть URL "куда звонить", есть поиск сервера по домену URL. Всё. Если на всех один домен — получится скайп/ICQ. Если разные — получится как в Jabber'е.


R>Вы сильно-сильно недооцениваете Skype. См. здесь
Автор: squiz
Дата: 09.12.06
.


R> :beer:


Вы эта... объясните, накойхер слать мне как возражение ссылку на мой же постинг?
Кто на ком стоял, простите?
The God is real, unless declared integer.
Re[21]: peer2peer
От: remark Россия http://www.1024cores.net/
Дата: 12.12.06 08:40
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, remark, Вы писали:


R>>Здравствуйте, netch80, Вы писали:


N>>>А у него нету какой-то распределённой или центральной архитектуры как таковой. Есть URL "куда звонить", есть поиск сервера по домену URL. Всё. Если на всех один домен — получится скайп/ICQ. Если разные — получится как в Jabber'е.


R>>Вы сильно-сильно недооцениваете Skype. См. здесь
Автор: squiz
Дата: 09.12.06
.


R>>


N>Вы эта... объясните, накойхер слать мне как возражение ссылку на мой же постинг?

N>Кто на ком стоял, простите?

Ну, если вы под двумя никами входите, то уж извиняйте, как же это определять?


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[22]: peer2peer
От: squiz  
Дата: 12.12.06 10:12
Оценка:
Здравствуйте, remark, Вы писали:

N>>Вы эта... объясните, накойхер слать мне как возражение ссылку на мой же постинг?

N>>Кто на ком стоял, простите?

R>Ну, если вы под двумя никами входите, то уж извиняйте, как же это определять?

R>
Не, не, я (squiz) точно не netch80!
Never underestimate those behind you...
Re[21]: peer2peer
От: squiz  
Дата: 12.12.06 10:12
Оценка:
Здравствуйте, netch80, Вы писали:

N>Вы эта... объясните, накойхер слать мне как возражение ссылку на мой же постинг?

Там не ваш постинг.
Never underestimate those behind you...
Re[22]: peer2peer
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 12.12.06 10:18
Оценка:
Здравствуйте, squiz, Вы писали:

S>Здравствуйте, netch80, Вы писали:


N>>Вы эта... объясните, накойхер слать мне как возражение ссылку на мой же постинг?

S>Там не ваш постинг.

Был мой. ладно, это несущественно. Существенно для того, что я писал — то, что в skype один домен. Все распределённые технологии этого факта не отменяют.
The God is real, unless declared integer.
Re[4]: Как работает сервер ICQ (нельзя открыть более65535 по
От: Ed.ward Россия  
Дата: 28.02.07 15:21
Оценка:
Здравствуйте, netch80, Вы писали:

[skipped]
N>Я понятно рассказал?

Понятно

Но есть вопрос практического плана...

Скажем как в .NET создать такой слушающий сокет который все входящие отправлял бы на один порт? (теперь я знаю, что они должны быть с разных адресов )

При этом все равно остаются какие-то ограничения? На кол-во сокетов? На кол-во входящих TCP соединений.

Меня вопрос как сделать сервер очень интересует
И хотя 65535 клиентов будет вряд-ли, хотелось бы сделать что-нить расширяемое...

Например можно открывать сокет только для отправки данных, а потом сразу его закрывать. ( Сильно, кстати, нагрузит сервер именно постоянная обработка входящих соединений? )

Или проверять сколько времени он не использовался и закрывать...
Для keep alive использовать UDP...

Но это все равно не гарантирует, что не будет 65535 одновременно входящих соединений

Как быть?

Ed.ward
Re[5]: Как работает сервер ICQ (нельзя открыть более65535 по
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 28.02.07 18:33
Оценка:
Здравствуйте, Ed.ward, Вы писали:

EW>Здравствуйте, netch80, Вы писали:


EW>[skipped]

N>>Я понятно рассказал?

EW>Понятно :)


EW>Но есть вопрос практического плана...


EW>Скажем как в .NET создать такой слушающий сокет который все входящие отправлял бы на один порт? (теперь я знаю, что они должны быть с разных адресов :) )


Кто на ком стоял?
По-моему, Вы ничего не поняли. Или же очень странно излагаете. Попробуйте переформулировать.

EW>При этом все равно остаются какие-то ограничения? На кол-во сокетов? На кол-во входящих TCP соединений.


Естественно, есть определённые системные ограничения.

EW>Меня вопрос как сделать сервер очень интересует ;)

EW>И хотя 65535 клиентов будет вряд-ли, хотелось бы сделать что-нить расширяемое...
EW>Например можно открывать сокет только для отправки данных, а потом сразу его закрывать.

Чушь.

EW> ( Сильно, кстати, нагрузит сервер именно постоянная обработка входящих соединений? )


Ровно на столько, на сколько он должен быть нагружен.

EW>Или проверять сколько времени он не использовался и закрывать...

EW>Для keep alive использовать UDP...

Поверх TCP? Смените траву.

EW>Но это все равно не гарантирует, что не будет 65535 одновременно входящих соединений :)


EW>Как быть? :???: :super:


Прочитать наконец учебную литературу и перестать бредить.
The God is real, unless declared integer.
Re[6]: Как работает сервер ICQ (нельзя открыть более65535 по
От: Ed.ward Россия  
Дата: 28.02.07 18:59
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, Ed.ward, Вы писали:


EW>>Здравствуйте, netch80, Вы писали:


EW>>[skipped]

N>>>Я понятно рассказал?

EW>>Понятно


EW>>Но есть вопрос практического плана...


EW>>Скажем как в .NET создать такой слушающий сокет который все входящие отправлял бы на один порт? (теперь я знаю, что они должны быть с разных адресов )


N>Кто на ком стоял?

N>По-моему, Вы ничего не поняли. Или же очень странно излагаете. Попробуйте переформулировать.
Кто стоял на ком стоял, это к чему вообще?

Когда я вызываю accept у listen сокета он мне возвращает сокет причем локальный порт у этого сокета не равен порту у listen сокета...
Хотелось бы узнать как повторить вот такую чарующую картину

d6822140 tcp4 0 48 10.0.0.107.25 10.0.0.11.57138 ESTABLISHED
d6834c80 tcp4 0 0 10.0.0.107.25 192.168.32.30.62075 ESTABLISHED
d67eb3c0 tcp4 0 0 10.0.0.107.25 10.0.0.133.62261 ESTABLISHED
d685c700 tcp4 0 0 10.0.0.107.25 10.0.0.104.55962 ESTABLISHED



EW>>При этом все равно остаются какие-то ограничения? На кол-во сокетов? На кол-во входящих TCP соединений.

N>Естественно, есть определённые системные ограничения.
Ессно есть, какие?
На кол-во сокетов? сколько?
а кол-во входящих TCP соединений? сколько?
еще какие-нибудь?


EW>>Меня вопрос как сделать сервер очень интересует

EW>>И хотя 65535 клиентов будет вряд-ли, хотелось бы сделать что-нить расширяемое...
EW>>Например можно открывать сокет только для отправки данных, а потом сразу его закрывать.
N>Чушь.
Гемоглобин 200!

EW>> ( Сильно, кстати, нагрузит сервер именно постоянная обработка входящих соединений? )

N>Ровно на столько, на сколько он должен быть нагружен.
Я спрашивал про accept.


EW>>Или проверять сколько времени он не использовался и закрывать...

EW>>Для keep alive использовать UDP...
N>Поверх TCP? Смените траву.
Поверх какого TCP?????
Для передачи данных — TCP с закрытием сразу или по неактивности, для keep alive — UDP.
Сменить не против — подЕлитесь своей?


EW>>Но это все равно не гарантирует, что не будет 65535 одновременно входящих соединений

EW>>Как быть?

N>Прочитать наконец учебную литературу и перестать бредить.

Посоветуйте же мне учебную литературу в электронном варианте, научно-популярную — мне skype не писать...

спасибо

Ed.ward
Re: Как работает сервер ICQ (нельзя открыть более65535 порто
От: panda gorl  
Дата: 07.03.07 16:55
Оценка:
Здравствуйте, FractalizeR, Вы писали:

FR>Добрый день.


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


На один порт можен приконнектиться сколько угодно клиентов.
Вы думаете, как web-серверы работают? Один 80-ый порт — огромная куча асинхронных коннектов на него.
Re[10]: Как работает сервер ICQ (нельзя открыть более65535 п
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 07.03.07 19:34
Оценка:
Здравствуйте, remark, Вы писали:

R>Спасибо за ссылочки ;)

R>Ребята уже решают проблему МегаЮзера, а Kegel всё со своим С10К :)))
R>Windows :super:

Кегель был первым, и решения описанные у него масштабируются на миллионы без проблем.
А как себя поведёт очередь асинхронных сокетных событий при миллионе — ой вопрос.
The God is real, unless declared integer.
Re[11]: Как работает сервер ICQ (нельзя открыть более65535 п
От: FractalizeR  
Дата: 07.03.07 19:50
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, remark, Вы писали:


R>>Спасибо за ссылочки

R>>Ребята уже решают проблему МегаЮзера, а Kegel всё со своим С10К
R>>Windows

N>Кегель был первым, и решения описанные у него масштабируются на миллионы без проблем.

N>А как себя поведёт очередь асинхронных сокетных событий при миллионе — ой вопрос.

Нормально себя поведет. А в чем там проблема? Миллион подзадач для наблюдения за сокетами ведь не создается.
Re[12]: Как работает сервер ICQ (нельзя открыть более65535 п
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 07.03.07 21:50
Оценка:
Здравствуйте, FractalizeR, Вы писали:

FR>Здравствуйте, netch80, Вы писали:


N>>Здравствуйте, remark, Вы писали:


R>>>Спасибо за ссылочки

R>>>Ребята уже решают проблему МегаЮзера, а Kegel всё со своим С10К
R>>>Windows

N>>Кегель был первым, и решения описанные у него масштабируются на миллионы без проблем.

N>>А как себя поведёт очередь асинхронных сокетных событий при миллионе — ой вопрос.

FR>Нормально себя поведет. А в чем там проблема? Миллион подзадач для наблюдения за сокетами ведь не создается.


Степень резиновости очередей неизвестна.
The God is real, unless declared integer.
Re[13]: Как работает сервер ICQ (нельзя открыть более65535 п
От: FractalizeR  
Дата: 08.03.07 14:53
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, FractalizeR, Вы писали:


FR>>Здравствуйте, netch80, Вы писали:


N>>>Здравствуйте, remark, Вы писали:


R>>>>Спасибо за ссылочки

R>>>>Ребята уже решают проблему МегаЮзера, а Kegel всё со своим С10К
R>>>>Windows

N>>>Кегель был первым, и решения описанные у него масштабируются на миллионы без проблем.

N>>>А как себя поведёт очередь асинхронных сокетных событий при миллионе — ой вопрос.

FR>>Нормально себя поведет. А в чем там проблема? Миллион подзадач для наблюдения за сокетами ведь не создается.


N>Степень резиновости очередей неизвестна.


http://www.coversant.com/Products/SoapBoxServer/Overview/tabid/99/Default.aspx
Этот сервер написан на .NET Framework с использованием асинхронных сокетов.
Re[14]: Как работает сервер ICQ (нельзя открыть более65535 п
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 08.03.07 16:06
Оценка:
Здравствуйте, FractalizeR, Вы писали:

FR>>>Нормально себя поведет. А в чем там проблема? Миллион подзадач для наблюдения за сокетами ведь не создается.

N>>Степень резиновости очередей неизвестна.
FR>http://www.coversant.com/Products/SoapBoxServer/Overview/tabid/99/Default.aspx
FR>Этот сервер написан на .NET Framework с использованием асинхронных сокетов.

Для оценки реальных возможностей и влияющих на них факторов смысла в этом описании — ноль целых хрен десятых.
The God is real, unless declared integer.
Re[15]: Как работает сервер ICQ (нельзя открыть более65535 п
От: FractalizeR  
Дата: 08.03.07 20:52
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, FractalizeR, Вы писали:


FR>>>>Нормально себя поведет. А в чем там проблема? Миллион подзадач для наблюдения за сокетами ведь не создается.

N>>>Степень резиновости очередей неизвестна.
FR>>http://www.coversant.com/Products/SoapBoxServer/Overview/tabid/99/Default.aspx
FR>>Этот сервер написан на .NET Framework с использованием асинхронных сокетов.

N>Для оценки реальных возможностей и влияющих на них факторов смысла в этом описании — ноль целых хрен десятых.


Ваше высказывание бессмысленно. Кроме того, вам было лень поискать в Google допольнительную информацию?
http://www.coversant.net/dotnetnuke/Coversant/Blogs/tabid/88/EntryID/9/Default.aspx
Re[16]: Как работает сервер ICQ (нельзя открыть более65535 п
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 08.03.07 21:23
Оценка:
Здравствуйте, FractalizeR, Вы писали:

N>>Для оценки реальных возможностей и влияющих на них факторов смысла в этом описании — ноль целых хрен десятых.

FR>Ваше высказывание бессмысленно.
Всяко осмысленнее, чем наезд на Кегеля.

FR> Кроме того, вам было лень поискать в Google допольнительную информацию?

FR>http://www.coversant.net/dotnetnuke/Coversant/Blogs/tabid/88/EntryID/9/Default.aspx
Там очень много специфических дотнетовских деталей (типа того что на одног клиента прожиралось до 100K памяти, и надо было уйти от чистоты модели к работоспособному изделию). Может, для дотнетчика это и полезно. Но мне это ничего не даёт — кроме голого факта, что собственно ядро не помешало такой работе. Что ж, тоже данные. Но мало.
The God is real, unless declared integer.
Re[17]: Как работает сервер ICQ (нельзя открыть более65535 п
От: FractalizeR  
Дата: 09.03.07 08:53
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, FractalizeR, Вы писали:


N>>>Для оценки реальных возможностей и влияющих на них факторов смысла в этом описании — ноль целых хрен десятых.

FR>>Ваше высказывание бессмысленно.
N>Всяко осмысленнее, чем наезд на Кегеля.

FR>> Кроме того, вам было лень поискать в Google допольнительную информацию?

FR>>http://www.coversant.net/dotnetnuke/Coversant/Blogs/tabid/88/EntryID/9/Default.aspx
N>Там очень много специфических дотнетовских деталей (типа того что на одног клиента прожиралось до 100K памяти, и надо было уйти от чистоты модели к работоспособному изделию). Может, для дотнетчика это и полезно. Но мне это ничего не даёт — кроме голого факта, что собственно ядро не помешало такой работе. Что ж, тоже данные. Но мало.

Какие же данные вам нужны?
Re[8]: peer2peer
От: ironwit Украина  
Дата: 07.06.07 13:50
Оценка:
Здравствуйте, netch80, Вы писали:

оффтопный вопрос.
где такими вещами занимаются? имеется в виду сервера, распределенные сервера, SIP итд?
реально мне интересна такая тема. чтото похожее делаю на текущей работе но приходится просто много изобретать велосипедов. с большим бы удовольствием ушел в крепкую команду студентом хоть вроде и не сильно студент
... << RSDN@Home 1.2.0 alpha rev. 0>>
Я не умею быть злым, и не хочу быть добрым.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.