Соединение клиентов напрямую (через сервер)
Проще говоря - как работают сервисы типа Skype/torrent? Приведу пример.
Есть центральный сервер. Есть 100500 клиентов. Клиент входит в сеть и сообщает серверу, что он онлайн. Затем клиент хочет начать общение (пересылку данных) с другим клиентом. Сервер в данном случае может сказать - онлайн нужный клиент или нет и дать на него адрес. После этого клиент должен подключиться к другому клиенту. Тут и возникает вопрос - а как их соединить?
Если бы клиенты имели белый IP - то всё понятно. А если нет? То как и каким образом произвести подключение? Т.е. как тогда идентифицируются клиенты?
В сетях не силен. В гугл не пинать, ибо я хз как там верно составить запрос - выдает мне стандартные клиент-сервер.
Может в торренте клиенты могут соединяться напрямую только если у одного из них есть белый ip, а иначе - через посредника?
А в Скайп просто переводит их на соединение между собой. Хотя вот про посредника я не знаю.
Точно знаю, что старый QIP (2005) файлы передавал тоже не через сервер, а напрямую. При этом я точно помню, что обменивался файлами с людьми, при этом что у них, что у меня был серый IP.
О, я нашел :)
Вообще-то старый QIP передавал файлы напрямую,только если была возможность.А соединение в вышеозначенных тобой программах наверняка происходит через посредника.Можно кому-то позвонить и запустить сетевой монитор для проверки,например
По поводу QIP'а. Несколько лет назад достаточно подробно ковырял протокол ICQ, там все не так просто. Не знаю, как обстоит дело сейчас, но по тому стандарту (имею в виду версии протокола <= 11) "прямой" обмен файлами был возможен только если клиент мог предоставить реальный адрес. В протоколе был предусмотрен запрос возможности прямой передачи данных. Собственно, это было не только для обмена файлами, общение тоже могло происходить напрямую.
Естественно, если у 2х участников обмена серые IP, прямое соединение между ними "за просто так" невозможно. Если у одного "белый" у другого серый - только с инициацией от серого. Тут можно в протоколе договориться чтобы была возможность "перезвонить по указанному номеру"
Собственно, чего далеко ходить: посмотрите на активный и пассивный режим FTP-сервера. Привожу пример. Пусть, к примеру, FTP-сервер стоит за NAT'ом, причем наружу проброшены только стандартные порты TCP 20 и TCP 21. Очевидно, такой сервер может работать только в активном режиме. Если будет два серых адреса, никакое подключение не пройдет.