Адресація і маршрутизація повідомлень

Вид адреси

У FossDocMail використовується тип адресації X.400, що регламентує управління повідомленнями і їх обробку, а також забезпечує надійність передачі і проміжне зберігання повідомлень на поточному поштовому сервері до моменту його передачі на наступний сервер. Даний тип адресації дозволяє передавати повідомлення від сервера до сервера, де на кожному з серверів ці повідомлення маршрутизируются, тобто приймається рішення про те, куди передавати повідомлення далі. X.400 забезпечує відправку повідомлень одночасно необмеженому числу одержувачів.

Адреса поштового повідомлення складається з шести рівнів. Формат адреси наступний:

C:UA/ADMD:EAST_Region/PRMD:KHARKOV/ORG:FOSS/OU:DEPARTMENT/PN:SEM

де:

C– страна;
ADMD регіон адміністративного управління;
PRMD -регіон часного управління;
ORG -організація;
OU -відділ;
PN -персональний номер.

Рівні адресації розділені символом “/”. Кожен з рівнів може приймати своє значення, яким і визначається кінцева адреса одержувача.

Маршрутизація

Для маршрутизації повідомлень застосовуються маршрутні таблиці. У папці #ROUTE_DIR, визначеної у файлі конфігурації host.cfg ЗАСЛАННЯ (за замовчуванням FossMail32 \ Route), знаходяться шість файлів С.LST, ADMD.LST, PRMD.LST, ORG.LST, OU.LST і PN.LST, імена яких збігаються з рівнями адреси поштового повідомлення. Ці файли носять назву маршрутні таблиці. Маршрутизація повідомлення починається з верхнього рівня адреси рівень С і закінчується рівнем PN. Формат кожної маршрутної таблиці наступний:

.POST:; коментарі
.EAST_Region:NAME1; коментарі
.*:NAME2; коментарі

Рядок починається з символу “.далі йде значення адреси відповідного рівня, закінчується двокрапкою. Після двокрапки може вказуватися ім’я напрямку (це сусідній поштовий сервер або кінцевий одержувач повідомлення). Закінчується запис крапкою з комою, після яких можуть йти коментарі. Замість значення адреси може використовуватися символ “*”.

Повідомлення приймається на обробку маршрутизатором, який робить аналіз адреси одержувача. Записи у відповідній маршрутній таблиці порівнюються із значенням адреси відповідного рівня. Алгоритм обробки наступний:

  1. не знайдено збіг і відсутній рядок типу:. *: NAME2; адреси не існує, формується звіт про недоставку повідомлення;
  2. знайдено збіг в рядку типу: .POST :; – розглядається наступний рівень маршрутизації;
  3. знайдено збіг в рядку типу: .EAST_Region: NAME1;повідомлення передається на напрям NAME1;
  4. не знайдено збіг і присутній рядок типу: .*:NAME2; повідомлення передається на напрям NAME2;

Розглянемо маршрутизацію повідомлень на прикладі фрагмента мережі, що складається з трьох поштових серверів, об’єднаних між собою по топології “ЗІРКА”.routing

Кожен поштовий сервер (вузол) має своє ім’я, яке задається у файлі конфігурації host.cfg ПОСИЛАННЯ і у файлі ліцензії, параметр #HOST_NAME. В межах однієї коропоративної мережі не може існувати двох поштових серверів з однаковими іменами. Імена вузлів можуть бути довільними. У нашому випадку сервера іменуються, наприклад, AAA, BBB и CCC.

Будемо вважати, що користувач з адресою

C:UA/ADMD:POST/PRMD:KIEV/ORG:INSTITUTION/OU:BRANCH/PN:Andrew

відправляє повідомлення користувачу з адресою

C:UA/ADMD:EAST_Region/PRMD:KHARKOV/ORG:FOSS/OU:DEPARTMENT/PN:Sem.

Згідно топології мережі наше повідомлення повинно пройти через сервер з ім’ям AAA і потрапити на сервер ССС, який обслуговує нашого клієнта з ім’ям Sem.

Маршрутизація починається з верхнього рівня адреси рівень С . Розглянемо маршрутні таблиці на кожному з серверів, які забезпечать такий рух повідомлення. Аналізувати будемо тільки ті маршрутні таблиці, які братимуть участь в роботі і значущі записи в них.

На сервері з ім’ям BBB маршрутна таблиця C.LST має запис слідуючого формату
.UA:;
Коли маршрутизатор аналізує адресу одержувача повідомлення він порівнює цей запис зі значенням рівня маршрутизації С:UA в адресі повідомлення. Дані записи збігаються і приймається рішення про розгляд наступного рівня маршрутизації ADMD.

Маршрутна таблиця ADMD.LST має слідуючі записи:

.POST:;
.EAST_Region:AAA;

Враховуючи, що рядок /ADMD:EAST_Region в адресі отримувача повідомлення на рівні ADMD збігається з рядком EAST_Region в маршрутній таблиці приймається рішення відправити повідомлення на сервер з ім’ям AAA.

На сервері AAA процес маршрутизації повторюється. Тут маршрутна таблиця ADMD.LST має слідуючі записи:

.POST:BBB;
.EAST_Region:CCC;

Що призводить до передачі повідомлення на сервер CCC.

На сервері з им’ям ССС маршрутизація проводиться знову, але вже з рівня PRMD т.я. на рівні ADMD в маршрутній таблиці існує запис

.EAST_Region:;

яка збігається зі значенням нашої адреси на цьому ж рівні.

В маршрутних таблицях PRMD.LST, ORG.LST та OU.LST повинні існувати записи відповідно .KHARKOV:; FOSS:; и DEPARTMENT:; ,що призведе до розгляду маршрутної таблиці PN.LST, в якій зазвичай перераховані всі клієнти цього сервера. Тобто там присутній запис .Sem:Sem; яки означає, що повідомлення потрібно відправити у поштову скриньку Sem.

Якщо був запитаний звіт про доставку, то він сформується маршрутизатором і відправиться на адресу

C:UA/ADMD:POST/PRMD:KIEV/ORG:INSTITUTION/OU:BRANCH/PN:Andrew

по зворотному маршруту.

Управління маршрутними таблицями здійснюється з програми Cfg_Client ПОСИЛАННЯ

Адреса поштового серверу

Кожен поштовий сервер крім імені має свою адресу, яка визначається параметром #ADDRESS_HOST файла host.cfg. Ця адреса має відповідати параметрам маршрутних таблиць. Приклад адреси поштового серверу наведено нижче.

C:UA/ADMD:EAST_Region/PRMD:KHARKOV/ORG:FOSS/OU:DEPARTMENT/PN:_$$HOST.

На рівні PN в адресі поштового серверу завжди присутнє значення _$$HOST. Кожен рівень, записаний в адресі поштового серверу повинен, бути присутнім у маршрутній таблиці відповідного рівня без вказівки напрямку подальшої передачі повідомлення. Наприклад, для серверу з такою адресою на рівні ADMD повинен бути запис типа EAST_Region;. Система при установці формує адресу поштового сервера і перевіряє його при кожному старті.

P.S. Дана стаття призначена для розуміння внутрішньої системи маршрутизації повідомлень адміністратором поштового сервера. Зазвичай, при відправці повідомлень клієнти використовують Глобальну адресну книгу, яка формується системою автоматично і адреси користувачів використовуються як внутрішня інформація системи. Але при бажанні адресу можна ввести вручну і повідомлення буде доставлено одержувачу.