На этом уровне реализуется передача пакетов без установки соединения — дейтаграммным способом. Межсетевой уровень обеспечивает перемещение пакетов по сети с использованием наиболее рационального маршрута (протокол OSPF). Основная функция межсетевого уровня — передача пакетов через составную сеть, поэтому этот уровень также называется уровнем Интернет.
Транспортный (основной) уровень
Данный уровень обеспечивает сеансы связи между компьютерами. Существует два транспортных протокола: TCP (Transmission Control Protocol) и UDP (User Datagram Protocol). Протокол TCP ориентирован на установление соединения, то есть перед передачей данных компьютеры «договариваются» между собой. Обычно по этому протоколу передаются большие объемы данных или данные, для которых требуется подтверждение их приема. Этот протокол используется большинством сетевых приложений, так как обеспечивает достаточную надежность при передаче данных.
Протокол UDP не ориентирован на соединение и не гарантирует доставку пакетов (дейтаграмм). Однако протокол UDP является более быстродействующим по сравнению с TCP. Обычно по этому протоколу передаются небольшие объемы данных. Ответственность за доставку данных несет сетевая программа.
Уровень приложений
Данный уровень является вершиной модели TCP/IP. На этом уровне работают практически все распространенные утилиты и службы: DNS, Telnet, WWW, Gopher, WAIS, SNMP, FTP, TFTP, SMTP, POP, IMAP.
В качестве завершения данного пункта рассмотрим соответствие уровней стека протокола TCP/IP семиуровневой модели OSI (см. табл. 1.5).
Соответствие уровней стека TCP/IP модели OSI Таблица 1.5
Уровень модели OSI Протокол Уровень стека TCP/IP 7, 6 WWW (HTTP), FTP, TFTP, SMTP, POP, telnet, WAIS, SNMP 1 5, 4 TCP, UDP 2 3 IP, ICMP, RIP, OSPF, ARP 3 2, 1 Ethernet, PPP, SLIP 4
В следующем пункте рассмотрено такое важное понятие протокола TCP/IP как порт. В том же пункте будут рассмотрены структуры пакетов IP и TCP, поскольку рассмотрение этого материала без введения определения порта не имеет смысла.
Дальнейшее изложение материала построено, исходя из того, что вы уже знаете, что такое сервер и какие службы вам придется настраивать. В пункте Как устроена книга (п. 1.5) было подробно описано, в каких главах описана настройка той или иной службы. Здесь же давайте рассмотрим некоторые базовые понятия, каковыми являются понятие «демон» и «порт».
Как уже было отмечено, в заголовке каждого пакета указывается IP-адрес отправителя и IP-адрес получателя, а также номер порта. С IP-адресом отправителя и получателя все понятно, осталось сказать, что же такое порт. Дело в том, что сразу несколько приложений на одном компьютере могут осуществлять обмен данными через сеть. При этом, если в качестве адресата указывать только IP-адрес получателя, то приложения, выполняемые на нем, не смогут разобраться кому из них предназначены присланные данные. Чтобы решить эту проблему используется механизм портов. Номер порта — это просто номер программы, которая будет обрабатывать переданные данные. Каждой сетевой программе, которая работает по протоколу TCP/IP, сопоставлен свой номер порта. Например, 80 — это порт WWW-сервера (обычно это Apache), a 53 — это порт системы доменных имен.
Термин демон происходит от английского слова demon (или daemon) и означает программу, которая выполняется в фоновом режиме и дополняет операционную систему каким-нибудь сервисом. Как правило, пользователь не замечает работу демона: он даже и не подозревает, что данная программа запущена. Программа-демон чем-то напоминает резидентные программы в операционной системе DOS. Как видите, нет ничего общего с ужасными существами потустороннего мира. Обычно демон ожидает определенного события, после которого он активизируется и выполняет свою работу. Сетевые демоны ожидают получения пакета с определенным номером порта и, получив его, обрабатывают содержащиеся в нем данные. В книге мы еще неоднократно поговорим об этих «существах», поэтому сейчас не будем подробно останавливаться на них.
1.7.7. Структура пакетов IP и TCP
Вот теперь можно смело перейти к рассмотрению структуры пакетов IP и TCP. Протокол IP не ориентирован на соединение, поэтому не обеспечивает надежную доставку данных. Поля, описание которых приведено в табл. 1.6, представляют собой IP-заголовки и добавляются к пакету при его получении с транспортного уровня.
Структура заголовка IP-пакета Таблица 1.6
Поле Описание Source IP-address (IP-адрес отправителя) Отправитель пакета Destination IP-address (IP-адрес получателя) Получатель пакета Protocol (Протокол) TCP или UDP Checksum (Контрольная сумма) Значение для проверки целостности пакета TTL (Time to Live, время жизни пакета) Определяет, сколько секунд дейтаграмма может находиться в сети. Предотвращает бесконечное блуждание пакетов в сети. Значение TTL автоматически уменьшается на одну или более секунд при проходе через каждый маршрутизатор сети Version Версия протокола IP — 4 или 6. Шестая версия протокола IP рассматривается в гл. 8 (4 бита) Header Length (Длина заголовка) Минимальный размер заголовка — 20 байт (4 бита) Type of Service (Тип обслуживания) Обозначение требуемого для этого пакета качества обслуживания при доставке через маршрутизаторы IP-сети. Здесь определяются приоритет, задержки, пропускная способность. (8 бит) Total Length (Общая длина) Длина дейтаграммы IP-протокола (16 бит) Identification (Идентификация) Идентификатор пакета. Если пакет фрагментирован (разбит на части), то все фрагменты имеют одинаковый идентификатор (16 бит) Fragmentation Flags (Фрагментационные флаги) 3 бита для флагов фрагментации и 2 бита для текущего использования Fragmentation Offset (Смещение фрагмента) Указывает на положение фрагментов относительно начала поля данных IP-пакета. Если фрагментации нет, смещение равно 0x0 (13 бит) Options and Padding (Опции и заполнение) Опции
Протокол TCP, в отличие от протокола IP, ориентирован на установление соединения и обеспечивает надежную доставку данных. Структура TCP-пакета описана в табл. 1.7.
Структура TCP-пакета Таблица 1.7
Поле Описание Source port (Порт отправителя) Порт TCP узла-отправителя Destination Port (Порт получателя) Порт TCP узла-получателя Sequence Number (Порядковый номер) Номер последовательности пакетов Acknowledgement Number (Номер подтверждения) Порядковый номер байта, который локальный узел рассчитывает получить следующим Data Length (Длина данных) Длина TCP– пакета Reserved (Зарезервировано) Зарезервировано для будущего использования Flags (Флаги) Описание содержимого сегмента Window (Окно) Показывает доступное место в окне протокола TCP Checksum (Контрольная сумма) Значение для проверки целостности пакета Urgent Pointer (Указатель срочности) При отправке срочных данных (поле Flags) в этом поле задается граница области срочных данных