| ЖЖ LiveJournal, или Журнал Жизни |
![]() |
|
|
#1 (permalink) |
|
Администратор
Регистрация: 27.02.2008
Адрес: localhost
Возраст: 28
Сообщений: 1,393
|
papenkin
Сразу прошу не пинать, т.к. блог еще долго будет в разработке.
По задумке это будет не совсем дневник, скорее черновик. В свете последних событий, пришел к выводу, что многие люди не понимают принципов работы того, что они используют, как оно работает и пр. Это я сейчас о dc++ и торрентах. Поэтому и решил популярным языком сравнить этих зверушек)). |
|
|
|
|
|
#2 (permalink) |
|
Администратор
Регистрация: 27.02.2008
Адрес: localhost
Возраст: 28
Сообщений: 1,393
|
Часть 1.
итак приступим...
Часть 1. Что это такое? DC++ DС++ - это развитие протокола DC, сохраняющее топологию (т.е. есть центральный хаб и клиенты). Клиенты соединяются с хабом и должны поддерживать постоянное соединение, файлы между клиентами передаются напрямую, т.е. без участия хаба. Перед тем как файлы будут доступны для скачивания, они должны быть проиндексированы (алгоритм TTH, но об этом чуть позже). Файлы с одинаковыми хешами(индексами) могут закачиваться в несколько потоков с разных клиентов. Так же в дополнение к обмену файлами есть чат (как публичный, так и приватный), однако, обмениваться сообщениями напрямую клиенты не могут, только через хаб. BitTorrent BitTorrent - очень популярная и бурно развивающаяся p2p-сеть. По подсчетам [ссылку потом] 80% мирового трафика составляют именно торренты. Здесь также используется центральный узел (трекер), который координирует работу p2p-сети по специальному алгоритму (например, следит за тем, чтобы пользователи по возможности скачивали различные(!) части файлов, повышая тем самым вероятность скачивания целого файла при отключения источника или произвольного числа других клиентов). Как правило, кроме самого трекера присутствует "обертка" (форум) к нему, на которой в строгом порядке, в соответствии с правилами оформляются раздачи и хранятся файлы-дескрипторы(торрент-файлы). В торрент-файле содержатся контрольные суммы (алгоритм SHA1, чуть позже сравним с ТТН) всех кусков всех файлов в раздаче, а также информация, которая позволяет идентифицировать и контролировать пользователей (кто сколько скачал/отдал, на какой скорости и т.п.). |
|
|
|
|
|
#3 (permalink) |
|
Администратор
Регистрация: 27.02.2008
Адрес: localhost
Возраст: 28
Сообщений: 1,393
|
Часть2.
Что удобнее для обычного пользователя?
А вот на этот вопрос нужно взглянуть с разных сторон... Итак, представим такую ситуацию. Пользователь А захотел рашарить фильм "Х" размером 700 МБ, который хранится у него на жестком диске. 1. DC++. Тут все просто. Либо помещаем файл в уже расшаренную директорию, либо расшариваем ту директорию, в которой файл в данный момент находится. Во втором случае, расшарить один файл из многих нельзя, только всю директорию целиком. После этого необходимо ждать, пока программа-клиент (ApexDC, StrongDC и т.п.) прохеширует этот файл и обновит свой список файлов. Все файл доступен общественности. 2. BitTorrent. Тут немного сложнее... Сначала программой-клиентом необходимо создать торрент-файл (аналог хеширования в dc++). После этого на форуме трекера необходимо оформить раздачу надлежащим образом, закачав туда торрент-файл. После создания темы, необходимо туда зайти, скачать свой торрент-файл и начать скачивание в ту директорию, где находится файл. После этого файл станет доступен общественности. Как видим, в dc++ этот процесс гораздо легче - одна галочка и все. А теперь представим ситуацию когда необходимо скачать этот фильм. На трекере в строку поиска вводим название фильма (хоть на русском, хоть на языке оригинала), в итоге видим результаты, а также темы в котором они находятся (например, если есть одноименные фильм и мультфильм, то их сразу легко отличить). Еще пару секунд и закачка началась. В дц вводим в строку поиска название фильма... и смотрим на тот хлам, который вывалился... Нечего скрывать, редкий пользователь хранит все данные на своем винчестере в идеальном порядке. Например, вот несколько вариантов названия одного фильма: Перевозчик, перевосчик, перевозчег, perevozchik, Transporter, perevoz4ik и т.п. Думаю суть вы поняли. далее файлы с одинаковыми хешами объединяются в одну группу и указывается количество источников. Но тут вы замечаете две группы с одним названием. Что это значит? А это значит, что фильм один и тот же, но в разных вариантах (разная продолжительность, кодеки, качество и пр.) Ну и какой из них качать? Давайте там где источников больше... Ждемс... Уфф... Вроде скачалось... Давайте скорее посмотрим новинку! Включаем... что это? Что за "О! Я! Даст ист фантастиш..."??? Ндя... Не "Перевозчик", хотя тоже неплохо)) Будем искать... (с) В итоге не такой уж и большой минус в оформлении... Еще стоит отметить возможность общения. Да, это здорово поболтать с другом из другого района, обеняться с ним парой шуток в главном чате, повеселив остальных... но сначала надо спросить как дела... молчит... спросим еще разок... опять молчит... хм... А! НАДО ПИСАТЬ ПО-КРУПНЕЕ, ТОГДА ЗАМЕТИТ. И правда заметил)) Эх, как же это здорово поговорить с другом. Но как напрягает искать его ответы среди бесчисленных строчек других пользователей, которые тоже хотят общаться! И в итоге, вместо приятного общения лицезреем словесную помойку нескольких сотен пользователей, многие из которых общаются в общем чате 1на1 (в смысле, в их разговоре никто больше не участвует). Такой ли большой этот плюс? (о технической стороне далее). |
|
|
|
|
|
#4 (permalink) |
|
Администратор
Регистрация: 27.02.2008
Адрес: localhost
Возраст: 28
Сообщений: 1,393
|
Часть 3.1.
такс... с очевидным разобрались, давайте попробуем заглянуть внутрь и понять как это работает.
DC++ Как таковой протокол отсутствует. Хаб принимает команды от клиента в текстовом виде, без шифрования (если кому интересно, во многих клиентах есть такая штука CDM-отладчик, включите ее и увидите все команды которые шныряют от клиента к хабу и обратно). В самом начале клиент соединяться с хабом (порт 411). После этого хаб первым начинает "общение" с клиентом, посылая ему команду $Lock, в ответ клиент отсылает имя, пароль, описание, размер расшаренных файлов и пр. Тут следует отметить, что все команды в dc отсылаются в виде Код:
$command | где | означет конец строки (кто не помнит, TCP - поточный протокол, никаких пакетов, кадров и пр.), т.е. любая команда при посылке будет занимать 1500 байт (это для витушников, для модемщиков немного по другому, т.к. они используют технологию DOCSIS, который имеет прямую поддержку протокола IP с не фиксированной длиной пакетов). После соединения клиент часть полосы пропускания использует для принятия команд хаба, большая часть которых - чат. Теперь давайте рассмотрим процесс поиска. Как вы уже, наверно, догадались клиент должен отправить команду хабу. но об этом чуть позже. Давайте рассмотрим процесс поиска. Кто- нибудь помнит как в настройках указывал порты TCP и UDP? Почему два протокола? Потому что с хабом клиент общается через TCP, а меж собой по UDP. Так вот, клиент отсылает хабу запрос на поиск, хаб отправляет его всем клиентам, которые, в случае нахождения у себя этого файла, отвечают запрашивающему прямым ответом, минуя хаб. (тут есть небольшие тонкости относительно того "активный" или "пассивный" пользователь, если будет интерес, то о них я расскажу чуть позже). Вот тут стоит остановиться... Все дело в том, что программы-клиенты с заданным интервалом отправляют поисковые запросы с хешами, скачиваемых в данный момент файлов. Кто возьмется посчитать суммарный трафик от скажем 500 клиентов, скачивающих 2 файла каждый? т.е. регулярно отправляющих 1000 запросов всем подключившемся + посчитайте сколько съедает чат + эти 500 клиентов что-нибудь постоянно ищут. Мысль уловили? Немало пропускной способности канала потребляет эта процедура поиска. Думаете мало ищут? Запустите поиск-шпион - увидите (кстати, из-за такого принципа он и существует, любой может видеть, что ищут другие). Уфф... устал писать. Как будет время, продолжу... материала много, если будет интерес выложу все. ЗЫ. Замечания, поправления, вопросы и отзывы только приветствуются. Последний раз редактировалось papenkin, 11.12.2008 в 17:06. |
|
|
|
|
|
#5 (permalink) |
|
Администратор
Регистрация: 30.01.2007
Адрес: 127.0.0.1
Возраст: 32
Сообщений: 2,985
|
Классно! Особенно про скачку фильма Перевозчик понравилось.
![]() Многие из нас не задумывались о механизмах работы клиентов файлообменных сетей. Для общего развития очень полезно. И не надо искать статьи по этой теме. ![]() |
|
|
|
|
|
#6 (permalink) |
|
Назгулище
Регистрация: 21.03.2007
Адрес: Д. Песочня
Возраст: 39
Сообщений: 1,108
|
Согласен, очень позновательно.
__________________
--------------------------------------------------------------- Хорошо знать что хочешь, но ещё лучше понимать что имеешь. --------------------------------------------------------------- |
|
|
|
|
|
#7 (permalink) |
|
Администратор
Регистрация: 27.02.2008
Адрес: localhost
Возраст: 28
Сообщений: 1,393
|
Далее...
Сегодня был напряг с работой, голова уже не варит... Поэтому давайте отвлечемся от тонкостей работы и поговорим... обо всем))
Во-первых, давайте разберемся с тем что такое "актив" и "пассив" (это я сейчас про режим работы клиента), а заодно определимся с понятием "серые" и "белые" адреса, т.к. это почти одно и тоже. Итак, как мы подключены к локальной сети АГ? Рассмотрим пример "витых". Тут два варианта: 1. Сетевой кабель включен напрямую в компьютер. Т.е. из подъезда в квартиру и в компьютер. В данном случае все запросы из локальной сети обрабатывает компьютер, в т.ч. и на запрос установления соединения (в случае если порт открыт). Сетевому интерфейсу компьютера присвоен внутренний адрес сети АГ (например, 10.10.20.20), к которому другие клиенты имеют доступ (помните маршруты прописывали? как раз для того, чтобы знать как добраться до компьютера друга в другом районе). 2. Перед компьютером стоит оборудование. Представим, что у вас дома есть еще один компьютер (брата, например). Как быть в этом случае? Поставить две сетевые карты на одном компьютере, разрешить доступ в интернет другим пользователям и наслаждаться одновременным доступом с двух компьютеров? Нет, это не путь джедая, т.к. представьте, что есть еще ноутбук (еще одну сетевуху покупать?) или вы пошли пить пиво с друзьями, а брату нужно срочно скачать реферат (два компьютера включать?). Нет. Необходимо установить роутер (маршрутизатор), тогда ему будет присвоен адрес 10.10.20.20, а два компьютера пусть будут 192.168.1.10 и 192.168.1.11, соответственно адрес шлюза 192.168.1.1 (это адрес роутера со стороны ваших компьютеров). Как работает эта связка? Вы со своего компьютера отправляете запрос на форум. Тут следует отметить, что в передаваемом пакете кроме данных содержится адрес и порт источника, а также адрес и порт назначения.Так вот, маршрутизатор меняет адрес отправителя на 10.10.20.20, запоминает кому его надо вернуть и отправляет на 10.11.0.1 (форум). Сервер (на котором стоит форум) обрабатывает запрос и отвечает по тому адресу и порту, которые были в пакете (т.е. на ваш адрес внутри АГ). пакет приходит на маршрутизатор, который "вспоминает", меняет адрес назначения на 192.168.1.10 и отправляет на ваш компьютер. Все дальнейшее взаимодействие происходит по такому же принципу. А теперь давайте вспомним поиск в дц. Клиент отправляет запрос на хаб, тот пересылает его всем клиентам, которые отвечают вам. Т.е. ваш компьютер отправив запрос по TCP, ожидает ответа на другом порту по UDP. В то же время роутер отправил TCP запрос,запомнил его и ждет ответа. В этот момент приходят ответы от других клиентов на совсем другой порт, который на роутере закрыт и все пришедшие пакеты отбрасываются. До вашего компьютера ничего не доходит, поэтому вы ничего и не видите в строке поиска. Как быть? А в чем проблема? Проблема в том, что наш роутер не знает, что делать с пакетами которые приходят от других клиентов. Ну так, надо его научить. Процесс обучения называется портфорвардинг, т.е. говорим роутеру, что все пакеты которые приходят на порт скажем 30000 необходимо отправить комьютеру с адресом 192.168.1.10, поменяв там адрес назначения. А в своем клиенте ставим ручное перенаправление портов. Итак, первый вариант подключения - актив, второй - брандмауер с ручным перенаправлением портов. А что такое пассив? Допустим, мы не научили роутер, тогда выбираем режим пассив. Как он работает: вы отправляете поисковый запрос на хаб, но в нем говорите, что клиенты должны отвечать не вам, а хабу. соединение уже установлено и хаб отправляет по нему все ответы от других клиентов. Вот так вот... На сегодня, пожалуй, хватит. В следующий раз подробно рассмотрим механизм работы поиска и скачивания в dc... |
|
|
|
|
|
#8 (permalink) |
|
Propovednik13
Регистрация: 01.12.2007
Адрес: дашки/кассимовка/первак/витая пара
Возраст: 20
Сообщений: 437
|
очень познавательно......побольше таких людей .....на форуме ....
__________________
!!!!!!!!!!!!ВСЁ БУДЕТ ХОРОШО!!!!!!!!!!! aka@ <<<PrOpOvEdNiK 13>>>@ <<Один мир - одна мечта>>. Товарищ старшина, ваше приказание выполнено! - А я ничего не приказывал. - А я ничего и не делал! |
|
|
|
|
|
#10 (permalink) |
|
Администратор
Регистрация: 27.02.2008
Адрес: localhost
Возраст: 28
Сообщений: 1,393
|
VlaSok, планируется, только со сроками пока неопределенность, т.к. сильно занят. В ближайшее время набросаю остаток dc++, потом за торренты. Или есть какие-то конкретные темы/вопросы?
|
|
|
|
![]() |
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
| Опции темы | |
| Опции просмотра | |
|
|
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| С Днем Рождения, Papenkin! | VALSH | Дни рождения и праздники | 113 | 22.04.2012 08:15 |