что обеспечивает транспортный протокол
Sysadminium
База знаний системного администратора
Транспортный протокол TCP
Протокол TCP является одним из важнейших протоколов связи в компьютерных сетях. В этой статье познакомимся с ним поближе.
Что такое транспортные протоколы
Транспортные протоколы (TCP и UDP) используются для передачи информации. Информация передаётся маленькими частями – сетевыми пакетами. То есть поток информации разбивается на много маленьких пакетов.
Каждый пакет состоит из заголовка и самих данных. Заголовок содержит служебную информацию, например порт источника и назначения.
Особенности TCP
Главной особенностью TCP (Transmission Control Protocol) является то, что он гарантирует доставку всех отправленных пакетов. При этом проверяется целостность пакетов и их порядок. Если пакет потерялся или испортился, то получатель запросит эти пакеты у отправителя снова. Если пакеты пришли не в том порядке, то они на принимающей стороне всё равно обработаются в правильном. Этот механизм контроля доставки накладывает дополнительную нагрузку в виде увеличения служебной информации, которую нужно передать вместе с полезными данными.
TCP делит поток информации на сегменты. В одном сегменте может быть несколько пакетов. Каждый сегмент проверяется на целостность, и если все хорошо, отправляется подтверждение передающей стороне. Таким образом подтверждается не каждый пакет, а каждый сегмент, но в сегменте может оказаться и всего лишь один пакет.
Поверх протокола TCP работают многие прикладные протоколы:
TCP пакеты передаются не просто так, а в рамках установленного соединения – которое называют TCP сессией.
Подключение можно выполнить только если вторая сторона прослушивает порт, к которому будет выполняться подключение.
Алгоритм работы TCP
Алгоритм работы TCP следующий:
При открытии даже одной веб странички создаются несколько TCP соединений для:
И для каждого такого соединения вначале устанавливается сеанс, что замедляет передачу данных.
Заголовок TCP пакета
Заголовок TCP пакета состоит из следующих полей:
Флаги в заголовке TCP
Создание TCP сессии
Для установления соединения использует трехкратное рукопожатие.
Первый этап. Клиент отправляет на сервер пакет с флагом SYN. При этом клиент устанавливает порядковый номер сегмента на случайное значение A.
Второй этап. В ответ сервер отвечает пакетом с флагами SYN и ACK. Номер подтверждения установлен на единицу больше принятого (A+1). Поскольку сервер также будет отправлять данные, то для себя он тоже выбирает номер первого пакета, который будет другим случайным числом B.
Третий этап. Клиент отправляет ACK на сервер. Порядковый номер устанавливается равным A+1, а номер подтверждения устанавливается на B+1.
На этом этапе клиент и сервер получили подтверждение соединения и образовали двухстороннюю связь.
Передача данных в TCP
Теперь разберём пример передачи данных в уже установленном сеансе.
Клиент отравляет запрос к серверу. Поскольку данные поместились в один пакет TCP, он получил флаг PSH, чтобы сервер не ждал продолжение получения данных. При этом пакет получил 2 флага: ACK (подтвердил предыдущею передачу пакетов от сервера) и PSH.
В ответ на это сервер отправляет пакет ACK с номером успешно полученных данных.
Далее сервер обработал запрос и отправляет данные клиенту. Эти данные делятся на пакеты и отправляются сегментами.
Далее клиент подтверждает, что данные получены отправляя пакеты с флагом ACK.
Завершение сеанса TCP
Завершение сеанса использует четырёхкратное рукопожатие, причём каждая сторона завершает своё соединение независимо.
Когда одна из сторон хочет остановить свою половину соединения, она передаёт пакет FIN, который другая сторона подтверждает пакетом с ACK.
После того, как сторона, отправившая первый FIN, ответила с последним ACK, она ожидает некоторое время прежде чем окончательно закрыть соединение. В течение этого времени локальный порт недоступен для новых соединений.
Соединение может быть «полуоткрытым», и в этом случае одна сторона завершила свою часть, а другая — нет. Завершившая сторона больше не может отправлять какие-либо данные, но другая сторона может. Завершающая сторона должна продолжить чтение данных, пока другая сторона также не завершит свою работу.
Также возможно разорвать соединение трёхкратным рукопожатием, когда первая сторона отправляет FIN, а вторая отвечает FIN и ACK (просто объединяет 2 шага в один). Дальше первая сторона подтверждает завершение сеанса с помощью ACK.
Состояния сеанса TCP
Сеанс TCP может находится в следующих состояниях:
Вот мы и познакомились с одним из самых важных протоколов сети Интернет. Разобрались с его особенностями, алгоритмом работы. Узнали про сеансы TCP, пакеты и сегменты.
TCP протокол — что это такое, понятным языком
Каждый из нас знает, что по интернету можно передавать различные данные: голосовые сообщения, видео, документы, различные файлы и многое другое, но не все знают, как же это происходит.
А происходит это все посредством особого набора/стеку правил — TCP/IP, благодаря которому и работает интернет. Он включает в себя протоколы, каждый из которых ответственен за определенную функцию в сети.
Прошлый материал был, как раз посвящен TCP IP, сегодня же мы разберем за что отвечает протокол TCP и что это вообще такое.
TCP протокол
TCP — это транспортный протокол, является частью стека протоколов TCP IP, он выполняет функции управления передачей данных и следит за их сохранностью, считается надежным. Расшифровывается как Transmission Control Protocol (протокол управления передачей).
Это стандарт, который определяет как нужно устанавливать связь и поддерживать ее, чтобы две программы могли обмениваться данными между собой.
Интересно! Существует еще один транспортный протокол UDP, о нем мы поговорим в следующей отдельной статье, там же и разберем, чем они вообще отличаются друг от друга.
Является именно надежным протоколом так как:
1. Использует логическое соединение, благодаря чему обеспечивается надежная доставка данных.
2. Пронумеровывает передаваемые пакеты данных и проверяет их доставку, принимающая сторона высылает подтверждение о получении, в случае потери каких-либо пакетов создается повторная передача.
3. Делит передаваемые данные на части — пакеты данных, затем передает их нижнему уровню, и собирает их, когда они приходят к получателю.
4. Проверяет контрольную сумму передаваемых пакетов, если она отличается — создается новая отправка.
5. Проверяет пакеты на дубликаты, в случае обнаружения таковых — уничтожает.
6. Контролирует скорость передачи.
Заголовок TCP протокола
Весит 20 байт, если нет дополнительных опций, вот как он выглядит:
У каждого TCP сегмента указывается порт источника и назначения, с помощью которых происходит идентификация отправляющего и принимающего приложения. Эти порты вместе с IP адресами уникально идентифицируют каждое соединение. Комбинация IP и порта — это сокет (socket).
Номер последовательности — нумерация каждого отправляемого байта в потоке передаваемых данных. А номер подтверждения — это следующий номер байта после полученного, который ждет получатель. Т.е. передача идет последовательно, например, получатель получил 100-ый байт, следующим ждет 101.
Остальные значения можно понять из самой картинки. Разве, что размер окна — он скользящий, т.е. зависит от качества сети. Если много данных теряется он может уменьшаться и наоборот. Он регулирует количество передаваемых байтов.
А флаги: URG, ACK, PSH и т.д. — описывают дополнительные значения сегмента, так, например, флаг FIN применяется для завершения соединения.
Также, вам может быть интересна статья о том, что такое dns сервер. В ней очень подробно и интересно описано об этой глобальной системе.
Как работает TCP соединение
Соединение отправителя и получателя (два узла) происходит так:
1. Отправитель отсылает получателю специальный пакет, именуемый SYN, т.е. пригашает к соединению
2. Получатель отвечает уже пакетом SYN-ACK, т.е. соглашается
3. Отправитель отсылает спец. пакет ACK, т.е. подтверждает, что согласие получено
На этом TCP-соединение успешно установлено и получатель с отправителем могут спокойно обмениваться информацией. При передаче все пакеты данных нумеруются, отсылаются подтверждения о получении каждого из них, а потерянные пересылаются заново.
TCP порты
На каждом компьютере установлено, как минимум несколько программ. И сразу несколько из них могут обмениваться информацией, как же их различать? Именно для этого и были придуманы TCP порты, это по сути уникальный идентификатор соединения между двумя программами.
Номер порта — это число от 0 до 65535 в 16 битном формате, оно указывает какому именно приложению предназначается определенный пакет данных. Т.е. позволяет различным программам, работающим на одном компьютере, независимо друг от друга отправлять и получать информацию.
Есть целый ряд уже зарезервированных портов, которые являются стандартом:
Также, стоит отметить, что порты данного протокола никак не пересекаются с такими же, но у UDP. Так, например, порт: 1234 не пересечется с таким же, но у UDP.
В заключение
Вот вы и узнали, что это такое, постарался написать, как можно более понятно, без лишних терминов. Главное знать, как это работает и серфинг в интернете станет еще куда интереснее.
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
TCP/IP (Transmission Control Protocol/Internet Protocol)
Содержание
Стек протоколов ТСР/IP
IP-сеть
Транспортный уровень стека TCP/IP
Межсетевой уровень стека TCP/IP
Пример переноса данных в IP-сети
Как видно из предыдущих глав, глобальные сети Frame Relay и АТМ имеют различные системы нумерации, которые отличаются от системы нумерации локальной вычислительной сети (ЛВС) технологии Ethernet. Каждый компьютер Ethernet имеет уникальный физический адрес, состоящий из 48 бит. Этот адрес называется МАС-адресом и относится к канальному уровню — управлению доступом к среде MAC (Media Access Control). Для организации межсетевого взаимодействия подсетей различной технологии и адресации используются маршрутизаторы, включающие IP-пакеты. В состав этих пакетов входят глобальные IP-адреса. Каждый интерфейс маршрутизатора IP-сети и оконечного устройства включает два адреса – локальный адрес оконечного устройства подсети и IP-адрес.
Рассмотрим продвижение IP-пакета в сети (рис. 2).
Протоколы TCP/IP
Ниже приводится краткое описание протокола прикладного уровня SNMP и протокола транспортного уровня TCP архитектуры TCP/IP.
Протокол прикладного уровня SNMP
SNMP может управлять конфигурацией сети. Для сети FR это касается как физической, так и логической конфигурации сети, включая установление адресации, определение DLCI, назначение полосы пропускания для PVC. SNMP может управлять устранением неисправностей в сети при получении системой управления аварийных сообщений от агента сетевого устройства.
Обеспечение информационной безопасности протокола SNMP
В документе RFC 2574 [6] определяется модель USM (User Security Model – модель защиты пользователя) при использовании протокола SNMP. USM разрабатывалась с целью защиты от угроз следующих типов.
Протокол транспортного уровня TCP
Протокол транспортного уровня TCP выполняет функцию управления потоками между оконечными пунктами, так как уровень IP не гарантирует правильной доставки дейтаграмм. Дейтаграммы с уровня IP могут прибывать в неправильном порядке. Восстанавливает сообщения из таких дейтаграмм протокол TCP, обеспечивая этим надежный режим установленного соединения с низкой вероятностью потери пакета. Механизм управления потоками, используемый ТСP, отличается от механизма восстановления правильной последовательности кадров в Х.25 и называется схемой кредитов. В этой схеме считается, что каждый передаваемый байт данных имеет порядковый номер. Границы между сообщениями не сохраняются. Например, если отправляющий прикладной процесс записывает в ТСP-поток четыре 512-байтовые порции данных, эти данные могут быть доставлены получающему процессу в виде четырех 512-байтовых порций, либо двух 1024-байтовых порций, либо одной 2048-байтовой порции. Каждая протокольная единица PDU TCP называется сегментом TCP и включает в заголовок сегмента порт источника данных и порт получателя. Значения портов идентифицируют соответствующих пользователей (приложения) двух объектов TCP.
Логическая связь относится именно к данной паре значения портов. В процессе связи каждый объект отслеживает сегменты TCP, получаемые от другой стороны или отправленные другой стороне, для того, чтобы регулировать поток сегментов и восстанавливать утерянные или поврежденные сегменты. Стандартный номер порта однозначно идентифицирует тип приложения, однако он не может однозначно идентифицировать прикладной процесс этого приложения. Одно приложение может одновременно осуществлять несколько процессов. Поэтому прикладной процесс однозначно определяется в пределах сети и в пределах отдельного компьютера парой (IP-адрес, номер порта) и называется сокетом (socket). Логическое TCP-соединение однозначно идентифицируется парой сокетов, определенных для этого соединения двумя взаимодействующими сокетами.
При работе на хост-отправителе протокол TCP рассматривает информацию, поступающую к нему от уровня приложений, как неструктурированный поток байтов. Эти данные буферируются средствами TCP. На уровень IP из буфера «вырезаются» сегменты, к которым добавляются заголовки. В состав заголовка входят сегменты SYN и ACK, служащие для установления TCP-соединения.
Для передачи сегмента данных имеются три поля, связанные с управлением потоком (восстановлением целостности принятого сообщения): порядковый номер (SN), номер подтверждения (AN) и окно (W).Когда транспортный объект отправляет сегмент, он помещает в поле данных сегмента порядковый номер первого байта. Принимающий объект подтверждает получение сегмента с помощью обратного сегмента, в котором (АN=i, W=j), что означает:
Таким образом, протокол TCP обеспечивает надежную доставку сообщений, поступающих из сети от ненадежного дейтаграммного протокола на межсетевом уровне. В сети Х.25 функцию надежной доставки выполняет канальный уровень модели OSI, который был подробно рассмотрен в предыдущих главах, а в сети Frame Relay эту функцию выполняет протокол ITU-T Q.921.
Транспортный уровень моделей OSI, TCP/IP
9.1. Общие сведения о транспортном уровне
Основной функцией транспортного уровня является транспортировка сообщений между приложениями узла источника и узла назначения. Приложение узла источника формирует сообщение и передает его на приложение узла назначения независимо от маршрута, т.е. независимо от протоколов сетевого уровня, и независимо от среды передачи, т.е. независимо от протоколов канального и физического уровней. Транспортный уровень реализует управление потоком информации от источника до устройства назначения.
Контроль доставки сообщения из одного конца соединения до другого и надежность обеспечены целым рядом параметров, передаваемых в заголовках сегментов:
Транспортный уровень устанавливает логическое соединение между двумя конечными точками сети. Протоколы транспортного уровня сегментируют данные, посланные приложениями верхнего уровня на передающей стороне, и повторно собирают (реассемблируют) из полученных сегментов целое сообщение на приемной стороне.
На каждом конечном узле сети может быть запущено много разных приложений. Кроме того, сегменты могут быть направлены одному или многим узлам назначения. Процесс обмена данными между приложениями источника и назначения называется сеансом связи. Протоколы транспортного уровня обеспечивают многочисленные одновременно протекающие процессы обмена данными, т.е. отслеживают отдельные сеансы связи. Множество одновременно протекающих процессов обмена данными верхнего уровня (множество сеансов связи) может быть мультиплексировано поверх одного логического транспортного соединения.
Итак, протокол транспортного уровня TCP помимо деления сообщения на сегменты и идентификации приложений обеспечивает:
Для облегчения контроля и обеспечения надежности сообщения передаются частями (порциями), т.е. сегментами. При этом протокол транспортного уровня узла источника должен прослеживать каждый сегмент данных при передаче и повторно передавать любую часть сообщения, прием которой не был подтвержден устройством назначения. Транспортный уровень конечного узла на приемной стороне должен отследить получение данных и подтвердить это получение.
Контроль потока необходим, чтобы гарантировать, что источник, передавая данные с некоторой скоростью, не переполняет буферные устройства узла назначения. Если узел назначения не может обрабатывать данные в темпе их поступления, то может произойти переполнение буферов и потеря данных. Управление скоростью передачи данных обеспечивается изменением размера окна (Window Size ), который указывает, сколько байт данных должно быть передано за одну порцию. При переполнении буферных устройств узел назначения посылает источнику требование уменьшения размера окна, т.е. снижения скорости передачи.
После получения каждой порции данных узел назначения посылает источнику подтверждение принятых данных или подтверждение доставки ( acknowledgment ).
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
Номер порта источника | Номер порта назначения | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Номер последовательности | |||||||||||||||||||||||||||||||
Номер подтверждения | |||||||||||||||||||||||||||||||
ДЗ | Резерв | Код | Размер окна | ||||||||||||||||||||||||||||
Контрольная сумма | Индикатор | ||||||||||||||||||||||||||||||
Опции | |||||||||||||||||||||||||||||||
Данные |
Поля заголовка TCP сегмента определяют следующее:
Заголовок TCP (рис. 9.1) содержит номер последовательности ( Sequence Number ), используемый, чтобы гарантировать объединение частей (сегментов) сообщения в том порядке, в котором они были переданы. TCP обеспечивает надежность передачи сообщений за счет передачи номера подтверждения, и контроль потока, управляемого размером окна. Однако TCP потребляет много ресурсов и вносит задержку в передачу данных. При передаче некоторых видов трафика (аудио- и видеоинформация) задержка и особенно ее вариация могут исказить передаваемые сообщения.
Тема 4. Информационное и программное обеспечение сетей
Оглавление
Цель темы — сформировать представление о принципах работы и реализации в стеке TCP/IP транспортных и служебных протоколов передачи информационных данных через сеть. Реализуются эти протоколы программными средствами операционных систем.
В результате изучения темы студенты должны усвоить:
4.1. Протоколы транспортного уровня UDP и TCP
Основная задача транспортного уровня заключается в передаче данных между парой прикладных процессов, выполняющихся в сети. Протоколы транспортного уровня UDP и TCP функционируют только на конечных узлах сети, выступая посредниками между сетевыми приложениями и самой сетью.
Следует дать пояснение терминам «процесс» и «приложение»: процесс в компьютере создается операционной системой после запуска на выполнение прикладного приложения.
4.1.1. Общие принципы работы протоколов UDP и TCP
После того как пакет средствами протокола IP доставлен в сетевой интерфейс компьютера-получателя, данные из этого пакета необходимо передать конкретному процессу-получателю. В свою очередь процесс или несколько процессов, выполняющихся в компьютере, тоже должны иметь возможность передавать информационные данные протоколу IP для отправки этих данных пакетами по сети к узлам назначения. Транспортные протоколы формируют механизм взаимодействия прикладных сетевых процессов с сетевым интерфейсом компьютера.
Поскольку к одному транспортному протоколу могут обращаться множество прикладных процессов, то вводится условная адресация этих процессов в виде так называемых портов — точек доступа прикладных процессов к транспортному уровню. Номер порта однозначно определяет приложение в пределах одного компьютера, а набор из IP-адреса компьютера и номера порта, который называют сокетом, однозначно определяет приложение в составной сети. В обозначении сокета IP-адрес и номер порта разделяются двоеточием. Пример обозначения сокета: 10.112.0.2:80.
Не следует путать порт транспортного протокола с портом (интерфейсом) компьютера. Порт транспортного уровня — это фактически адрес буфера памяти, через который происходит взаимодействие прикладного процесса с транспортным протоколом. Так как используется 16-битная адресация к этим буферам памяти, то возможные номера адресов (портов) транспортного протокола ограничены числами от 0 до 65 535.
Существует два способа присвоения порта приложению — централизованный и локальный (динамический). Для централизованного способа используются номера портов от 0 до 1023, а для локального — все остальные: 1024—65 535.
Если процессы, запущенные на компьютере, представляют известные сетевые службы, например HTTP, DNS, FTP и т. п., то за ними закрепляются стандартные номера портов, которые еще называют хорошо известными номерами портов. Такое централизованное присвоение сетевым службам номеров портов выполняется организацией Internet Assigned Numbers Authority (IANA) и публикуется в Интернете. Например, номер 21 портов протокола TCP закреплен за службой файлового обмена FTP, а номер 80 — за службой HTTP.
Локально номера портов выделяются операционной системой компьютера тем сетевым приложениям, которые не имеют широкого распространения. Операционная система компьютера ведет учет занятых и свободных номеров портов. Так как при локальном (динамическом) распределении номеров портов закрепление портов за приложениями происходит только на время работы этого приложения, то при следующем запуске этого приложения ему может быть выделен другой номер порта из диапазона номеров 1024—65 535.
Следует отметить, что как у протокола UDP, так и у протокола TCP отдельный набор номеров портов от 0 до 65 535, т. е., говоря о номере порта, следует указывать и протокол — TCP или UDP. Следовательно, в компьютере одновременно может использоваться по два номера порта — один для протокола TCP, другой — для протокола UDP.
Таким образом, сетевое приложение, запущенное на любом компьютере сети, для передачи сообщения другому сетевому приложению (на другой компьютер сети) обращается к собственному транспортному протоколу. При этом передаваемое сообщение в виде потока данных помещается в порт, выделенный данному приложению.
Транспортный протокол забирает сообщение из порта частями фиксированной длины, называемыми сегментами. Максимальная длина сегмента зависит от максимальной величины поля данных пакета IP, которая в свою очередь определяется параметром MTU используемой сетевой технологии.
Протоколы UDP и TCP для каждого номера порта ведут две очереди: очередь сегментов, поступающих в данный порт их сети, и очередь сегментов, отправляемых из данного порта в сеть. Процедура приема сегментов данных из портов различных прикладных процессов называется мультиплексированием. Обратная процедура распределения транспортным протоколом (UDP или TCP) сегментов данных, поступающих от сетевого уровня, между процессами, идентифицированными номерами портов, называется демультиплексированием.
Рис. 4.1 иллюстрирует процедуры мультиплексирования и демультиплексирования данных протоколами TCP и UDP.
Рис. 4.1. Мультиплексирование и демультиплексирование данных на транспортом уровне
Прикладной процесс, например, службы DNS посылает сетевое сообщение — поток данных в выделенный ему порт TCP 53 (порт для него — это адрес буфера памяти). Протокол TCP по очереди обращается ко всем открытым портам TCP и выбирает из них очередные сегменты данных сообщений — так реализуется мультиплексирование. Протокол TCP формирует заголовки сегментов TCP и направляет эти сегменты протоколу IP, который упаковывает их в IP пакет и отправляет в сеть.
Аналогично функционирует и протокол UDP, обслуживая свои процессы через собственные порты.
В заголовках принимаемых IP-пакетов указывается протокол верхнего уровня, поэтому IP-протокол однозначно определяет, какому протоколу следует отдать очередной пакет данных.
4.1.2. Протокол пользовательских дейтаграмм UDP
Протокол UDP (User Datagram Protocol) только дополняет IP-протокол адресом прикладного процесса и возможностью проверки правильности передачи сегмента данных. Это дейтаграммный (без предварительного установления соединения) и поэтому потенциально ненадежный протокол. В нем отсутствуют механизмы контроля за достижением сегментов узла назначения. При использовании прикладным приложением транспортного протокола UDP это приложение должно самостоятельно осуществлять проверку целостности передачи сообщений и выполнять их повторный запрос в случае отсутствия отдельных сегментов.
Заголовок UDP сегмента состоит из 8 байт и имеет структуру, представленную на рис. 4.2.
№ порта источника
(2 байта)
№ порта назначения
(2 байта)
Длина сегмента UDP
(2 байта)
Контрольная сумма
(2 байта)
Рис. 4.2. Структура заголовка сегмента UDP
Поле длины сегмента содержит общее количество байт сегмента вместе с заголовком.
Поле контрольной суммы позволяет проверить точность передачи данных в сегменте. Следует напомнить, что в протоколе IP проверяется на наличие ошибок только заголовок пакета, а поле данных, в котором находится сегмент транспортного протокола, не проверяется. При обнаружении ошибки в сегменте протокол UDP поступает аналогично протоколу IP — отбрасывает принятый сегмент данных.
Поскольку в протоколе UDP отсутствует обратная связь, то в заголовке сегмента UDP допустимо отсутствие номера порта источника. Контрольная сумма тоже является необязательным параметром. В случае отсутствия этих данных вместо них в заголовке передаются последовательности нулей соответствующей длины.
4.1.3. Протокол надежной доставки сообщений TCP
Протокол TCP (Transmission Control Protocol) не только дополняет IP-протокол адресом прикладного процесса (номером порта) и возможностью проверки правильности передачи сегмента данных, но и обеспечивает надежную доставку сообщений, т. к. передача данных осуществляется через логическое соединение.
Логическое соединение TCP — это договоренность о параметрах процедуры передачи данных между двумя прикладными процессами сети посредством протокола TCP. Ключевым моментом логического соединения является квитирование (подтверждение) приема переданных данных посредством отправки квитанций.
Сообщения, поступающие к протоколу TCP в рамках логического соединения от прикладных процессов, рассматриваются протоколом TCP как неструктурированный поток данных, все байты которого имеют сквозную нумерацию.
Модуль TCP в компьютере-отправителе хранит в своем буфере памяти все переданные сегменты потока данных, на байты из которых еще не получены квитанции. Если компьютер-отправитель не получает квитанцию в течение определенного времени, то ее модуль TCP начинает повторную передачу сегментов, на байты данных которых не было подтверждения.
Структура сегмента TCP представлена на рис. 4.3.
Рис. 4.3. Структура сегмента TCP
Сегмент TCP состоит из заголовка и поля данных. Заголовок сегмента имеет размер не менее 20 байт и содержит следующие поля:
4.1.4. Метод скользящего окна
В протоколе TCP в рамках установленного логического соединения правильность передачи данных должна подтверждаться квитанцией получателя. В протоколе TCP используется частный случай квитирования — метод скользящего окна (sliding window).
В этом методе для повышения коэффициента использования линии передачи источнику разрешается передать некоторое количество сегментов данных подряд в непрерывном режиме — в максимально возможном для источника темпе, без получения на эти сегменты положительных квитанций от получателя. Объем данных, которые разрешается передавать таким образом, называется размером окна.
Особенностью этого метода в протоколе TCP является то, что хотя единицей передаваемых данных является сегмент, окно определено на множестве нумерованных байтов неструктурированного потока данных, поступающих от прикладного процесса и буферизуемых протоколом TCP. Рис. 4.4 иллюстрирует работу метода скользящего окна в протоколе TCP.
Рис. 4.4. Скользящее окно в протоколе TCP
Поток байтов, передаваемых прикладным процессом, протокол TCP последовательно нумерует и «нарезает» на сегменты, которые отправляет получателю. При установлении соединения, а затем и в ходе передачи данных обе стороны, выступая в роли получателя, посылают друг другу так называемые окна приема (параметр WIN). Каждая сторона, получив окно приема, понимает, сколько байтов ей разрешается отправить с момента получения последней квитанции.
В передаваемом потоке на рис. 4.4 получена квитанция с номером N в поле ACK, которая означает, что все предыдущие байты потока безошибочно приняты противоположной стороной и можно передавать следующие байты потока, начиная с номера N. Одновременно получено значение окна W, которое указывает, что передавать можно не один сегмент, а столько, сколько переносят байты с номера N до номера, не превышающего N+W.
Поскольку в протоколе TCP каждая сторона выступает и как отправитель, и как получатель данных, то у каждой стороны есть пара буферов памяти: один — для хранения принятых сегментов, другой — для передаваемых сегментов.
Таким образом, посылая окно приема, обе стороны регулируют поток байтов в свою сторону, исходя из возможностей и загруженности своего буфера приема. Размер окна может меняться в рамках даже одного соединения — его текущее значение указывается в заголовке каждого сегмента TCP.
Переданные сегменты хранятся в буфере передачи до получения квитанции об успешном их приеме. Получатель может послать квитанцию на получение сразу нескольких сегментов, если они образуют непрерывный поток байтов. Подтверждение приема отдельных сегментов, оторванных от потока данных пропусками, не осуществляется до тех пор, пока этот пропуск не будет заполнен.
Каждый переданный сегмент хранится в буфере передачи определенное время, которое определяется в протоколе TCP по достаточно сложному адаптивному алгоритму, учитывающему различные факторы. Если до истечения этого времени квитанция на переданные в сегменте данные не пришла, то модуль протокола TCP повторяет передачу сегмента, считая, что первая копия сегмента была утеряна.
4.1.5. Алгоритм установления логического соединения TCP
Установление соединения TCP выполняется в следующей последовательности:
На рис. 4.5 представлена процедура обмена служебными сообщениями TCP при установлении логического соединения.
Рис. 4.5. Обмен сообщениями TCP при установлении соединения
На рис. 4.5 отображено также, что маршрутизатор между двумя сетями, в которых находятся сетевые процессы, устанавливающие соединение, не принимает в этой процедуре никакого участия.
Первое TCP-сообщение не содержит сегмента данных, а является запросом на установление соединения, поэтому бит SYN=1. Нулевое значение бита ASК говорит, что сторона-инициатор еще ничего не принимала, поэтому квитанции в данном TCP-сообщении пока нет.
Другая сторона в ответ на это предложение высылает тоже служебное TCP сообщение, но уже с предложением передавать данные, начиная с первого байта (ASК=1) и указывает свое окно приема (WIN).
Сторона-инициатор отправляет первый сегмент данных, предлагает передавать данные в свою сторону (ASК=1) и указывает размер своего окна приема.
4.1.6. Преобразование сетевых адресов: технология NAT
Технология NAT (Network Address Translation — преобразование сетевых адресов) широко используется с целью подмены частных IP-адресов (из таких диапазонов, как 10.х.x.x, 192.168.x.x, 172.16.x.x —172.31.х.х) компьютеров локальных сетей публичным IP-адресом, разрешенным в глобальной сети Интернет.
Основная причина растущей популярности технологии NAT связана со все более обостряющимся дефицитом адресов протокола IPv4. Средство общего доступа к подключению Интернета в операционных системах Windows XP, а также многие шлюзы Интернета активно используют NAT, особенно для подключения к широкополосным сетям, например через DSL или кабельные модемы.
На рис. 4.6 приведен пример использования технологии NAT для выхода в Интернет компьютеров локальной сети 10.0.0.0/24 под одним IP-адресом 157.55.1.10.
Рис. 4.6. Пример использования технологии NAT для локальной сети
NAT устройство — это программа, размещаемая на шлюзе между локальной сетью и сетью Интернет, которая на основе портов транспортного уровня обеспечивает замену IP-адресов в проходящих IP-пакетах.
Процесс, запущенный на компьютере локальной сети и установивший соединение с процессом в сети Интернет, открывает пару сокетов, определяемых IP-адресом источника, портом источника, IP-адресом назначения, портом назначения и сетевым протоколом. Эти параметры идентифицируют обе конечные точки, между которыми происходит соединение.
Когда прикладной процесс передает данные через соединение, частный IP-адрес клиента (IP-адрес источника) и клиентский порт (порт источника) вставляются в пакет в поля параметров источника. Поля параметров пункта назначения будут содержать IP-адрес и порт процесса-назначения. Поскольку пункт назначения пакета находится вне локальной сети, клиент направляет его в основной шлюз. В данном сценарии роль основного шлюза играет устройство NAT.
Устройство NAT перехватывает исходящий пакет и производит сопоставление порта, используя IP-адрес назначения в сети Интернет, порт назначения, внешний IP-адрес устройства NAT, внешний порт, сетевой протокол, а также внутренние IP-адрес и порт клиента локальной сети.
Устройство NAT ведет таблицу сопоставлений портов и сохраняет созданное сопоставление в этой таблице. Внешние IP-адрес и порт — это общие IP-адрес и порт, которые будут использоваться в текущем сеансе передачи данных вместо внутренних IP-адреса и порта клиента.
Затем устройство NAT «транслирует» пакет, преобразуя в пакете поля источника: внутренние (Internal) IP-адрес и порт клиента заменяются внешними (External) IP-адресом и портом устройства NAT.
Преобразованный пакет пересылается по внешней сети и в итоге попадает на узел назначения (Remote host). Пример работы устройства NAT представлен на рис. 4.7.
Рис. 4.7. Пример преобразования исходящего пакета
Внешний удаленный узел сети Интернет будет направлять ответные пакеты на внешние IP-адрес и порт устройства NAT, указывая в полях источника свои собственные IP-адрес и порт.
NAT устройство принимает эти пакеты от удаленного узла сети Интернет и анализирует их содержимое на основе своей таблицы сопоставления портов. Если в таблице будет найдено сопоставление порта, для которого IP-адрес источника, порт источника, порт назначения и сетевой протокол из входящего пакета совпадают с IP-адресом удаленного узла, удаленным портом и сетевым протоколом, указанным в сопоставлении портов, NAT выполнит обратное преобразование. NAT заменяет внешний IP-адрес и внешний порт в полях назначения пакета на частный IP-адрес и внутренний порт клиента локальной сети.
Затем NAT отправляет пакет клиенту по внутренней сети. Однако если NAT не находит подходящего сопоставления портов, входящий пакет отвергается и соединение разрывается.
Благодаря устройству NAT клиент получает возможность передавать данные в глобальной среде Интернета, используя лишь частный IP-адрес; ни от приложения, ни от клиента не требуется никаких дополнительных усилий. В данном случае механизм NAT оказывается прозрачным по отношению к клиенту и к серверному приложению — все работает просто и четко.
Однако не все сетевые приложения пользуются протоколами, способными взаимодействовать с NAT.
4.2. Протокол обмена управляющими сообщениями ICMP
4.2.1. Назначение протокола ICMP
Протокол обмена управляющими сообщениями ICMP (Internet Control Message Protocol) позволяет маршрутизатору сообщить конечному узлу об ошибках, с которыми маршрутизатор столкнулся при передаче какого-либо IP-пакета от данного конечного узла.
Управляющие сообщения ICMP не могут направляться промежуточному маршрутизатору, который участвовал в передаче пакета, с которым возникли проблемы, т. к. для такой посылки нет адресной информации — IP пакет несет в себе только адрес источника и адрес назначения, не фиксируя адреса промежуточных маршрутизаторов.
Каждое сообщение протокола ICMP передается по сети внутри пакета IP. Пакеты IP с сообщениями ICMP маршрутизируются точно так же, как и любые другие пакеты, без приоритетов, поэтому они также могут теряться. Кроме того, в загруженной сети они могут вызывать дополнительную загрузку маршрутизаторов. Для того чтобы не вызывать лавины сообщения об ошибках, потери пакетов IP, переносящих сообщения ICMP, не могут порождать новые сообщения ICMP.
Таким образом, несмотря на то, что протокол ICMP для передачи своих сообщений пользуется услугами протокола IP (как транспортные протоколы), он в стеке протоколов TCP/IP находится на одном уровне с протоколом IP — уровне межсетевого взаимодействия. Такое положение протокола ICMP определяется тем, что он работает, как и протокол IP, на всех узлах составной сети.
4.2.2. Формат сообщений протокола ICMP
На рис. 4.8 представлена структура IP-пакета, содержащего сообщение ICMP.
Рис. 4.8. Структура IP-пакета с сообщением ICMP
Существует несколько типов сообщений ICMP. Каждый тип сообщения имеет свой формат, при этом все они начинаются с общих трех полей: 8-битного целого числа, обозначающего тип сообщения (TYPE), 8-битного поля кода (CODE), который конкретизирует назначение сообщения, и 16-битного поля контрольной суммы (CHECKSUM). Кроме того, сообщение ICMP всегда содержит заголовок и первые 64 бита данных пакета IP, который вызвал ошибку. Это делается для того, чтобы узел-отправитель смог более точно проанализировать причину ошибки, т. к. все протоколы прикладного уровня стека TCP/IP содержат наиболее важную информацию для анализа в первых 64 битах своих сообщений.
Возможные значения поля типа сообщения представлены в табл. 4.1.