TCP: Transmission Control Protocol
TCP предоставляет основанный на соединении надежный сервис потока байтов. Он применяется в тех случаях, когда требуется гарантированная доставка сообщений. Он использует контрольные суммы пакетов для проверки их целостности и освобождает прикладные процессы от необходимости таймаутов и повторных передач для обеспечения надежности. Термин "основанный на соединении" (connection-oriented) означает, что два приложения, использующие TCP (как правило, это клиент и сервер), должны установить TCP соединение друг с другом, после чего у них появляется возможность обмениваться данными. Всегда существуют две конечные точки, которые общаются друг с другом с помощью TCP соединения. TCP не занимается широковещательной и групповой рассылками. Данные, поступающие от приложения, разбиваются на блоки определенного размера, которые будут отправлены. Блок данных, который передается от TCP в IP, называется сегментом (segment). TCP обеспечивает свою надежность благодаря следующим характерным свойствам: Подтверждения: Когда TCP посылает сегмент, он ожидает, что с удаленного конца придет подтверждение на этот сегмент. Если подтверждение не получено по истечении определенного времени, сегмент передается повторно. Для обеспечения этой возможности каждый передаваемый сегмент получает при отправке уникальный номер. Контрольная сумма: Объект TCP осуществляет расчет контрольной суммы для своего заголовка сегмента и данных. Это контрольная сумма используется сторонами для обнаружения изменения данных в процессе передачи. Если сегмент прибывает с неверной контрольной суммой, объект TCP отбрасывает его и подтверждение не генерируется. Упорядочение: Так как TCP сегменты передаются в виде IP датаграмм, а IP датаграммы могут прибывать беспорядочно, также беспорядочно могут прибывать и TCP сегменты. После получения данных объект TCP может по необходимости изменить их последовательность, в результате приложение получает данные в правильном порядке.
Отбрасывание дублей: IP датаграмма может быть продублирована и не существует алгоритмов, полностью предотвращающих появление таких дублей. Принимающий объект TCP отбрасывает продублированные данные. Скользящее окно: TCP осуществляет контроль потока данных с использованием алгоритма скользящего окна, который подробнее будет рассмотрен ниже. Необходимость его использования обусловлена тем, что каждая сторона TCP соединения имеет определенное пространство буферной памяти и не может принимать данные в неограниченном объёме. TCP на принимающей стороне позволяет удаленной стороне посылать данные в таком объеме, чтобы получатель мог поместить их в буфер. Это предотвращает переполнение буферов медленных хостов быстрыми хостами. Кроме надежности, для транспортного протокола важным является оптимальное использование ресурсов сети. В TCP используются различные алгоритмы для достижения этой цели. TCP предоставляет для прикладного уровня полнодуплексный сервис. Это означает, что данные могут передаваться в каждом направлении независимо от другого направления. Между двумя приложениями по TCP соединению осуществляется обмен потоком байтов. TCP обеспечивает сервис потока байтов (byte stream service). Если приложение на одном конце записало сначала 10 байт, затем 20 байт и затем еще 50 байт, приложение на другом конце соединения не может сказать какого размера была каждая запись. На другом конце эти 80 байт могут быть считаны, например, за 4 раза по 20 байт за каждый раз. Один конец соединения помещает поток байт в TCP, и точно так же идентичный поток байт появляется на другом конце.
TCP не интерпретирует содержимое байтов.
Заголовок TCP Данные TCP инкапсулируются в IP датаграммы, как показано на рисунке:
Обычно размер TCP заголовка составляет 20 байт, если не присутствуют опции. Требования к размерам сегментов 1) Сегмент должен помещаться в поле данных IP-пакета размером до 64 кбайт 2) Сегмент должен помещаться в MTU сети На практике это обычно 1500 байт в соответствии с размером поля полезной нагрузки кадра Ethernet.
Общий вид заголовка следующий:
Номера порта источника и назначения точно также как и в UDP идентифицируют отправляющее и принимающее приложения. Эти два значения вместе с IP адресом источника и назначения в IP заголовке уникально идентифицируют каждое соединение. Номер последовательности (sequence number) является уникальным идентификатором сегмента данных и идентифицирует байт в потоке данных от отправляющего TCP к принимающему TCP (т.е. это не порядковый номер сегмента). При значении флага syn=1 в это поле прописывается код ISN (Initial Sequence Number; ниже мы познакомимся с ним при описании процедуры установления связи), выбираемый для конкретного соединения. Первому байту, передаваемому через созданное соединение, присваивается номер ISN+1. Значение ISN может задаваться случайным образом. Но в UNIX 4.4BSD при загрузке ОС ISN устанавливается равным 1 (это нарушает требования стандарта), а далее увеличивается на 640000 каждые полсекунды. Аналогичная инкрементация осуществляется при установлении нового соединения. В стандарте (RFC) рекомендуется увеличивать счетчик ISN на 1 каждые 4 микросекунды. Номер последовательности представляет собой 32-битное беззнаковое число, которое переходит через 0, по достижению значения 232 - 1. Отметим, что поскольку это число должно уникально идентифицировать сегмент данных, недопустима ситуация, при которой получателю попадают два разных сегмента с одинаковыми номерами. Именно поэтому для даного числа отведено целых 32 двоичных разряда. В то время, когда разрабатывался протокол типичная скорость выделенных линий между маршрутизаторами равнялась 56 Кбит/с. Даже при непрерывной передаче данных потребовалось бы больше недели на то, чтобы закончились порядковые номера и начался их циклический повтор. С точки зрения разработчиков TCP, 2 в степени 32 считалось неплохим приближением к бесконечности, поскольку вероятность блуждания пакетов по сети в течение недели практически равна нулю. В Ethernet со скоростью 10 Мбит/с критическое время снизилось с одной недели до 57 минут. При скорости 1 Гбит/с, порядковые номера закончатся примерно через 34 с, что уже вполне чревато появлением проблем.
Номер подтверждения это вовсе не последний полученный, как можно было бы подумать, а следующий ожидаемый байт. Длина заголовка выражается в 32-разрядных словах. Флаговые биты один или несколько из них могут быть установлены в единицу в одно и то же время. URG (Urgent pointer field is significant) у казатель срочности. Если этот флаг установлен, поле Указатель на срочные данные определяет смещение в байтах от текущего порядкового номера до последнего байта срочных данных. Срочные данные используются для управления при передаче данных интерактивных сессий (например, telnet) ACK (Acknowledgement field is significant) п ризнак передачи подтверждения на установление соединения или доставки сегмента. В этом случае интерпретируется содержимое поля номера подтверждения (номер подтверждения правилен). PSH (Push function) п олучатель должен передать эти данные приложению сразу по получении, не задерживая в буфере до его наполнения. RST (Reset the connection) с бросить соединение. Самый общий случай, при котором генерируется сброс (reset), это когда запрос о соединении прибывает и при этом не существует процесса с указанным портом назначения. SYN (Synchronize sequence numbers) п ризнак передачи синхронизирующего номера последовательности для установления соединения. Если этот бит установлен, а ACK=0, то сегмент является запросом на установление соединения. Если ACK=1, то сегмент является подтверждением. FIN (final) о тправитель заканчивает посылку данных.
Размера окна (window size) это количество байт, начинающееся с указанного в поле номера подтверждения, которое приложение собирается принять. Это 16-битовое поле ограничивает размер окна в 65535 байт. Значение поля Размер окна может быть равно нулю, что означает, что все байты вплоть до Номер подтверждения - 1 получены, но у получателя в данный момент заполнен буфер или какие-то еще проблемы и остальные байты он принять не может. Разрешение на дальнейшую передачу будет передано путем отправки сегмента с таким же значением поля Номер подтверждения и ненулевым значением поля Размер окна.
Контрольная сумма (checksum) вычисляется аналогично контрольной сумме UDP датаграммы с использованием аналогичного псевдозаголовка. Единственным отличием последнего является значение поля Протокол (6 вместо 17 для UDP). Это обязательное поле, которое должно быть рассчитано и сохранено отправителем, а затем проверено получателем. Несовпадение контрольной суммы служит основанием для отбрасывания сегмента. Указатель срочности (urgent pointer) действителен только в том случае, если установлен флаг URG. Этот указатель является положительным смещением, которое должно быть прибавлено к полю номера последовательности сегмента, чтобы получить номер последовательности последнего байта срочных данных. Режим срочности TCP это способ, с помощью которого отправитель передает срочные данные на удаленный конец. Опции н аиболее часто используемое поле опций - это опция максимального размера сегмента (MSS - maximum segment size). На каждом конце соединения эта опция обычно указывается в первом сегменте, с которого начинается обмен (сегмент с установленным флагом SYN, который используется для установления соединения). Она указывает на максимальный размер сегмента, который может быть принят отправителем. Если IP адрес назначения "не локальный", MSS обычно устанавливается по умолчанию – 536 байт. Другим вариантом опции может быть параметр Масштаб окна. Поскольку поле заголовка размер окна не может иметь значение более 65535 байт, а такой размер окна слишком мал для скоростных линий с большими задержками (например, спутниковые каналы), с введением этой опции появилась возможность увеличивать размер окна до 2 в 30 степени байт (примерно 1 Гбайт). Данные этот раздел в TCP сегменте необязателен. Когда устанавливается соединение или когда соединение разрывается, сегменты содержат только TCP заголовки с возможными опциями. Заголовок без данных также используется, чтобы подтвердить принятые данные, если в этом направлении не надо передавать данные. Также существует несколько случаев тайм-аутов, когда сегмент может быть отправлен без данных.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|