Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отвнты на экзамен по сети эвм.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1 Мб
Скачать
☆

29. Протокол tcp. Функции протокола. Алгоритм работы.

TCP (Протокол контроля передачи) обеспечивает сквозную доставку данных между прикладными процессами, запущенными на узлах, взаимодействующих по сети. Является надежным байт-ориентированный протоколом с установлением соединения. TCP находится на транспортном уровне стека TCP/IP, между протоколом IP и собственно приложением. На TCP возложены задачи гарантии доставки, целостности, порядка прибытия информации и готовности получателя к приему данных. При получении дейтаграммы, в поле Protocol которой указан код протокола TCP, модуль IP передает данные этой дейтаграммы модулю TCP. Эти данные представляют собой TCP-сегмент, содержащий TCP-заголовок и данные прикладного процесса. Модуль TCP анализирует служебную информацию заголовка, определяет, какому именно процессу предназначены данные пользователя, проверяет целостность и порядок прихода данных и подтверждает их прием другой стороне. По мере получения правильной последовательности неискаженных данных пользователя они передаются прикладному процессу.

Основные черты протокола TCP:

  • Установление соединения. Прежде чем данные будут переданы по сети, должно быть установлено виртуальное соединение между взаимодействующими приложениями;

  • Фрагментация и сборка. Протокол TCP может разбивать данные на сегменты определенной длины и, затем, выполнять их сборку;

  • Достоверность передачи. Протокол TCP использует механизмы контрольных сумм, передачи подтверждений, повторную передачу в случае ошибок;

  • Техника плавающего окна. Это повышает эффективность передачи за счет сокращения времени ожидания подтверждения.

Основные функции протокола TCP:

Базовая передача данных

Модуль TCP выполняет передачу непрерывных потоков данных между своими клиентами в обоих направлениях. Клиентами TCP являются прикладные процессы, вызывающие модуль TCP при необходимости получить или отправить данные процессу-клиенту на другом узле. Протокол TCP рассматривает данные клиента как непрерывный неинтерпретируемый поток октетов. TCP разделяет этот поток на части для пересылки на другой узел в TCP-сегментах некоторого размера. Для отправки или получения сегмента модуль TCP вызывает модуль IP. Немедленное отправление данных может быть затребовано процессом-клиентом от TCP-модуля с помощью специальной функции PUSH, иначе TCP сам будет решать, как накапливать и когда отправлять данные клиента или когда передавать клиенту полученные данные.

Обеспечение достоверности

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

Разделение каналов

Протокол TCP обеспечивает работу одновременно нескольких соединений. Каждый прикладной процесс идентифицируется номером порта. Заголовок TCP-сегмента содержит номера портов процесса-отправителя и процесса-получателя. При получении сегмента модуль TCP анализирует номер порта получателя и отправляет данные соответствующему прикладному процессу. Все распространенные сервисы Интернет имеют стандартизованные номера портов. Совокупность IP-адреса и номера порта называется сокетом. Сокет уникально идентифицирует прикладной процесс в Интернет.

Управление соединениями

Соединение - это совокупность информации о состоянии потока данных, включающая сокеты, номера посланных, принятых и подтвержденных октетов, размеры окон. Каждое соединение уникально идентифицируется в Интернет парой сокетов. Соединение характеризуется для клиента именем, которое является указателем на структуру TCB, содержащую информацию о соединении. Открытие соединения клиентом осуществляется вызовом функции OPEN, которой передается сокет, с которым требуется установить соединение. Функция возвращает имя соединения. Различают два типа открытия соединения: активное и пассивное. Закрытие соединения клиентом производится с помощью функции CLOSE, которой передается имя соединения. Процедура установления соединения происходит в три шага: В ходе установления связи оба узла выбирают случайным образом начальное число последовательности (ISN). Инициатор соединения посылает TCP-сегмент с установленным флагом SYN и начальным числом последовательности. Удаленный узел в ответ высылает подтверждение с установленными флагами АСК и SYN и своим начальным числом последовательности. Третьим шагом инициатор соединения высылает подтверждение с установленным флагом АСК.

Обмен данными В процессе обмена данными происходят следующие события:

  • Узел А посылает 50 байт данных.

  • Узел В посылает 100 байт данных и подтверждение получения 50 байт данных.

  • Узел А высылает подтверждение получения 100 байт данных и посылает 70 байт.

  • Узел В подтверждает получение 70 байт.

В процессе обмена данными узлы находятся в состоянии «ESTABLISHED»

Закрытие соединения При закрытии соединения происходит обмен сегментами с флагом FIN

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

Для ускорения и оптимизации процесса передачи больших объемов данных протокол TCP определяет метод управления потоком, называемый методом скользящего окна, который позволяет отправителю посылать очередной сегмент, не дожидаясь подтверждения о получении в пункте назначения предшествующего сегмента. Протокол TCP формирует подтверждения не для каждого конкретного успешно полученного пакета, а для всех данных от начала посылки до некоторого порядкового номера ACK SN исключительно. Вместе с посылкой отправителю ACK SN получатель объявляет также “размер окна”. Это значит, что отправитель может посылать данные с порядковыми номерами от текущего ACK SN до (ACK SN + размер окна -1), не дожидаясь подтверждения со стороны получателя. Размер окна может динамически изменяться получателем. Для временной остановки посылки данных достаточно объявить нулевое окно. Но даже и в этом случае через определенные промежутки времени будут отправляться сегменты с одним октетом данных. Это делается для того, чтобы отправитель гарантированно узнал о том, что получатель вновь объявил ненулевое окно, поскольку получатель обязан подтвердить получение "пробных" сегментов, а в этих подтверждениях он укажет также и текущий размер своего окна. Модуль TCP может оптимизировать максимальный размер сегмента исходя из значений MTU на разных участках маршрута и других характеристик соединения. Модуль TCP может использовать алгоритм "медленного старта", формируя при установлении соединения окно перегрузки, размер которого изначально равен размеру одного сегмента. Это окно показывает, сколько сегментов TCP-модуль может отправить без получения подтверждения. Скользящее окно показывает, какой объем неподтвержденных данных модулю разрешено отправить с точки зрения удаленного модуля, получателя его данных. После прихода подтверждения от получателя окно перегрузки увеличивается на 1 сегмент, и отправитель может выслать уже два сегмента, не дожидаясь подтверждения. Такой подход позволяет постепенно увеличивать нагрузку на сеть. Если окно перегрузки становится больше скользящего окна, объявляемого получателем, ограничение на передачу неподтвержденных данных устанавливает уже скользящее окно получателя. В случае, если никакие данные приложениями не передаются, а соединение открыто, модуль TCP может периодически посылать сегменты-зонды для выяснения того, не отключилась ли другая сторона без уведомления партнера. Такое зондирование проводится примерно каждые два часа неактивности.