77809

Протокол надежной доставки сообщений - TC

Реферат

Коммуникация, связь, радиоэлектроника и цифровые приборы

В данной курсовой работе рассматривался протокол надежного соединения –- TCP. Рассматривались следующие вопросы: Сегменты TCP Порты и установление TCP соединений Концепция квитирования Реализация скользящего окна в протоколе TCP...

Русский

2015-02-05

1.09 MB

2 чел.

Московский государственный институт электроники и математики

Кафедра ИКТ

КУРСОВАЯ РАБОТА ПО ТЕМЕ

“Протокол надежной доставки сообщений - TCP”

по дисциплине

“Организация построения объединенных сетей”

Выполнил: студент группы № С-84

Савельев А. Л.

Проверил: преподаватель

Мартиросян С. Т.

Москва 2008


Аннотация

В данной курсовой работе рассматривался протокол надежного соединения – TCP.

Рассматривались следующие вопросы:

- Сегменты TCP

- Порты и установление TCP соединений

- Концепция квитирования

- Реализация скользящего окна в протоколе TCP

- Выбор тайм-аута

- Формат сообщений TCP


Содержание

[1]
Содержание

[2] Введение

[3]
Основная часть

[3.0.1] Сегменты TCP

[3.0.2] Порты и установление TCP-соединений

[3.0.3] Концепция квитирования

[3.0.4] Реализация скользящего окна в протоколе TCP

[3.0.5] Выбор тайм-аута

[3.0.6] Реакция на перегрузку сети

[3.0.7] Формат сообщений TCP

[3.0.8] Заключение

[3.0.9] Список использованной литературы


Введение

Протокол TCP (transmission control protocol), в отличии от UDP, осуществляет доставку дейтаграмм, называемых сегментами, в виде байтовых потоков с установлением соединения. Протокол TCP применяется в тех случаях, когда требуется гарантированная доставка сообщений. Он использует контрольные суммы пакетов для проверки их целостности и освобождает прикладные процессы от необходимости таймаутов и повторных передач для обеспечения надежности.

Чтобы обеспечить такой сервис, основываясь на менее надежных коммуникациях Internet, система должна иметь возможности для работы в следующих областях:

  •  базовая передача данных
  •  достоверность
  •  управление потоком
  •  разделение каналов
  •  работа с соединениями

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

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

Иногда пользователям бывает необходимо убедиться в том, что все данные, переданные ими протоколу TCP, уже отправлены. Для этой цели определена функция проталкивания (push). Чтобы убедиться в том, что данные, отправленные протоколу TCP, действительно переданы, отправитель указывает, что их следует протолкнуть к получателю.

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

Достоверность

Протокол TCP должен иметь защиту от разрушения данных, потери, дублирования и нарушения очередности получения, вызываемых коммуникационной системой Internet. Это достигается присвоением очередного номера каждому передаваемому октету, а также требованием подтверждения (ACK) от программы TCP, принимающей данные. Если подтверждения не получено в течении контрольного интервала времени, то данные посылаются повторно. Со стороны получателя номера очереди используются для восстановления очередности сегментов, которые могут быть получены в неправильном порядке, а также для ограничения возможности появления дубликатов.

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

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

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

Протокол TCP дает средства получателю управлять количеством данных, посылаемых ему отправителем. Это достигается возвратом так называемого "окна" (window) вместе с каждым подтверждением, которое указывает диапазон приемлемых номеров, следующих за номером последнего успешно принятого сегмента. Окно определяет количество октетов, которое отправитель может послать до получения дальнейших указаний.

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

Чтобы позволить на отдельно взятом компьютере многим процессам одновременно использовать коммуникационные возможности уровня TCP, протокол TCP предоставляет на каждом хост-компьютере набор адресов или портов. Вместе с адресами сетей и хост-компьютеров на коммуникационном уровне Internet они образуют сокет (socket - разъем).

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

