Протокол IPv6 в протоколе NMDC, Спецификация и тестирование IPv6 в NMDC |
Здравствуйте, гость ( Вход | Регистрация )
Протокол IPv6 в протоколе NMDC, Спецификация и тестирование IPv6 в NMDC |
4.2.2012, 0:12
Сообщение
#101
|
|
Участник Группа: Пользователи Сообщений: 49 Регистрация: 3.2.2012 Пользователь №: 10 254 Спасибо сказали: 1 раз |
Да, как бы неочень получается, продолжим ту тему здесь? Т.к. та тема не в том разделе и я предлагаю серьезно обсужадть не только спецификацию, но и тестировать..?
Моё предложение не слать 2 команды, т.к. хабы и так генерят много трафика, а хорошенько подумать и использовать сложившуюся ситуацию себе наруку. Потому как расплата за ошибки, допущенные сейчас, в будущем может быть очень большая. Т.к. только хаб знает какие к нему присоединены клиенты, я предлагаю все команды, в которых передается ipv6 адрес, дублировать (так сказать, раз уж так получилось, подкорректируем протокол). В общем здесь я опишу как я вижу решение проблемы, а дальше жду ваших комментариев. nmdc expansion by gif-t, with ipv6 support Цель:
Основные положения:
$RevConnectToMe - команда, которую пассивный пользователь отправляет чтобы попросить другого пользователя попросить его инициировать с ним соединение, заменяются одной $RCM. Не используется клиентами на хабах, где администратор пропускает TCP порты в команде UIP. и (описние $RevConnectToMe) Обычная: Цитата $RevConnectToMe [Ник1] [Ник2]| nmdc expansion by gif-t: Цитата $RCM$[Ник_получателя]$[Ник_отправителя]| Пример: $RCM$Вася$Петя| Уточнения:
$ConnectToMe - команда, которую активный пользователь отправляет чтобы попросить другого пользователя инициировать с ним соединение, заменяются одной $CTM (описние $ConnectToMe) Обычная: Цитата $ConnectToMe [Ник_получателя] [IP_отправителя]:[Порт_отправителя]| Пример: $ConnectToMe Вася 10.10.10.10:16437| nmdc expansion by gif-t: Цитата $CTM$[Ник_получателя]$[Ник_отправителя]$[IPv4_TCP_порт]$[IPv6_TCP_порт]| Вариант без IPv6 порта $CTM$Вася$Петя$163$| Вариант когда порты отдаются через $UIP и порты в $CTM не передаются вообще: $CTM$Вася$Петя| Уточнения:
Активный клиент (способный принимать входящие соединения) посылает данную команду на хаб для того, чтобы попросить пользователя [Ник_получателя] инициализировать соединение с ним (IP адрес и иногда порт тому клиенту уже извествен благодаря $UIP). $Search и $MultiSearch (описние $Search) (описние $MultiSearch) Обычная: Цитата Активный: $Search [IP]:[Порт] [Строка_поиска] $Search 10.10.10.10:412 T?T?500000?1?Gentoo$2005 Пассивный $Search Hub:[Ник] [Строка_поиска] $Search Hub:Вася T?T?500000?1?Gentoo$2005 Нет деления структуры на активный и пассивный поиски nmdc expansion by gif-t: Раскрывающийся текст Цитата $SCH$[Режим поиска_активный_пассивный]$[Ник_отправителя]$[Размер_ограничения]$[Максимальный_размер]$[Размер]$[[Тип_данных]$[Строка_поиска]| Активнй режим (Ответ отправляется по протоколу UDP) $SCH$A$Петя$T$T$67$1$Gentoo 2005| Пассивный режим (Ответ отправляется по протоколу TCP через хаб) $SCH$P$Петя$T$T$67$1$Gentoo 2005| Уточнения:
$SR - ответ на поисковый запрос (описние $SR) Нужно проверить, но я думаю эта фукция будет работать с ipv6 без модификации. $MultiSearch (описние $MultiSearch) Не знаю, она в ходу? Я просто не вижу в ней смысла. Хаб должен сам решать как и куда он пересылает поисковые запросы. Моё мнение - модификация команды не нужна. Сразу объявим $SCH как $MultiSearch на линкованых хабах. $UserIP (описние $UserIP) Обычная: Цитата $UserIP [Ник1] [IP1]$$[Ник2] [IP2]$$[Ник3] [IP3]$$ ... $$[НикN] [IPN]$$| nmdc expansion by gif-t: Раскрывающийся текст Цитата $UIP$$[Ник1]$[IPv4]$[Порт_TCP_v4]$[Порт_UDP_v4]$[IPv6]$[Порт_TCP_v6]$[Порт_UDP_v6]$$[Ник2]$[IPv4]$[Порт_TCP_v4]$[Порт_UDP_v4]$[IPv6]$[Порт_TCP_v6]$[Порт_UDP_v6]$$ ... $$[НикN]$[IPv4]$[Порт_TCP_v4]$[Порт_UDP_v4]$[IPv6]$[Порт_TCP_v6]$[Порт_UDP_v6]| Пример с одинковыми портами: $UIP$$Петя$192.168.34.64$422$423$2001:470:26:1ef::1$-$-| Пример с разыми портами: $UIP$$Петя$192.168.34.64$422$423$2001:470:26:1ef::1$645$486| Пример первый пользователь с разыми портами, второй с одинковыми портами: $UIP$$Петя$192.168.34.64$422$423$2001:470:26:1ef::1$645$486$$Петя$192.168.34.64$422$423$2001:470:26:1ef::1$-$-| Пример параметров клиента, рассылаемых командой $UIP хабом, когда клиент соединен с хабом по IPv6. (Т.е. ipv4 адрес не подтвержден и UDPv4 порт заменен на символ "_"): $UIP$$Петя$192.168.34.64$422$_$2001:470:26:1ef::1$645$486| Уточнения:
$ForceMove (описние $ForceMove) Эту команду тоже стоит модифицировать, чтобы клиенту передавалось сразу два IP адреса, IPv6 и IPv4. Далее он сможет выбрать по какому он может устанавливать соединение. Обычная: Цитата $ForceMove [Новый_адрес] nmdc expansion by gif-t: Цитата $FOM$[протокол]$[тип редиректа]$[IPv4]$[Порт_v4]$[IPv6]$[Порт_v6]| Временный редирект на NMDC $FOM$dchub$307$192.168.34.64$422$2001:470:26:1ef::1$645| Перманентный редирект на ADC, клиент меняет запись у себя в фаворитах, если такая имеется. $FOM$adc$301$192.168.34.64$422$2001:470:26:1ef::1$645| Уточнения:
$BotINFO / $HubINFO (описние $BotINFO и $HubINFO) Тут впринципе модификация не требуется, т.к. адрес заполняется вручную администраторорм хаба/ администратором бота. Пуска IPv6 адрес пишется в квадратных скобках. Это конечно усложняет функцию обработки... но несильно, сейчас сам набросал её (вышло +14 строк) Если IPv6 адрес идет после всех других адресов, то сохраняется совместимость со старыми $Supports Добавляем в команду GIFTEXT для идентификации хабов и клиентов, поддерживающих expansion by gif-t -------------------------------------------------------------------------------------------------------------------------------------------- Как видите, 1) Длина команд сильно укоротилась за счет использования трехбайтовых ключей и за счет вынос адресов в команду $UIP 2) Команды очень легко разобрать, т.к. разделитель элементов всегда один - знак $ (в старых командах разделителей много - пробел, двоеточие, знак "$", знак "?"). В адресе IPv6 используется двоеточие для разделения блоков и скобки для отделения порта, т.к. он отделяется тоже двоеточием, - в моём предложении вообще не надо использовать квадратные скобки для разделения ipv6 адреса от порта! В обшем для обработки таких команд выйдет функция минимального размера, максимальной простоты и быстродействия. 3) Предложенная схема абсолютно совместима со старыми (текущими) клиентами. Т.к. старым клиентам отсылаются команды старого типа. В схеме, предложенной Setuper'ом, данные впихиваются в структуру старых команд. Таким образом получаем в его схеме
В моей схеме
Клиент при коннекте через саппортс сообщает хабу о поддержке модифицированных команд GIFTEXT. Отсылает ему эти команды и команды старого типа (не уверен что это правильно, т.к. на стороне хаба по новой команде на мой взгляд очень просто сформировать команду старого типа, но впринципе если уж тк проще, то пускай так и будет). Хаб без всякой нагрузки отсылает без изменения всем клиентам команды того типа, который они поддерживают (старым - старого, новым - нового). Вот и весь принцип... |
|
|
14.2.2012, 3:14
Сообщение
#102
|
|
Начинающий Группа: Пользователи Сообщений: 25 Регистрация: 27.11.2009 Пользователь №: 5 183 Спасибо сказали: 1 раз |
Не понимаю, в чем смысл вводить столько глупых ограничений?
Надо фиксить это в клиентах, удалять нафиг такие алгоритмические лажи. Протокол должен быть максимально гибок. + это же значительная и вообще бессмысленная нагрузка на хабы... Еще я выяснил что в протокол NMDC не заложено ограничение на количество пользователей, а в ADC заложено - 1 048 576. Это ошибка из области ipv4 или 32 битных систем. И в первом и во втором случае лимиты были достигнуты намного раньше чем предполагалось. |
|
|
15.2.2012, 22:30
Сообщение
#103
|
|
Начинающий Группа: Пользователи Сообщений: 28 Регистрация: 3.7.2009 Пользователь №: 3 768 Спасибо сказали: 2 раза |
Не понимаю, в чем смысл вводить столько глупых ограничений? Надо фиксить это в клиентах, удалять нафиг такие алгоритмические лажи. Протокол должен быть максимально гибок. + это же значительная и вообще бессмысленная нагрузка на хабы... приватные хабы и всё такое. заходишь - прошёл регистрацию - можешь качать. иначе насканил портов через nmap, нашёл dc++, дёрнул файл-лист и давай приватные файлы выкачивать публичные хабы - вершина айсберга dc++ Еще я выяснил что в протокол NMDC не заложено ограничение на количество пользователей, а в ADC заложено - 1 048 576. Это ошибка из области ipv4 или 32 битных систем. И в первом и во втором случае лимиты были достигнуты намного раньше чем предполагалось. да ну фигня. SID везде в клиентах и хабах хранится как Int32. просто генераторы, применяемые в текущих хабах, берут символы из набора base32. если брать все ASCII-знаки (вроме пробела), sid останется красиво читаемым и ёмкость хаба будет (128-32-1)^4 = 81 450 625 юзеров. даже сейчас можно в SID класть любые байты, экранируя \n и \s согласно правилам кодирования в протоколе. так что легко модифицировать генератор SID-ов в хабе - расширить ёмкость до 4 миллиардов, и это без потери совместимости с самыми ранними adc-клиентами. но дальше уже лимит протокола |
|
|
16.2.2012, 16:18
Сообщение
#104
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
В протоколе написано:
Цитата SIDs are 20 bits long and encoded using a 4-byte base32 encoded string. Если использовать ASCII, то это уже не ADC протокол. Перекраивать это никто не собирается. Да и вообще о чём речь? какой миллион? современное железо даже 100000 не потянет |
|
|
16.2.2012, 23:10
Сообщение
#105
|
|
Участник Группа: Пользователи Сообщений: 49 Регистрация: 3.2.2012 Пользователь №: 10 254 Спасибо сказали: 1 раз |
Setuper, а это не важно. Когда IPv4 был создан, тоже ходили слухи что не возможно построить сеть из нескольких миллиардов компов, потому что столько не сделать, а если и сделают, такая сеть не сможет функционировать. И с оператовкой тоже самое. Это было время когда 10 мегабайт было очень много, никто и не думал что величина в 4 гигабайта достижима. И процессоры были 100 мегагерц...
И вы сейчас так рукой махаете, типо а о чём речь? какой миллион? современное железо даже 100000 не потянет.... а вот посмотрим что будет через 20 лет. Сейчас интел почти подобралась к физическому пределу уменьшения тех процесс. Там, на уровне атомов, уже другие процессы... и кто знает чего за это время там откроют, может процы начнут выпускать по несколько сотен гигагерц, кто знает.... В общем ограничений быть не должно, или оно должно быть запредельным, хотябы 64 бита. |
|
|
17.2.2012, 22:32
Сообщение
#106
|
|
Начинающий Группа: Пользователи Сообщений: 28 Регистрация: 3.7.2009 Пользователь №: 3 768 Спасибо сказали: 2 раза |
Если использовать ASCII, то это уже не ADC протокол. Перекраивать это никто не собирается. формально - да. а по факту, никто не проверяет, из каких символов собран SID. если сделать версию ADC 1.001, где в SID разрешены любые знаки, клиенты будут автоматически его поддерживать И вы сейчас так рукой махаете, типо а о чём речь? какой миллион? современное железо даже 100000 не потянет.... а вот посмотрим что будет через 20 лет. В общем ограничений быть не должно, или оно должно быть запредельным, хотябы 64 бита. ограничение на 4 символа удобно для обработки на 32-битных машинах. никто не мешает сделать ADC 2.0, где SID может быть из 8 символов (чтобы помещаться в 64 битную переменную). протокол текстовый, ничего не сломается. клиентов переделать - задача на 15 минут. |
|
|
18.2.2012, 15:02
Сообщение
#107
|
|
Начинающий Группа: Пользователи Сообщений: 25 Регистрация: 27.11.2009 Пользователь №: 5 183 Спасибо сказали: 1 раз |
Всеравно это будет неприятно.
Вообще не понимаю, почему некоторые данные фиксированной длины не передавать в бинарном виде, ведь там толпа народа собралась, неужели никто не догадался... Пользователи то не видят что там передается, нафига расходовать трафик за зря, ради наглядности. Вон в контре все пакеты бинарные, получил строку, сразу знаешь где 4 байта - это 32 битный int, прямо копируешь в массив без всяких преобразований. Сколько бы только на SID, CID, IPv4, U4, IPv6, U6 сэкономили бы трафика... CID занимает 39 байт, а так бы занимал 25 байт. IPv6 максимум 39 байт, а так 16 байт. IPv4 максимум 15 байт, а так 4 байт. Порт 5 байт, а так 2 байта. Рано еще на ADC переходить, совершенно сырой и не продуманный протокол, масса потенциала для оптимизации и дополнений. |
|
|
18.2.2012, 17:06
Сообщение
#108
|
|
Участник Группа: Пользователи Сообщений: 49 Регистрация: 3.2.2012 Пользователь №: 10 254 Спасибо сказали: 1 раз |
Чем больше я углубляюсь в ADC, тем больше он поражает меня своим несовершенством и непродуманностью.
И убивает то, что при разработке они даже не спросили пользователей, а с какими проблемами сталкивались они в NMDC, не спросили администраторов крупных хабов, вообще не спросили основных потребителей - русских. С такими ужасными показателями ADC еще долго будет в тени. У нас есть мозги, нам надо было разработать свой, нормальный, без таких банальных косяков, протокол и поддерживать его. А не тянуть продукт, сделанный забугорными людьми без мозгов. И они делают DC для небольших локалок, а у нас люди строят на ней серьезные глобальные проекты, гигантские хабы. Их масштабы мыслей не соизмеримы с нашими, однако мы почему-то упрямо не хотим брать всё в свои руки. У нас очень много хороших разработчиков, наш клиент flylink обгоняет по популярность всех! Обидно что инициативы не то что нет, а она даже не приветствуется. |
|
|
20.2.2012, 22:52
Сообщение
#109
|
|
Начинающий Группа: Пользователи Сообщений: 28 Регистрация: 3.7.2009 Пользователь №: 3 768 Спасибо сказали: 2 раза |
тексты/бинари, байты/спрайты, нравится/нет это все шелуха.
настоящая проблема - в организации DC сети: каждый пук любого клиента транслируется на тысячи соединений и никакая экономия пяти байт в заголовке это не исправит. нужно закрыть общий чат, сделать тематические комнаты, куда будут заходить люди по интересам (будет не более 200 чел на комнату и обсуждение в одной комнате не будет транслироваться на весь хаб - какая экономия). а то и вообще чат отключить - нефиг, для этого есть IRC (можно даже использовать инфраструктуру IRC, чтобы было привычно. зашёл в хабик - увидел список IRC-комнат, подключился, чат идёт не по хаб-каналу, а через IRC) нужно доделать DHT-поиск, чтобы он искал не только по TTH, а полноценно по имени файла. тогда весь поисковый трафик плавно размажется по всей сети и не будет узким местом. хабы - это точки входа в DHT-сеть и не более того. |
|
|
23.2.2012, 23:06
Сообщение
#110
|
|
Участник Группа: Пользователи Сообщений: 49 Регистрация: 3.2.2012 Пользователь №: 10 254 Спасибо сказали: 1 раз |
Что-то я пытался разобраться с DHT, но нигде нормальной документации с примерами последовательностей подключения и обмена командами не нашел... Пытался даже как-то отснифферить, но ничего не вышло, в бинарных командах непросто разобраться.
|
|
|
26.2.2012, 10:12
Сообщение
#111
|
|
Начинающий Группа: Пользователи Сообщений: 28 Регистрация: 3.7.2009 Пользователь №: 3 768 Спасибо сказали: 2 раза |
Что-то я пытался разобраться с DHT, но нигде нормальной документации с примерами последовательностей подключения и обмена командами не нашел... Пытался даже как-то отснифферить, но ничего не вышло, в бинарных командах непросто разобраться. они не бинарные. это обычные текстовые ADC-команды, пожатые zlib и закрытые RC4 (устаревший шифр. защищает скорее не от взлома, а от технической блокировки на оборудовании провайдера. слегка пришифрованный пакет нельзя классифицировать как DC++ и заблокировать, ведь это также может быть SIP или Skype, чего закрывать нельзя) в открытом виде DHT-обмен можно посмотреть в окне отладчика в greylink |
|
|
Похожие темы
|
Сейчас: 27.11.2024, 2:11 |