4. Протокол скользящего окна( sliding window) сочетает в себе все эти возможности, а также поддерживает двунаправленную передачу данных.
Если эти механизмы применяются к кадрам на канальном уровне, то возникает логичный вопрос: как это можно перенести на сегменты транспортного уровня? На практике оказывается, что канальный и транспортный уровни во многом копируют друг друга. Но хотя к ним и применимы одинаковые механизмы, существуют различия в их функционировании и качестве.
Чтобы проиллюстрировать различие в функционировании, обратимся к обнаружению ошибок. Контрольная сумма канального уровня защищает кадр, пока он передается по одному каналу. Контрольная сумма транспортного уровня защищает сегмент, пока он передается по всему пути. Это сквозная проверка, отличная от проверки в каждом канале. Существуют примеры повреждения пакетов даже внутри маршрутизаторов (Saltzer и др., 1984): контрольные суммы канального уровня обеспечивали защиту пакетов, пока они передвигались по каналу, но не тогда, когда они были внутри маршрутизатора. В результате мы имеем дело с некорректной доставкой, хотя проверка на каждом канале не выявила ошибок.
Этот и другие примеры позволили ученым (Slatzer и др.) сформулировать «сквозной» принцип( end-to-end argument). Согласно этому принципу, сквозная проверка, выполняемая на транспортном уровне, является необходимой для корректной передачи данных; проверка, выполняемая на канальном уровне, не является необходимой, но позволяет существенно улучшить производительность (так как иначе поврежденный пакет будет все равно проходить весь путь, что приведет к лишней нагрузке на сеть).
Чтобы продемонстрировать различие в качестве, рассмотрим повторную передачу данных и протокол скользящего окна. Большинство беспроводных каналов, в отличие от спутниковых, позволяют отправлять только один кадр в единицу времени. Это значит, что произведение пропускной способности и времени задержки для данного канала достаточно мало и внутри канала может едва ли поместиться целый кадр. Поэтому здесь для лучшей производительности следует использовать окно маленького размера. К примеру, стандарт 802.11 использует протокол с остановкой и ожиданием подтверждения, выполняя передачу и повторные передачи одного кадра до тех пор, пока не придет подтверждение о его получении, и только после этого переходя к другому кадру. Если бы размер окна был больше одного кадра, это бы не улучшило производительность, а только усложнило процесс передачи. В проводных и оптоволоконных линиях связи, таких как (коммутируемые) Ethernet и магистрали интернет- провайдеров, частота появления ошибок достаточно мала, что позволяет отказаться от повторных передач на канальном уровне, так как небольшое количество потерянных кадров может быть восстановлено с помощью повторных сквозных передач.
С другой стороны, для многих TCP-соединений произведение пропускной способности и времени задержки составляет гораздо больше, чем один сегмент. Рассмотрим соединение, которое передает данные по всей территории США со скоростью 1 Мбит/с, а время, за которое пакет доходит до получателя и обратно, составляет 100 мс. Даже при таком медленном соединении 200 Кбит информации будут храниться на получателе в течение того времени, которое требуется для отправки сегмента и получения подтверждения. В таких случаях следует использовать скользящее окно большого размера. Протокол с остановкой и ожиданием подтверждения серьезно повредит производительности. В нашем примере он ограничил бы передачу одним сегментом в 200 мс (или 5 сегментами в секунду) независимо от реальной скорости сети.
Поскольку транспортные протоколы обычно используют скользящие окна большего размера, мы обсудим процесс буферизации более подробно. Так как у хоста может быть несколько соединений, каждое из которых обрабатывается отдельно, для скользящих окон ему может потребоваться большое количество буферного пространства. Буферы должны использоваться как отправителем, так и получателем. Отправителю буфер нужен для хранения всех переданных сегментов, для которых еще не пришло подтверждение о прибытии, на случай если эти сегменты будут потеряны и их придется отправить повторно.
Зная, что отправитель выполняет буферизацию, получатель может использовать свои буферы по своему усмотрению. Например, получатель может содержать единый буферный накопитель, используемый всеми соединениями. Когда приходит сегмент, предпринимается попытка динамически выделить ему новый буфер. Если это удается, то сегмент принимается, в противном случае он отвергается. Поскольку отправитель готов к тому, чтобы передавать потерянные сегменты повторно, игнорирование сегментов получателем не наносит существенного вреда, хотя и расходует некоторые ресурсы. Отправитель просто повторяет попытки до тех пор, пока не получит подтверждения.
Читать дальше
Конец ознакомительного отрывка
Купить книгу