Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 1-13_310608.doc
Скачиваний:
66
Добавлен:
15.09.2019
Размер:
39.63 Mб
Скачать

Сегмент тср

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

В ТСР допускается размер сегмента до 65535 байт (или длиннее - суперграммы в IPv6), но обычно он гораздо меньше. Протокол Ethernet способен работать только с 1500 байт в поле данных пакета Ethernet (Ethernet v2.0), 1496 байт – для IEEE 802.3 (при использовании IEEE 802.2). Протокол FDDI может обрабатывать максимум 4472 байта данных в пакете, а размер пакета Token Ring варьируется в зависимости от скорости. Для 4 Мбит/с максимальный размер равен 4472 байта, а для 16 Мбит/с – 17800 байт, но обычно принимается значение 4472 байта. Чтобы согласовать размер сегмента, ТСР указывает в одном из полей опций (MSS), расположенных в заголовке ТСР, максимальный размер сегмента, который он может принять, и посылает этот пакет удаленной станции.

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

Так как соединение между станциями А и В теперь имеется (после его успешного трехэтапного установления), ТСР должен управлять им. Первый из методов управления – порядковые номера.

Порядковые номера и подтверждения

Подтверждения не просто задают датаграмму или сегмент ТСР. Задача ТСР – восстановить информацию, переданную отправителем. Следовательно, подтверждение на самом деле определяет позицию в потоке передаваемых данных, так как IP не ориентирован на соединение, и не исключено, что при повторных передачах размер окна окажется отличным от первоначального. Получатель собирает информацию и восстанавливает точную копию передаваемых данных.

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

Снова обратимся к рисунку в разделе «Детали ТСР». ТСР вычисляет порядковый номер каждого байта данных, рассматривая их как единое целое. Для любого следующего байта данных, который необходимо передать, порядковый номер увеличивается на 1. Допустим, между станциями А и В установлено соединение (см. рисунок). Станция А посылает сегмент с порядковым значением 40 станции В. Она знает, что сегмент содержит 4 байта, и поэтому увеличивает свой порядковый номер до 44.

После получения от станции В подтверждения (содержащего номер 44) станция А отправляет станции В второй сегмент, в который входит 7 байт. Порядковый номер станции А увеличивается до 51, и станция А ждет подтверждения от станции В. Стоит заметить, что станция А не обязана ждать этого подтверждения.

В каждом окне передачи будет столько байтов, сколько указано целевым узлом. Порядковый номер устанавливается номером первого байта посылаемой датаграммы – последний полученный в подтверждении от целевого узла номер. Сегмент ТСР (данные) затем передается IP для доставки по сети.

Могут быть отосланы несколько датаграмм при одном подтверждении всех полученных полностью верных сегментов. Это называется включающим или кумулятивным подтверждением. ТСР реализует эту операцию на обеих сторонах соединения. В каждой передаваемой датаграмме будет установлен бит подтверждения в заголовке ТСР. А если бит подтверждения установлен, то ТСР прочитает поле подтверждения для определения номера следующего байта сегмента, который ждут на втором конце соединения. Другими словами, значение в поле подтверждения равно порядковому номеру переданного ранее сегмента плюс количество байтов, успешно принятых в этом сегменте, плюс 1. Номер подтверждения встроен в датаграмму, чтобы сделать ТСР более эффективным. Обычно в сети не используются отдельные датаграммы для подтверждений. Все приходящие байты данных, указанные в поле подтверждения, не требуют персонального подтверждения, считаются хорошими и принимаются получателем.

Поскольку ТСР – это байтовый транспортный протокол, порядковая нумерация и подтверждения для каждого байта данных ТСР должны обеспечивать целостность данных и успешную доставку до цели. ТСР высылает подтверждения для байтов данных ТСР, а не для пакетов, датаграмм или сегментов.

Пример использования порядковых номеров и подтверждений

Как видно из рисунка, соединение было установлено с применением начальных порядковых номеров отправителя и получателя (целевой станции). Каждая сторона поддерживает свой собственный порядковый номер, который находится в диапазоне от 0 до 2147483647. На обеих сторонах соединения ТСР известно о верхнем и нижнем пределах порядковых значений, и по достижении предела сразу осуществляется переход обратно к нулевому значению (каждая сторона знает о нулевом значении). Начальные порядковые номера выбираются случайно. Обе стороны должны подтвердить получение датаграмм друг от друга.

Номер подтверждения = порядковый номер + количество хороших байтов, прочитанных из сегмента + 1

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

Пакеты подтверждений – не обязательно отдельные пакеты, содержащие только номер подтверждения. Это было бы неэффективно. Например, если станция А открывает соединение со станцией В и эти станции передают данные друг другу, то датаграмма подтверждения может быть объединена с ответным пакетом данных. Другими словами, одна передаваемая датаграмма содержит три блока информации: данные от станции В для станции А, подтверждение от станции В о данных, переданных ранее станцией А, и порядковый номер для данных, которые станция В посылает станции А.

Если отправитель не получит в течение заданного времени подтверждения, он повторно вышлет данные, начиная с первого неподтвержденного байта. ТСР прекратит попытки после определенного количества безуспешных передач. Повторная передача датаграммы осуществляется с помощью алгоритма «назад к N». Любое количество переданных байт может оказаться неподтвержденным. Когда целевая станция подтверждает прием последовательности байтов, отправитель смотрит на номер подтверждения. Все порядковые номера до номера подтверждения считаются успешно принятыми (номер подтверждения исключается). Например, станция-отправитель начинает с порядкового номера 3, а затем посылает две датаграммы, содержащие по100 байт сегмента ТСР каждая. Получив подтверждение от целевой станции, равное 203 (от 3 до 102, затем от 102 до 202; номер подтверждения 203 – следующий ожидаемый байт), она будет знать, что данные обеих отправленных ранее датаграмм считаются успешно принятыми.