Работа в сети с использованием TCP/IP
TCP/IP и сетевая модель Windows Server 2003
Сетевая архитектура Windows Server 2003 особенно подходит для использования различными наборами протоколов. Имея интерфейс Transport Device Interface (TDI) вверху транспортного уровня модели OSI и интерфейс Network Device Interface Specification (NDIS) внизу сетевого уровня, основные транспортные протоколы большей частью изолированы от остальной части сетевого стека.
Любые допустимые протоколы, которые могут обращаться к этим двум интерфейсам, могут использоваться для отправки данных через сеть. Конечно, различные протоколы могут одновременно функционировать в Windows Server 2003, требуя компромисса между взаимодействием платформ и производительностью сетевого трафика.
Поверх TDI находятся интерфейсы пользовательского режима (их называют также интерфейсами прикладного программирования, или API ). К этим интерфейсам обращаются приложения, когда им требуются сетевые службы. Во главе этих интерфейсов находятся интерфейс NetBIOS, который по-прежнему поддерживается системой Windows Server 2003 для файловых служб, и Windows Sockets (Winsock), который является стандартным интерфейсом для многих утилит TCP/IP и Internet в целях обратной совместимости с клиентами предыдущих версий Windows. Поддерживаются также следующие API.
- Удаленные вызовы процедур (RPC – Remote Procedure Calls)
- Блоки серверных сообщений (SMB – Server Message Blocks)
- Именованные каналы (Named Pipes)
- Почтовые слоты (Mail Slots)
Эти API не обязательно связаны с определенным набором протоколов. Например, в первоначальном выпуске системы Windows NT можно было передавать данные только из ее интерфейсов API в протокол NetBEUI и затем драйверу NDIS. В этой упрощенной системе не было функций TCP/IP, но она предоставляла определенные сетевые услуги.
TDI предоставляет распределенный интерфейс, который позволяет направлять сетевые запросы от различных API тому протоколу, который требуется для доступа к нужному ресурсу. Например, NetBIOS-запросы файлов можно направлять протоколам TCP/IP при доступе к диску Windows в сети или протоколу NWLink, когда приложению требуется файл, находящийся на сервере NetWare. Несколько приложений, работающих в Windows Server 2003, могут обрабатывать несколько сетевых запросов одновременно, а это означает, что вызовы различных функций могут передаваться через TDI в стек протоколов TCP/IP либо в стек NWLink или одновременно в оба стека.
Все стеки протоколов, действующие на компьютере Windows Server 2003, передают свои запросы сетевых услуг в одно место – интерфейс NDIS. NDIS – это стандарт, используемый для создания драйвера устройства, который обеспечивает доступ к сетевому оборудованию. Сетевую архитектуру Windows Server 2003 можно рассматривать как последовательность "суживающих" процедур. Приложения вверху этой модели генерируют запросы, которые могут использовать любой из нескольких API. Затем эти API передают запросы меньшему числу протоколов (обычно одному или двум). Различные виды запросов могут смешиваться в отдельных стеках протоколов; в интерфейсе NDIS они смешиваются в один поток и компонуются в виде дискретных пакетов, которые передаются через сетевой адаптер и затем самому сетевому носителю.
Тем самым протоколы TCP/IP в первую очередь используются для перемещения запросов от TDI к интерфейсу NDIS, упаковывая их в дискретные блоки, которые называются дейтаграммами, что позволяет эффективно передавать эти запросы в их место назначения. Этот процесс, конечно, выполняется в обратном порядке, когда данные поступают на рабочую станцию. Можно считать, что упаковка состоит из трех основных функций.
- Адресация. Для отправки данных другому компьютеру в сети должны существовать средства, с помощью которых может быть уникально идентифицирована точка назначения. TCP/IP предоставляет свою собственную систему идентификации в форме IP-адреса для каждой машины в сети.
- Маршрутизация. Протокол канального уровня (Data Link), такой как Ethernet, не занимается конечной доставкой сетевых пакетов, а только их пересылкой следующей машине в сети. TCP/IP предоставляет средства, с помощью которых сетевой трафик эффективно и надежно маршрутизируется через несколько сетевых сегментов в место назначения.
- Мультиплексирование. Поскольку такая операционная система, как Windows Server 2003, может выполнять несколько программ одновременно, сетевые запросы мультиплексируются через кабель (то есть пакеты из различных источников и с различными точками назначения смешиваются в потоке сетевых данных). Поэтому, чтобы запросы могли быть переданы соответствующему прикладному процессу на целевом компьютере, должен быть идентифицирован каждый пакет. TCP/IP выполняет эту задачу, назначая каждому процессу номер порта, который в сочетании с IP-адресом уникально идентифицирует в сети конкретный процесс, которому должен быть доставлен пакет. Комбинация IP-адреса и номера порта называется сокетом.
Стек протоколов TCP/IP
Протоколы TCP/IP, реализованные в Windows Server 2003, можно разбить на четыре функциональных уровня, примерно соответствующих уровням эталонной модели OSI.
- Прикладной (Application)
- Транспортный (Transport)
- Сетевой (Network; известный также как уровень интернет)
- Сетевого доступа (Network Access)
Как и в эталонной модели OSI, функции различных протоколов TCP/IP разбиваются на четыре уровня, которые делают процесс инкапсуляции (упаковки) данных более структурированным. По мере того, как сообщение проходит из пользовательского интерфейса вверху сетевого стека к реальному сетевому носителю (обычно это кабель) вниз, данные, обработанные протоколом верхнего уровня, повторно инкапсулируются протоколами, действующими на каждом следующем уровне. В результате получается составной пакет, который передается целевому компьютеру, где весь процесс повторяется в обратном порядке по мере прохождения сообщения вверх по этим уровням.
Изучение уровней, на которых действует этот комплект протоколов, позволяет понять, каким образом они реализованы для использования в сетях Windows Server 2003. В следующих разделах дается обзор уровней TCP/IP.
Уровень сетевого доступа (Network Access)
Уровень сетевого доступа действует внизу стека протоколов TCP/IP, непосредственно над канальным уровнем (Data Link), для передачи дейтаграмм через сетевой носитель. TCP/IP имеет свою собственную систему адресации, посредством которой он идентифицирует другие компьютеры в сети. Но после того, как дейтаграммы IP поступают в интерфейс NDIS, они перепаковываются в виде фреймов, соответствующих используемому типу сети.
Каждый тип сети – Ethernet или какой-либо еще – имеет свой собственный способ идентификации компьютеров в сети. В большинстве современных типов сетей эта идентификация осуществляется с помощью адреса устройства, который кодируется в каждом сетевом адаптере его изготовителем. Этот MAC-адрес (Media Access Control address) используется в крайнем фрейме каждого сетевого пакета для идентификации компьютера, которому он должен быть передан.
Поэтому для дейтаграммы IP, которая должна быть отправлена через сеть, должен существовать способ, позволяющий определить, какой MAC-адрес соответствует заданному IP-адресу. Это задача протоколов уровня сетевого доступа, из которых наиболее известен протокол разрешения адресов ARP (Address Resolution Protocol).
ARP
ARP действует между сетевым и канальным уровнями сетей Ethernet. Он не может действовать, пока не получит IP-адрес компьютера, которому отправлена дейтаграмма. Дейтаграмма не может быть передана через сеть, пока ARP не снабдит канальный уровень адресом целевого устройства.
Когда ARP получает дейтаграмму от сетевого уровня, он считывает IP-адрес точки назначения из заголовка IP и затем формирует пакет разрешения запроса адреса (ARP-пакет), который распространяется путем широковещательной передачи во всей локальной сети. Запрос разрешения адреса содержит IP-адрес целевого компьютера (если он находится в том же сегменте сети) или IP-адрес шлюза по умолчанию для соответствующей рабочей станции (в противном случае).
Каждый компьютер в данном сегменте сети обрабатывает пакет ARP и записывает содержащийся в нем IP-адрес. Если компьютер обнаруживает в пакете ARP свой собственный IP-адрес, то он отвечает отправителю, указывая адрес устройства, соответствующий его сетевому адаптеру. ARP передает этот адрес протоколу канального уровня, который использует его при разбиении пакета на фреймы и затем передает его через сеть.
ARP также поддерживает кэш IP-адресов и соответствующие адреса устройств, чтобы снизить количество избыточных широковещательных сообщений, передаваемых через сеть. Кэш стирается при каждом выключении или перезагрузке компьютера, что препятствует неверной передаче, которая может быть вызвана изменениями в сетевом оборудовании.
ARP – это лишь один из многих протоколов уровня сетевого доступа, предназначенных для поддержки чрезвычайно обширного и разнообразного множества платформ, которые могут использовать TCP/IP.
Сетевой уровень (Network Layer)
Протокол IP (Internet Protocol), который действует на сетевом уровне стека протоколов TCP/IP, является центральным протоколом всего комплекта и ядром функционирования TCP/IP. Все протоколы более высоких уровней этого комплекта упаковываются в дейтаграммы IP, прежде чем происходит передача в интерфейс NDIS. IP выполняет многие ключевые функции, которые позволяют функционировать комплекту TCP/IP, включая следующие.
- Упаковка трафика более высоких уровней в дейтаграммы, которые являются базовыми единицами передачи TCP/IP.
- Реализация системы адресации TCP/IP.
- Маршрутизация дейтаграмм между сетями.
- Фрагментация и дефрагментация дейтаграмм в соответствии с ограничениями типов сетей между исходной и конечной точками.
- Передача данных между транспортным уровнем и уровнем сетевого доступа (в обоих направлениях).
IP – это протокол без установления соединения (connectionless) и поддержки средств надежности. Слова "без установления соединения" означают, что он передает пакеты без проверки того, что целевой компьютер работает и готов к приему данных. Отсутствие средств надежности означает, что не существует внутренних механизмов, которые обеспечивают обнаружение и коррекцию ошибок. Эти очевидные недостатки на самом деле не представляют какой-либо проблемы, поскольку IP можно всегда использовать в сочетании с другими протоколами, которые могут обеспечивать эти функции. Основой протокола IP является обеспечение только обычных функций, которые требуются для всех видов передачи данных, чтобы можно было выбрать подходящий транспортный протокол, отвечающий конкретным требованиям передаваемых данных.
Маршрутизация IP
IP также отвечает за маршрутизацию дейтаграмм в смежные сегменты сети. Каждый компьютер, работающий с TCP/IP в интерсети, имеет доступ к одному или нескольким шлюзам, которые он использует для передачи данных компьютерам других сетей. Шлюз в терминологии TCP/IP – это устройство, которое передает пакеты между двумя и более сетями. Этот термин не обязательно подразумевает существование трансляции протоколов (в отличие от обычной сетевой терминологии). Систему с TCP/IP, которая используется как шлюз между источником и целью передачи, называют также промежуточной системой (источник и цель называют конечными системами ).
Трафик TCP/IP в промежуточной системе доходит до сетевого уровня, но не выше. Протоколу IP известно только о компьютерах в его локальном сетевом сегменте и о смежных сегментах, доступ к которым осуществляется через локальные шлюзы. Когда протокол IP получает пакет, предназначенный для компьютера в другом сегменте, он отправляет его локальным шлюзам, чтобы они продолжили передачу этого пакета. Этот конкретный шлюз выбирается по следующим причинам.
- Он обеспечивает непосредственный доступ к сети, в которой находится целевой компьютер.
- Он зарегистрирован в таблице маршрутизации данного компьютера как наиболее подходящий маршрут к целевой сети.
- Это шлюз по умолчанию данного компьютера.
Заголовок IP
Как и любой сетевой протокол, IP помещает свой собственный заголовок в каждый пакет, который он получает от вышележащих уровней, инкапсулируя его для передачи и вставляя информацию, которая требуется для выполнения всех функций протокола. Заголовок IP содержит 20 или 24 байта в зависимости от включения определенных возможностей. Байты в терминологии TCP/IP называются октетами, и заголовок разбивается на 5 или 6 32-битных слов. После включения заголовка пакет называют дейтаграммой, и он передается вниз на уровень сетевого доступа (Network Layer). Дейтаграмма инкапсулируется снова канальным уровнем (Data Link), прежде чем начинается ее передача через сеть.
Заголовок IP состоит из шести полей.
-
Первое слово
- Версия (Version, 4 бита). Указывает версию заголовка IP.
- Длина заголовка (Internet Header Length, 4 бита). Общая длина заголовка IP (количество 32-битных слов), указывая тем самым, имеется ли необязательное шестое слово.
- Тип обслуживания (Type of Service [TOS], 8 битов). Указывает нужный приоритет сетевого обслуживания для данной дейтаграммы.
- Общая длина (Total Length, 16 битов). Указывает общую длину дейтаграммы в октетах (байтах); может использоваться, чтобы определять, нужна ли фрагментация дейтаграммы для выполнения передачи.
-
Второе слово
- Идентификация (Identification, 16 битов). Если дейтаграмма фрагментируется или дефрагментируется, то данное поле указывает дейтаграмму, которой принадлежит определенный фрагмент.
- Флаги (Flags, 3 бита). Указывает, может ли данная дейтаграмма быть фрагментированной и получены ли все фрагменты, образующие исходную дейтаграмму.
- Смещение фрагментации (Fragmentation Offset, 13 битов). Используется для сборки фрагментов в нужном порядке; это поле указывает начальную точку (измеряется 64-битными блоками) данного фрагмента дейтаграммы.
-
Третье слово
- Время действия (Time to Live, 8 битов). Указывает, как долго (в секундах) данная дейтаграмма может оставаться активной в интерсети. Это позволяет удалять дейтаграммы, которые невозможно доставить, после заданного периода времени. Каждая система, которая обрабатывает дейтаграмму, уменьшает это значение как минимум на секунду.
- Протокол (Protocol, 8 битов). Указывает протокол на транспортном уровне целевого компьютера, которому должна быть доставлена дейтаграмма.
- Контрольная сумма заголовка (Header Checksum, 16 битов). Используется для проверки того, что заголовок IP (но не данные) переданы правильно. Эта контрольная сумма проверяется каждой промежуточной системой и пересчитывается, прежде чем выполнить отправку в следующий узел.
-
Четвертое слово
- Исходный адрес (Source Address, 32 бита). IP-адрес передающего компьютера.
-
Пятое слово
- Целевой порт (Destination Address, 32 бита). IP-адрес конечной системы, которой отправлена дейтаграмма.
-
Шестое слово (необязательное)
- Параметры (Options, переменной длины). Задает параметры для обслуживания маршрутизации, безопасности и временных меток в передачах IP. Это поле тоже не является обязательным, но должно поддерживаться всеми реализациями IP.
- Заполнитель (Padding, переменной длины). Нули, используемые для заполнения остатка шестого слова до 32 битов.
Хотя протокол IP наиболее активно используется протоколами TCP/IP, сам IP не может справляться с некоторыми ситуациями, встречающимися во время передачи дейтаграмм. В этих случаях требуется "вспомогательный" протокол, выполняющий дополнительные функции управления передачей.
ICMP (Internet Control Message Protocol). ICMP действует на сетевом уровне. Он используется для выполнения ряда диагностических и административных функций, которые помогают в передаче пакетов IP. Например, утилита ping использует пакеты ICMP для проверки существования определенных IP-адресов в данной сети.
Аналогичные пакеты ICMP используются также для предоставления компьютеру-отправителю отчетов о состоянии передачи, например:
- сообщения, что целевой адрес дейтаграмм недоступен, указывая далее, какой элемент целевой доставки недоступен, – сеть, хост, протокол или порт;
- сообщения ICMP типа Source Quench ("Замедление источника"), указывающие, что промежуточная или конечная система переполнена поступающими пакетами. Это позволяет отправившему сообщение узлу инициировать процедуры управления потоком, снижающие скорость передачи, пока не исчезнут сообщения этого типа;
- отчеты о том, что пакеты были исключены промежуточной или конечной системой из-за повреждения заголовка пакета;
- предупреждения, что дейтаграммы должны быть фрагментированы, чтобы они могли успешно дойти до целевого узла.
Сообщения ICMP типа Redirect (Перенаправление) являются рекомендациями по маршрутизации, информирующими узел-отправитель об условиях вне смежных сегментов сети. Если передающий компьютер находится в сегменте, где имеется более одного применимого шлюза, то эти пакеты позволяют отправителю выбирать шлюз, который обеспечивает более эффективный маршрут к целевому узлу.
Эти функции не следует путать с функциями действительно ориентированной на соединения службы и средств обнаружения ошибок. ICMP помогает в доставке дейтаграмм IP на целевой компьютер, но не гарантирует надежности обслуживания.
Транспортный уровень (Transport Layer)
Как и в эталонной модели OSI, транспортный уровень TCP/IP находится поверх сетевого уровня. Транспортные протоколы инкапсулируются внутри дейтаграмм IP для передачи через сеть и предоставляют различные уровни обслуживания в зависимости от требований соответствующего приложения. Два основных протокола, которые действуют на транспортном уровне, это TCP (Transmission Control Protocol) и UDP (User Datagram Protocol). Они подробно описываются в следующих двух разделах. TCP/IP применяется в тех случаях, когда требуется более надежное обслуживание, и UDP – в тех случаях, когда гарантированная доставка не является критически важным требованием. В поле Protocol заголовка IP указывается, какой транспортный протокол передается в дейтаграмме, чтобы принимающая рабочая станция знала, как обрабатывать данный пакет.
TCP (Transport Control Protocol)
TCP – это основной ориентированный на соединения надежный протокол, используемый в передаче данных TCP/IP. Приложения используют его в ситуациях, требующих передачи данных, которые можно проверить на полную точность, например, при ftp-пересылке файлов. В отличие от IP передача данных TCP никогда не начинается, пока не будет выполнено трехстороннее квитирование (three-way handshake) с целевым компьютером. В результате создается виртуальное соединение между двумя компьютерами, то есть заранее созданное "соглашение" между этими двумя машинами для обмена пакетами. После установления соединения все дейтаграммы, передаваемые в течение данного сеанса, считаются сегментами этой передачи. Весь набор дейтаграмм, передаваемых в течение всего сеанса, называется последовательностью.
Надежность TCP-передачи обеспечивается системой обнаружения и коррекции ошибок, которая называется системой позитивного подтверждения с повторной передачей. Это означает, что принимающий компьютер проверяет контрольную сумму, включаемую в каждый пакет, и отправляет запросы повторной передачи, если пакет содержит ошибки (это новая возможность, появившаяся в Windows Server 2003; в предыдущих версиях отправителю направлялись периодические подтверждения, указывающие, что входящие пакеты вплоть до определенного места получены без повреждений).
TCP также обеспечивает управление потоком и переупорядочивание пакетов для каждой передачи. Несмотря на то, что между двумя конечными системами существует виртуальное соединение, отдельные пакеты IP могут передаваться в одно место назначения по различным маршрутизаторам, иногда поступая не в том порядке, как они были отправлены.
Заголовок TCP
Заголовок TCP достаточно сложен ввиду большого числа функций, хотя он имеет тот же размер, что и заголовок IP. Заголовок TCP передается внутри заголовка IP и читается только конечной системой, получившей пакет. Поскольку целевая система должна подтвердить получение отправленных данных, TCP является двунаправленным протоколом. Один и тот же заголовок используется для отправки пакетов данных в одном направлении и передачи подтверждений в обратном направлении. Заголовок TCP форматируется следующим образом.
-
Первое слово
- Исходный порт (Source Port, 16 битов). Указывает номер порта прикладного процесса на исходном компьютере, отправившего данные.
- Целевой порт (Destination Port, 16 битов). Указывает номер порта прикладного процесса на целевом компьютере, который получит данные.
-
Второе слово
- Порядковый номер (Sequence Number, 32 бита). Гарантирует, что сегменты будут обработаны в должном порядке на целевом компьютере за счет указания номера первого октета данных сегмента во всей последовательности.
-
Третье слово
- Порядковый номер подтверждения (Acknowledgement Number, 32 бита). Указывает порядковый номер для следующего сегмента, который будет получен целевым компьютером; является признаком того, что все предыдущие сегменты были правильно получены и подтверждены.
-
Четвертое слово
- Смещение данных (Data Offset, 4 бита). Задает длину заголовка TCP (количество 32-битных слов), указывая тем самым начало поля данных и наличие шестого слова, если оно присутствует в заголовке.
- Зарезервированное поле (Reserved, 6 битов). В настоящее время не используется; это значение должно быть равно нулю.
-
Управляющие биты (Control Bits, 6 битов). Двоичные флаги, которые можно устанавливать, чтобы указывать функцию или назначение сегмента:
- URG: Имеют смысл данные поля Urgent Pointer
- ACK: Имеют смысл данные поля Acknowledgement Number
- PSH: Функция Push
- RST: Повторно установить соединение
- SYN: Синхронизировать номера в последовательности
- FIN: Нет больше данных от отправителя
- Окно (Window, 16 битов). Обеспечивает управление потоком, указывая количество октетов (начиная с номера, указанного в поле Acknowledgement Number), которые должны быть получены целевым компьютером от исходного компьютера.
-
Пятое слово
- Контрольная сумма (Checksum, 16 битов). Обеспечивает коррекцию ошибок путем проверки заголовка TCP и полей данных, а также псевдозаголовка, содержащего адрес исходного компьютера, адрес целевого компьютера и название протокола из заголовка IP, а также суммарную длину пакета TCP. Псевдозаголовок позволяет транспортному уровню повторно проверить то, что дейтаграммы отправлялись соответствующему целевому компьютеру.
- Указатель срочных данных (Urgent Pointer, 16 битов ). Если установлен управляющий бит URG, то в этом поле указывается местоположение срочных данных (относительно значения Sequence Number данного сегмента).
-
Шестое слово (необязательное)
- Параметры (Options, переменной длины ). Необязательное поле, которое используется для указания максимальной длины сегмента, разрешенной компьютером-отправителем во время квитирования TCP (когда установлен управляющий бит SYN).
- Заполнитель (Padding, переменной длины). Нули, используемые для заполнения остатка шестого слова до 32 битов.
Анатомия сеанса TCP
Чтобы начать сеанс TCP, одна система-отправитель передает пакет, в котором установлен управляющий бит синхронизации (SYN) и содержится выбранный случайным образом порядковый номер. Система-получатель отвечает отправителю пакетом, в котором установлен управляющий бит ACK и указан ее собственный начальный порядковый номер, и затем возвращает бит синхронизации. Каждая из двух систем поддерживает свою собственную систему нумерации байтов в последовательности, зная также порядковые номера второй системы.
Нумерация начинается с первого пакета и непрерывно наращивается обеими системами в течение всего соединения TCP. Когда передающий компьютер начинает передачу реальных данных, он указывает в каждом пакете порядковый номер первого байта, содержащего в этом пакете поля данных. Если пакеты поступают к получателю в неверном порядке, то система-получатель использует эти порядковые номера для перестановки пакетов в нужном порядке.
Во время передачи данных передающая система вычисляет контрольную сумму каждого пакета и помещает результат в соответствующее поле заголовка TCP. Компьютер-получатель пересчитывает контрольную сумму для каждого полученного пакета и сравнивает результат со значением поля контрольной суммы. Если значения совпадают, пакет верифицируется как переданный без ошибок. Закончив отправку данных, передающий компьютер отправляет пакет с установленным битом FIN, прекращая соединение и заканчивая последовательность.
Протокол UDP (User Datagram Protocol)
UDP является дешевой альтернативой TCP (с меньшим объемом служебной информации) и применяется в тех случаях, когда гарантированная доставка данных не является критически важным требованием. Это протокол без установления соединения с отправкой и обработкой каждого пакета независимо от других пакетов, и для него требуется заголовок, содержащий только два слова. Во время UDP-передачи не происходит никакого явного подтверждения полученных пакетов (например, при широковещательной передаче NetBIOS). Ответы на UDP-запросы можно возвращать отправителю, но они обрабатываются на уровне приложений.
UDP обычно не используется для передачи больших двоичных файлов данных, когда один неверный бит означает потерю файла. UDP чаще используется для передачи короткого запроса другому компьютеру. Если отправитель не получает никакого ответа, то запрос можно передать еще раз с использованием меньшего суммарного объема трафика, чем при установлении соединения TCP.
Заголовок UDP намного проще и короче, чем заголовок TCP. Он содержит следующую информацию.
-
Первое слово
- Исходный порт (Source Port, 16 битов). Указывает номер порта прикладного процесса, инициировавшего UDP-передачу (необязательный параметр; заполняется нулями, если опущен).
- Целевой порт (Destination Port, 16 битов). Указывает номер порта прикладного процесса на целевом компьютере, которому направлена UDP-передача.
-
Второе слово
- Длина (Length, 16 битов). Указывает общую длину пакета UDP в октетах, включая данные, но исключая заголовок IP и любые фреймы канального уровня.
- Контрольная сумма (Checksum, 16 битов). Указывает результат расчета контрольной суммы для заголовка UDP и данных плюс псевдозаголовок, содержащий поля IP Source Address, Destination Address и Protocol.
Прикладной уровень (Application Layer)
В комплект TCP/IP включено много различных протоколов, которые действуют поверх интерфейса Transport Device Interface (TDI). Некоторые из них, такие как ftp и Telnet, сами являются как приложениями, так и протоколами, и включаются во многие реализации комплекта TCP/IP для предоставления пользователям любой платформы базовых служб пересылки файлов и эмуляции терминалов со стандартизованным интерфейсом.
Общедоступные уровни. Другие протоколы прикладного уровня используются для предоставления определенных услуг TCP/IP программам. Например, протокол SMTP (Simple Mail Transfer Protocol) используется многими программами для отправки электронной почты через сети TCP/IP. Другие протоколы, такие как DNS (Domain Name System), предоставляют более "обобщенные" услуги. DNS используется многими приложениями для разрешения (преобразования) хост-имен интернета в IP-адреса.
Скрытые уровни. Хотя приводившиеся до сих пор примеры достаточно хорошо известны, некоторые прикладные протоколы действуют почти невидимо для пользователя. Например, протокол RIP (Routing Information Protocol) рассылает другим компьютерам в сети информацию, которая помогает им принимать более обоснованные решения по маршрутизации.
Как действует прикладной уровень. Прикладные протоколы логически ближе всего к пользовательскому интерфейсу, и они часто используются непосредственно с процессом, который генерирует запросы сетевых ресурсов. При обработке такого запроса он передается вниз по уровням сетевого стека и инкапсулируется с помощью различных протоколов, которые описаны в предыдущих разделах.
Так, если вы подсоединяетесь к серверу ftp в интернете, чтобы загрузить с него файл, этот сервер ftp в удаленном сайте выполняет доступ к данному файлу и создает пакет, добавляя к нему заголовок прикладного протокола FTP. Весь пакет затем передается вниз транспортному уровню, где он становится полем данных в пакете TCP. На сетевом уровне пакет делится на блоки нужного размера для передачи через сеть. К каждому из них добавляется заголовок IP, после чего эти пакеты можно назвать набором дейтаграмм.
За исключением небольших изменений в заголовках IP во время передачи этих дейтаграмм они не открываются, пока не поступят в место назначения. Пока они находятся в сети, самый внешний уровень пакетов данных, фрейм канального уровня, может изменяться несколько раз во время перемещения пакетов от сервера ftp к вашей рабочей станции. Дейтаграммы могут поступить на ваш компьютер в оболочке пакетов Ethernet, и они могут даже уйти в таком виде с сервера ftp, а "по дороге" между исходной и конечной системами может быть 20 или больше шлюзов, где работает огромное количество различных протоколов канального уровня.
После того как пакеты прибыли на ваш компьютер, процесс начинается в обратном порядке. IP передает дейтаграммы вверх протоколу TCP (который указан в заголовке IP), где они собираются в нужном порядке и направляются протоколу FTP (который определен номером его порта в заголовке TCP), который записывает полученный файл на ваш жесткий диск.
Все описанные в предыдущих разделах протоколы TCP/IP действуют совместно для передачи данных через сеть. По умолчанию Windows Server 2003 устанавливает их как часть стека сетевого обмена данными. В Windows Server 2003 часто ссылаются на TCP/IP как на один протокол, хотя на самом деле применяется целое семейство протоколов.