Обеспечение взаимодействия компьютеров с помощью почтового шлюза
На предприятии, показанном на рис. 19.1, достаточно было установить единственную программу почтового шлюза, чтобы решить задачу обеспечения взаимодействия двух разных систем электронной почты. Как и во время работы с любой другой системой электронной почты, каждый хост на предприятии проверяет адрес назначения исходящей почты и выбирает следующий компьютер на пути к месту назначения. Если исходящая почта предназначена для компьютера в той же сети, где находится компьютер-отправитель, то для доставки сообщения используется система электронной почты самой сети. Однако если хост обнаруживает, что исходящая почта предназначена для компьютера, находящегося в другом почтовом домене, он не может сам доставить сообщение, поэтому передает его в программу почтового шлюза. К почтовому шлюзу может непосредственно обратиться любой хост, поскольку шлюз работает на компьютере, подключенном к обоим почтовым доменам, и способен обмениваться сообщениями с использованием любого из двух протоколов передачи почты.
После поступления письма в почтовый шлюз оно должно быть снова перенаправлено. Почтовый шлюз проверяет адрес назначения письма для определения дальнейших действий. В процессе принятия такого решения почтовый шлюз может также обратиться к базе данных адресов назначения. Получив информацию о том, где находится намеченный получатель и через какую почтовую систему должно быть доставлено сообщение, почтовый шлюз выбирает соответствующий протокол передачи почты.
В почтовом шлюзе может возникнуть необходимость переформатировать почтовое сообщение или откорректировать его заголовок перед перенаправлением из одного домена в другой. В частности, почтовый шлюз обычно изменяет содержимое поля адреса ответа в заголовке письма, чтобы почтовый интерфейс получателя мог правильно построить адрес для ответа. Корректировка обратного адреса может оказаться простой (например, добавление суффикса с обозначением сети отправителя) или более сложной (например, добавление информации с обозначением почтового шлюза как промежуточного компьютера, через который можно связаться с отправителем письма). Новые технологии - последние новости, высокие технологии.
Реализация почтового шлюза
С теоретической точки зрения, для реализации почтового шлюза достаточно одного потока управления. Однако в большинстве практически применяемых программ функциональные средства такого шлюза распределены по двум потокам, которые могут функционировать даже в составе отдельных процессов. Один поток обрабатывает входящие почтовые сообщения, в то время как другой управляет исходящей почтой. Поток, обрабатывающий входящую почту, не отправляет сообщения. Он определяет обратный адрес, перенаправляет почту к месту ее назначения, а затем помещает исходящее сообщение в очередь для последующей передачи. Поток, обрабатывающий исходящие сообщения, не может сам принять входящие сообщения. Вместо этого он периодически просматривает выходную очередь. Для каждого сообщения, обнаруженного в выходной очереди, поток вывода создает сетевое соединение с получателем и передает сообщение. При отсутствии возможности создать соединение с получателем (например, в связи с аварией на компьютере получателя) поток вывода оставляет сообщение в выходной очереди и переходит к обработке следующего сообщения в очереди. В последствии при следующем просмотре очереди поток вывода снова предпринимает попытку установить связь с получателем и передать ему сообщение. Если это сообщение остается в выходной очереди в течение продолжительного времени (например, трое суток), поток вывода сообщает об ошибке доставки пользователю, который передал первоначальное сообщение.
Разделение почтового шлюза и компонентов ввода и вывода позволяет обеспечить независимое функционирование каждого компонента. Поток вывода предпринимает попытку выполнить соединение, проверяет результаты этой попытки, а затем переходит к обработке следующего сообщения, не координируя свою работу с потоком ввода. Если попытка соединения оказалась успешной, поток вывода может передать сообщение любой длины. Ему не нужно прерывать передачу для приема входящих сообщений, поскольку выполнение этой операции обеспечивает поток ввода. Между тем, поток ввода продолжает принимать входящие сообщения, перенаправлять их и записывать в очередь для дальнейшей передачи. Поскольку оба компонента шлюза функционируют независимо друг от друга, то при передаче длинных выходных сообщений не нарушается обработка входных сообщений, а прием длинных входных сообщений не препятствует обработке выходных сообщений.