Полный курс лекций 2009-го года (1130357), страница 74
Текст из файла (страница 74)
Естественно, что отправитель в период измерения пропускной спосбности подсетитаким способом должен посылать TPDU-пакеты с максимальной скоростью.Рисунок 6-15. (а) Цепочка из буферов фиксированного размера; (b) Цепочка избуферов разного размера; (с) Один круговой буфер на соединениеТаблица 6-16. Динамическое выделение буфера. Стрелки показываютнаправление передачи.
Многоточие означает потерю TPDUAСообщениеBКомментарии1<request 6 buffers>А требует 6 буферов.2<ack=15, buf=4>В разрешает только сообщения 0-3.3<seq=0, data=m0>У А осталось только 3 буфера.4<seq=1, data=m1>У А осталось только 2 буфера.5<seq=2, data=m2>6<ack=1, buf=3>В подтверждает 0 и 1, разрешает 2-4.7<seq=3, data=m3>У А есть свободный буфер.8<seq=4, data=m4>У А не осталось буферов, необходима остановка.9<seq=2, data=m2>У А истекает тайм-аут и он совершает повторную передачу.10<ack=4, buf=0>Все подтверждено, но А все еще заблокирован.11<ack=4, buf=1>А теперь может оправлять 5.12<ack=4, buf=2>В обнаруживает новый буфер.13<seq=5, data=m5>У А есть 1 свободный буфер.14<seq=6, data=m6>А снова заблокирован.15<ack=6, buf=0>А все еще заблокирован.<ack=6, buf=4>Потенциальная взаимоблокировка.16......Сообщение потеряно, но А полагает, что у него осталось еще 1.6.2.5.
МультиплексированиеПотребность в мультиплексировании нескольких потоков одного уровня на одном соединении,виртуальном канале, физической линии на других уровнях возникает постоянно. Эта проблема возникает ина транспортном уровне.Например, если пользователь за терминалом установил транспортное соединение и отошел попитькофе, то транспортное соединение продолжает поддерживаться, под него резервируется буферноепространство, пространство в таблице маршрутизации и т.д. В целях удешевления стоимости транспортныхсоединений можно отобразить несколько транспортных соединений на одно сетевое.
Такое отображениеназывается восходящим мультиплексированием. Оно показано схематично на рисунке 6-17 (а).Рисунок 6-17. (а) Восходящее мультиплексирование; (b) НисходящеемультиплексированиеВ некоторых случаях, наоборот, в целях увеличения пропускной способности по отдельнымтранспортным соединениям можно отобразить транспортное соединение на несколько сетевых и покаждому сетевому иметь свое скользящее окно. Тогда, быстро исчерпав возможности одного оконногобуфера, можно переключиться на другое сетевое соединение и продолжить передачу по нему.
В этомслучае мы получим канал, пропускная способность которого равна сумме пропускных способностейотдельных каналов на сетевом уровне. Такое мультиплексирование называется нисходящим (рисунок 617 (b)).6.2.6. Восстановление после сбоевВосстановление после сбоев мы будем рассматривать в предположении, что транспортный агентцеликом располагается на абонентской машине. Восстановление сетевого уровня достаточно просто.
Еслисетевой уровень предоставляет дейтаграммный сервис, то транспортный уровень знает, как исправлятьподобные ситуации. При сервисе, ориентированном на соединение, транспортный уровень восстановитпотерянное соединение и постарается в диалоге с транспортным агентом на другой стороне выяснить, чтоуспели передать, а что нет.Проблема становится сложнее, когда надо восстанавливать работоспособность машины, включая итранспортный уровень. Рассмотрим случай, когда транспортный сервер взаимодействует с клиентами.Предположим, сервер упал и старается восстановить функционирование.
Прежде всего, ему надо узнать уклиента, какое TPDU было последним неподтвержденным, и попросить повторить его. В свою очередь,клиент может находиться в одном из двух состояний: S1 – есть неподтвержденное TPDU, либо S0 – всеTPDU подтверждены.Казалось бы, все просто. Однако рассмотрим проблему внимательнее. Сервер, получив TPDU, либосначала шлет подтверждение, а затем записывает полученное TPDU в буфер приложения, либо сначалазаписывает, а потом шлет подтверждение. Если сервер упал, послав подтверждение, но до того, как оносуществил запись, то клиент будет находиться после восстановления сервера в состоянии S0, хотяподтвержденное TPDU потеряно.
Пусть, наоборот, сервер сначала записал TPDU, а потом упал. Тогда послесбоя сервер найдет клиента в состоянии S1 и решит, что надо повторить неподтвержденное TPDU. Врезультате получим повторное TPDU.Можно формально показать, что эта проблема только средствами транспортного уровня не решается.Надо, записав TPDU, информировать об этом приложение и только после этого слать подтверждение.
Привосстановлении надо опрашивать не только клиента на транспортном уровне, но и приложение.6.3. Транспортные протоколы в Internet: TCP и UDPВ Internet есть два основных транспортных протокола: TCP - ориентированный на соединение и UDP- не ориентированный на соединение. Поскольку сервис, реализуемый протоколом UDP - это практическисервис, реализуемый протоколом IP, с добавлением небольшого заголовка, то основное внимание здесь мыуделим протоколу TCP.TCP (Transmission Control Protocol) - специально созданный протокол для надежной передачипотока байтов по соединению «точка-точка» через ненадежную сеть.
ТСР был сознательно разработан так,чтобы он мог адаптироваться к условиям и особенностям разных сетей, устойчиво и эффективнофункционировать в условиях internet (нескольких сетей). На каждой машине, поддерживающей ТСР, естьТСР-агент, который располагается либо в ядре ОС, либо в процессе пользователя, который управляет ТСРпотоками и доступом к сервису IP-протокола.ТСР получает поток данных от прикладного процесса, дробит их на сегменты не более чем по 65Кбайт (на практике не более 1,5 Кбайт) и отправляет их как отдельные IP-пакеты.
Протокол ТСР подробноописан в RFC 793, RFC 1122 и RFC 1323.Поскольку IP-уровень не гарантирует доставку каждого пакета, то в задачу ТСР входит определениепотерь и организация повторной передачи потерянного. Поскольку на сетевом уровне в Internetсоединения не поддерживаются, то сегменты могут поступать к получателю в неправильном порядке изадача ТСР - восстановить этот порядок.6.3.1. Модель сервиса TCPДоступ к ТСР-сервису происходит через сокет. Сокет состоит из IP-адреса хоста и 16-разрядноголокального номера на хосте, называемого порт.
Сокеты создаются как отправителем, так и получателем.Порт - это TSAP для ТСР. Каждое соединение идентифицируется парой сокетов, между которыми оноустановлено. Один и тот же сокет может быть использован для разных соединений. Никакихдополнительных виртуальных соединений не создается.Порты с номерами до 256 зарезервированы для стандартного сервиса. Например, если надообеспечить FTP-передачу файла, то надо соединяться через 21-й порт, где находится FTP-демон.
ДляTELNET - через 23-й порт. Полный список таких портов можно найти в RFC 1700.Все ТСР-соединения - дуплексные, т.е. передача идет независимо в оба направления. ТСРсоединение поддерживает только соединение «точка-точка». Не существует ТСР-соединений от одного комногим.ТСР обеспечивает поток байтов, а не поток сообщений.
Напомним, это значит, что границысообщений не поддерживаются автоматически в потоке.После того, как приложение передало данные ТСР агенту, эти данные могут быть отправлены сразуна сетевой уровень, а могут быть буферизованы, как поступить - решает ТСР-агент. Однако в ряде случаевнадо, чтобы они были отправлены сразу, например, если эти данные представляют собой команду дляудаленной машины. Для этого в заголовке ТСР-пакета есть флаг PUSH. Если он установлен, то это говорито том, что данные должны быть переданы немедленно.Наконец, последняя возможность ТСР-сервиса, которую здесь стоит упомянуть - срочные данные.Если для данных установлен флаг URGENT в заголовке, то все данные, накопленные в буфере к моментупоявления события, вызвавшего этот флаг, по данному соединению передаются сразу и не буферизуются.Примером события, вызывающего такой флаг, является нажатие пользователем на удаленной абонтскоймашине комбинации Ctrl-Del.
Когда срочные данные поступают к месту назначения, то получателюпередают их немедленно.6.3.2. Протокол TCPКаждый байт в ТСР соединении имеет 32-разрядный номер. В сети с пропускной способностью 10Мбит/сек. потребуется не менее часа, чтобы исчерпать все номера с 0 до 232. Эти номера используются какдля уведомления, так и в механизме управления окнами.ТСР-агенты обмениваются сегментами данных. Каждый сегмент имеет заголовок от 20 байтов и более(по выбору) и тело переменной длины. Один сегмент может включать байты от разных отправителей, аможет включать часть данных одного.
Какой длины может быть тело, решает ТСР-агент. Длину сегментаограничивают два фактора. Во-первых, длина сегмента не должна превышать максимальную длину IPпакета - 64 Кбайт. Во-вторых, каждая сеть имеет максимальную единицу передачи - MTU (maximumtransfer unit), и каждый сегмент должен помещаться в MTU. В противном случае маршрутизаторам придетсяприменять фрагментацию. При этом возрастают накладные расходы на передачу в сети, так как каждыйфрагмент оформляется как самостоятельный пакет (с 20-байтным заголовком).Основным протоколом, который используется ТСР-агентом, является протокол скользящего окна. Этозначит, что каждый посланный сегмент должен быть подтвержден.
Одновременно с отправлением сегментавзводится таймер. Подтверждение придет либо с очередными получаемыми данными, если они поступят,либо в специальном сегменте-подтверждении. Подтверждение будет иметь порядковый номер очередногоожидаемого получателем сегмента. Если таймер исчерпается прежде, чем придет подтверждение, тосегмент посылается повторно.Несмотря на кажущуюся простоту, ТСР-протокол достаточно сложен и должен решать следующиеосновные проблемы:§восстанавливать порядок сегментов§убирать дубликаты сегментов, в каком бы виде они не поступали§определять разумную задержку для time_out для подтверждений в получении сегмента§устанавливать и разрывать соединения надежно§управлять потоком§управлять перегрузкамиРисунок 6-18.