Лекция 16

Базовые протоколы

Преимущества стека TCP/IP

В большинстве сетевых ОС используется очень небольшой набор собственных протоколов. Эти весьма компактные и высокофункциональные протоколы позволяют сетевой операционной системе рационализировать свою работу, что существенно повышает эффективность совместного использования файлов и принтеров.

Следует отметить, однако, что сами по себе эти протоколы каких-то значительных дополнительных возможностей не предоставляют. В отличие от них, комплект TCP/IP обеспечивает выполнение широчайшей гаммы сервисных функций. Пользователи могут совместно использовать файлы и принтеры. С помощью сервисов эмуляции терминалов они могут выполнять приложения на удаленных компьютерах, позволяя использовать возможности больших систем для выполнения конкретных программ. TCP/IP обладает высокой степенью масштабируемости, и пользователи могут по своему усмотрению выбрать любое подмножество протоколов в качестве клиентских или серверных сервисов.

Другая примечательная черта TCP/IP - его "открытость": это полностью общедоступная спецификация. Любой человек может предлагать дополнения к этой спецификации, и процесс протекает абсолютно открыто. Так, многие фирмы предлагают свои платформы с уже встроенными протоколами и сервисами TCP/IP. Это облегчает конечному пользователю задачу совместного использования различных ресурсов без привязки к какому-то одному поставщику.

Третье важное преимущество TCP/IP состоит в том, что это набор очень надежных протоколов, в состав которого входят транспортные протоколы, эффективно работающие в глобальных сетях. Протокол NBF (и в меньшей степени IPX) предназначался для использования в локальных сетях. NBF не предусматривает маршрутизацию, т.е. пользователи, подключенные к одному сетевому кабелю, видят серверы, подключенные к другому кабелю, только в том случае, если два этих сегмента соединены мостом и образуют одну логическую сеть. В глобальных сетевых средах эта схема работает плохо. Протокол IPX - полностью маршрутизируемый, но вот более высокоуровневый NCP предусматривает явное квитирование всех передаваемых сетевых пакетов, что сильно замедляет его работу с глобальными сетевыми каналами. Ни один из этих наборов протоколов не подходит для использования в Internet.

Комплект протоколов TCP/IP с самого начала разрабатывался для соединения хост-компьютеров между собой через глобальные сети, поэтому он и маршрутизируемый, и эффективный. Эти достоинства сохраняются и в локальных сетях, что делает TCP/IP отличным вариантом и для мелко-, и для крупномасштабных сетей. Три вышеупомянутых качества (масштабируемость, открытость и надежность) делают TCP/IP привлекательным вариантом для пользователей разнородных сред. Именно поэтому TCP/IP является стержнем Internet.

Функционирование сети TCP/IP

Чтобы лучше понять, как работают некоторые протоколы из набора TCP/IP, рассмотрим работу небольшой сети, состоящей из двух компьютеров, на которых запущено несколько сетевых приложений.

Итак, на одном компьютере работает Саша, на другом - Коля. Их компьютеры видны в сети под теми же именами. Саша запустил приложение, каждые 10 секунд отправляющее сообщения, которые появляются на экране Коли. На Сашином компьютере также работает приложение для отправки Коле электронных денег. И, наконец, Саша использует Web-обозреватель для доступа к Web-серверу, работающему на Колином компьютере.

Приложение Саши, отправляющее сообщения, не использует подтверждения о доставке, т.к. в любом случае через 10 секунд отправится очередное сообщение, и необязательно знать, получил пользователь последнее сообщение или нет. Для передачи важных сведений, а также электронных денег используется функция подтверждения. Приложение для сообщений использует протокол UDP, а для отправки денег - TCP, т.к. UDP, в отличие от TCP, не использует подтверждения.

Однако эти приложения не заработают, пока не будут произведены некоторые подготовительные действия. Например, в Ethernet-кадрах, которые идут от Саши к Коле, должна быть информация, которой Саша пока не располагает, - IP-адрес получателя и его MAC-адрес.

Саша знает имя своего компьютера, IP- и MAC-адрес, т.к. все эти параметры прописаны в конфигурации его компьютера. Остается узнать только IP- и MAC-адрес компьютера Коли. Для этого Саша должен воспользоваться системой доменных имен (DNS) и протоколом разрешения адресов (ARP). Саша знает IP-адрес DNS, т.к. он прописан в конфигурации Сашиной машины. Далее Саша отправляет DNS-запрос системе DNS, спрашивая у нее IP-адрес Колиной машины. DNS отвечает адресом 10.1.1.2. Но Саше все еще нужен адрес Ethernet MAC, использующий адрес 10.1.1.2, поэтому он выполняет широковещательный ARP-зарос. Такой запрос отправляется по широковещательному Ethernet-адресу, чтобы все компьютеры, находящиеся в сети, его получили. Поскольку компьютер Коли подключен к сети, он получает этот запрос. А так как адрес его компьютера 10.1.1.2, а ARP-запрос ищет MAC-адрес, связанный с адресом 10.1.1.2, Коля сообщает свой MAC-адрес. На рис.1 схематически показан весь этот процесс.

Рис. 1. Работа служб DNS и протокола ARP

Теперь Саша знает адреса IP и Ethernet MAC, которые необходимы для отправки данных Коле. Весь этот процесс проходит автоматически, невидимо для пользователя, но важно знать, как это все происходит, чтобы уметь решать возникающие проблемы.

Что делать, если после всех этих приготовлений приложения все равно не работают? Любой сетевой администратор скажет вам, что дело в приложениях. Если же вы обратитесь в службу поддержки приложений, они наверняка скажут вам, что проблема в сети. Что же делать? В этом случае Саше следует проверить наличие связи с компьютером Коли по сети с помощью команды ping. Команда ping (Packet Internet Groper) использует протокол ICMP (Internet Control Message Protocol - протокол контроля сообщений в сети Интернет) для отправки сообщения по определенному IP-адресу, которое называется эхо-запрос ICMP. Компьютер с таким IP-адресом должен ответить эхо-ответом ICMP. Если так и произошло, значит, IP-сеть успешно протестирована, и проблема, скорее всего, кроется в приложении. Протокол ICMP не зависит ни от какого приложения и проверяет только наличие связи в IP-сети, т.е. работает на уровнях 1, 2 и 3 модели OSI.

Нам осталось рассмотреть еще один важный момент. В нашем примере задействованы все три приложения - передача сообщений, отправка денег и использование Web-обозревателя. Коля получает от Саши пакеты для всех этих приложений.

Коле, соответственно, необходимо знать, какому приложению какие данные предназначаются, но все три пакета приходят от одного IP- и MAC-адреса. Можно было бы, конечно, распределять пришедшие пакеты по использованному при передаче протоколу UDP или TCP, но в нашем случае два из трех приложений используют протокол TCP. К счастью, разработчики протоколов UDP и TCP позаботились о распределении пакетов по приложениям и вставили в передаваемые пакеты специальное поле, которое называется номером порта. Процесс разбиения данных по номерам портов называется мультиплексированием, т.е. определение приложения, которое получает данные из пакета. Каждое приложение Саши использует разные номера портов, поэтому Коля знает, какому приложению предназначаются данные.

Итак, мы рассмотрели, как работает элементарная сеть с несколькими приложениями. Давайте теперь познакомимся с использованными в данном примере протоколами немного поближе.

Протоколы канального уровня SLIP и PPP

На канальном уровне используются протоколы SLIP (Serial Link Internet Protocol - межсетевой протокол для последовательного канала) и PPP (Point-to-Point Protocol - протокол "точка-точка").

Протоколы канального уровня SLIP и PPP применяются как на коммутируемых линиях, так и на выделенных телефонных каналах. С их помощью к глобальной сети подключается большинство индивидуальных пользователей, а также небольшие локальные сети. Подобные линии связи могут обеспечивать скорость передачи данных до 115200 бит/с.

Serial Line Internet Protocol (SLIP)

Согласно RFC-1055 впервые SLIP был включен в качестве средства доступа к IP-сети в пакет фирмы 3COM-UNET. В 1984 г. Рик Адамс реализовал SLIP для BSD 4.2, и таким образом SLIP стал достоянием Internet в целом. Обычно этот протокол применяют как на выделенных, так и на коммутируемых линиях связи со скоростью передачи от 1200 до 19200 бит/с.

