TCP PUSH и сегменты

Я читаю TCP PUSH раздел в руководстве TCP/IP и есть вопрос по этому пункту:

важно понимать, что функция push только принудительная немедленная доставка данных. Это не меняет того факта, что TCP не предоставляет границ между элементами данных. Это может seem что приложение может отправить одну запись данных, а затем "подтолкнуть" ее к получателю; затем отправить вторую запись и" подтолкнуть", что, и так далее. Однако приложение не может предположить, что, поскольку оно устанавливает бит PSH для каждого фрагмента данных, которые оно передает TCP, каждый фрагмент данных будет находиться в одном сегменте. возможно, что первый " push "может содержать данные, переданные TCP ранее, которые еще не были переданы, и также возможно, что две" push " записи таким образом могут в конечном итоге в том же сегменте в любом случае.

мой вопрос в последнем предложении курсивом, как можно дать данные к TCP ранее, с установленным флагом PSH, но не быть переданным? Не имея флаг PSH установлен сразу же очистить буферы сразу?

1
задан user26825
05.12.2022 20:44 Количество просмотров материала 3146
Распечатать страницу

2 ответа

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

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

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

2
отвечен haimg 2022-12-07 04:32

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

В общем случае флаг PUSH заставляет TCP на приемнике доставлять содержимое буфера в приложение. Это не заставляет TCP отправителя передавать что-либо.

1
отвечен artistoex 2022-12-07 06:49

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх