Что нужно знать о TCP

задняя часть алгоритм TCP/IP Государственный аппарат
Что нужно знать о TCP

Особенности TCP

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

TCP — это четвертый уровень в семиуровневой модели сети OSI — Транспортный уровень, IP — это третий уровень — Сетевой уровень, ARP — это второй уровень — Канальный уровень, а данные на втором уровне. называется Frame. , данные третьего уровня называются Packet, а данные четвертого уровня называются Segment.

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

надежный транспорт TCP

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

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

Почему для установления связи требуется 3 рукопожатия, а для разрыва связи — 4 волны?

  • Для трехэтапного рукопожатия для создания ссылок в основном необходимо инициализировать начальное значение порядкового номера. Обе стороны связи должны уведомить друг друга о своем собственном инициализированном порядковом номере (сокращенно ISN: начальный порядковый номер) — поэтому он называется SYN, полное название Synchronize Sequence Numbers. Это x и y на рисунке выше. Этот номер следует использовать в качестве порядкового номера для передачи данных в будущем, чтобы гарантировать, что данные, полученные прикладным уровнем, не будут нарушены из-за проблем с передачей в сети (TCP будет использовать этот порядковый номер для объединения данных).
  • Для 4-кратной волны, на самом деле, если внимательно присмотреться, это 2-кратная, потому что TCP полнодуплексный, поэтому и отправителю, и получателю нужны Fin и Ack. Однако одна сторона пассивна, так что это похоже на так называемую 4-ю волну.

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

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

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

Ускорьте работу с помощью оконных элементов управления

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

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

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

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

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

Не удалось вернуть ответ подтверждения

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

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

сегмент потерян

Как показано на рисунке выше, при потере сегмента отправляющий сегмент всегда будет получать подтверждение с порядковым номером 1001. Поэтому, когда окно относительно велико и сегмент потерян, будет подтвержден тот же порядковый номер. Ответы будут возвращены повторно. Если хост-отправитель сегмента получает одно и то же подтверждение три раза подряд, он повторно отправит соответствующие данные. Упомянутое ранее управление тайм-аутом в этом механизме валюты более эффективно, поэтому его также называют высокоскоростным управлением повторной передачей.

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

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

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

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

контроль перегрузки

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

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

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

Давайте посмотрим на формат заголовка TCP.

TCP头格式

Несколько замечаний:

  • Пакеты TCP не имеют IP-адресов, это вопрос уровня IP. Но есть исходные порты и порты назначения.
  • Для TCP-соединения требуется четыре кортежа для представления одного и того же соединения (src_ip, src_port, dst_ip, dst_port), то есть ровно пять кортежей, один из которых является протоколом. Но поскольку здесь я говорю только о протоколе TCP, я говорю здесь только о квадрациклах.
  • Порядковый номер — это порядковый номер пакета, который используется для решения проблемы переупорядочивания сетевых пакетов.
  • Номер подтверждения — это ACK — используется для подтверждения получения, используется для решения проблемы отсутствия потери пакетов.
  • Окно также называется Advertised-Window, это известное скользящее окно, которое используется для решения задач управления потоком.
  • Флаг TCP, который является типом пакета, в основном используется для управления конечным автоматом TCP.

Ссылаться на