Такие операционные системы, как FreeBSD, Linux, NetBSD, которые можно свободно скопировать и установить на своем персональном компьютере, или HP-UX, которая поставляется вместе с рабочими станциями Hewlett-Packard, имеют в своем арсенале программные средства типа sliplogin (FreeBSD) или slp (HP-UX), обеспечивающие работу компьютера в качестве SLIP-сервера для удаленных пользователей, подключающихся к IP-сети по телефону. Хотя в стандарте SLIP нет определения понятия "SLIP-сервер", обычно используют термины "SLIP-клиент" для компьютера, инициирующего физическое соединение, и "SLIP-сервер" для машины, постоянно включенной в IP-сеть.

В рамках протокола SLIP осуществляется фрагментация IP-пакетов, при этом SLIP-пакет должен начинаться символом ESC (восьмеричное 333 или десятичное 219) и заканчиваться символом END (восьмеричное 300 или десятичное 192). Стандарт не определяет размер SLIP-пакета, поэтому любой интерфейс имеет специальное поле, в котором пользователь должен указать эту длину. SLIP-модуль не анализирует поток данных и не выделяет какую-либо информацию в этом потоке, а также не позволяет выполнять какие-либо действия, связанные с адресами, т.к. в структуре пакета не предусмотрены поле адреса и его специальная обработка. Компьютеры, взаимодействующие по SLIP, обязаны знать свои IP-адреса заранее. SLIP не предусматривает корректировку ошибок линии связи, и коррекция ошибок возлагается на протоколы транспортного уровня - TCP, UDP. В стандартное SLIP не предусмотрена компрессия данных, но существуют варианты протокола с такими возможностями.

Point to Point Protocol (PPP)

Согласно RFC-1661 данный протокол обеспечивает стандартный метод взаимодействия двух узлов сети. Предполагается, что обеспечивается двунаправленная одновременная передача данных. Как и в SLIP, данные разбиваются на пакеты, которые передаются от узла к узлу упорядоченно. В отличие от SLIP, PPP позволяет одновременно передавать по линии связи пакеты различных протоколов. Кроме того, PPP предполагает процесс автоконфигурации обеих взаимодействующих сторон. Собственно говоря, PPP состоит из трех частей: механизма инкапсуляции (encapsulation), протокола управления соединением (link control protocol) и семейства протоколов управления сетью (network control protocols).

Под датаграммой в PPP понимается информационная единица сетевого уровня (применительно к IP - IP-пакет). Под фреймом понимают информационную единицу канального уровня (согласно модели OSI). Для обеспечения быстрой обработки информации длина фрейма PPP должна быть кратна 32 битам. Фрейм состоит из заголовка и хвоста, между которыми содержаться данные. Датаграмма может быть инкапсулирована в один или несколько фреймов (Рис.2). Пакетом называют информационную единицу обмена между модулями сетевого и канального уровней. Обычно каждому пакету ставится в соответствие один фрейм, за исключением тех случаев когда канальный уровень требует большей фрагментации данных или, наоборот, объединяет пакеты для более эффективной передачи.

В поле "Протокол" указывается тип инкапсулированной датаграммы. Существуют специальные правила кодирования протоколов в этом поле (см. ISO 3309 и RFC-1661). В поле "Информация" записывается собственно пакет данных, а в поле "Хвост" добавляется заполнитель для выравнивания на 32-битовую границу. По умолчанию длина фрейма PPP устанавливается в 1500 байт, но в это число не входит длина поля "Протокол".

Рис. 2. PPP-фрейм

Протокол управления соединением предназначен для установки соглашения между узлами сети о параметрах инкапсуляции (размер фрейма и т.п.), кроме того, он позволяет проводить идентификацию узлов. Первой фазой установки соединения является проверка готовности физического уровня передачи данных. При этом такая проверка может осуществляться периодически, позволяя реализовать механизм автоматического восстановления физического соединения, как это бывает при работе через модем по коммутируемой линии. Если физическое соединение установлено, то узлы начинают обмен пакетами протокола управления соединением, настраивая параметры сессии. Любой пакет, отличный от пакета протокола управления соединением, не обрабатывается во время этого обмена. После установки параметров соединения возможен переход к идентификации. После всех этих действий происходит настройка параметров работы с протоколами межсетевого обмена (IP, IPX и т.п.). Для каждого из них используется свой протокол управления. Для завершения работы по протоколу PPP по сети передается пакет завершения работы протокола управления соединением.

Процедура конфигурации сетевых модулей операционной системы для работы по протоколу PPP более сложна, чем для протокола SLIP, однако возможности PPP-соединения гораздо более широкие. Например, при работе через модем модуль PPP сам восстанавливает соединение при потере несущей частоты. Кроме того, модуль PPP автоматически определяет параметры фреймов, в то время как при SLIP их надо задавать вручную.

Point-to-Point Tunneling Protocol (PPTP)

Протокол PPTP - туннельный протокол "точка-точка" - продвинул концепцию PPP на шаг вперед: этот протокол "заворачивает" в PPTP-обертку PPP-пакеты. С эксплуатационной точки зрения, разница между PPP и PPTP заключается только в следующем: чтобы создать PPP-канал, вы набираете номер телефона, а чтобы создать PPTP-канал, вы "набираете" IP-адрес.

Как и в случае с PPP, пакеты PPTP "заворачиваются", транспортируются на другой конец канала (в данном случае в систему, обозначенную IP-адресом, упомянутым в предыдущем абзаце), и "разворачиваются". в результате между дв4умя системами создается "частная виртуальная сеть", по которой передаются пакеты PPTP. Чтобы этот канал был действительно частным, PPTP поддерживает ряд возможностей защиты, вплоть до шифрования всех данных пакета.

Таким образом, с помощью протоколов PPP и SLIP можно установить глобально-сетевое соединение по коммутируемым линиям, ISDN, сетям X.25 и другим каналам. И PPP, и SLIP характеризуются относительной нечувствительностью к помехам в линии и задержкам приема пакетов.

Протокол PPP более гибок, чем SLIP. Принцип его работы заключается в "заворачивании" пакетов транспортных протоколов TCP, IPX или NBF в пакет особого формата и транспортировке завернутого таким образом пакета по каналу ГВС (глобальной вычислительной сети). На другом конце соединения пакет "разворачивается", и исходные пакеты передаются по локальной сети. После установления соединения все эти операции становятся полностью прозрачными для приложений - приложения видят абсолютно нормальные пакеты TCP, IPX и NBF (хотя эти пакеты могут прибывать несколько медленнее, чем по локальной сети).

SLIP менее гибок. Он представляет собой, по сути дела, расширение IP, предназначенное для работы по низкоскоростным каналам, поэтому и поддерживает только IP-сети. Кроме того, он менее устойчив к помехам в линии. Сервис RAS (Remote Access Services - служба удаленного доступа) операционной системы Windows NT  поддерживает SLIP, главным образом, для совместимости с серверами ГВС, работающими на базе ОС UNIX.

PPTP обладает наибольшими функциональными возможностями по сравнению с SLIP и PPP, позволяя устанавливать частные виртуальные защищенные каналы связи.

Межсетевые протоколы

Internet Protocol (IP)

Протокол IP используется для управления рассылкой TCP/IP-пакетов по сети Internet. Среди различных функций, возложенных на IP, обычно выделяют следующие:

Главной особенностью протокола IP является отсутствие ориентации на физическое или виртуальное соединение. Это значит, что, прежде чем послать пакет в сеть, модуль операционной системы, реализующий IP, не проверяет возможность установк4и соединения, т.е. никакой управляющей информации кроме той, что содержится в самом IP-пакете, по сети не передается. Кроме того, IP не заботится о проверке целостности информации в поле данных пакета, что заставляет отнести его к протоколам ненадежной доставки. Целостность данных проверяется протоколами транспортного уровня (TCP) или протоколами приложений.

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

