Какая функция обеспечивается протоколом TCP

Содержание

Транспортный уровень. Протоколы TCP, UDP

Какая функция обеспечивается протоколом TCP

Транспортный уровень. Протоколы TCP, UDP

1.     Функции и услуги транспортного уровня.

2.     Концепция портов. Мультиплексирование и демультиплексирование.

3.     Протокол TCP

3.1.      Формат TCP-пакета.

3.2.      Сессии TCP (алгоритм установления связи).

3.3.      Передача пакетов TCP, параметры передачи, MTU (Maximum Transmission Unit). Надёжная доставка. Алгоритм скользящего окна. Процедура «медленный старт».

4.     Протокол UDP;

4.1.      Формат UDP-пакета.

4.2.      Псевдозаголовок, используемый при расчете контрольной суммы.

1.    Функции и услуги транспортного уровня.

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

При этом неважно, какие данные передаются, откуда и куда, то есть он предоставляет сам механизм передачи.

Блоки данных он разделяет на фрагменты, размер которых зависит от протокола, короткие объединяет в один, а длинные разбивает. Протоколы этого уровня предназначены для взаимодействия типа точка-точка.

Транспортным уровнем предоставляются следующие виды услуг:

  • установление транспортного соединения;
  • передача данных;
  • разрыв транспортного соединения.

Функции, выполняемые транспортным уровнем:

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

3.    Протокол TCP

Каждый байт в ТСР соединении имеет 32 разрядный номер. Поэтому даже в сети на 10Мб/сек потребуется не менее часа, чтобы исчерпать все номера. Этиномера используются для всех пакетов на соединении: уведомления, данные, управление окнами.

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

Первый — длина сегмента не должна превышать максимальную длину IP пакета — 65К байт. Второй — каждая сеть имеет максимальную единицу передачи MTU и каждый сегмент должен помещаться в MTU.

В противном случае маршрутизаторам придется применять фрагментацию.

Основным протоколом, используемым ТСР агентом является протокол скользящего окна. Это значит, что каждый посланный сегмент должен быть подтвержден. Одновременно с отправление сегмента взводится таймер.

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

Если таймер исчерпается прежде чем придет подтверждение, то сегмент посылается повторно.

Несмотря на кажущуюся простоту, ТСР протокол достаточно сложен и должен решать следующие основные проблемы:

  • восстанавливать порядок сегментов;
  • убирать дубликаты сегментов, в каком бы виде (фрагментация) они не поступали;
  • определять разумную задержку для time out для подтверждений в получении сегмента;
  • устанавливать и разрывать соединения надежно;
  • управлять потоком;
  • управлять перегрузками.

3.1. Формат TCP-пакета

Протокол управления передачей TCP (Transmission Control Protocol) является обязательным стандартом TCP/IP, который описан в документе RFC 793 «Transmission Control Protocol (TCP)» и предоставляет надежную службу доставки пакетов, ориентированную на установление соединения. Протокол TCP:

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

TCP основан на связи «точка-точка» между двумя узлами сети. TCP получает данные от программ и обрабатывает их как поток байтов. Байты группируются в сегменты, которым TCP присваивает последовательные номера, необходимые для правильной сборки сегментов на узле-приемнике.

Чтобы два узла TCP могли обмениваться данными, им нужно сначала установить сеанс связи друг с другом.

Сеанс TCP инициализируется с помощью процесса, называемого трехэтапным установлением связи.

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

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

TCP-сегменты инкапсулируются и передаются в IP-датаграммах, как показано на следующем рисунке.

Формат TCP-пакета

Формат TCP-пакета
Бит 0 — 3 4 — 9 10 — 15 16 — 31
Порт источника Порт назначения
32 Номер последовательности
64 Номер подтверждения
96 Смещение данных Зарезервировано Флаги Окно
128 Контрольная сумма Указатель важности
160 Опции (необязательное)
160/192+   Данные

Порт источника

Порт источника идентифицирует порт, с которого отправлен пакет.

Порт назначения

Порт назначения идентифицирует порт, на который отправлен пакет

Номер последовательности

Номер последовательности выполняет две задачи:

  1. Если установлен флаг SYN, то это начальное значение номера последовательности и первый байт данных — это номер последовательности плюс 1.
  2. В противном случае, если SYN не установлен, первый байт данных — номер последовательности

Номер подтверждения

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

Смещение данных

