Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Транспортный уровень OSI.docx
Скачиваний:
34
Добавлен:
09.02.2015
Размер:
227.9 Кб
Скачать
    1. Установление соединения

Поскольку TCP является протоколом, ориентированным на предварительное соединение (connection-oriented), сначала необходимо установить сессию между приложениями конечных устройств. Узел-отправитель инициализирует соединение, которое должно быть подтверждено узлом-получателем. Программное обеспечениепротокола TCPобменивается сообщениями через сеть, чтобы проверить, что передача разрешена и что обе стороны готовы к ней.

Соединение между двумя устройствами производится в три этапа (см. рис. 1).

Во-первых, узел-отправитель инициализирует установление связи, посылая узлу-получателю запроса синхронизацииSYN(1).

Рис. 2. Установление соединения

Во-вторых, узел-получатель подтверждает запрос синхронизации и задает свои параметры синхронизацииACK(2).

В-третьих, узлу-получателю посылается подтверждение, что обе стороны готовы к тому, чтобы соединение было установлено (3).

Такой механизм получил название трехэтапного установления связи (Three-way handshake). Оба узла должны согласовать начальные номера последовательности передаваемых частей информации, что происходит через обмен сегментами синхронизации (SYN) и подтверждения (ACK).

Синхронизация требует, чтобы каждая сторона послала собственный начальныйномер последовательностии получила подтверждение от другой стороны. Каждая сторона, получив начальныйномер последовательностиот другой стороны, отвечает подтверждениемACK. Например, последовательность, соответствующая рис.1, будет следующей:

Узел-отправитель (A) инициализирует соединение, посылая сегментSYNузлу-получателю (B), в котором указывает номер своей последовательностиSequence Number, например SECА= 101.

Получив сегмент инициализации соединения, узел B делает запись принятогономера последовательности101 и формирует ответ в видеACKВ= 101 + 1 = 102. ОтветACKВ= 102 означает, что хост B получил сегмент данных, включая байт с номером 101, и ожидает следующий байт с номером 102. Одновременно хост B формирует начальный номер своей последовательности данных, например SECВ= 51.

Узел A, получив сегмент от B со значениямиACKВ= 102, SECВ= 51, формирует ответACKА= 52, SECА= 102, который завершает процесс соединения.

    1. Передача данных

Сегменты данных нужно представить пользователю-получателю в том же порядке, в котором они были переданы. Сбой происходит, если какие-то сегменты данных потеряны, повреждены или получены в неверном порядке. Поэтому получатель должен подтвердить получение каждого сегмента. Однако если бы отправитель ждал ответACKпосле посылки каждого сегмента, то производительность сети была бы низкой. Поэтому надежный, ориентированный на предварительное соединение протокол, например TCP, позволяет послать несколько сегментов прежде, чем отправитель получит подтверждениеACK.

Размер скользящего окна (Window)заголовка сегмента TCP (рис. 2) определяет, сколько байт данных передается в одной порции неподтвержденных данных. Последовательность сегментов передаваемых данных представляет собой последовательность байт. Поэтому и размер окна в заголовке сегмента задается в количестве передаваемых байт. Узел-получатель передает отправителю подтверждениеACK, когда примет указанное в окне количество байт данных.

На рис. 3 приведен пример, когда размер окна составляет 3000 байт, а каждый передаваемый сегмент содержит 1500 байт, что соответствует максимальному размеру кадра Ethernet Уровня 2.

Рис. 3. Процесс передачи байт данных

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

Если какой-то сегмент в процессе передачи был потерян, например, из-за перегрузки сети, то узел-получатель в ответе укажет начальный номер потерянного сегмента (рис. 4), чтобы этот сегмент был передан повторно. При этом размер окна может быть уменьшен до 1500 байт, т. е. до размера одного передаваемого сегмента.

Перегрузкабуферов данныхможет произойти по следующим причинам:

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

Несколько узлов одновременно посылают сообщения одному узлу-получателю.

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

Рис. 4. Перегрузка в процессе передачи байт данных

Когда получатель вновь сможет обрабатывать дополнительные данные, он посылает индикатор "готов". Если этот индикатор получен, отправитель может продолжить передачу.

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