Принцип маршрутизации является одним из тех факторов, которые определяют гибкость сети Internet и ее преимущества по отношению к другим сетевым технологиям. Маршрутизация представляет собой ресурсоемкую процедуру, т.к. предполагает анализ каждого пакета, который проходит через шлюз или маршрутизатор, в то время как при коммутации анализируется только управляющая информация, устанавливается канал (физический или виртуальный), и все пакеты пересылаются по этому каналу без анализа маршрутной информации. Однако при неустойчивой работе сети пакеты могут пересылаться по различным маршрутам и затем собираться в единое сообщение. При коммутации путь придется устанавливать заново для каждого пакета, и при этом потребуется больше накладных затрат, чем при маршрутизации.

Существует несколько версий протокола IP. В настоящее время используется версия Ipv4 (RFC 791), структура пакета которой представлена на рис. 3.

Рис. 3. формат пакета Ipv4

Фактически в заголовке пакета определены все основные данные, необходимые для перечисленных выше функций протокола IP: адрес отправителя, адрес получателя, общая длина пакета и тип пересылаемой дейтаграммы.

Используя данные заголовка, машина может определить, на какой сетевой интерфейс отправлять пакет. Если IP-адрес получателя принадлежит одной из ее сетей, то на интерфейс этой сети пакет и будет отправлен, в противном случае пакет отправят на другой шлюз.

На основе протокола транспортного уровня IP-модуль производит экскапсуляцию информации из IP-пакета и ее передачу на модуль обслуживания соответствующего транспорта.

При обсуждении формата заголовка пакета IP вернемся еще раз к инкапсулированию. Как уже отмечалось, при обычной процедуре инкапсулирован я пакет просто помещается в поле данных фрейма, а в случае, когда это не может быть осуществлено, разбивается на более мелкие фрагменты. Размер максимально возможного фре2йма, который передается по сети, определяется величиной MTU (Maximum Transmission Unit), определенной для протокола канального уровня. Для последующего восстановления пакет IP должен держать информацию о своем разбиении, и для этой цели используются поля Flags и Fragmentation offset. В этих полях определяется, какая часть пакета получена в данном фрейме, если этот пакет был фрагментирован на более мелкие части.

Internet Control Message Protocol (ICMP)

Протокол ICMP, наряду с IP и ARP, относится к межсетевому уровню. Протокол используется для рассылки информационных и управляющих сообщений. При этом используются следующие виды сообщений:

Flow control -
если принимающая машина (шлюз или реальный получатель информации) не успевает перерабатывать информацию, то данное сообщение приостанавливает отправку пакетов по сети.
Detecting unreachable destination -
если пакет не может достичь места назначения, то шлюз, который не может доставить пакет, сообщает об этом отправителю пакета. Информировать о невозможности доставки сообщения может и машина, чей IP-адрес указан в пакете. Только в этом случае речь будет идти о портах TCP и UDP, о чем будет сказано чуть позже.
Redirect routing -
это сообщение посылается в том случае, если шлюз не может доставить пакет, но у него есть на этот счет некоторые соображения, а именно - адрес другого шлюза.
Checking remote host -
в этом случае используется так называемое ICMP Echo Message. Если необходимо проверить наличие стека TCP/IP на удаленной машине, то на нее посылается сообщение данного типа. Как только система получит это сообщение, она немедленно высылает подтверждение.

Эхо-запрос ICMP и эхо-ответ ICMP отправляются и принимаются с помощью команды ping. Эхо-запрос подразумевает, что компьютер, которому он был отправлен, должен ответить на этот пакет. Эхо-ответ - это тип ICMP-сообщения, которое используется для ответа на такой запрос.

ICMP используется также для получения сообщения об истечении "срока жизни" пакета на шлюзе. При этом используется "время жизни" пакета, определяющее число шлюзов, через которые пакет может пройти. Программа, использующая эту информацию (сообщение Time execeed протокола ICMP), называется Traceroute.

При посылке пакета через Internet Traceroute устанавливает значение TTL (Time to Live) последовательно от 1 до 30 (значение по умолчанию). TTL определяет число шлюзов, через которые может пройти IP-пакет. Если это число превышено, то шлюз, на котором происходит обнуление TTL, высылает ICMP-пакет. Если же пакет достиг получателя, то в этом случае возвращается сообщение другого типа - Detecting unreachable destination, т.к. IP-пакет передается на транспортный уровень.

Routing Information Protocol (RIP)