Это поле определяет размер заголовка пакета TCP в 32-битных словах. Минимальный размер составляет 5 слов, а максимальный — 15, что составляет 20 и 60 байт соответственно. Смещение считается от начала заголовка TCP.

Зарезервировано

6 бит зарезервированы для будущего использования и должны устанавливаться в ноль.

Флаги (управляющие биты)

Это поле содержит 6 битовых флагов:

  • URG — Поле Указатель важности значимо (англ. Urgent pointer field is significant)
  • ACK — Поле Номер подтверждения значимо (англ. Acknowledgement field is significant)
  • PSH — (англ. Push function)
  • RST — Обрыв соединения (англ. Reset the connection)
  • SYN — Синхронизация номеров последовательности (англ. Synchronize sequence numbers)
  • FIN (англ. final, бит) — флаг, будучи установлен, указывает на завершение соединения (англ. FIN bit used for connection termination).

Контрольная сумма

Поле контрольной суммы — это 16-битное дополненение суммы всех 16-битных слов заголовка и текста.

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

Биты заполнения (0) не передаются в сегменте и служат только для расчета контрольной суммы. При расчете контрольной суммы значение самого поля контрольной суммы принимается равным 0.

Указатель важности

Указатель важности

16-битовое значение положительного смещения от порядкового номера в данном сегменте. Это поле указывает порядковый номер октета, с которого начинаются важные (urgent) данные. Поле принимается во внимание только для пакетов с установленным флагом U.

3.2. Сессии TCP (алгоритм установления связи)

Установление ТСР соединения происходит по протоколу трехкратного рукопожатия. Флаги SYN и ASK в заголовке сегмента используются для обозначения CONNECTION REQUEST и CONNECTION ACCEPED. Флаг RST используется для обозначения REJECT.

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

