Іменування і адресна книга

Примітка: Обгрунтування системи іменування I2P, загальні доводи проти неї і можливі альтернативи ви можете побачити на сторінці обговорення іменування

Компоненти системи імен

Система імен досить проста і здебільшого представлена ​​зовнішніми, по відношенню до маршрутизатора, додатками, але поставляється з дистрибутивом I2P. Ці компоненти:

Сервіси системи імен

Всі пункти призначення в I2P - це ключі по 516-байт (або більше). (Якщо бути більш точним, то це публічний ключ 256-байт плюс ключ підпису 128-байт плюс нульовий сертифікат, довжина якого у вигляді Base64 становить 516 байт. Сертифікати зараз не використовуються, якщо будуть, то довжина ключа буде більше. Сертифікати можна використовувати для підтвердження роботи.)

Сервіс імен hosts.txt

Сервіс імен hosts.txt виробляє простий лінійний пошук в текстових файлах. Цей сервіс імен використовувався за замовчуванням до версії 0.8.8, коли його замінив сервіс Blockfile. Формат hosts.txt ставав дуже повільним, коли файл розростався до тисяч записів.

  1. privatehosts.txt
  2. userhosts.txt
  3. hosts.txt

Blockfile Naming Service

The Blockfile Naming Service stores multiple "addressbooks" in a single database file named hostsdb.blockfile. This Naming Service is the default since release 0.8.8.

On creation, the naming service imports entries from the three files used by the hosts.txt Naming Service. The blockfile mimics the previous implementation by maintaining three maps that are searched in-order, named privatehosts.txt, userhosts.txt, and hosts.txt. It also maintains a reverse-lookup map to implement rapid reverse lookups.

Other Naming Service Facilities

The lookup is case-insensitive. The first match is used, and conflicts are not detected. There is no enforcement of naming rules in lookups. Lookups are cached for a few minutes. Base 32 resolution is described below. For a full description of the Naming Service API see the Naming Service Javadocs. This API was significantly expanded in release 0.8.7 to provide adds and removes, storage of arbitrary properties with the hostname, and other features.

Alternatives and Experimental Naming Services

The naming service is specified with the configuration property i2p.naming.impl = class. Other implementations are possible. For example, there is an experimental facility for real-time lookups (a la DNS) over the network within the router. For more information see the alternatives on the discussion page.

HTTP проксі виконує пошук через маршрутизатор для всіх імен вузлів, що закінчуються на '.i2p'. Або перенаправляє запит на налаштований зовнішній HTTP проксі. Т.ч. на практиці, все імена вузлів HTTP (eepsite) повинні закінчуватися на псевдо Домен Верхнього Рівня '.i2p'.

Вхідні Підписка і Злиття

Правила Іменування

  • При імпорті імена наводяться до нижнього регістру.
  • Після приведення до нижнього регістра імена перевіряються на конфлікти з наявними іменами в userhosts.txt і hosts.txt (але не в privatehosts.txt).
  • Після приведення до нижнього регістра повинні містити тільки [a-z] [0-9] '.' і '-'.
  • Чи не повинні починатися з '.' або '-'.
  • Повинні закінчуватися на '.i2p'.
  • Максимум 67 символів, включаючи '.i2p'.
  • Чи не повинні містити '..'.
  • Чи не повинні містити '.-' або '-.' (Як в 0.6.1.33).
  • Чи не повинні містити '-', виняток - 'xn--' для IDN.
  • Base32 hostnames (* .b32.i2p) are reserved for base 32 use and so are not allowed to be imported.
  • Певні імена вузлів, зарезервірование для використання проектом, не допускаються (proxy.i2p, router.i2p, console.i2p, * .proxy.i2p, * .router.i2p, * .console.i2p, і інші)
  • Ключі перевіряються на відповідність base64.
  • Ключі перевіряються на конфлікти з існуючими ключами в hosts.txt (але не в privatehosts.txt).
  • Мінімальний розмір ключа 516 байт.
  • Максимальний розмір ключа 616 байт (для потреб сертифікатів до 100 байт).

Any name received via subscription that passes all the checks is added via the local naming service.

Advanced Subscription Feed Format

Вихідні Підписка

Hosting and HTTP Transport Issues

Проте, вміст hosts.txt завантажується, якщо він був змінений. Обговорення цієї теми дивись нижче.

Вузла, обслуговуючому статичний hosts.txt, або еквівалентному додатком CGI настійно рекомендується відправляти заголовок Content-Length, або Etag або заголовок Last-Modified. Переконайтеся також, що сервер в разі потреби видає '304 Not Modified'. Це істотно зменшити пропускну здатність мережі, і зменшить ймовірність пошкодження.

Служби Додавання Вузла

Служба додавання вузла це просте додаток CGI, яке приймає ім'я вузла і Base64 ключ в якості параметрів, і додає їх в локальний hosts.txt. Якщо інші маршрутизатори підписані на цей hosts.txt, то нова пара ім'я вузла / ключ буде передана по мережі.

служби переходу

Служба переходу це просте CGI додаток, яке отримує ім'я вузла в якості параметра, і повертає перенаправлення 301 на правильний URL з додаванням рядка? I2paddresshelper = key. HTTP проксі інтерпретує додану рядок і використовує цей ключ як актуальний пункт призначення. Крім того, проксі кешує цей ключ, так що address helper не потрібен до перезапуску.

Для надання кращого рівня сервісу служба переходу повинна бути підписана на кілька провайдерів hosts.txt, таким чином локальний список вузлів буде актуальним.

Base32 Імена

Іменування і адресна книга

Іменування і адресна книга