Протокол RIP - наиболее распространенный из протоколов управления маршрутизацией. Он предназначен для автоматического обновления таблицы маршрутов, при этом используется информация о состоянии сети, которая рассылается маршрутизаторами (routers). В соответствии с протоколом RIP любая машина может быть маршрутизатором. При этом все маршрутизаторы делятся на активные и пассивные. Активные маршрутизаторы сообщают о маршрутах, которые они поддерживают в сети. Пассивные маршрутизаторы читают эти широковещательные сообщения и исправляют свои таблицы маршрутов, но при этом сами информацию в сеть не предоставляют. Обычно в качестве активных маршутизаторов выступают шлюзы, а в качестве пассивных - обычные машины (hosts).

В основу алгоритма маршрутизации по протоколу RIP положена простая идея: чем больше шлюзов надо пройти пакету, тем больше времени требуется для прохождения маршрута. При обмене сообщениями маршрутизаторы сообщают в сеть IP-номер сети и число "прыжков" (hops), которое надо совершить, пользуясь данным маршрутом. Надо сразу заметить, что такой алгоритм эффективен только для сетей, которые имеют одинаковую скорость передачи по любому сегменту сети.

Address Resolution Protocol (ARP)

К моменту, когда протокол IP должен отправлять дейтаграмму, он уже информирован протоколами верхних уровней об IP-адресе получателя. В свою очередь, он должен сообщить протоколу канального уровня аппаратный адрес удаленного компьютера. Если этот адрес не известен, для поиска нужной информации применяется протокол определения адресов ARP (Address Resolution Protocol - протокол разрешения адресов), который ведет широковещательный опрос сети - запрашивает у каждого имеющего определенный IP-адрес компьютера адрес его аппаратного обеспечения (или, другими словами, MAC-адрес). Протокол ARP может перевести IP-адрес в адрес аппаратного обеспечения, например, в MAC-адрес сетевой платы удаленного компьютера.

Протоколы транспортного уровня

User Datagram Protocol (UDP)

UDP - один из двух протоколов транспортного уровня, используемых в стеке протоколов TCP/IP. UDP позволяет прикладной программе передавать свои сообщения по сети с минимальными издержками, связанными с преобразованием протоколов уровня приложения в протокол IP. Однако при этом прикладная программа сама должна обеспечивать подтверждение того, что сообщение доставлено по месту назначения. Заголовок UDP-дейтаграммы (сообщения) имеет вид, показанный на рис. 4.

Рис. 4. Структура заголовка UDP-сообщения

Порты в заголовке определяют протокол UDP как мультиплексор, который позволяет собирать сообщения от приложений и отправлять из на уровень протоколов. При этом приложение использует определенный порт .Взаимодействующие через сеть приложения могут использовать разные порты, что и отражает заголовок пакета. Всего можно определить 216 разных портов. Первые 256 портов закреплены за так называемыми "well known services (WKS)". Частичный перечень этих портов и соответствующих им сервисов приведен в таблице 1.

Таблица 1. Стандартные сетевые сервисы и соответствующие им порты

Протокол Полное наименование протокола Номер порта
IP Internet Protocol 0
ICMP Internet Control Message Protocol 1
IGMP Internet Group Management 2
GGP Gateway-Gateway Protocol 3
IP-ENCAP IP Encapsulated in IP 4
ST ST Datagram Mode 5
TCP Transmission Control Protocol 6
EGP Exteriot Gateway Protocol 8
UDP User Datagram Protocol 17
HMP Host Monitoring Protocol 20
XNS-IDP Xerox NS IDP 22
RDP Reliable Datagram Protocol 27
ISO-TP4 ISO Transport Protocol class 4 29
XTP eXpress Transfer Protocol 36
IDPR-CMTP IDPR Control Message Transport 39
RSVP Resource ReSerVation Protocol 46
VMTP Versatile Message Transport 81
OSPFIGP Open Shortest Path First IGP 89
ENCAP Yet Another IP Encapsulation 98

