13

Сегмент TCP не является частью пакета TCP?

Вот что я прочитал:

Сегмент - это фрагмент данных приложения, который TCP обрезает до переносимого размера и оборачивает заголовком TCP.

Разве заголовок TCP не состоит из сегментов?

11 ответов11

18

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

Инкапсуляция данных и стек протоколов TCP/IP

7

Оригинальный TCP RFC не совсем понятен тому, как он использует термин "сегмент".

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

Но в других случаях термин "сегмент" включает в себя все сообщение TCP, включая заголовки TCP. Фактически, по крайней мере, в одном случае в спецификации указаны сегменты TCP без данных приложения (например, простые Acks).

Одно целое IP-сообщение является "дейтаграммой".

Исходный IP RFC ссылается на сообщения канального уровня как "пакеты". IP-дейтаграммы могут быть разбиты на "фрагменты", чтобы соответствовать ограничениям размера пакетов в сетях с небольшими пакетами.

Канальный уровень IEEE 802.3 / Ethernet ссылается на одну непрерывную передачу физического уровня как "пакет". Часть канала передачи данных MAC называется "кадром". Кадр начинается с MAC-адреса назначения и заканчивается последовательностью проверки кадра. Часть кадра, которая может содержать дейтаграмму IP (или ее фрагмент), называется "полем данных клиента MAC".

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

2

Сегмент TCP называется датаграммой. Как правило, сегмент или датаграмма является пакетом. Когда дейтаграмма или пакет обрабатывается сетевым уровнем, он добавляет заголовок IP к данным и становится IP-пакетом.

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

2

сегмент tcp - это только концепция, он отличается от дефрагментации ip

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

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

если tcp не использует mss , это ужасно. Предположим, что вы отправляете данные, которые больше, чем mss, они будут помещены в один пакет tcp (данные не разбиваются на мелкие части из-за неиспользования mss), пакет tcp больше, чем ip mtu, поэтому ip будет разбивать tcp. пакет на куски. пакет tcp будет повторно передавать, если какая-либо из частей потеряна, потраченное время и пропускная способность

ps: tcp_mss = ip_mtu - tcp_header

2

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

1

Когда вы отправляете данные через TCP-соединение, объем отправляемых вами данных может превышать максимальный размер байтов, разрешенный соединением в одном пакете. Эта величина "Максимальный размер сегмента" (также называемая MSS) "согласовывается" (1) во время соединения между двумя конечными точками TCP (клиентом и сервером). Протокол OSI уровня 4 TCP отвечает за разброс / сбор. Это означает, что ваш поток данных делится на более мелкие части (называемые сегментами) и отправляется отдельно через сеть. С другой стороны, уровень TCP отвечает за повторный сбор пакета в правильном порядке для преобразования потока так же, как он был отправлен. Ничто не может сказать вам, что сегменты прибудут в пункт назначения в том же порядке, что и при вылете. Это также, почему пакеты пронумерованы. Более того, пакеты подтверждаются получателем один за другим по отдельности (2), но иногда пакеты могут быть потеряны. Тогда ACK не будет возвращен от пункта назначения пакета к источнику. Затем излучатель должен отправить его повторно (это также является ролью TCP). Иногда пакет принимается правильно, но подтверждение не принимается эмитентом (снова потерянный пакет). В таком случае отправитель отправит его повторно, но получатель увидит, что он уже получил его (то есть Dup-пакет), и устранит его, но повторно отправит подтверждение отправителю.

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

(1) Фактически, переговоры вообще не ведутся, каждая конечная точка сообщает максимальный размер, с которым он может иметь дело. Это значение не включает 20 байтов заголовка IP и 20 байтов заголовка TCP. (2) несколько пакетов также могут быть подтверждены одним ACK.

Имейте в виду, что датаграммы представляют собой инкапсулированные данные, отправляемые по IP-сети или с использованием протокола без установления соединения, такого как UDP. Пакеты представляют собой инкапсулированные данные для ориентированного на соединение протокола, такого как TCP. Сегменты - это части потока данных, отправленные по TCP. См. W.Richard Stevens " Проиллюстрированный TCP/IP", чтобы получить гораздо лучшее объяснение всего этого.

1

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

То, что вы называете "Сегментом", является целым "пакетом", который позже объединяется с другими в поток TCP. Увидеть:

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

1

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

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

0

Сегмент TCP - это пакет. Сегмент является только частью потока TCP-соединения между двумя компьютерами. Дейтаграмма - это "пакет" в терминах UDP.

0

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

0

"Универсальным" термином для подобных вещей является протокольная единица данных или PDU.

LAYER # - OSI NAME     - COMMON PROTOCOL OR USE - PDU NAME
-------   ------------   ----------------------   --------------------------
Layer 1 - Physical     - Transceiver            - bits, or a physical signal
Layer 2 - Datalink     - Ethernet               - frame
Layer 3 - Network      - IP                     - packet
Layer 4 - Transport    - TCP                    - segment
Layer 5 - Session      - SIP                    - data, request, or response
Layer 6 - Presentation - Encryption/compression - data, request, or response
Layer 7 - Application  - HTTP                   - data, request, or response

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .