Принципы надежной передачи данных
Проблема надежной передачи данных является одной из центральных для компьютерных сетей и проявляется не только на транспортном уровне, но и на сетевом и прикладном уровнях.
Механизмы, обеспечивающие надежную передачу данных:
1) Контрольная сумма. Обнаружение искажений битов в памяти.
2) Таймер. Отсчет интервала ожидания и указание на его истечении (означает, что с высокой степенью вероятности пакет или его квитанция потеряны при передаче) в случае, если пакет доставляется с задержкой, но не теряется (преждевременное истечение времени ожидания), либо происходит потеря квитанции, повторная передача приводит к дублированию пакета на принимающей стороне.
3) Порядковые номера. Последовательная нумерация пакетов, посылаемых передающей стороной. «Пробелы» в номерах получаемых пакетов позволяют сделать заключение о потерях данных. Одинаковые порядковые номера пакетов означают, что пакеты дублируют друг друга.
4) Положительные квитанции (подтверждение). Генерируются принимающей стороной и указывает передающей стороне на то, что соответствующий пакет или группа пакетов успешно приняты. Обычно подтверждение содержит порядковые номера успешно принятых пакетов. В зависимости от протоколов различаются индивидуальные и групповые подтверждения.
5) Отрицательная квитанция. Генерируется принимающей стороной и указывает передающей стороне на то, что соответствующий пакет не был успешно принят. Обычно отрицательная квитанция содержит порядковый номер пакета, при передаче которого произошли ошибки.
6) Окно, конвейер. Ограничивают диапазон порядковых номеров, которые могут использоваться для передачи пакетов. Групповая передача и квитирование позволяют значительно увеличить пропускную способность протоколов по сравнению с режимом ожидания подтверждений. Размер окна может быть рассчитан на основе возможностей приема и буферизации принимающей стороны, а также уровня загрузки сети.
Протокол TCP.
Протокол TCP осуществляет передачу с установлением логического соединения, т.к. перед началом обмена данными 2 процесса осуществляют «рукопожатие» - процедуру, заключающуюся в передаче друг другу специальных сегментов, предназначенных для определения параметров обмена данными. Частью процедуры установления TCP-соединения является инициализация переменных состояния, связанных с TCP-соединением.
TCP-соединение выполняется на оконечных системах, и не выполняется на промежуточных сетевых устройствах (маршрутизаторах, мостах), которые не поддерживают его.
TCP-соединение обеспечивает дуплексную передачу данных (на 2 хостах 2 процесс А и В, могут данные одновременно передавать). Также называют точка-точка, т.е. соединении между единственными приемником и передатчиком.
Процесс установления TCP-соединения: Клиент - инициатор соединения. Сервер - процесс, с которым устанавливается соединение. Клиентский процесс сообщает транспортному уровню своего хоста о том, что необходимо установить соединение с серверным процессом. Затем транспортный уровень клиента начинает установление соединения с транспортным уровнем сервера (клиент посылает серверу спец TCP-сегмент, сервер отвечает, и клиент снова посылает). Т.к. обмен сегментами входит в процедуру установления соединения, её часто называют тройным рукопожатием. После того, как TCP-соединение установлено, прикладные процессы могут начинать обмен данными.
Передача данных: Клиент направляет поток своих данных в сокет, через который данные попадают в протокол TCP, выполняющийся на стороне клиента, TCP направляет эти данные в буфер передачи - один из буферов, создаваемых при выполнении тройного рукопожатия. Время от времени TCP извлекает данные из буфера передачи. Максимальный объем данных, который может быть извлечен из буфера и помещен в сегмент ограничивается максимальным размером сегмента (MMS) (зависит от реализации протокола). Протокол добавляет к каждому фрагменту заголовок, формируя TCP-сегмент, которые передаются сетевому уровню, где заключаются в IP-дейтаграммы. Дейтаграммы пересылаются по сети и принимаются получателем. Когда сегмент оказывается на транспортном уровне, протокол TCP помещает данные сегмента в приемный буфер, затем приложение считывает поток данных из буфера. Приемный и предающий буферы имеются на обеих сторонах соединения.
Структура TCP-сегмента: состоит из полей данных и нескольких полей заголовка. поде данных содержит фрагменты, передаваемые между процессами.
32 бита | |||
Номер порта отправителя | Номер порта получателя | ||
Порядковый номер | |||
Номер подтверждения | |||
Длина Заголовка | Не Используется | Флаги | Окно получателя |
Контрольная сумма | Указатель срочных данных | ||
Параметры | |||
Данные | |||