Соотнесение портов и процессов осуществляется каждым хост- компьютером самостоятельно. Однако оказывается полезным связывать часто используемые процессы (такие как "logger" или сервис с разделением времени) с фиксированными документированными сокетами.

Этот сервис можно впоследствии использовать через известные адреса. Установка и настройка адресов портов для других процессов может включать более динамичные механизмы.

Работа с соединениями

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

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

Поскольку соединения должны устанавливаться между ненадежными хост-компьютерами и через ненадежную коммуникационную систему Internet, то во избежание ошибочной инициализации соединений используется механизм подтверждения связи с хронометрированными номерами очереди.


Основная часть

Сегменты TCP

Единицей данных протокола TCP является сегмент. Информация, поступающая к протоколу TCP в рамках логического соединения от протоколов более высокого уровня, рассматривается протоколом TCP как неструктурированный поток байт. Поступающие данные буферизуются средствами TCP. Для передачи на сетевой уровень из буфера "вырезается" некоторая непрерывная часть данных, называемая сегментом.

В протоколе TCP предусмотрен случай, когда приложение обращается с запросом о срочной передаче данных (бит PSH в запросе установлен в 1). В этом случае протокол TCP, не ожидая заполнения буфера до уровня размера сегмента, немедленно передает указанные данные в сеть. О таких данных говорят, что они передаются вне потока - out of band.

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

Аналогичные проблемы решаются и на сетевом уровне. Для того, чтобы избежать фрагментации, должен быть выбран соответствующий максимальный размер IP-пакета. Однако при этом должны быть приняты во внимание максимальные размеры поля данных кадров (MTU) всех протоколов канального уровня, используемых в сети. Максимальный размер сегмента не должен превышать минимальное значение на множестве всех MTU составной сети.

Порты и установление TCP-соединений

В протоколе TCP также, как и в UDP, для связи с прикладными процессами используются порты. Номера портам присваиваются аналогичным образом: имеются стандартные, зарезервированные номера (например, номер 21 закреплен за сервисом FTP, 23 - за telnet и т. д.), а менее известные приложения пользуются произвольно выбранными локальными номерами.

Однако в протоколе TCP порты используются несколько иным способом. Для организации надежной передачи данных предусматривается установление логического соединения между двумя прикладными процессами. В рамках соединения осуществляется обязательное подтверждение правильности приема для всех переданных сообщений, и при необходимости выполняется повторная передача. Соединение в TCP позволяет вести передачу данных одновременно в обе стороны, то есть полнодуплексную передачу.

Соединение в протоколе TCP идентифицируется парой полных адресов обоих взаимодействующих процессов (оконечных точек). Адрес каждой из оконечных точек включает IP-адрес (номер сети и номер компьютера) и номер порта. Одна оконечная точка может участвовать в нескольких соединениях.

Установление соединения выполняется в следующей последовательности:

  1.  Сервер должен быть подготовлен для того, чтобы принять входящее соединение. Обычно это делается вызовом функций socket(), bind(), listen() и accept() и называется пассивным открытием (passive open).
  2.  Клиент выполняет активное открытие (aсtive open), вызывая функцию connect(). Это заставляет клиента TCP послать сегмент SYN (синхронизация), чтобы сообщить серверу, начальный порядковый номер данных, которые клиент будет посылать по соединению. Обычно сегментом SYN не посылаются никакие данные: он содержит заголовок IP, заголовок TCP и, возможно, параметры TCP. Параметры могут быть такими:

- MSS (maximum segment size) позволяет отправляющему узлу сообщать размер сегмента – максимальное количество данных, которое он будет принимать на данном соединении.

- Параметр масштабирования окна (window scale option)

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

Для такого обмена нужно как минимум 3 пакета, поэтому он называется трехэтапным рукопожатием.

