Основные протоколы прикладного уровня стека TCP/IP Дроздов Алексей Владимирович БГТУ 2008 «Ключевые» прикладные протоколы HTTP - гипертекстовый протокол FTP – протокол передачи файлов SMTP – протокол пересылки почтовых сообщений POP3, IMAP – протоколы получения почтовых сообщений DNS - протокол преобразования доменных имен SNMP – протокол управления сетями Понятие HTTP HTTP – HyperText Transfer Protocol Является протоколом прикладного уровня. Описание HTTP можно найти в RFC 1945 и RFC 2616. Протокол HTTP реализуется с помощью двух программ: клиента и сервера, которые, находясь на разных оконечных системах, обмениваются HTTP-сообщениями. Версии протокола HTTP 1997 г. - практически все web-браузеры и web-серверы стали поддерживать протокол HTTP версии 1.0, описанный в документе RFC 1945. 1998 г. - переход к версии 1.1, которая была описана в RFC 2616. Версия 1.1 имеет обратную совместимость с версией 1.0, т.е. любой сервер и браузер, использующий версию 1.1, может а полной мере взаимодействовать с браузером или сервером, поддерживающий версию 1.0. HTTP использует TCP в качестве протокола транспортного уровня. HTTP-клиент сначала устанавливает TCP-соединение с сервером, а после создания соединения клиент и сервер начинают взаимодействовать с протоколом TCP, например, через механизм сокетов. Формат строки подключения URL — Uniform Resource Locator. Единый указатель ресурсов <схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь> Общий формат строки подключения, воспринимаемый практически всеми браузерами выглядит следующим образом: http://host[:port][/virtual_dir] Протокол HTTP. Запросы/ответы Постоянные и непостоянные соединения Протокол HTTP поддерживает постоянные и непостоянные соединения (версия 1.0 – только непостоянные). При непостоянном соединении протокол TCP получает только один объект, а при постоянном соединении (для версии 1.1 используется по умолчанию) – все объекты. Клиенты и серверы с поддержкой HTTP 1.1 можно настроить и для непостоянного соединения. Пример запроса по HTTP произвольного файла Общий формат HTTP-запроса Пример запроса к серверу GET / HTTP/1.1 Host: iipo.tu-bryansk.ru User-Agent: Mozilla/5.0 Connection: keep-alive Keep-Alive: 300 Accept-Encoding: gzip,deflate Accept: text/css,*/*;q=0.1 Accept-Language: ru-ru,ru Accept-Charset: windows-1251,utf-8 Формат HTTP-ответа Пример ответа сервера HTTP/1.0 200 OK Date: Sun, 18 Nov 2007 22:45:58 GMT Server: Microsoft-IIS/6.0 X-Powered-By: PHP/5.2.3 Expires: Mon, 26 Jul 1997 05:00:00 GMT Last-Modified: Sun, 18 Nov 2007 22:45:58 GMT Content-Encoding: gzip Vary: Accept-Encoding Content-Length: 4657 Content-Type: text/html Connection: keep-alive (data data data …) HTTP методы HTTP/1.0 GET POST HEAD Запрос только заголовков отклика без возврата объекта HTTP/1.1 GET, POST, HEAD PUT Загрузка объекта на сервер по указанному URL DELETE Удаление объекта на сервере по указанному URL Коды HTTP-откликов 200 OK: Запрос успешно обработан, объект получен и включен в ответ. 301 Moved Permanetly: Объект перемещен; новый URL-адрес указан в строке ответа Location:. Программа клиента автоматически выполнит запрос по новому адресу. 400 Bad Request: Общая ошибка, вызванная невозможностью интерпретации запроса сервером. 404 Not Found: Запрашиваемый объект не найден на сервере. 505 HTTP Version Not Supported: Указанная в запросе версия HTTP не поддерживается сервером. Проксирование HTTP-трафика Цель проксирования – предоставление клиенту результата без обращения к оригинальному серверу Использование прокси серверов Пример эффективного проксирования Достоинства HTTP Простота. Протокол настолько прост в реализации, что позволяет с лёгкостью создавать не только клиентские приложения, но и простые сервера. Расширяемость. Вы можете легко расширять возможности протокола благодаря внедрению своих собственных заголовков сохраняя совместимость с другими клиентами и серверами. Они будут игнорировать неизвестные им заголовки, но при этом вы можете получить необходимый вам функционал при решении специфической задачи. Распространённость. При выборе протокола HTTP для решения конкретных задач немаловажным фактором является его распространённость. Как следствие, это обилие различных документаций по, включение удобных в использовании средств разработки в популярные IDE, поддержка протокола в качестве клиента многими программами и обширный выбор среди хостинговых компаний с серверами HTTP. Недостатки HTTP Большой размер пакетов. Использование текстового формата в протоколе порождает соответствующий недостаток: большой размер сообщений по сравнению с передачей двоичных данных. Из-за этого возрастает нагрузка на оборудование при формировании, обработке и передаче сообщений. Для решения данной проблемы в протокол встроены средства для обеспечения кэширования на стороне клиента. Отсутствие «навигации». Хотя протокол разрабатывался как средство работы с ресурсами сервера, у него отсутствуют в явном виде средства навигации среди этих ресурсов. Например, клиент не может явным образом запросить список доступных файлов как в протоколе FTP. Нет поддержки распределенности. Протокол HTTP разрабатывался для решения типичных бытовых задач где само по себе время обработки запроса должно занимать незначительное время или вообще не приниматься в расчёт. Понятие FTP File Transfer Protocol («протокол передачи файлов») или просто FTP — сетевой протокол, предназначенный для передачи файлов в компьютерных сетях. Протокол FTP позволяет подключаться к серверам FTP, просматривать содержимое каталогов и загружать файлы с сервера или на сервер, кроме того, возможен режим передачи файлов между серверами. Спецификация FTP Первоначальная спецификация протокола описана в RFC 959. В настоящее время разработаны версии FTP для работы с IPv6 (RFC 2428 – FTP Extensions for IPv6 and NATs). Протокол файлового обмена Режимы работы FTP Существуют два возможных режима работы FTP клиента и сервера: активный пассивный Схема работы протокола ftp в активном режиме Схема работы протокола ftp в пассивном режиме FTP-команды и ответы Примеры команд: USER username PASS password LIST возвращает список объектов в текущей директории RETR filename получение файла STOR filename загрузка файла на сервер Примеры кодов возврата: 331 Username OK, password required 125 data connection already open; transfer starting 425 Can’t open data connection 452 Error writing file Формат строки подключения Общий формат строки подключения, воспринимаемый практически всеми выглядит следующим образом: ftp://[user[:password]]@host[:port][/dir], где user – логин пользователя, password – пароль пользователя, host – доменное имя сервера или его IPадрес, port – номер сетевого порта (в случае, если сервер работает на нестандартном порту), dir – каталог, который должен стать текущим после подключения к FTP-серверу. Логин пользователя и его пароль записываются в открытом виде. Например: ftp://admin:[email protected] ftp://[email protected]:21 ftp://192.168.128.5:21/pub ftp://82.179.88.34 Электронная почта – e-mail Адрес электронной почты – обозначение, установленное RFC 2822, однозначно идентифицирующее почтовый ящик, в который следует доставить сообщение электронной почты. Адрес состоит из двух частей, разделённых символом «@». Левая часть указывает имя почтового ящика, часто оно совпадает с логином пользователя. Правая часть адреса указывает доменное имя того сервера, на котором расположен почтовый ящик. Например: [email protected], где admin – имя пользователя; ctam.tu-bryansk.ru – доменное имя сервера, на котором располагается электронный ящик. Базовые сведения о протоколе SMTP В качестве транспортного средства доставки сообщений в Интернет выступает SMTP (Simple Mail Transfer Protocol, простой протокол передачи почты), который был стандартизован в виде RFC 821. Упрощенная схема передачи почтовых сообщений Примерная схема работы webпочты Этапы передачи почтового сообщения Соединение почтового клиента с SMTP-сервером отправителя; Передача SMTP-серверу информации о том, кому предназначается почта и кто является отправителем; Проверка SMTP-сервером корректности данных об адресате и адресанте и принятие письма (с заголовками и телом письма); Постановка письма в очередь доставки; DNS-запрос о почтовых серверах (MX-записи) для домена адресата; Попытка соединения SMTP-сервера отправителя с почтовыми серверами адресата, имеющими наибольший приоритет. Если попытка неудачна, делаются ещё попытки соединения с резервными почтовыми серверами домена адресата; Этапы передачи почтового сообщения: 2 Передача письма в случае удачного соединения с почтовым сервером домена адресата, либо постановка в очередь для попытки переслать письмо позже, в случае неудачи; Прием SMTP-сервером домена адресата письма Проверка письма на предмет его похожести на спам (опционально) Передача его модулю, который занимается хранением писем и выдачей их адресатам по протоколу POP3, IMAP или другим; Соединение адресата с POP3 или IMAP сервером, аутентификация и получение письма адресатом. Пример взаимодействия с SMTP-сервером S: C: S: C: S: C: S: C: S: C: C: C: S: C: S: 220 ctam.tu-bryansk.ru HELO yandex.ru 250 Hello crepes.fr, pleased to meet you MAIL FROM: <[email protected]> 250 [email protected]... Sender ok RCPT TO: <[email protected]> 250 [email protected] ... Recipient ok DATA 354 Enter mail, end with "." on a line by itself Do you like ketchup? How about pickles? . 250 Message accepted for delivery QUIT 221 ctam.tu-bryansk.ru closing connection Базовые команды SMTP HELO <SP> <domain> <CRLF> MAIL <SP> FROM:<reverse-path> <CRLF> RCPT <SP> TO:<forward-path> <CRLF> DATA <CRLF> RSET <CRLF> SEND <SP> FROM:<reverse-path> <CRLF> SOML <SP> FROM:<reverse-path> <CRLF> SAML <SP> FROM:<reverse-path> <CRLF> VRFY <SP> <string> <CRLF> EXPN <SP> <string> <CRLF> HELP <SP> <string> <CRLF> NOOP <CRLF> QUIT <CRLF> Пример заголовков письма Received: from smtp1.yandex.ru (smtp1.yandex.ru [213.180.223.87]) by tower.tts.debryansk.ru (8.13.8/8.13.8) with ESMTP id kBEMe5U9026669 for <[email protected]>; Fri, 15 Dec 2006 01:40:05 +0300 Received: from [84.42.57.195] ([84.42.57.195]:41232 "EHLO [84.42.57.195]" smtp-auth: "user" TLS-CIPHER: <none> TLS-PEER-CN1: <none>) by mail.yandex.ru with ESMTP id S2077041AbWLNWj5 (ORCPT <rfc822;[email protected]>); Fri, 15 Dec 2006 01:39:57 +0300 X-Comment: RFC 2476 MSA function at smtp1.yandex.ru logged sender identity as: user Date: Fri, 15 Dec 2006 01:35:14 +0300 From: user <[email protected]> X-Mailer: The Bat! (v3.71.03) Professional Reply-To: user <[email protected]> X-Priority: 3 (Normal) Message-ID: <[email protected]> To: [email protected] Subject: Test mail message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------681C016910860C8F" X-Virus-Scanned: ClamAV 0.88.5/2334/Thu Dec 14 22:46:52 2006 on tower.tts.debryansk.ru X-Virus-Status: Clean X-UIDL: 6P4!!RS`"!daU!!dLp!! That all... MIME расширения MIME: multimedia mail extension, RFC 2045, 2056 additional lines in msg header declare MIME content type MIME version method used to encode data multimedia data type, subtype, parameter declaration encoded data From: [email protected] To: [email protected] Subject: Picture of yummy crepe. MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Type: image/jpeg base64 encoded data ..... ......................... ......base64 encoded data Базовые сведения о протоколе POP3 В некоторых небольших узлах Интернет бывает непрактично поддерживать систему передачи сообщений (MTS – Message Transport System). Но доступ к электронной почте необходим как для таких малых узлов, так и индивидуальных ЭВМ. Для решения этой проблемы разработан протокол POP3 (Post Office Protocol – Version 3, STD: 53. M. Rose, RFC-1939). Этот протокол обеспечивает доступ узла к базовому почтовому серверу. POP3 (порт 110) не ставит целью предоставление широкого списка манипуляций с почтой, он лишь получает и стирает почтовые сообщения. Более продвинутый и сложный протокол IMAP4 обсуждается в RFC-2060 (порт 143). Об аутентификации в POP3 можно прочесть в документе RFC-1734. POP3 протокол авторизация client commands: user: declare username pass: password server responses +OK -ERR транзакции, client: list: list message numbers retr: retrieve message by number dele: delete quit S: C: S: C: S: +OK POP3 server ready user bob +OK pass hungry +OK user successfully logged C: S: S: S: C: S: S: C: C: S: S: C: C: S: list 1 498 2 912 . retr 1 <message 1 contents> . dele 1 retr 2 <message 1 contents> . dele 2 quit +OK POP3 server signing off on Понятие доменов Домен – область иерархического пространства доменных имён сети Интернет, которая обозначается уникальным доменным именем. Доменное имя – символьное имя домена. Должно быть уникальным в рамках одного домена. Полное имя домена состоит из имён всех доменов, в которые он входит, разделённых точками. Например, полное имя www.tubryansk.ru. обозначает домен третьего уровня www, который входит в домен второго уровня tu-bryansk, который входит в домен .ru, который входит в корневой домен. Доменное имя служит для адресации узлов сети Интернет и расположенных на них сетевых ресурсов в удобной для человека форме. Доменная зона – совокупность доменных имён определённого уровня, входящих в конкретный домен. Например, зона ctam.tu-bryansk.ru. означает все доменные имена третьего уровня в этом домене. Система доменных имен DNS - Domain Name System — система доменных имён распределённая система (распределённая база данных), способная по запросу, содержащему доменное имя хоста (компьютера или другого сетевого устройства), сообщить IP адрес или (в зависимости от запроса) другую информацию Иерархия доменных имен DNS протокол DNS функционирует на принципе делегирования полномочий. Каждая машина либо знает ответ на вопрос, либо знает кого спросить. При правильном функционировании система замкнута, т.е. если запрошенная информация имеется у коголибо, то она будет найдена и сообщена клиенту, либо, если вопрос не имеет ответа, клиент получит сообщение о невозможности получения ответа на вопрос. В основе работы DNS лежит соответствующий сетевой протокол также с названием DNS. DNS-протокол использует для работы TCP- или UDP-порт 53 для ответов на запросы. Например, браузер перед запросом некоторого ресурса выделяет из URL имя, посылает запрос на преобразование DNS серверу, который в свою очередь в случае успешного преобразования, возвращает пакет с запрошенной клиентом информацией. После чего браузер может выполнять необходимые операции по запросу ресурсов с сервера с заданным IP–адресом. Дополнительные функции DNS Помимо преобразования имени хостов в IP-адреса, DNS выполняет еще несколько важных функций: Поддержка псевдонимов серверов. Поддержка псевдонимом почтовых серверов. Распределение загрузки. Основные спецификации DNS содержатся в документах RFC 1034 и RFC 1035. Кроме того, некоторые дополнения можно найти и в других RFC. В виду достаточно высокой сложности DNS, мы с вами коснемся только базовых ее понятий. Пример итеративного разрешения DNS имени Размещение корневых доменных серверов ?