Алгоритм маршрутизации
Задача Router периодически просматривает "свой" MAIL.BOX на предмет появления в нем сообщений. Для каждого поступившего сообщения выполняется следующее:
· Определение, принадлежит ли адрес получателя сообщения текущему домену или другому домену.
· Если адрес получателя принадлежит текущему домену:
· Поиск имени почтового сервера и имени файла почтового ящика получателя в базе "адресная книга" (по информации из документов Person или MailInDatabase).
· Если почтовый сервер получателя есть текущий сервер:
· Доставка сообщения в файл почтового ящика получателя.
· Если почтовый сервер получателя - другой сервер:
· Определение маршрута "наименьшей стоимости" от текущего сервера к серверу получателя.
· Передача сообщения с текущего сервера в MAIL.BOX на следующий сервер в этом маршруте.
· Если адрес получателя принадлежит другому домену:
· Определение маршрута "наименьшей стоимости" от текущего сервера до любого доступного сервера в домене получателя.
· Передача сообщения с текущего сервера в MAIL.BOX на следующий сервер в маршруте.
В алгоритме содержится два разных уровня:
маршрутизация между доменами и маршрутизация внутри домена. При передаче между доменами выбирается "маршрут наименьшей стоимости" от исходного сервера до любого доступного сервера или шлюза в домене назначения. Сообщение сначала передается между доменами, пока не достигнет домена получателя. Затем сообщение передается внутри домена. Поскольку Router "не знает" полную топологию сети в рамках нескольких доменов, общий маршрут от сервера-источника до сервера назначения в другом домене, вообще говоря, не является оптимальным.
Маршрутизация внутри домена в пределах одной поименованной сети выполняется "напрямую" от сервера к серверу. Router использует при этом информацию только из документов Server в адресной книге. Документы Connection в этой ситуации вообще не анализируются - потому и не нужно создавать в адресной книге документов Connection для передачи почты между серверами в одной поименованной сети.
Если внутри домена имеется несколько поименованных сетей, выбирается маршрут "наименьшей стоимости" от исходного сервера до сервера назначения, и сообщение отправляется на следующий сервер в этом маршруте.