Завершение соединения выполняется в следующей последовательности:

  1.  Одно из приложений первым вызывает функцию close(). В этом случае конечная точка TCP выполняет активное закрытие (active close). TCP этого узла отправляет сегмент FIN, обозначающий прекращение передачи данных.
  2.  Другой узел, получающий сегмент FIN, выполняет пассивное закрытие (passive close). Полученный сегмент FIN подтверждается TCP. Получение сегмента FIN также передается приложению как признак конца файла (после любых данных, которые уже стоят в очереди, ожидая приема приложением), поскольку получение приложением сегмента FIN означает, что оно уже не получит никаких дополнительных данных по этому соединению.
  3.  Через некоторое время после того как приложение получило признак конца файла, оно вызывает функцию close() для закрытия своего сокета. При этом TCP отправляет сегмент FIN.
  4.  TCP системы, получающей окончательный сегмент FIN (т.е. того узла, на котором произошло активное закрытие), подтверждает получение сегмента FIN.

Пример полного сеанса связи можно проиллюстрировать следующим рисунком:

Концепция квитирования

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

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

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

Метод с простоями требует, чтобы источник, пославший кадр, ожидал получения квитанции (положительной или отрицательной) от приемника и только после этого посылал следующий кадр (или повторял искаженный). Из рисунка 6.1 видно, что в этом случае производительность обмена данными существенно снижается - хотя передатчик и мог бы послать следующий кадр сразу же после отправки предыдущего, он обязан ждать прихода квитанции. Снижение производительности для этого метода коррекции особенно заметно на низкоскоростных каналах связи, то есть в территориальных сетях.

Рис. 6.1. Метод подтверждения корректности передачи кадров с простоем источника

Во втором методе для повышения коэффициента использования линии источнику разрешается передать некоторое количество кадров в непрерывном режиме, то есть в максимально возможном для источника темпе, без получения на эти кадры ответных квитанций. Количество кадров, которые разрешается передавать таким образом, называется размером окна. Рисунок 6.2 иллюстрирует данный метод для размера окна в W кадров. Обычно кадры при обмене нумеруются циклически, от 1 до W. При отправке кадра с номером 1 источнику разрешается передать еще W-1 кадров до получения квитанции на кадр 1. Если же за это время квитанция на кадр 1 так и не пришла, то процесс передачи приостанавливается, и по истечению некоторого тайм-аута кадр 1 считается утерянным (или квитанция на него утеряна) и он передается снова.

Рис. 6.2. Метод "окна" - непрерывная отправка пакетов

Если же поток квитанций поступает более-менее регулярно, в пределах допуска в W кадров, то скорость обмена достигает максимально возможной величины для данного канала и принятого протокола.

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

Реализация скользящего окна в протоколе TCP

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

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

В качестве квитанции получатель сегмента отсылает ответное сообщение (сегмент), в которое помещает число, на единицу превышающее максимальный номер байта в полученном сегменте. Если размер окна равен W, а последняя квитанция содержала значение N, то отправитель может посылать новые сегменты до тех пор, пока в очередной сегмент не попадет байт с номером N+W. Этот сегмент выходит за рамки окна, и передачу в таком случае необходимо приостановить до прихода следующей квитанции.

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

Выбор тайм-аута

Когда протокол TCP передает в сеть сегмент, он “на всякий случай” помещает его копию в очередь повторной передачи и запускает таймер. Когда приходит квитанция на этот сегмент, соответствующая копия удаляется из очереди.

Выбор времени ожидания (тайм-аута) очередной квитанции является важной задачей, результат решения которой влияет на производительность протокола TCP.

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

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

Реакция на перегрузку сети

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

При переполнении приемного буфера конечного узла "перегруженный" протокол TCP, отправляя квитанцию, помещает в нее новый, уменьшенный размер окна. Если он совсем отказывается от приема, то в квитанции указывается окно нулевого размера. Однако даже после этого приложение может послать сообщение на отказавшийся от приема порт. Для этого, сообщение должно сопровождаться пометкой "срочно" (бит URG в запросе установлен в 1). В такой ситуации порт обязан принять сегмент, даже если для этого придется вытеснить из буфера уже находящиеся там данные.

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

