Рейтинг:-1

Понимание окна приема TCP

флаг co

В настоящее время я изучаю TCP, особенно аспект окна приема. Я читал об этом из нескольких источников, и я хочу кое-что понять.

Из того, что я узнал, приемник объявляет «окно приема», которое представляет собой — и здесь я запутался — количество байтов, которое отправителю разрешено отправлять без подтверждения, или, другими словами, данные в полете.

Теперь, если я попытаюсь об этом подумать, наша главная цель в управлении потоком — убедиться, что отправитель не отправит больше, чем может обработать получатель, т. е. мы хотим предотвратить ситуацию, в которой отправитель отправляет данные, которые получатель придется выбросить, так как негде хранить!

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

Но, читая эта почта, @DavidShwartz говорит, что цель данных в полете НЕ состоит в том, чтобы избежать переполнения буфера, а в том, чтобы справиться с задержкой, вносимой каналом связи. Что я не совсем понимаю.

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

Может ли кто-нибудь объяснить это более подробно?

флаг ky
Привет! Хороший вопрос, я не могу дать вам лучшего объяснения... может быть, этот сайт лучше https://networkengineering.stackexchange.com/
djdomi avatar
флаг za
Запросы на рекомендации продуктов, услуг или учебных материалов не относятся к теме, поскольку они привлекают некачественные, самоуверенные и спам-ответы, а ответы быстро устаревают. Вместо этого опишите бизнес-проблему, над которой вы работаете, исследование, которое вы провели, и шаги, предпринятые для ее решения.
digijay avatar
флаг mx
@djdomi: не уверен, что это не по теме, он просит не учебный материал, а подробности спецификации tcp.
Рейтинг:2
флаг ne
  1. данные в полете это общий термин, используемый для обозначения данных, которые были отправлены, но еще не подтверждены. Потому что с точки зрения отправителя эти данные находятся где-то в сети. Окно отправителя это объем данных, который может находиться в пути, т. е. объем данных, который отправитель может отправить до получения ACK для первого сегмента окна.

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

попробуйте представить, что произойдет, если вы отправляете только один пакет, а затем ждете ACK, и сравните это с тем, что происходит, если вы отправляете 10 пакетов за раз, а затем ждете ACK. Довольно распространенная экзаменационная задача — рассчитать скорость передачи данных. Вы увидите, что если задержка между отправителем и получателем очень мала (например, они физически находятся рядом, как в одном здании), отправка одного пакета за раз работает нормально. если задержка несколько значительна, очень неэффективно отправлять данные по одному пакету за раз.

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

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

Контроль перегрузки необходим для того, чтобы отправитель не перегружал сеть.Это большая и сложная тема. Однако то, что описано в другом ответе, является контролем перегрузки и не имеет ничего общего с окном получателя. Существует так называемый Окно перегрузки, который оценивает (или должен оценивать), сколько данных может передавать сеть без перегрузки (т. е. без потери пакетов).

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

Рейтинг:2
флаг br

И то, и другое.

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

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

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

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

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

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

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

Effie avatar
флаг ne
1) Медленный запуск tcp не имеет ничего общего с окном приемника. управление потоком и управление перегрузкой — это две разные вещи. медленный старт увеличивает окно перегрузки. и окно отправителя установлено на минимум окна получателя и окна перегрузки. 2) управление перегрузкой не предотвратит взрыв пакетов. как это работает, он действует при получении ACK, поэтому, если по каким-либо причинам ACK агрегируются, будет отправлен пакет пакетов. Для этого вам нужен отдельный механизм, называемый стимуляцией. 3) потерянные пакеты останавливаются, они могут останавливаться на половину rtt, но они могут останавливаться много (например, потери хвоста).
Effie avatar
флаг ne
«Хороший поток достигается, если размер окна растет линейно до точки, в которой он достигает количества неподтвержденных данных в полете, то есть задержки передачи, умноженной на скорость передачи». Это утверждение не имеет смысла, потому что окно — это количество данные в полете или количество данных, которые могут быть в пути.

Ответить или комментировать

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