5

Требуется ли ACK при использовании надежных протоколов, таких как TCP? Сколько накладных / пропускных потерь это создает?

3 ответа3

25

Требуется ли ACK при использовании надежных протоколов, таких как TCP?

Да. ACK - это механизм, который делает TCP надежным протоколом.

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

Это сделало бы его больше похожим на UDP.


Сколько накладных / пропускных потерь это создает?

В общем случае на это нельзя ответить, так как это зависит от состояния сети между двумя конечными точками.

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


Дальнейшее чтение

5

Вы спрашивали о «надежных протоколах, таких как TCP/IP»; Я отвечу за TCP/IP.

Требуется ли ACK при использовании TCP?

Да, это неотъемлемая часть TCP/IP. TCP/IP - это протокол скользящего окна. ACK позволяет получателю «скользить по окну», позволяя отправителю отправлять больше данных. Без ACK TCP/IP не будет отправлять больше неподтвержденных данных, чем позволяет размер окна.

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

Сколько накладных / пропускных потерь это создает?

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

3

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

Служебная нагрузка является дополнительным обходом между сторонами, но если есть постоянная связь, то не нужно добавлять задержку, если данные отправляются параллельно. Издержки полосы пропускания довольно малы, как минимум, получатель может ACK с простым 1-байтовым пакетом, но в более сложных случаях ACK-пакет может потребовать нескольких десятков байтов.

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