Другим проявлением перегрузки сети является переполнение буферов в маршрутизаторах. В таких случаях они могут централизовано изменить размер окна, посылая управляющие сообщения некоторым конечным узлам, что позволяет им дифференцировано управлять интенсивностью потока данных в разных частях сети.

Формат сообщений TCP

Сообщения протокола TCP называются сегментами и состоят из заголовка и блока данных. Заголовок сегмента имеет следующие поля:

  •  Порт источника (SOURS PORT) занимает 2 байта, идентифицирует процесс-отправитель;
  •  Порт назначения (DESTINATION PORT) занимает 2 байта, идентифицирует процесс-получатель;
  •  Последовательный номер (SEQUENCE NUMBER) занимает 4 байта, указывает номер байта, который определяет смещение сегмента относительно потока отправляемых данных;
  •  Подтвержденный номер (ACKNOWLEDGEMENT NUMBER) занимает 4 байта, содержит максимальный номер байта в полученном сегменте, увеличенный на единицу; именно это значение используется в качестве квитанции;
  •  Длина заголовка (HLEN) занимает 4 бита, указывает длину заголовка сегмента TCP, измеренную в 32-битовых словах. Длина заголовка не фиксирована и может изменяться в зависимости от значений, устанавливаемых в поле Опции;
  •  Резерв (RESERVED) занимает 6 битов, поле зарезервировано для последующего использования;
  •  Кодовые биты (CODE BITS) занимают 6 битов, содержат служебную информацию о типе данного сегмента, задаваемую установкой в единицу соответствующих бит этого поля:
  •  URG - срочное сообщение;
  •  ACK - квитанция на принятый сегмент;
  •  PSH - запрос на отправку сообщения без ожидания заполнения буфера;
  •  RST - запрос на восстановление соединения;
  •  SYN - сообщение используемое для синхронизации счетчиков переданных данных при установлении соединения;
  •  FIN - признак достижения передающей стороной последнего байта в потоке передаваемых данных.
  •  Окно (WINDOW) занимает 2 байта, содержит объявляемое значение размера окна в байтах;
  •  Контрольная сумма (CHECKSUM) занимает 2 байта, рассчитывается по сегменту;
  •  Указатель срочности (URGENT POINTER) занимает 2 байта, используется совместно с кодовым битом URG, указывает на конец данных, которые необходимо срочно принять, несмотря на переполнение буфера;
  •  Опции (OPTIONS) - это поле имеет переменную длину и может вообще отсутствовать, максимальная величина поля 3 байта; используется для решения вспомогательных задач, например, при выборе максимального размера сегмента;
  •  Заполнитель (PADDING) может иметь переменную длину, представляет собой фиктивное поле, используемое для доведения размера заголовка до целого числа 32-битовых слов.

Формат TCP заголовка:

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

Source Port

Destination Port

Sequence Number

Acknowledgment Number

Data
Offset


Reserved

U
R
G

A
C
K

P
S
H

P
S
T

S
Y
N

F
I
N


Window

Checksum

Urgent Pointer

Options

Padding

Data

Заключение

Протокол TCP имеет как преимущества, так и недостатки по сравнению с протоколом ненадежной доставки сообщений UDP.

Преимуществом протокола TCP является механизм надежной доставки сообщений, чего не предусмотрено в протоколе UDP.

Недостатком протокола TCP является его относительно низкая скорость передачи данных по сравнению с протоколом UDP, что объясняется наличием того же механизма надежной доставки сообщений.

Список использованной литературы

  1.  В. Г Олифер, Н. А. Олифер: Компьютерные сети.
  2.  У. Р. Стивенс, Б. Феннер, Э. М. Рудофф: UNIX. Разработка сетевых приложений.


 

