Компьютерные сети — транспортный уровень (уровень TCP/UDP)

TCP/IP

1. Введение

В протоколе TCP/IP транспортный уровень предоставляет услуги прикладному уровню.
В стеке протоколов TCP/IP транспортный уровень содержит только два протокола:

  • Протокол TCP: надежная передача, ориентированная на соединение, обеспечивающая обнаружение ошибок
  • Протокол UDP: ненадежная передача, нет соединения

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

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

  • Номер порта: 16 бит, только локальный, только локальное значение.

2. UDP-протокол

Главная особенность:

  • Нет соединения, не нужно устанавливать соединение перед отправкой, и UDP обычно используется для связи, которая может быть завершена одним пакетом данных. Например, запрос CDN для разрешения URL-адреса.
  • Доставка с наилучшими усилиями. Надежная доставка не гарантируется, и управление перегрузкой не используется.
  • ориентированный на сообщения. Он подходит для требований мультимедийной связи. Подходит для многоадресной связи.
  • Поддержка интерактивного общения «один к одному», «один ко многим», «многие к одному» и «многие ко многим».
  • Накладные расходы заголовка небольшие, всего 8 байт.

Структура дейтаграммы UDP

  • Псевдозаголовок: 2 байта. Для расчета контрольной суммы часть информации в заголовке сетевого уровня берется для участия в расчете.

3. TCP-протокол

Особенности протокола TCP

  • ориентированный на соединение
  • только прямая связь
  • Обеспечение надежного предоставления услуг
  • Реализовать функцию контроля перегрузки
  • Реализовать функцию управления потоком
  • Байтовый поток

потоковое

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

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

Разъем

IP+порт может выражать конечную точку в TCP-транспорте. IP+Port называется сокетом.

Как добиться надежной передачи
(позже я обновлю колонку, чтобы более подробно объяснить реализацию надежной передачи)

  • Протокол автоматического повторения (ARQ)

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

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

    С точки зрения непрофессионала, протокол ARQ:Пока вы не скажете мне, что получили его в течение определенного времени, я не думаю, что вы его получили.

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

  • конвейерная обработка

Использование канала упомянутого выше протокола передачи ARQ очень низкое и было устранено. Конвейерная передача в настоящее время используется в протоколе TCP. То есть после отправки пакета данных отправитель немедленно отправляет следующий подготовленный пакет данных, не дожидаясь ACK от получателя. Когда пакет отправляется в течение времени x, пакет будет передан повторно без получения ACK для пакета. Значение x немного больше, чем TTL задержки туда и обратно в сети. Предполагая, что n пакетов данных могут быть отправлены в течение времени x, отправитель должен буферизовать n пакетов данных, которые еще не получили подтверждения. То есть отправитель поддерживает окно отправки.

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

Например, на приведенном выше рисунке, если размер скользящего окна равен 5, окно уже заполнено. Возможны два случая: если ACK пакета 1 получен, то пакет 1 переполняет окно, и окно продвигается вперед для продолжения отправки 6-го пакета. Если ACK не получен, будет повторно передан пакет данных 1. Фактически, окно также будет двигаться вперед.Содержимое пакета данных 6 такое же, как содержимое пакета данных 1, то есть повторная передача пакет данных 1.

Накопленное подтверждениеЭто дальнейшая оптимизация вышеупомянутого механизма, то есть, если получатель получает последовательные пакеты данных 1, 2 и 3, ему нужно ответить только на 3 в ACK, и отправитель может неявно знать, что 1, 2 и 3 все успешно отправлены.

Формат сегмента TCP:

  • исходный порт, порт назначения: используется для идентификации двух приложений, взаимодействующих на обоих концах канала TCP.
  • серийный номер: данные, отправляемые прикладным уровнем, могут передаваться сегментами на транспортном уровне. Серийный номер относится к. Первый байт части данных пакета данных TCP — это количество байтов данных, отправленных прикладным уровнем.
  • Номер подтверждения: последний байт части данных в пакете данных TCP равен количеству байтов в данных, отправленных прикладным уровнем, плюс 1. Когда получатель отправляет ACK, он несет этот номер подтверждения и фактически получает порядковый номер следующих данных, отправленных отправителем.
  • смещение данных: Количество байтов, смещенных от начальной позиции части данных относительно всего пакета данных. Поскольку заголовок имеет часть переменной длины, требуется смещение данных.
  • URG: Если он равен 1, он будет передан первым, независимо от того, сколько данных стоит в очереди в буфере отправки.
  • ACK: Если он равен 0, номер подтверждения недействителен, в противном случае он действителен.
  • SYN: SYN=1, что указывает на то, что это управляющий пакет для установления сеанса. В это время серийный номер отправителя = 0, номер подтверждения = 0 и ACK = 0 (номер подтверждения недействителен). Серийный номер приемника = 0, номер подтверждения = 1, ACK = 1 (отправитель знает, что соединение установлено успешно, и может начать отправку первого пакета данных).
    SYN-атака: Используйте механизм установления сеанса для атаки, отправьте большое количество запросов на установление соединения на хост и заполните несуществующий исходный IP-адрес в пакете данных запроса. Причина, по которой хост ожидает установления соединения. Или заполните собственный IP-адрес хоста как для IP-адреса назначения, так и для исходного IP-адреса, чтобы хост мог установить большое количество TCP-соединений сам с собой. Занимает много ресурсов хоста, из-за чего хост не отвечает на обычные запросы на установление соединения.
  • PSH: если 1. Кэш принимающей стороны предпочтительно доставляет пакет данных на прикладной уровень, независимо от того, есть ли еще неотправленные данные в принимающем кеше.
  • RST: Если это 1, это означает ненормальное прерывание, говорящее узлу немедленно отключиться.
  • FIN: если это 1. Связь завершается нормально, и соединение разрывается.
  • окно: при TCP-соединении вам необходимо сообщить противоположной стороне, сколько байтов данных может быть сохранено в приемном буфере. После того, как партнер узнает об этом, он устанавливает такой же размер своего буфера отправки. Уведомление партнера в пакете SYN об установлении соединения.
  • контрольная сумма: соответствует методу расчета контрольной суммы в протоколе UDP, упомянутому выше.
  • аварийный указатель: Указатель экстренного вызова, установленный, когда URG равен 1, вступает в силу. Указывает, сколько первых байтов в пакете URG требуют срочной обработки.
  • выберите (переменная длина): его можно использовать для уведомления удаленного узла о максимальной длине дейтаграммы TCP, которую он может обработать. Его можно использовать для уведомления однорангового узла о том, поддерживает ли он выборочное подтверждение.