- •Инфокоммуникационные системы и сети
- •Введение
- •1. Применение информационных сетей
- •1.1. Сеть предприятия
- •1.2. Домашняя сеть
- •1.3. Всемирная паутина
- •1.4. Общение
- •1.5. Интерактивные развлечении
- •2. Классификация информационных сетей
- •2.1. По размеру сети
- •2.2. По типу топологии сети
- •2.3. По типу функционального взаимодействии Рис. 2.5. Топология дерево
- •2.4. По тину технологии передачи
- •2.5. По тину среды передачи
- •2.6. По скорости передачи
- •3. Эталонные модели сети
- •3.1. Протокол и стек протоколов
- •3.2. Эталонная модель osi
- •1. Физический уровень
- •2. Канальный уровень
- •3. Сетевой уровень
- •4. Транспортный уровень
- •5. Сеансовый уровень
- •6. Уровень представления
- •7. Прикладной уровень
- •3.3. Эталонная модель tcp/ip
- •3.4. Гибридная эталонная модель
- •4. Сетевые устройства
- •4.1. Сетевые карты
- •4.2. Пассивные сетевые устройства
- •4.3. Активные сетевые устройства
- •5. Линии и каналы связи
- •5.1. Кабельные линии связи
- •5.2. Беспроводные линии связи
- •6. Базовые сетевые технологии
- •6.1. Технология Ethernet
- •46-1500
- •62. Технология Token Ring
- •7. Адресация в информационных сетях
- •7.1. Мас-адрес
- •7.2. Ip-адрес
- •Ip-адрес:
- •7.3. Система доменных имен
- •It.Bstu.Ru
- •7.4. Протокол dhcp
- •8. Объединение сетей
- •8.1. Объединение сетей с помощью мостов
- •8.2. Объединение сетей с помощью маршрутизаторов
- •9. Транспортные протоколы тсряр
- •9.1. По pi ы
- •92. Протокол udp
- •9.3. Протокол tcp
- •10. Протоколы прикладного уровня тсрлр
- •10.1. Протокол ftp
- •10.2. Протокол http
- •11. Безопасность в информационных сетях
- •11.1. Классификации сетевых атак
- •11.2. Защита сетевого трафика
- •Заключение
- •Библиографический список
- •Инфокоммуникационные системы и сети
9.3. Протокол tcp
Основным отличием TCP от UDP является то, что протокол TCP обеспечивает надежную доставку сообщений. Протокол TCP решает задачу обеспечения надежного обмена данными между двумя узлами сети путем установления логического соединения. Благодаря этому TCP следит, чтобы передаваемые данные не были потеряны, небыли продублированы и пришли к получателю в том же порядке, в котором были отправлены.
Все TCP-соединения образуют полудуплексный канал связи. Широковещательная рассылка протоколом TCP не поддерживается.
ТСР-сегмент
Протокол TCP рассматривает данные, поступающие от протоколов прикладного уровня, как неструктурированный поток байтов. Перед передачей на сетевой или прикладной уровень данные помещаются в специальные буферы TCP. Для передачи па сетевой уровень формируется TCP-сегмент, который состоит из заголовка и данных из буфера. Размер сегментов определяется реализацией протокола TCP.
На рис. 9.3 представлен формат заголовка TCP-сегмента с указанием размеров его полей. Минимальный размер заголовок ТСР-сегмента составляет 20 байт [8].
Поля «Порт отправителя» и «Порт получателя» длиной 2 байт идентифицирует соответственно процесс-отправитель и процесс-получатель.
Рис. 9.3. Заголовок ТСР-cei мента
Поле «Порядковый номер» длиной 4 байта представляет собой номер байта, который определяет смещение сегмента в потоке отправляемых данных. Это поле используется получателем при восстановлении исходного потока данных из полученных сегментов.
Поле «Номер подтверждении» длиной 4 байта содержит номер байта, ожидаемого в следующем ожидаемом сегменте. Данное поле действительно только при установленном флаге АСК.
Поле «Длина заголовка» длиной 4 бита представляет собой длину заголовка TCP-сегмента, измеряемую в 32-битовых словах. Длина заголовка не фиксирована и может изменяться в зависимости от значений, устанавливаемых в поле «Параметры».
Неиспользуемое 6 битное поле. Оно зарезервировано для будущего использования, и на сегодняшний день его смысл еще не определен.
Поле «Флаги» длиной б бит содержит шесть 1-битных флагов, содержащих служебную информацию о типе данного сегмента:
URG - срочное сообщение;
АСК - подтверждение принятия сегмента;
PSH - флаг, с помощью которого отправитель просит получателя передать данные прикладному уровню сразу после получения сегмента, а не хранить их в буфере, пока тот не заполниться;
RST - используется для отказа от неверного сегмента или от попытки создать соединение;
SYN - используется для установления соединения;
FIN - используется для завершения соединения.
Поле «Размер окна» имеет длину 2 байта и используется получателем для передачи отправителю информации о том. какой объем данных он готов принять, начиная с байта, номер которого указан в поле «Номер подтверждения».
so
Поле «Контрольная сумма» длиной 2 байта предназначено для выявления ошибок. Оно содержит контрольную сумму заголовка ТСР-сегмента, данных и псевдозаголовка TCP-сегмента. Псевдозаголовок TCP-сегмента имеет аналогичную структуру, что и псевдозаголовок UDP-дейтаграммы. Но в поле «Протокол» псевдозаголовка ТСР-сегмента указывается значение равное 6, которое соответствует протоколу TCP.
Поле «Указатель на срочные данные» длиной 2 байта указывает на последний байт срочных данных в сегменте. Это поле используется совместно с флагом URG, которое устанавливается в единицу, если какие-то данные нужно срочно переслать вне очереди. Если флаг не установлен, поле не используется.
Поле «Параметры» имеет переменную длину, состоит минимум из одного байта и определяет параметры сегмента. С помощью одного из таких параметров каждый получатель может установить максимальный размер сегмента (Maximum Segment Size, MSS), который он может принять. При отсутствии параметров поле состоит из 1 байта и содержит 0, как признак конца списка параметров.
Поле «Дополнение» имеет переменную длину. Это поле заполняется нулями и обеспечивает выравнивание заголовка до размера кратному 4 байтам.
Процесс установления ТСР-соединения
В TCP определены два способа установления соединения: активный и пассивный. В первом случае одна сторона (клиент) отправляет другой стороне (серверу) TCP-сегмент с запросом на соединение. Пассивный способ означает, что одна сторона (сервер) предпочитает принять входящий запрос на соединение от другой стороны (клиента), нежели пытаться инициировать соединение самостоятельно. Установление TCP-соединения представляет собой процесс, изображенный на рис. 9.4.
Чтобы установить соединение, сервер пассивно ожидает входящего соединения.
Клиент посылает TCP-сегмент и ждет ответа. Этот сегмент содержит стартовый порядковый помер этой стороны, номер порта назначения, максимальный размера сегмента, а также в нем установлен флаг SYN и сброшен флаг АСК.
Когда TCP-сегмент прибывает в пункт назначения, сервер проверяет, есть ли какой-нибудь процесс, который прослушивает то же порт, что содержится в поле «Порт получателя».
Если такого процесса нет, он отвечает отправкой TCP-сегмента с установленным флагом RST для отката соединения.
Рис. 9.4. Установление TCP-соединения
Если такой процесс найден, то входящий сегмент передается этому процессу. Если процесс принимает соединение, он отсылает в ответ TCP-сегмент, в котором укатывает свой стартовый порядковый номер и максимальный размер сегмента. Кроме того, в ответном сегменте устанавливаются флаги SYN и АСК.
Когда этот сегмент прибывает в пункт назначения, клиент, подтверждая его получение, отправляя в ответ TCP-сегмент, в котором установлен флаг АСК. Данный сегмент, завершает процесс установления ТСР-соединения.
Процесс завершения ТСР-соединения
Чтобы завершить TCP-соединение, любая из сторон может послать TCP-сегмент с установленным флагом FIN. Когда этот сегмент получает подтверждение, это направление передачи закрывается. Тем не менее, данные могут продолжать передаваться неопределенное время в противоположном направлении. Соединение завершается, когда оба направления передачи закрываются. Обычно дтя завершения ТСР-соединения требуется четыре сегмента (рис. 9.5, а): по одному с флагом FIN и по одному с флагом АСК в каждом направлении. Иногда первый флаг АСК и второй флаг FIN могут включаться в один сегмент, что уменьшит количество сегментов до трех (рис. 9.5, б).
Если ответ на посланный FIN-сегмент не приходит в течении двух максимальных интервалов времени жизни сегмента, отправитель FIN-сегмента завершает соединение. Другая сторона в конце концов заметит, что ей никто не отвечает, и также завершит соединение.
а б
Рис. 9.5. В процессе завершения ТСР-соединения могут использоваться четыре сегмента (а) или три сегмента (б)
Состоянии ТСР-соединения
Каждое TCP-соединение проходит несколько состояний, перечисленных в таблице 9.1. Новое TCP-соединение начинается в состоянии CLOSED.
Таблица 9.1. Состояния ТСР-соединения
Состояние |
Описание |
CLOSED |
Соединение не установлено |
LISTEN |
Сервер ожидает входящего запроса на соединение |
SYN SENT |
Клиент отослал запрос на соединение и ожидает подтверждения соединения |
SYN RCVD |
Сервер получил запрос на соединение, отправил подтверждение соединения и ожидает подтверждения |
Передача данных в TCP
Окончание табл. 9.1
ESTABLISHED |
Соединение установлено |
FIN WAIT 1 |
Клиент сообщил о завершении соединения, отправив FIN-сегмент, и ожидает подтверждения |
FIN WAIT 2 |
Клиент получил подтверждение о завершении соединения |
CLOSE WAIT |
Сервер получил FIN-сегмент, отправил подтверждение и FIN-сегмент для закрытия соединения со своей стороны |
LAST ASK |
Сервер ожидает подтверждение завершения соединения |
TIMED WAIT |
Клиент, прежде чем завершить соединение, ожидает, пока в сети не исчезнут все сешенты для данного соединения |
CLOSING |
Клиент в ответ на FIN-сегмент получил от сервера FIN-сегмент. Это значит, что обе стороны пытаются одновременно закрыть соединение |
Для надежной передачи данных в TCP используются следующие механизмы. Во-первых, отправитель включает в TCP-сегмент контрольную сумму содержащихся в нем данных. Это позволяет получателю убедиться, что переданные данные не были повреждены в процессе транспортировки. Во-вторых, в TCP имеется механизм подтверждения и повторной передачи, который гарантирует, что каждый сегмент будет доставлен.
В-третьих, в TCP используется механизм скользящего окна, который гарантирует, что даже если сегменты прибывают в пункт назначения не в том порядке, в котором были отправлены, то получатель сможет собрать из них исходное сообщение. Для этого каждому байту присваивается порядковый номер. Разумеется, TCP не передает порядковый номер вместе с каждым байтом. Вместо этого, в заголовке каждого сегмента хранится порядковый номер первого байта, а порядковые номера остальных байтов можно вычислить. На каждом конце TCP-соединения поддерживается окно приема, представляющее собой диапазон порядковых номеров байтов. Например, на рис. 9.6 окно приема обведено пунктиром. Наименьшее значение соответствует левой границе окна - это порядковый номер следующего ожидаемого байта. Наибольшее значение соответствует правой границе окна - это порядковый номер последнего байта, для которого у TCP есть место в буфере.
Помимо окна приема, на каждом конце TCP соединения поддерживается окно передачи, разделенное на две части. В одной из них расположены байты, которые уже отправлены, но не подтверждены, а в другой - байты, которые еще не отправлены. На рис. 9.7 можно видеть окно передачи после пересылки байтов 4-8, но до подтверждения, а также байты 9-11 могут быть посланы, не дожидаясь подтверждения от получателя.
Рис. 9.6. Окно приема TCP
Окно приема
|
1 | |||||||||||||||||
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
К) |
11 ! 12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
|
1 |
Окно передачи
|
|
< | ||||||||||||||||||
0 |
1 |
2 |
3 ! |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
п: 12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | ||
|
|
|
Отправлены Могут быть отправлены
Рис. 9.7. Окно передачи TCP
Рассмотрим подробнее процесс передачи данных по протоколу TCP. После отправки TCP-сегмента отправитель помечает в окне передачи байты, переданные в этом сегмента, как отправленные, но не подтвержденные, и начинает отсчет тайм-аута регрансмиссин (Retransmission Timeout. RTO).
Когда получатель принимает TCP-cei мент, все байты, порядковые номера которых оказываются вне окна приема, отбрасываются. Это касается как уже принятых ранее байтов (с порядковыми номерами левее окна приема), так и байтов, для которых нет места в буфере (с порядковыми номерами правее окна приема). Если порядковый номер первого байта в сегменте больше порядковый номера следующего ожидаемого байта, значит, сегмент прибыл не по порядку. В большинстве реализаций TCP такой сегмент помещается в очередь и находится в ней, пока не придут пропущенные байты. Если же порядковый номер первого байта в сегменте совпадает со следующим ожидаемым, то данные становятся доступными процессу-получателя. В этом случае окно приема сдвигается вправо на число байтов в принятом сегменте. Наконец, как показано на рис. 9.8, а получатель посылает отправителю сегмент с подтверждением, содержащий порядковый номер следующего ожидаемого байта.
Рис.
9.8.
Процесс
передачи данных: а
- без
ошибок; б
-
при возникновении ошибки