Почему весь пакет TCP / UDP передается повторно, а не просто пропускает данные - PullRequest
0 голосов
/ 06 февраля 2020

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

1 Ответ

0 голосов
/ 06 февраля 2020

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

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

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

...