Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Yazov_ITKS

.pdf
Скачиваний:
349
Добавлен:
31.05.2015
Размер:
7.37 Mб
Скачать

имеет этот номер последовательности.

Поскольку поток пакетов TCP в общем случае может быть длиннее, чем число различных состояний этого поля. Это накладывает практическое ограничение на использование TCP. Если скорость передачи коммуникационной системы такова, чтобы в течение максимального времени жизни сегмента произошло переполнение номера последовательности, то в сети может появиться два сегмента с одинаковым номером, относящихся к разным частям потока, и приёмник получит некорректные данные.

Поле «Номер подтверждения» содержит номер последовательности, ожидаемый получателем в следующий раз, если установлен флаг ACK (см. ниже про флаги).

Поле «Длина заголовка (смещение данных)» определяет размер заголовка пакета TCP в 4-байтных словах. Минимальный размер составляет 5 слов, а максимальный – 15, что составляет 20 и 60 байтов соответственно. Смещение считается от начала заголовка TCP.

Поле «Зарезервировано» зарезервировано (6 бит) для будущего использования и должно устанавливаться в ноль.

Поле «Флаги» содержит 6 битовых флагов:

URG (англ. Urgent pointer field is significant) – по-

ле «Указатель важности» задействовано;

ACK (англ. Acknowledgement field is significant) –

поле «Номер подтверждения» задействовано;

PSH (англ. Push function) –инструктирует получателя протолкнуть данные, накопившиеся в приемном буфере, в приложение пользователя;

RST (англ. Reset the connection) – оборвать со-

единения, сбросить буфер (очистка буфера);

SYN (англ. Synchronize sequence numbers) – син-

хронизация номеров последовательности;

121

FIN (англ. Final) – флаг, будучи установлен, указывает на завершение соединения.

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

Поле «Контрольная сумма – это 16-битное дополнение к сумме всех 16-битных слов заголовка и данных. Если сегмент, по которому вычисляется контрольная сумма, имеет длину не кратную 16-ти битам, то длина сегмента увеличивается до кратной 16-ти, за счет дополнения к нему справа нулевых битов заполнения. Биты заполнения (нули) не передаются в сообщении и служат только для расчёта контрольной суммы. При расчёте контрольной суммы значение самого поля контрольной суммы принимается равным нулю.

Поле «Указатель важности» содержит 16-битовое значение положительного смещения от порядкового номера в данном сегменте. Это поле указывает порядковый номер октета, которым заканчиваются важные (urgent) данные. Поле принимается во внимание только для пакетов с установленным флагом URG.

Поле «Опции» содержит опции, которые могут применяться в некоторых случаях для расширения протокола, для тестирования. Вычислить длину поля опции можно через значение поля смещения.

Вотличие от протокола UDP, который может сразу же начать передачу пакетов, TCP устанавливает соединения, которые должны быть созданы перед передачей дан-

ных. TCP-соединение можно разделить на 3 стадии: 1) установка соединения; 2) передача данных; 3) завершение соединения. При этом возможные состояния сеанса связи указаны табл. 1.9.

122

Таблица 1.9

Сеанса связи по протоколу TCP

Наименование

Содержание состояния

состояния сеанса

 

CLOSED

Начальное состояние узла. Фактически фиктив-

ное

 

LISTEN

Сервер ожидает запросов установления соедине-

ния от клиента

 

 

 

SYN-SENT

Клиент отправил запрос серверу на установление

соединения и ожидает ответа

 

 

 

SYN-RECEIVED

Сервер получил запрос на соединение, отправил

ответный запрос и ожидает подтверждения

 

ESTABLISHED

Соединение установлено, идёт передача данных

 

FIN-WAIT-1

Одна из сторон (назовём её узел-1) завершает

соединение, отправив сегмент с флагом FIN

 

 

 

 

Другая сторона (узел-2) переходит в это состоя-

CLOSE-WAIT

ние, отправив, в свою очередь сегмент ACK и

продолжает одностороннюю передачу

 

 

 

FIN-WAIT-2

