Главная страница

Учебник для вузов в. Олифер Н. Олифер Компьютерные Принципы, технологии, протоколы


Скачать 22.28 Mb.
НазваниеУчебник для вузов в. Олифер Н. Олифер Компьютерные Принципы, технологии, протоколы
АнкорOlifer_V_G__Olifer_N_A_-_Kompyuternye_seti_-_2010.pdf
Дата12.03.2017
Размер22.28 Mb.
Формат файлаpdf
Имя файлаOlifer_V_G__Olifer_N_A_-_Kompyuternye_seti_-_2010.pdf
ТипУчебник
#3698
страница56 из 99
1   ...   52   53   54   55   56   57   58   59   ...   99
ГЛАВА 17 Базовые протоколы
TCP/IP
Эту главу мы начнем с изучения протоколов TCP и UDP, исполняющих посредническую роль между
приложениями и транспортной инфраструктурой сети. В то время как задачей уровня межсетевого
взаимодействия, к которому относится протокол IP, является передача данных между сетевыми
интерфейсами в составной сети, главная задача транспортного уровня, которую решают протоколы
TCP и UDP, заключается в передаче данных между прикладными процессами, выполняющимися на
компьютерах в сети.
Далее в этой главе рассматриваются протоколы маршрутизации, предназначенные для автомати­
ческого построения таблиц маршрутизации, на основе которых происходит продвижение пакетов
сетевого уровня. Протоколы маршрутизации, в отличие от сетевых протоколов, таких как IP и IPX, не
являются обязательными, так как таблица маршрутизации может строиться администратором сети
вручную. Однако в крупных сетях со сложной топологией и большим количеством альтернативных
маршрутов протоколы маршрутизации выполняют очень важную и полезную работу, автоматизируя
построение таблиц маршрутизации, а также отыскивая новые маршруты при изменениях сети: от-
(азах или появлении новых линий связи и маршрутизаторов.
Мы рассмотрим также протокол ICMP, являющийся средством оповещения отправителя о причинах
недоставки его пакетов адресату. Помимо диагностики ICMP используется для мониторинга сети.
Так, в основе популярных утилит мониторинга ІР-сетей ping и traceroute лежат ІСМР-сообщения.

554
Глава 17. Базовые протоколы TCP/IP
Протоколы транспортного уровня TCP и UDP
К транспортному уровню стека T C P/IP относятся:
□ протокол управления передачей (Transmission Control Protocol, TCP), описанный в стандарте RFC 793;
□ протокол пользовательских дейтаграмм (User Datagram Protocol, UDP), описанный в стандарте RFC 768.
Протоколы TCP и UDP, как и протоколы прикладного уровня, устанавливаются на ко­
нечных узлах.
Порты и сокеты
В то время как задачей уровня сетевого взаимодействия, к которому относится протокол IP, является передача данных между сетевыми интерфейсами в составной сети, главная за­
дача протоколов транспортного уровня TCP и UDP заключается в передаче данных между
прикладными процессами, выполняющимися на компьютерах в сети.
Каждый компьютер может выполнять несколько процессов, более того, даже отдельный прикладной процесс может иметь несколько точек входа, выступающих в качестве адре­
сов назначения для пакетов данных. Поэтому доставка данных на сетевой интерфейс компьютера-получателя — это еще не конец пути, так как данные необходимо переправить конкретному процессу-получателю. Процедура распределения протоколами TCP и UDP поступающих от сетевого уровня пакетов между прикладными процессами называется
демультиплексированием (рис. 17.1).

Протоколы транспортного уровня TCP и UDP
555
Существует и обратная задача: данные, генерируемые разными приложениями, работающи­
ми на одном конечном узле, должны быть переданы общему для всех них протокольному модулю IP для последующей отправки в сеть. Эту работу, называемую мультиплексиро­
ванием, тоже выполняют протоколы TCP и UDP.
Протоколы TCP и UDP ведут для каждого приложения две системные очереди: очередь данных, поступающих к приложению из сети, и очередь данных, отправляемых этим при­
ложением в сеть. Такие системные очереди называются портами1, причем входная и вы­
ходная очереди одного приложения рассматриваются как один порт. Для идентификации портов им присваивают номера.
Если процессы представляют собой популярные системные службы, такие как FTP, telnet,
Нттр тртр^ DNS и т. п., то за ними закрепляются стандартные назначенные номера, называемые также хорошо известными (well-known) номерами портов. Эти номера за­
крепляются и публикуются в стандартах Интернета (RFC 1700, RFC 3232). Так, номер 21 закреплен за серверной частью службы удаленного доступа к файлам FTP, а 23 — за сервер­
ной частью службы удаленного управления telnet. Назначенные номера из диапазона от 0 до 1023 являются уникальными в пределах Интернета и закрепляются за приложениями
централизованно.
Для тех приложений, которые еще не стали столь распространенными, номера портов назначаются локально разработчиками этих приложений или операционной системой в ответ на поступление запроса от приложения. На каждом компьютере операционная система ведет список занятых и свободных номеров портов. При поступлении запроса от приложения, выполняемого на данном компьютере, операционная система выделяет ему первый свободный номер. Такие номера называют динамическими. В дальнейшем все сетевые приложения должны адресоваться к данному приложению с указанием назначен­
ного ему динамического номера порта. После того как приложение завершит работу, его номер возвращается в список свободных и может быть назначен другому приложению.
Динамические номера являются уникальными в пределах каждого компьютера, но при этом обычной является ситуация совпадения номеров портов приложений, выполняемых на разных компьютерах. Как правило, клиентские части известных приложений (DNS,
WWW, FTP, telnet и др.) получают динамические номера портов от ОС.
Все, что было сказано о портах, в равной степени относится к обоим протоколам транс­
портного уровня (TCP и UDP). В принципе, нет никакой зависимости между назначением номеров портов для приложений, использующих протокол TCP, и приложений, работаю­
щих с протоколом UDP. Приложения, которые передают данные на уровень IP по про­
токолу UDP, получают номера, называемые UDP-портами. Аналогично, приложениям, обращающимся к протоколу TCP, выделяются ТСР-порты.
Втом и другом случаях это могут быть как назначенные, так и динамические номера. Диа­
пазоны чисел, из которых выделяются номера TCP- и UDP-портов, совпадают: от 0 до
1023 для назначенных и от 1024 до 65 535 для динамических. Однако никакой связи между назначенными номерами TCP- и UDP-портов нет. Даже если номера TCP- и UDP-портов совпадают, они идентифицируют разные приложения. Например, одному приложению может быть назначен ТСР-порт 1750, а другому — UDP-порт 1750. В некоторых случаях, когда приложение может обращаться по выбору к протоколу TCP или UDP (например,
{Порт приложения не надо путать с портами (сетевыми интерфейсами) оборудования.

556
Глава 17. Базовые протоколы TCP/IP
таким приложением является DNS), ему, исходя из удобства запоминания, назначаются совпадающие номера TCP- и UDP-портов (в данном примере — это хорошо известный номер 53).
Стандартные назначенные номера портов уникально идентифицируют тип приложения
(FTP, или HTTP, или DNS и т. д.), однако они не могут использоваться для однозначной идентификации прикладных процессов, связанных с каждым из этих типов приложений.
Пусть, например, на одном хосте запущены две копии DNS-сервера — DNS-сервер 1, DNS- сервер 2 (рис. 17.2). Каждый из этих DNS-серверов имеет хорошо известный UDP-порт 53.
Какому из этих серверов нужно было бы направить запрос клиента, если бы в DNS-запросе в качестве идентификатора сервера был указан только номером порта?
Сокет DNS-сервера 1
Щ
DNS-сервер 1
(IP1, UDP-порт 53)
DNS-клиент 2
DNS-сервер 2 1 Сокет DNS-сервера 2
(ІР2, UDP-порт 53)
1Р-дейтаграмма
0
*
S
1
Порт назначения 53 1Р-адрес
назначения IP2
UDP-дейтаграмма
"-v—
Кадр
Рис. 17.2. Демультиплексирование протокола UDP на основе сокетов
Чтобы снять неоднозначность в идентификации приложений, разные копии связываются с разными IP-адресами. Для этого сетевой интерфейс компьютера, на котором выполня­
ется несколько копий приложения, должен иметь соответствующее число ІР-адресов - на рисунке это ІР1 и ІР2. Во всех IP-пакетах, направляемых DNS-серверу 1, в качестве
IP-адреса указывается ІР1, а DNS-серверу 2 — адрес ІР2. Поэтому показанный на рисунке пакет, в поле данных которого содержится UDP-дейтаграмма с указанным номером пор­
та 53, а в поле заголовка задан адрес ІР2, буден направлен однозначно определенному адресату — DNS-серверу 2.
Прикладной процесс однозначно определяется в пределах сети и в пределах отдельного ком*
пьютера парой (IP-адрес, номер порта), называемой сокетом (socket). Сокет, определенный
ІР-адресом и номером UDP-порта, называется UDP-сокетом, а ІР-адресом и номером TCP-
порта—ТСР-сокетом.

Протоколы транспортного уровня TCP и UDP
557
ПРИМЕЧАНИЕ---------------------------------------------------------------------------------------------------------------
Здесь мы должны уточнить описанную в предыдущих главах упрощенную картину прохождения
пакета вверх по стеку Действительно, как мы и отмечали, после получения ІР-пакета от протокола
канального уровня протокол IP анализирует содержимое заголовка этого пакета, после чего заго­
ловок отбрасывается, и «наверх» передается содержимое поля данных ІР-пакета, например U D P-
дейтаграмма. Упрощение состоит в том, что вместе с содержимым поля данных на транспортный
уровень передается извлеченный из заголовка IP-адрес назначения, который и используется для
однозначной идентификации приложения.
Протокол UDP и UDP-дейтаграммы
ПротдкШ УСЩ дейтаграммным протоколом, реализующим так называемый который не гарантирует доставку сообщений адресату.
При работе на хосте-отправителе данные от приложений поступают протоколу UDP че­
рез порт в виде сообщений (рис. 17.3). Протокол UDP добавляет к каждому отдельному сообщению свой 8-байтный заголовок, формируя из этих сообщений собственные про­
токольные единицы, называемые UDP-дейтаграммами, и передает их нижележащему протоколу IP. В этом и заключаются его функции по мультиплексированию данных.
а
Заголовки
г—
і
протокола UDP ^ ^ L g J
К протоколу
UDP-дейтаграммы
Рис. 17.3. Работа протокола UDP на хосте-отправителе

558
1
Глава 17. Базовые протоколы TCP/IP
Каждая дейтаграмма переносит отдельное пользовательское сообщение. Сообщения могут иметь различную длину, не превышающую однако длину поля данных протокола IP, ко­
торое, в свою очередь, ограничено размером кадра технологии нижнего уровня. Поэтому если буфер UDP переполняется, то сообщение приложения отбрасывается.
Заголовок UDP состоит из четырех 2-байтных полей:
□ номер UDP-порта отправителя;
□ номер UDP-порта получателя;
□ контрольная сумма;
□ длина дейтаграммы.
Далее приведен пример заголовка UDP с заполненными полями:
Source Port - 0x0035
D e s t i n a t i o n Port - 0x0411
Total le ngt h - 132 (0x84) bytes
Checksum - 0x5333
В этой UDP-дейтаграмме в поле данных, длина которого, как следует из заголовка, равна
(132 - 8) байт, помещено сообщение DNS-сервера, что можно видеть по номеру порта источника
( S o u r c e P o r t
= 0—0035). В шестнадцатеричном формате это значение равно стандартному номеру порта DNS-сервера — 53.
Судя по простоте заголовка, протокол UDP не сложен. Действительно, его функции сводятся к простой передаче данных между прикладным и сетевым уровнями, а также примитивному контролю искажений в передаваемых данных. При контроле искажений протокол UDP только диагностирует, но не исправляет ошибку. Если контрольная сумма показывает, что в поле данных UDP-дейтаграммы произошла ошибка, протокол UDP про­
сто отбрасывает поврежденную дейтаграмму.
Работая на хосте-получателе, протокол UDP принимает от протокола IP извлеченные из пакетов UDP-дейтаграммы. Полученные из IP-заголовка ІР-адрес назначения и из
UDP-заголовка номер порта используются для формирования UDP-сокета, однозначно идентифицирующего приложение, которому направлены данные. Протокол UDP осво­
бождает дейтаграмму от UDP-заголовка. Полученное в результате сообщение он передает приложению на соответствующий UDP-сокет. Таким образом, протокол UDP выполняет
демультиплексирование на основе сокетов.
Протокол TCP и ТСР-сегменты
Протсифл
р с ш т
Hcnhhkivttsi
При работе на хосте-отправителе протокол TCP рассматривает информацию, поступаю­
щую к нему от прикладных процессов, как неструктурированный поток байтов (рис. 17.4).
Поступающие данные буферизуются средствами TCP. Для передачи на сетевой уровень из буфера «вырезается» некоторая непрерывная часть данных, которая называется сегментом! и снабжается заголовком.
1 Заметим, что сегментом называют как единицу передаваемых данных в целом (поле данных и за-

Протоколы транспортного уровня TCP и UDP
559
Рис. 17.4.
Формирование TCP-сегментов из потока байтов
ПРИМЕЧАНИЕ---------------------------------------------------------------------------------------------------
В отличие от протокола UDP, который создает свои дейтаграммы на основе логически обособленных
единиц данных — сообщений, генерируемых приложениями, протокол TCP делит поток данных на
сегменты без учета их смысла или внутренней структуры.
Заголовок TCP-сегмента содержит значительно больше полей, чем заголовок UDP, что отражает более развитые возможности протокола TCP (рис. 17.5). Краткие описания боль­
шинства полей помещены на рисунке, а более подробно мы их рассмотрим, когда будем изучать функции протокола TCP.
Коротко поясним значение однобитных полей, называемых флагами, или кодовыми
битами (code bits). Они расположены сразу за резервным полем и содержат служебную информацию о типе данного сегмента. Положительное значение сигнализируется уста­
новкой этих битов в единицу:
□ URG — срочное сообщение;
□ АСК — квитанция на принятый сегмент;
□ PSH — запрос на отправку сообщения без ожидания заполнения буфера;
□ RST — запрос на восстановление соединения;
□ SYN — сообщение, используемое для синхронизации счетчиков переданных данных при установлении соединения;
Q FIN — признак достижения передающей стороной последнего байта в потоке пере­
даваемых данных.

560
Глава 17. Базовые протоколы TCP/IP
2 байта
Порт источника (sours port)
2 байта
__________ I__________
Порт приемника (destination port)
Последовательный номер (sequence number) -
номер первого байта данных в сегменте, определяет смещение
сегмента относительно потока отправляемых данных
Подтвержденный номер (acknowledgement number) -
максимальный номер байта в полученном сегменте,
* увеличенный на единицу
Длина
заголовка
(hlen)
Резерв
(reserved)
Окно (window) - количество байтов
данных, ожидаемых отправителем
данного сегмента, начиная с байта,
номер которого указан в поле
подтвержденного номера
Контрольная сумма
(checksum)
Указатель срочности (urgent pointer) •
указывает на конец данных, которые
необходимо срочно принять,
несмотря на переполнение буфера
Параметры (options) -
это поле имеет переменную длину и может вообще отсутствовать, используется
для решения вспомогательных задач, например, для согласования
максимального размера сегмента
у ^ ^
Заполнитель (paddind) -
это фиктивное поле может иметь переменную длину,
;
, используется для доведения
резмера
заголовков до целого числа 32-битовых слов
Рис. 17.5. Формат заголовка ТСР-сегмента
Логические соединения — основа
надежности TCP
Основным отличием TCP от UDP является то, что на протокол TCP возложена дополнительная
задача —* обеспечить надежную доставку сообщений, используя в качестве основы ненадежный
дейтаграммный протокол IP.
Для решения этой задачи протокол TCP использует метод продвижения данных с установ­
лением логического соединения. Как было сказано ранее, логическое соединение дает воз­
можность участникам обмена следить за тем, чтобы данные не были потеряны, искажены или продублированы, а также чтобы они пришли к получателю в том порядке, в котором были отправлены.
Протокол TCP устанавливает логические соединения между прикладными процессами, причем в каждом соединении участвуют только два процесса. TCP-соединение является
дуплексным, то есть каждый из участников этого соединения может одновременно получать и отправлять данные.
На рис. 17.6 показаны сети, соединенные маршрутизаторами, на которых установлен про­
токол IP Установленные на конечных узлах протокольные модули TCP решают задачу

Протоколы транспортного уровня TCP и UDP
561
обеспечения надежного обмена данными путем установления между собой логических соединений.
Рис. 17.6.
TCP-соединение создает надежный логический канал между конечными узлами
При установлении логического соединения модули TCP договариваются между собой о параметрах процедуры обмена данными. В протоколе TCP каждая сторона соединения посылает противоположной стороне следующие параметры:
□ максимальный размер сегмента, который она готова принимать;
□ максимальный объем данных (возможно несколько сегментов), которые она разрешает другой стороне передавать в свою сторону, даже если та еще не получила квитанцию на предыдущую порцию данных (размер окна);
□ начальный порядковый номер байта, с которого она начинает отсчет потока данных в рамках данного соединения.
В результате переговорного процесса модулей TCP с двух сторон соединения определя­
ются параметры соединения. Одни из них остаются постоянными в течение всего сеанса связи, а другие адаптивно изменяются. В частности, в зависимости от загрузки буфера принимающей стороны, а также надежности работы сети динамически изменяется размер окна отправителя.
Соединение устанавливается по инициативе клиентской части приложения. При необхо­
димости выполнить обмей данными с серверной частью приложение-клиент обращается к нижележащему протоколу TCP, который в ответ на это обращение посылает сегмент- запрос на установление соединения протоколу TCP, работающему на стороне сервера
(рис. 17.7, а). В числе прочего в запросе содержится флаг SYN, установленный в 1.
Получив запрос, модуль TCP на стороне сервера пытается создать «инфраструктуру» для обслуживания нового клиента. Он обращается к операционной системе с просьбой о вы­
делении определенных системных ресурсов для организации буферов, таймеров, счетчиков.
Эти ресурсы закрепляются за соединением с момента создания и до момента разрыва. Если на стороне сервера все необходимые ресурсы были получены и все необходимые действия выполнены, то модуль TCP посылает клиенту сегмент с флагами АСК и SYN.

1   ...   52   53   54   55   56   57   58   59   ...   99


написать администратору сайта