5.3.3. Учебный пример: IMAP, протокол доступа к почтовым сообщениям

5.3.3. Учебный пример: IMAP, протокол доступа к почтовым сообщениям

Чтобы завершить рассмотрение примеров с протоколами прикладного уровня Internet, рассмотрим протокол IMAP (Internet Message Access Protocol — протокол доступа к почтовым сообщениям в Internet). IMAP — другой почтовый протокол, спроектированный в несколько ином стиле. Как и в предыдущих примерах, строки, начинающиеся с С:, отправляются клиентом, а строки, начинающиеся с 5:, отправляются почтовым сервером. Текст, выделенный курсивом, представляет собой комментарии и не является частью реальной транзакции.

Пример 5.9. IMAP-сеанс

С: <клиент подключается к служебному порту 143>

S: * ОК example.com IMAP4revl V12.264 server ready

С: А0001 USER "frobozz" "xyzzy"

S: * OK User frobozz authenticated

C: AO002 SELECT INBOX

S: * 1 EXISTS

S: * 1 RECENT

S: * FLAGS (Answered Flagged Deleted Draft Seen)

S: * OK [UNSEEN 1] first unseen message in /var/spool/mail/esr

S: A0002 OK [READ-WRITE] SELECT completed

С: A0003 FETCH 1 RFC822.SIZE получение размеров сообщений

S: * 1 FETCH (RFC822.SIZE 2545) S: A0003 OK FETCH completed

C: AO004 FETCH 1 BODY[HEADER] получение заголовка первого

сообщения

S: * 1 FETCH (RFC822.HEADER {1425}

<сервер отправляет 1425 октетов полезной нагрузки сообщения> S: )

S: АО004 OK FETCH completed

С: А0005 FETCH 1 BODY[TEXT] получение тела первого

сообщения

S: * 1 FETCH (BODY[TEXT] {1120}

<сервер отправляет 1120 октетов полезной нагрузки сообщения> S: )

S: * 1 FETCH (FLAGS (Recent Seen)) S: А0005 OK FETCH completed С: A0006 LOGOUT

S: * BYE example.com IMAP4revl server terminating connection S: A0006 OK LOGOUT completed С: <клиент разрывает соединение>

В IMAP полезная нагрузка ограничивается несколько иначе. Вместо завершения блока полезной нагрузки с помощью точки перед ним отправляется его длина. Это несколько увеличивает накладные расходы на сервере (сообщения должны быть скомпонованы заранее, их невозможно просто установить в поток после того, как отправка инициирована), однако упрощает работу клиента, поскольку предоставляет возможность заранее определить объем пространства, которое необходимо выделить в целях буферизации сообщения для его обработки в целом.

Кроме того, следует заметить, что каждый ответ маркируется последовательной меткой, передаваемой в запросе. В данном примере такие метки имеют форму АОООп, однако клиент может генерировать любой маркер в данном поле. Данная особенность позволяет направлять серверу поток IMAP-команд, не ожидая ответов. Конечный автомат клиента может затем просто интерпретировать ответы и блоки полезной нагрузки по мере их возвращения. Данная методика сокращает задержку.

Протокол IMAP (который был разработан для замены РОРЗ) является превосходным образцом продуманной и мощной конструкции прикладного протокола в Internet, примером, достойным изучения и подражания.

Данный текст является ознакомительным фрагментом.