Узел-1 получает ACK, продолжает чтение и ждёт

получения сегмента с флагом FIN

 

 

 

LAST-ACK

Узел-2 заканчивает передачу и отправляет сег-

мент с флагом FIN

 

 

Узел-1 получил сегмент с флагом FIN, отправил

TIME-WAIT

сегмент с флагом ACK и ждёт 2*MSL секунд,

перед окончательным закрытием соединения

 

 

Обе стороны инициировали закрытие соединения

 

одновременно: после отправки сегмента с флагом

CLOSING

FIN узел-1 также получает сегмент FIN, отправ-

ляет ACK и находится в ожидании сегмента ACK

 

 

(подтверждения на свой запрос о разъединении)

 

 

Процесс начала сеанса по протоколу TCP, называемый «рукопожатием» (handshake), состоит из 3 шагов.

1. Клиент, который намеревается установить соединение, посылает серверу пакет с номером последователь-

123

ности и флагом SYN. Сервер получает сегмент, запоминает номер последовательности и пытается создать сокет (буферы и управляющие структуры памяти) для обслуживания нового клиента.

Вслучае успеха сервер посылает клиенту сегмент с номером последовательности и флагами SYN и ACK и переходит в состояние SYN-RECEIVED (см. табл. 1.9).

Вслучае неудачи сервер посылает клиенту сегмент

сфлагом RST.

2. Если клиент получает сегмент с флагом SYN, то он запоминает номер последовательности и посылает сегмент с флагом ACK. Если он одновременно получает и флаг ACK (что обычно и происходит), то он переходит в состояние ESTABLISHED.

Если клиент получает сегмент с флагом RST, то он прекращает попытки соединиться. Если клиент не получает ответа в течение 10 секунд, то он повторяет процесс соединения заново.

3. Если сервер в состоянии SYN-RECEIVED получает сегмент с флагом ACK, то он переходит в состояние ESTABLISHED. В противном случае после тайм-аута он закрывает сокет и переходит в состояние CLOSED.

Этот процесс называется «трехкратным рукопожатием» («three way handshake»), так как, несмотря на то, что возможен процесс установления соединения с использованием 4 сегментов (SYN в сторону сервера, ACK в сторону клиента, SYN в сторону клиента, ACK в сторону сервера), на практике для экономии времени используется 3 сегмента.

Если при выполнении процедуры «трехкратного рукопожатия» SYN-сегмент был получен, SYN-ACK – сегмент послан, но заключительное уведомление (ACKсегмент) не было получено, то возникает так называемое полуоткрытое соединение (рис. 1.37).

124

Узел №1

Узел №2

SYN, Seq=ISN1, ACK 1

SYN-ACK, Seq=ISN2, ACK=ISN1+1

2

Повторная передача

SYN-ACK, Seq=ISN2, ACK=ISN1+1 3

Рис. 1.37. Возникновение полуоткрытого TCP-соединения

До тех пор, пока заключительное уведомление не принято, данные не могут быть посланы по виртуальному каналу. Поэтому спустя 3 секунды осуществляется первая повторная передача SYN-ACK –сегмента, затем через 6 секунд – вторая повторная передача, и если через 12 секунд после последней передачи отклика не последовало, то происходит отказ от соединения.

На основе создания полуоткрытого соединения могут реализовываться целый ряд сетевых атак.

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

125

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

Для того чтобы передающая сторона не отправляла данные интенсивнее, чем их может обработать приемник, TCP содержит средства управления потоком. Для этого используется поле «окно». В сегментах, направляемых от приемника передающей стороне, в поле «Окно» указывается текущий размер приемного буфера. Передающая сторона сохраняет размер окна и отправляет данные в объеме не более, чем указал приемник. Если приемник указал нулевой размер окна, то передача данных в направлении этого узла не происходит до тех пор, пока приемник не сообщит о большем размере окна.

В некоторых случаях передающее приложение может явно затребовать протолкнуть данные принимающему приложению, не буферизируя их. Для этого используется флаг PSH. Если в полученном сегменте обнаруживается флаг PSH, то реализация TCP отдает все буферизированные на текущий момент данные принимающему приложению. «Проталкивание» используется, например, в интерактивных приложениях. В сетевых терминалах нет смысла ожидать ввода пользователя после того, как он закончил набирать команду. Поэтому последний сегмент, содержащий команду, обязан содержать флаг PSH, чтобы приложение на принимающей стороне смогло начать её выполнение.

126

Завершение соединения включает в себя три этапа:

1)посылку серверу от клиента флагов FIN и ACK на завершение соединения.

2)посылку клиенту от сервера флагов ответа

ACK и FIN;

3)закрытие соединение и отправка подтверждения, что соединение закрыто.

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

Сетевой уровень обеспечивает прокладку каналов через коммуникационную сеть, выбор наиболее быстрого

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

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

127

Сетевой уровень выполняет функции:

создание сетевых соединений и идентификация их портов;

обнаружение и исправление ошибок, возникающих при передаче через коммуникационную сеть;

управление потоками пакетов;

организация (упорядочение) последовательностей пакетов;

маршрутизация и коммутация;

сегментирование и объединение пакетов.

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

Сетевой уровень отвечает за деление пользователей на группы и маршрутизацию пакетов на основе преобразования MAC-адресов в сетевые адреса. Сетевой уровень обеспечивает также прозрачную передачу пакетов на транспортный уровень.

На сетевом уровне определяется два вида протоколов. Первый вид относится к определению правил передачи пакетов с данными конечных узлов от узла к маршрутизатору и между маршрутизаторами. Именно эти протоколы обычно имеют в виду, когда говорят о протоколах сетевого уровня. Однако часто к сетевому уровню относят и другой

128

вид протоколов, называемых протоколами обмена маршрутной информацией: RIP, OSPF, а также протокол межсетевых управляющих сообщений ICMP.

Протокол RIP (Routing Information Protocol) – про-

токол маршрутной информации дистанционно-векторного типа [1], применяется для построения таблиц маршрутизации. В протоколах соседние маршрутизаторы обмениваются друг с другом информацией о маршрутах. В протоколе RIP обмен новыми сведениями между соседними маршрутизаторами происходит приблизительно через каждые 30 с, для чего используются так называемые от-

ветные RIP-сообщения (RIP response messages). Ответное

RIP-сообщение, посылаемое маршрутизатором или хостом, содержит список, в котором указаны до 25 сетейадресатов в пределах автономной системы, а также расстояния до каждой из этих сетей от отправителя. Ответные RIP-сообщения также иногда называют RIPобъявлениями.

Рассмотрим применение RIP-объявлений на простом примере. На рис. 1.38 показан фрагмент ИТКС, где линии, соединяющие маршрутизаторы, обозначают сети.

Для удобства будем рассматривать только несколько выделенных маршрутизаторов (А, В, С и D) и сетей (w, х, у и z). Пунктирные линии означают, что ИТКС не ограничивается помеченными маршрутизаторами и сетями, а распространяется дальше. Предположим теперь, что таблица продвижения данных маршрутизатора D выглядит так, как показано в табл. 1.10.

129

w

x

y

 

 

A

D

B

 

C

 

Рис. 1.38. Фрагмент ИТКС

Таблица 1.10 Таблица продвижения данных маршрутизатора D

до получения им объявления маршрутизатора A

Сеть адресат

Следующий маршру-

Количество хопов до

 

тизатор

адресата

w

A

2

y

B

2

z

B

7

x

-

1

В первом столбце таблицы указана сеть-адресат, во втором — идентификатор следующего маршрутизатора на кратчайшем пути к сети-адресату, в третьем — количество ретрансляционных участков (хопов) до сети-адресата на кратчайшем пути, то есть количество сетей, отделяющих отправителя от получателя, включая сеть-адресат.

Видно, что для отправки дейтаграммы от маршрутизатора D в сеть w дейтаграмму сначала нужно переправить соседнему маршрутизатору А. Кроме того, сеть-

130

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]