А также другие работы, которые могут Вас заинтересовать

17803. Міжнародна торгівля 1.42 MB
  Міжнародна торгівля Місце міжнародної торгівлі в МЕВ. Світовий ринок товарів і послуг та особливості його розвитку в сучасних умовах. Показники масштабів структури динаміки й результативності міжнародної торгівлі. Еволюція теорій міжнародної торгівлі. Вид
17804. МІЖНАРОДНІ ІНВЕСТИЦІЇ 565.5 KB
  Причини і суть міжнародного руху капіталу. Форми іноземних інвестицій. Транснаціональні корпорації та їх роль в сучасному розвитку міжнародних економічних відносин. Стан та проблеми іноземного інвестування в Україні.
17805. МІЖНАРОДНИЙ КРЕДИТ 170 KB
  Тема 4. МІЖНАРОДНИЙ КРЕДИТ Міжнародний кредит та його роль в міжнародних економічних відносинах. Форми та види міжнародного кредиту. Світовий фінансовий ринок. Міжнародні валютнофінансові організації. Проблема заборгованості та можливі шляхи її розв’язання. 1. М...
17806. МІЖНАРОДНА МІГРАЦІЯ РОБОЧОЇ СИЛИ 336 KB
  Тема 5. Міжнародна міграція робочої сили Міграція населення і міграція робочої сили. Суть і чинники міжнародної міграції робочої сили. Види міжнародної міграції робочої сили. Види міжнародної міграції: кінцева тимчасова сезонна маятникова добровільна примусова ро...
17807. СВІТОВА ВАЛЮТНА СИСТЕМА 381.5 KB
  ТЕМА 6. СВІТОВА ВАЛЮТНА СИСТЕМА Структура сучасної валютної системи. Національна міжнароднарегіональна та світова валютна система. Основні елементи національної валютної системи. Основні елементи світової валютної системи. Поняття валюти та її види. Конвертовані
17808. МІЖНАРОДНІ РОЗРАХУНКИ І ПЛАТІЖНИЙ БАЛАНС 232 KB
  TЕМА 7. Міжнародні розрахунки і платіжний баланс Поняття міжнародних розрахунків. Форми міжнародних розрахунків та їх порівняльна характеристика. Платіжний баланс його структура і методологія складання. Платіжний баланс України стан структура динаміка. Міжна
17809. МІЖНАРОДНА ЕКОНОМІЧНА ІНТЕГРАЦІЯ 666 KB
  Тема 8. міжнародна економічна інтеграція Поняття та основні риси міжнародної економічної інтеграції та глобалізації. Передумови й умови її становлення як якісно нового рівня МЕВ. Форми міжнародної інтеграції. Сучасні особливості процесів міжнародної економічної інте
17810. ГЛОБАЛІЗАЦІЯ ТА ЕКОНОМІЧНИЙ РОЗВИТОК 239 KB
  Тема 9. ГЛОБАЛІЗАЦІЯ ТА ЕКОНОМІЧНИЙ РОЗВИТОК Сутність глобалізації. Причини та основні ознаки глобалізації. Суперечливість глобалізаційного процесу. Фінансова глобалізація. Світові фінансові кризи. Глобальні проблеми та шляхи їх вирішення. Демографічний вибух та по...
17811. СУТЬ ТА ФУНКЦІЇ ГРОШЕЙ 82.5 KB
  ЛЕКЦІЇ ПО ДИСЦИПЛІНІ ГРОШІ ТА КРЕДИТ ТЕМА 1. СУТЬ ТА ФУНКЦІЇ ГРОШЕЙ ПЛАН 1.1. Раціоналістична та еволюційна концепції походження грошей. 1.2. Визначення поняття суті грошей. 1.3. Форми грошей причини та механізм їх еволюції. 1.4. Вартість грошей. 1.5. Функції гро