Поле Length определяет общую длину сообщения. Поле Checksum служит для контроля целостности данных. Приложение, которое использует протокол UDP, должно поддерживать целостность данных, анализируя поля Checksum и Length. Кроме этого, при обмене данными по UDP прикладная программа сама должна заботиться о контроле получения данных адресатом. Обычно это достигается обменом подтверждениями о доставке между прикладными программами.

Наиболее известными сервисами, основанными на UDP, являются служба доменных имен BIND и распределенная файловая система NFS.

Transfer Control Protocol (TCP)

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

Рис. 5. Структура пакета TCP

Согласно этой структуре в TCP, как и в UDP, используются порты. В поле Sequence Number определен номер пакета в последовательности пакетов, которая составляет сообщение, затем идет поле подтверждения Asknowledgment Number и другая управляющая информация.

Надежность TCP обеспечивается тем, что источник данных повторяет их передачу, если только не получит в определенный промежуток времени от адресата подтверждение об их успешном получении. Этот механизм называется Positive Asknowledgement with Re-transmission (PAR). В заголовке TCP предусмотрено поле контрольной суммы. Если при пересылке данные повреждены, то по контрольной сумме модуль, вычленяющий TCP-сегме7ты из пакетов IP, уничтожает поврежденный пакет (сообщение источнику не передается). Если же данные не были повреждены, то они пропускаются на сборку сообщения приложения, а в адрес источника отправляется подтверждение.

Ориентация на соединение определяется тем, что, прежде чем отправить сегмент с данными, модули TCP-источника и получателя обмениваются управляющей информацией. Такой обмен называется handshake (буквально "рукопожатие"). В TCP используется трехфазный handshake:

После установки соединения источник посылает данные получателю и ждет от него подтверждений об из получении, затем снова посылает данные и т.д., пока сообщение не закончится. Заканчивается сообщение, когда в поле флагов выставляется бит FIN, что означает "больше нет данных".

Потоковый характер протокола определяется тем, что SYN определяет стартовый номер для отсчета переданных байтов, а не пакетов. Это значит, что если SYN был установлен в 0 и было передано 200 байтов, то номер, установленный в следующем пакете, будет равен 201, а не 2.

Потоковый характер протокола и требование подтверждения получения данных порождают проблему скорости передачи данных. Для ее решения используется поле Window (окно). Идея применения "окна" достаточно проста: передавать данные, не дожидаясь подтверждения об их получении. Это значит, что источник передает некоторое количество данных, равное Window, без ожидания подтверждения об их приеме, и только после этого останавливает передачу и ждет подтверждения. Если он получит подтверждение только на часть переданных данных, то начнет передачу новой порции с номера, следующего за подтвержденным.

В заключение приведем таблицу, содержащую сведения о соответствии прикладных протоколов и назначаемым им портам. В таблице отмечается также, какой из транспортных протоколов при этом используется.

Таблица 2. Прикладные протоколы и соответствующие им порты

Протокол Порт Транспорт Комментарий
tcpmux 1 tcp TCP port service multiplexer
ftp 21 tcp File Transfer Protocol
22 Unassigned (номер не занят)
telnet 23 tcp Протокол удаленного терминала
24 Private (номер зарезервирован)
smtp 25 tcp Simple Mail Transfer Protocol (электронная почта)
26 Unassigned
time 37 tcp Timeserver
37 udp
rip 39 udp Routing Information Protocol (протокол маршрутизации)
whois 43 tcp Nicname (определение соответствия сетевого имени определенному IP-адресу)
domain 53 tcp Domain Name Server (сервер доменных имен)
53 udp
bootps 67 tcp BOOTP server
67 udp
gopher 70 tcp сеть Gopher
70 udp
finger 79 tcp  
www или http 80 tcp Протокол передачи гипертекстовых документов
80 udp

Контрольные вопросы

  1. Перечислите по порядку уровни в архитектуре протокола TCP/IP.
  2. Какие функции выполняет протокол TCP?
  3. Какие функции выполняет протокол IP?
  4. Какие протоколы транспортного уровня вы знаете?
  5. Что такое инкапсуляция и фрагментация?
  6. Что такое "порт"?
  7. Что представляют собой протоколы управления маршрутизацией?
  8. Какова структура пакета TCP?
  9. Что представляет собой протокол ARP?
Сайт управляется системой uCoz