Таймер для последовательных номеров сегментов тактируется с частотой 4 (сек, а максимальное время жизни ракета — 120 сек.

ТСР соединение как уже говорилось дуплексное, т.е. в каждом направлении данные передаются независимо и соединение разрывается независимо.

Если в очередном сегменте флаг FIN = 1, то в этом направлении данных больше не будет При получении подтверждения для этого сегмента соединение в этом направлении считается разорванным. В другом направлении передача может продолжаться сколь угодно долго.

Если подтверждения на первый FIN нет, то попытки продолжаются до трех раз, после чего соединение считается разорванным.

На рисунках ниже представлена процедура установления и разрыва соединения в виде диаграммы конечного автомата.

3.3. Передача пакетов TCP, параметры передачи, MTU (Maximum Transmission Unit). Надёжная доставка. Алгоритм скользящего окна. Процедура «медленный старт»

Управление окнами в ТСР не связано прямо с поступлением подтверждений. На риунке показан случай взаимодействия для буфера в 4096 байт.

Когда поле WIN=0 отправитель может послать сегмент в двух случаях. Первый — если это URGENT данные. Второй, однобайтовый сегмент, чтобы заставить получателя показать текущее состояние буфера. Это очень важно так, как позволяет обойти тупик.

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

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

Читайте также  Почему компьютер подвисает на несколько секунд

4.1. Формат UDP-пакета.

Протокол датаграмм пользователя UDP (User Datagram Protocol) является стандартом TCP/IP, описанным в документе RFC 768 «User Datagram Protocol (UDP)». UDP используется некоторыми программами вместо TCP для быстрой, простой, но ненадежной передачи данных между узлами TCP/IP.

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

Узел-источник, которому требуется надежная связь, должен использовать либо протокол TCP, либо программу, которая сама обеспечивает подтверждения и следит за правильностью порядка датаграмм.

UDP-сообщения инкапсулируются и передаются в IP-датаграммах, как показано на следующем рисунке.

Internet поддерживает также транспортный протокол без соединений — UDP (User Data Protocol). Этот протокол инкапсулирует сегменты в виде дейтаграмм и шлет их через сеть. Структура UDP сегмента показана на рисунке

4.2. Псевдозаголовок, используемый при расчете контрольной суммы

Когда модуль UDP получает датаграмму от модуля IP, он проверяет контрольную сумму, содержащуюся в ее заголовке.

Если контрольная сумма равна нулю, то это означает, что отправитель датаграммы ее не подсчитывал, и, следовательно, ее нужно игнорировать.

Если два модуля UDP взаимодействуют только через одну сеть Ethernet, то от контрольного суммирования можно отказаться, так как средства Ethernet обеспечивают достаточную степень надежности обнаружения ошибок передачи.

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

Если контрольная сумма правильная (или равна нулю), то проверяется порт назначения, указанный в заголовке датаграммы.

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

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

 

Источник: http://nknaromanova.narod.ru/tcp.htm

Руководство по TCP/IP для начинающих

CodeNet / Веб программирование / Протоколы и стандарты

Джефф Просис
PC Magazine, November 19, 1996, p. 223

Большинство из нас знает TCP/IP как «клей», связующий Internet. Но не многие способны дать убедительное описание того, что этот протокол представляет собой и как работает. Итак, что же такое TCP/IP в действительности?

TCP/IP — это средство для обмена информацией между компьютерами, объединенными в сеть. Не имеет значения, составляют ли они часть одной и той же сети или подключены к отдельным сетям. Не играет роли и то, что один из них может быть компьютером Cray, а другой Macintosh.

TCP/IP — это не зависящий от платформы стандарт, который перекидывает мосты через пропасть, лежащую между разнородными компьютерами, операционными системами и сетями.

Это протокол, который глобально управляет Internet, и в значительной мере благодаря сети TCP/IP завоевал свою популярность.

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

Основы TCP/IP

TCP/IP — это аббревиатура термина Transmission Control Protocol/Internet Protocol (Протокол управления передачей/Протокол Internet). В терминологии вычислительных сетей протокол — это заранее согласованный стандарт, который позволяет двум компьютерам обмениваться данными.

Фактически TCP/IP не один протокол, а несколько. Именно поэтому вы часто слышите, как его называют набором, или комплектом протоколов, среди которых TCP и IP — два основных.

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

Обычно в нем также имеются такие высокоуровневые прикладные программы, как FTP (File Transfer Protocol, Протокол передачи файлов), которые дают возможность через командную строку управлять обменом файлами по Сети.

TCP/IP — зародился в результате исследований, профинансированных Управлением перспективных научно-исследовательских разработок (Advanced Research Project Agency, ARPA) правительства США в 1970-х годах.

Этот протокол был разработан с тем, чтобы вычислительные сети исследовательских центров во всем мире могли быть объединены в форме виртуальной «сети сетей» (internetwork).

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

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

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

В интрасети, работающей на основе TCP/IP, информация передается в виде дискретных блоков, называемых IP-пакетами (IP packets) или IP-дейтаграммами (IP datagrams). Благодаря программному обеспечению TCP/IP все компьютеры, подключенные к вычислительной сети, становятся «близкими родственниками».

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

Точно так же, как подключения к сети Ethernet распознаются по 48-разрядным идентификаторам Ethernet, подключения к интрасети идентифицируются 32-разрядными IP-адресами, которые мы выражаем в форме десятичных чисел, разделенных точками (например, 128.10.2.3). Взяв IP-адрес удаленного компьютера, компьютер в интрасети или в Internet может отправить данные на него, как будто они составляют часть одной и той же физической сети.

TCP/IP дает решение проблемы данными между двумя компьютерами, подключенными к одной и той же интрасети, но принадлежащими различным физическим сетям. Решение состоит из нескольких частей, причем каждый член семейства протоколов TCP/IP вносит свою лепту в общее дело.

IP — самый фундаментальный протокол из комплекта TCP/IP — передает IP-дейтаграммы по интрасети и выполняет важную функцию, называемую маршрутизацией, по сути дела это выбор маршрута, по которому дейтаграмма будет следовать из пункта А в пункт B, и использование маршрутизаторов для «прыжков» между сетями.

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

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

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

FTP и telnet — это два примера популярных прикладных программ TCP/IP, которые опираются на использование TCP.

Другой важный член комплекта TCP/IP — User Datagram Protocol (UDP, протокол пользовательских дейтаграмм), который похож на TCP, но более примитивен.

TCP — «надежный» протокол, потому что он обеспечивает проверку на наличие ошибок и обмен подтверждающими сообщениями чтобы данные достигали своего места назначения заведомо без искажений.

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

Но UDP по-прежнему занимает свое место в мире TCP/IP, и испльзуется во многих программах. Прикладная программа SNMP (Simple Network Management Protocol, простой протокол управления сетями), реализуемый во многих воплощениях TCP/IP, — это один из примеров программ UDP.

Другие TCP/IP протоколы играют менее заметные, но в равной степени важные роли в работе сетей TCP/IP.

Например, протокол определения адресов (Address Resolution Protocol, ARP) ппреобразует IP-адреса в физические сетевые адреса, такие, как идентификаторы Ethernet.

Родственный протокол — протокол обратного преобразования адресов (Reverse Address Resolution Protocol, RARP) — выполняет обеспечивает обратное действие, преобразуя физические сетевые адреса в IP-адреса.

Протокол управления сообщениями Internet (Internet Control Message Protocol, ICMP) представляет собой протокол сопровождения, который использует IP для обмена управляющей информацией и контроля над ошибками, относящимися к передаче пакетов IP. Например, если маршрутизатор не может передать IP-дейтаграмму, он использует ICMP, с тем чтобы информировать отправителя, что возникла проблема. Краткое описание некоторых других протоколов, которые «прячутся под зонтиком» TCP/IP, приведено во врезке.

ARP (Address Resolution Protocol, протокол определения адресов): конвертирует 32-разрядные IP-адреса в физические адреса вычислительной сети, например, в 48-разрядные адреса Ethernet.

FTP (File Transfer Protocol, протокол передачи файлов): позволяет передавать файлы с одного компьютера на другой с использованием TCP-соединений. В родственном ему, но менее распространенном протоколе передачи файлов — Trivial File Transfer Protocol (TFTP) — для пересылки файлов применяется UDP, а не TCP.

ICMP (Internet Control Message Protocol, протокол управляющих сообщений Internet): позволяет IP-маршрутизаторам посылать сообщения об ошибках и управляющую информацию другим IP-маршрутизаторам и главным компьютерам сети. ICMP-сообщения «путешествуют» в виде полей данных IP-дейтаграмм и обязательно должны реализовываться во всех вариантах IP.

IGMP (Internet Group Management Protocol, протокол управления группами Internet): позволяет IP-дейтаграммам распространяться в циркулярном режиме (multicast) среди компьютеров, которые принадлежат к соответствующим группам.

IP (Internet Protocol, протокол Internet): низкоуровневый протокол, который направляет пакеты данных по отдельным сетям, связанным вместе с помощью маршрутизаторов для формирования Internet или интрасети. Данные «путешествуют» в форме пакетов, называемых IP-дейтаграммами.

RARP (Reverse Address Resolution Protocol, протокол обратного преобразования адресов): преобразует физические сетевые адреса в IP-адреса.

SMTP (Simple Mail Transfer Protocol, простой протокол обмена электронной почтой): определяет формат сообщений, которые SMTP-клиент, работающий на одном компьютере, может использовать для пересылки электронной почты на SMTP-сервер, запущенный на другом компьютере.

TCP (Transmission Control Protocol, протокол управления передачей): протокол ориентирован на работу с подключениями и передает данные в виде потоков байтов.

Данные пересылаются пакетами — TCP-сегментами, — которые состоят из заголовков TCP и данных.

Читайте также  Почему нагревается ноутбук что делать

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

UDP (User Datagram Protocol, протокол пользовательских дейтаграмм): протокол, не зависящий от подключений, который передает данные пакетами, называемыми UDP-дейтаграммами. UDP — «ненадежный» протокол, поскольку отправитель не получает информацию, показывающую, была ли в действительности принята дейтаграмма. 

Архитектура TCP/IP

Проектировщики вычислительных сетей часто используют семиуровневую модель ISO/OSI (International Standards Organization/Open Systems Interconnect, Международная организация по стандартизации/ Взаимодействие открытых систем), которая описывает архитектуру сетей. Каждый уровень в этой модели соответствует одному уровню функциональных возможностей сети. В самом основании располагается физический уровень, представляющий физическую среду, по которой «путешествуют» данные, — другими словами, кабельную систему вычислительной сети. Над ним имеется канальный уровень, или уровень звена данных, функционирование которого обеспечивается сетевыми интерфейсными платами. На самом верху размещается уровень прикладных программ, где работают программы, использующие служебные функции сетей.

На рисунке показано, как TCP/IP согласуется с моделью ISO/OSI. Этот рисунок также иллюстрирует уровневое строение TCP/IP и показывает взаимосвязи между основными протоколами.

При переносе блока данных из сетевой прикладной программы в плату сетевого адаптера он последовательно проходит через ряд модулей TCP/IP.

При этом на каждом шаге он доукомплектовывается информацией, необходимой для эквивалентного модуля TCP/IP на другом конце цепочки.

К тому моменту, когда данные попадают в сетевую плату, они представляют собой стандартный кадр Ethernet, если предположить, что сеть основана именно на этом интерфейсе.

Программное обеспечение TCP/IP на приемном конце воссоздает исходные данные для принимающей программы путем захвата кадра Ethernet и прохождения его в обратном порядке по набору модулей TCP/IP. (Один из наилучших способов разобраться во внутреннем устройстве TCP/IP стоит в использовании программы-«шпиона», чтобы найти внутри кадров, «пролетающих» по сети, информацию, добавленную различными модулями TCP/IP.)

              ISO/OSI                        TCP/IP     _____________________________      __________________________    | Уровень прикладных программ |    |                          |    |_____________________________|    |  _________    _________  |     _____________________________     | |Сетевая  |  |Сетевая  | | Уровень    |    Уровень представления    |    | |программа|  |программа| | прикладных    |_____________________________|    | |_________|  |_________| | программ     _____________________________     |                          |    |       Уровень сеанса        |    |                          |    |_____________________________|    |__________________________|                                             |             |     _____________________________      _____|_____________|______    |    Транспортный уровень     |    |    TCP           UDP     | Транспортный    |_____________________________|    |_____|_____________|______| уровень                                             |             |     _____________________________      _____|_____________|______    |       Сетевой уровень       |    |     |             |      | Сетевой    |_____________________________|    |      —-> IP

Источник: http://www.codenet.ru/webmast/tcpip

Протокол TCP

Подробности 01 Ноябрь 2014 26296

1 1 1 1 1 1 1 1 1 1 4.07 [7 Голоса (ов)]

Задача транспортного уровня — это передача данных между различными приложениями, выполняемых на всех узлах сети.

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

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

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

Transmission Control Protocol

Transmission Control Protocol (TCP) (протокол управления передачей) — является обязательным протоколом стандарт TCP/IP, определенный в стандарте RFC 793, «Transmission Control Protocol (TCP)».

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

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

TCP обеспечивает свою надежность благодаря следующему:

  • Данные от приложения разбиваются на блоки определенного размера, которые будут отправлены.
  • Когда TCP посылает сегмент, он устанавливает таймер, ожидая, что с удаленного конца придет подтверждение на этот сегмент. Если подтверждение не получено по истечении времени, сегмент передается повторно.
  • Когда TCP принимает данные от удаленной стороны соединения, он отправляет подтверждение. Это подтверждение не отправляется немедленно, а обычно задерживается на доли секунды
  • TCP осуществляет расчет контрольной суммы для своего заголовка и данных. Это контрольная сумма, рассчитываемая на концах соединения, целью которой является выявить любое изменение данных в процессе передачи. Если сегмент прибывает с неверной контрольной суммой, TCP отбрасывает его и подтверждение не генерируется. (Ожидается, что отправитель отработает тайм-аут и осуществит повторную передачу.)
  • Так как TCP сегменты передаются в виде IP датаграмм, а IP датаграммы могут прибывать беспорядочно, также беспорядочно могут прибывать и TCP сегменты. После получения данных TCP может по необходимости изменить их последовательность, в результате приложение получает данные в правильном порядке.
  • Так как IP датаграмма может быть продублирована, принимающий TCP должен отбрасывать продублированные данные.
  • TCP осуществляет контроль потока данных. Каждая сторона TCP соединения имеет определенное пространство буфера. TCP на принимающей стороне позволяет удаленной стороне посылать данные только в том случае, если получатель может поместить их в буфер. Это предотвращает от переполнения буферов медленных хостов быстрыми хостами.

Заголовок TCP

  • Порядковый номер выполняет две задачи:
    • Если установлен флаг SYN, то это начальное значение номера последовательности — ISN (Initial Sequence Number), и первый байт данных, которые будут переданы в следующем пакете, будет иметь номер последовательности, равный ISN + 1.
    • В противном случае, если SYN не установлен, первый байт данных, передаваемый в данном пакете, имеет этот номер последовательности.
  • Номер подтверждения — если установлен флаг ACK, то это поле содержит номер последовательности, ожидаемый получателем в следующий раз.

    Помечает этот сегмент как подтверждение получения.

  • Длина заголовка — задается словами по 32бита.
  • Размер окна — количество байт, которые готов принять получатель без подтверждения.
  • Контрольная сумма — включает псевдо заголовок, заголовок и данные.

  • Указатель срочности — указывает последний байт срочных данных, на которые надо немедленно реагировать.
  • URG — флаг срочности, включает поле «Указатель срочности», если =0 то поле игнорируется.
  • ACK — флаг подтверждение, включает поле «Номер подтверждения, если =0 то поле игнорируется.

  • PSH — флаг требует выполнения операции push, модуль TCP должен срочно передать пакет программе.
  • RST — флаг прерывания соединения, используется для отказа в соединении
  • SYN — флаг синхронизация порядковых номеров, используется при установлении соединения.

  • FIN — флаг окончание передачи со стороны отправителя

 Рассмотрим структуру  заголовка TCP с помощью сетевого анализатора Wireshark:

TCP порты

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

Номер порта — это условное 16-битное число от 1 до 65535, указывающее, какой программе предназначается пакет.

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

 В то время как порт UDP работает как одиночная очередь сообщений и как точка входа для UDP-соединения, окончательной точкой входа для всех соединений TCP является уникальное соединение.

Каждое соединение TCP однозначно идентифицируется двумя точками входа.

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

Все номера портов TCP, которые меньше чем 1024 — зарезервированы и зарегистрированы в Internet Assigned Numbers Authority (IANA).

Номера портов UDP и TCP не пересекаются.

TCP программы используют зарезервированные или хорошо известные номера портов, как показано на следующем рисунке.

Установление соединения TCP

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

Перед началом передачи каких-либо данных, согласно протоколу TCP, стороны должны установить соединение. Соединение устанавливается в три этапа (процесс «трёхкратного рукопожатия» TCP).

  • Запрашивающая сторона (которая, как правило, называется клиент) отправляет SYN сегмент, указывая номер порта сервера, к которому клиент хочет подсоединиться, и исходный номер последовательности клиента (ISN).
  • Сервер отвечает своим сегментом SYN, содержащим исходный номер последовательности сервера. Сервер также подтверждает приход SYN клиента с использованием ACK (ISN + 1). На SYN используется один номер последовательности.
  • Клиент должен подтвердить приход SYN от сервера своим сегментов SYN, содержащий исходный номер последовательности клиента (ISN+1) и с использованием ACK (ISN+1). Бит SYN установлен в 0, так как соединение установлено.

После установления соединения TCP, эти два хоста могут передавать данные друг другу, так как TCP-соединение является полнодуплексным, они могут передавать данные одновременно. 

Вас также могут заинтересовать:

Источник: http://just-networks.ru/seti-tcp-ip/protokol-tcp

Transmission Control Protocol (TCP)

Как упоминалось в самом начале, на транспортном уровне присутствуют два протокола — TCP и UDP. TCP используется для гарантированной передачи данных, в то время как UDP используется для передачи потоковых данных.

Функции TCP

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

Использование портов

TCP и UDP используют порты, которые в свою очередь, делятся на зарезервированные порты и динамические:

  • с 1 по 1023 — зарезервированные порты (well-known ports, общеизвестные или системные, пример в таблице 5.1);
  • с 1024 по 49151 — зарезервированные порты (пользовательские);
  • с 49152 по 65535 — динамически распределяемые порты.

Таблица 5.1 Список зарезервированных портов

Номер порта Протокол Транспортного Уровня Протокол Уровня Приложений
20,21 TCP FTP
22 TCP SSH
23 TCP Telnet
53 TCP,UDP DNS
67,68 UDP DHCP
69 UDP TFTP
80 TCP HTTP
443 TCP HTTPS

Что бы лучше понять, что такое порты и как их «едят», разберем пример соединений с использованием портов.

Наверно, самое часто используемое приложение — браузер. Часто мы открываем несколько «вкладок» с одним и тем же сайтом, и у каждой вкладки должно быть отличие, по которому компьютер сможет определить какой вкладке предназначены приходящие данные.

Рисунок 5.1 Передача данных с использованием портов

Компьютер Андрея запросил с веб-сервера три веб-страницы (открыл три «вкладки» в браузере). На рисунке 5.

1, Веб-сервер отправляет пакеты с одинаковыми заголовками (в заголовках одинаковые IP адреса), но заголовки сегментов различаются ( обратите внимание на порт отправителя (S_PORT) и порт получателя (D_PORT)).

Изначально компьютер Андрея привязал к каждому соединению определенный порт, который был определен случайным образом из динамически распределяемого диапазона (от 1023 до 65535), а обратился он на зарезервированный порт 80 (HTTP).

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

Рисунок 5.2 Схематичное представление соединений На заметку. TCP и UDP могут устанавливать соединения с одинаковыми номерами портов, но при этом они будут считаться разными соединениями, так например, порт UDP 69 и порт TCP 69 — это два различных соединения.

Сегментация

Сегментация — разбивание данных на сегменты.

Прежде чем данные будут переданы по сети они должны быть разбиты на сегменты, обычно не превышающие 1460 байт.

Например, вы хотите передать видео файл размером 200Кбайт. не будет передаваться одним целым файлом, оно будет разбито на сегменты, после чего по сети будут передаваться около 137 сегментов (200 000/1460~137).

Установление соединений

Устанавливаются соединения в 3 сообщения, рисунок 5.3.

Рисунок 5.3 Установка соединения TCP

  1. TCP устанавливает порт для приложения (для клиента, чаще всего, он находится случайным образом из диапазона от 1023 до 65535, в нашем примере, Source PORT 61734), определяет порт получателя/сервера (Destination PORT 80), случайно выставляет номер сегмента ( SEQuence 300, каждый передаваемый сегмент имеет порядковый номер) и устанавливает параметр SYN (SYNchronization — этот параметр означает инициализацию соединения) в одно из полей заголовка сегмента (напомню, что в каждом заголовке много разных полей — настроек, с помощью которых осуществляется одноуровневое взаимодействие). Такой сегмент приходит на сервер, который просматривает все, что приходит на 80-й порт.
  2. Сервер формирует ответный сегмент, где он так же указывает порты отправителя и получателя. Но на этом шаге он указывает свой номер сегмента (случайно подобранный, SEQ 900), параметр SYN и новый параметр ACK (ACKnowledgment) — это подтверждение. В нашем примере параметр ACK равен 301, тем самым сервер подтверждает получение сегмента с номером 300, и ожидает получения сегмета с порядковым номером 301.
  3. Третьим сообщением является ответ клиента на сегмент сервера, в нем указывается следующий порядковый номер (SEQ=301, а был SEQ=300) и подтверждается получение предыдущего сегмента от сервера (ACK=901, подтверждает получение сегмента SEQ=900).

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

Завершаются соединения в четыре сегмента, здесь этот процесс рассмотрен не будет.

Восстановление после ошибок

Восстановление данных осуществляется за счет подтверждений (а обнаружение ошибок происходит на канальном уровне, за счет FCS). Рисунок 5.4 Восстановление данных

На рисунке 5.

4 изображена передача сегментов, и 3-й сегмент не приходит получателю.

Введем некоторое пояснение, SEQ, помимо номера сегмента, обозначает количество переданных байт, например, первый сегмент 1400 байт, второй сегмент имеет такой же размер, но номер его 2800, он означает, что при получении этого сегмента будет передано уже 2800 байт. Вернемся к нашему примеру, веб-сервер передает не сразу все сегменты, а по частям, ожидая подтверждения каждой части. Так например, если бы передача прошла успешно, веб сервер бы получил ACK=7000. В нашем примере 3-й сегмент потерялся, поэтому клиент отправляет подтверждение ACK=4200 (как бы спрашивая у сервера, «Где сегмент №4200?»), а сервер это будут трактовать как сегмент с номером 4200 был потерян, и веб-сервер отправляет его еще раз. Вот так и осуществляется востановление данных после ошибок.

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

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

Максимальная единица передаваемых данных (MTU)

Maximum Transmission Unit — это максимальный размер пакета, котрый может быть передан, без дробления на более мелкие пакеты. Этой величиной может управлять транспортный уровень, за счет увеличения или уменьшения сегмента.

Copyright © gurkin33 2016 , Cisco Packet Tracer лабораторные. Подготовка к CCNA, ICND1, ICND2. feedback@gurkin33.ru

Источник: http://gurkin33.ru/netbasics/tcp.html

Протокол TCP — назначение и функционал

На транспортном уровне стека TCP/IP используются два основных протокола: TCP и UDP.

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

В данном тексте речь пойдёт о протоколе TCP (Transmission Control Protocol), который используется для обеспечения надёжной доставки данных на транспортном уровне.

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

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

Подробнее об этом можно прочесть в статье, посвященной транспортному уровню.

Помимо этого, TCP обеспечивает:

  • Надёжную доставку сегментов.
  • Упорядочивание сегментов при получении.
  • Работу с сессиями.
  • Контроль за скоростью передачи.

Рассмотрим эти возможности более детально.

Надёжная доставка сегментов

Под надёжной доставкой подразумевается автоматическая повторная пересылка недошедших сегментов. Каждый сегмент маркируется при помощи специального поля — порядкового номера (sequence number).

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

После некоторого количества неудачных попыток, TCP считает, что адресат не доступен, и сессия разрывается.

Таким образом, надёжная доставка не означает, что ваши данные дойдут в случае, если кто-то выдернул кабель из коммутатора.

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

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

Упорядочивание сегментов при получении

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

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

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

TCP автоматически пересоберёт их в нужном порядке используя всё то же поле порядковых номеров и передаст после склейки на уровень приложений.

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

Перед началом передачи полезных данных, TCP позволяет убедиться в том, что получатель существует, слушает нужный отправителю порт и готов принимать данные для этого устанавливается сессия при помощи механизма трёхстороннего рукопожатия (three-way handshake), о котором можно прочесть в соответствующей статье. Далее, в рамках сессии передаются полезные пользовательские данные. После завершения передачи сессия закрывается, тем самым получатель извещается о том, что данных больше не будет, а отправитель извещается о том, что получатель извещён.

Контроль за скоростью передачи

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

Благодаря механизму скользящего окна (sliding window), TCP может работать с сетями разной надёжности. Механизм плавающего окна позволяет менять количество пересылаемых байтов, на которые надо получать подтверждение от адресата.

Чем больше размер окна, тем больший объём информации будет передан до получения подтверждения. Для надёжных сетей подтверждения можно присылать редко, чтобы не добавлять трафика, поэтому размер окна в таких сетях автоматически увеличивается.

Если же TCP видит, что данные теряются, размер окна автоматически уменьшается.

Это связанно с тем, что если мы передали, например, 3 килобайта информации и не получили подтверждения, то мы не знаем, какая конкретно часть из них не дошла и вынуждены пересылать все три килобайта заново. Таким образом, для ненадёжных сетей, размер окна должен быть минимальным.

Механизм скользящего окна позволяет TCP постоянно менять размер окна — увеличивать его пока всё нормально и уменьшать, когда сегменты не доходят. Таким образом, в любой момент времени размер окна будет более или менее адекватен состоянию сети.

Структура TCP

Заголовок TCP сегмента имеет следующую структуру:

  • Source port и Destination port — это соответственно номера портов получателя и отправителя, идентифицирующие приложений на отправляющем и принимающем узлах.
  • Sequence number и Acknowledgment number — это порядковый номер сегмента и номер подтверждения, которые используются для надёжной доставки. Например, если отправитель шлёт сегмент с SN 100, то получатель может ответить на него ACK 101 SN200, что означает: «Я получил твой сегмент с номером 100 и жду от тебя 101-го, кстати, у меня своя нумерация. Мои номера начинаются с 200» Отправитель, в свою очередь, может ответить SN101 ACK201, что означает «Я получил от тебя сегмент с номером 200, могу принять следующий 201-ый, а вот тебе мой 101-ый сегмент, которого ты ждёшь». Ну и так далее.
  • Header length — Это четырёхбитное поле, содержащее в себе длину заголовка TCP сегмента.
  • Reserved — 6 зарезервированных на всякий случай бит.
  • Control — поле с флагами, которые используются в процессе обмена информацией и описывают дополнительное назначение сегмента. Например, флаг FIN используется для завершения соединений, SYN и ACK — для установки.
  • Window — содержит размер окна, о чём было сказано выше.
  • Checksumm — контрольная сумма заголовка и данных.
  • Urgent — признак важности (срочности) данного сегмента.
  • Options — дополнительное необязательное поле, которое может использоваться, например, для тестирования протокола.
  • В разделе данных содержатся собственно данные, полученные от протокола уровня приложений, либо их кусок, если данные пришлось разбивать.

Источник: http://ciscotips.ru/tcp

Понравилась статья? Поделить с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: