Э. Таненбаум - Компьютерные сети. (4-е издание) (DJVU) (1130092), страница 67
Текст из файла (страница 67)
Если кадр т потеРян или поврежден, получатель не подтвердит его и отправитель пошлет его еще раз. Когда он будет успешно принят, получатель пошлет отправителю подтверждение. Именно здесь находится источник потенциальной проблемы. В зависимости от того, будет получено подтверждение или нет, отправитель может послать кадр т или кадр т + 1. Отправитель может начать посылать кадр и + 2 только когда получит подтверждение получения кадра т + 1. Но зто означает, что кадр и уже был отправлен и подтверждение его получения было отправлено и получено.
Следовательно, неопределенность может возникнуть только между двумя соседними кадрами. Таким образом, должно быть достаточно всего одного бита информации (со значением О или 1). В каждый момент времени получатель будет ожидать при- 250 Глава 3. Уровень передачи данных бытия кадра с определенным порядковым номером. Кадр с неверным номером будет отбрасываться как дубликат. Кадр с верным номером принимается, передается сетевому уровню, после чего номер следуютпего ожидаемого кадра увеличивается по модулю 2 (то есть О становится 1, а 1 — О). Пример подобного протокола приведен в листинге 3.4. Протоколы, в которых отправитель ожидает положительного подтверждения, прежде чем перейти к пересылке следуюп(его кадра, часто называются РАК (РовЖые Ас)свои)ес)дептеп( ибг)т Кесгапвпт)вв)оп — положительное подтверждение с повторной передачей) или АКЯ (Апгоптас)с Кереаг геЯцевг — автоматический запрос повторной передачи).
Подобно протоколу 2, он также передает данные только в одном направлении. Лиотинг 3.4. Протокол с положительным подтверждением и повторной передачей /* протокол 3 (РАК) обеспечивает симплексную передачу данных по ненадежному каналу. */ Фбеыпе НАХ 5ЕО 1 /* в протоколе 3 должно быть равно 1 */ Суребет епиа (/гаже аггтча1, сйзца егг. С1аеоцС) ечепС Суре; Ф1пс1цбе "ргогосо1.бж /* врененная переиенная */ /* буфер для исходящего пакета */ пехС тгаае Со зепб = б; ноиеров */ Егоа песыогх 1ауег(аоот'Гег); /* получить первый пакет у сетевого уровня */ Мп'1е (Сгце) ( в.(пто = Ьц/тег; /* сформировать кадр для передачи */ з.вец = пехС /гаже Со зепб; /* вставить порядковыи номер в кадр */ Со рпув1са1 Тауег(аз): /* послать кадр по каналу */ зСагС С1аег(з.зео); /* запустить тайиер ожидания подтверждения */ иа(С тог ечепС(аечепС); /* ждать события /гаже агюча1, сйьыа егг или Стаеоцг */ 1Г (ечепь = тгаае агю ча1) ( тгоа рлувтса1 )ауегйв); /* получить подтверждение */ 1б (з.асй =- пехС Ггаае Со вепб) ( (гоа пегногй \ауег("абцТЕег); /* получить следующий пакет у сетевого /* инициализация исходящих последовательных уровня */ тпс(пехС т'гаае Со зепб); /* инвертировать значение переменной пехС Ггаае Со зепб */ ) ) чотб гесетчегЗ(чо1б) ( зец пг тгаае ехресгеб, тгаае г.
5: чотб зепбегЗ(чотб) ( зео пг пехС тгаае Со зепб: */ тгаае в. расйеС Ьцттег; ечепС Суре ечепС: /* порядковый номер следующего исходящего кадра Элементарные протоколы передачи данных 251 ечепс суре ечепс; тгаше ехресгеб = 0: шб11е (Сгие) ( матс гог ечепсйечепс); /* ожидание возиожных событий; /гаже агшча1, севою егг */ (б (ечепг == /гаже аггтча1) ( /* прибь;л неповрежденный кадр */ Ггош рбуэ1са1 1ауегйг); тт (г,эег) =- агаве ехресгеб) ( Со пегыогй 1ауегйг.тото): тпс(тгаше ехрессеб); порядковым нонером */ з.аск = 1 - /гаже ехресгеб; подтверждение */ Со рбуз1са1 1ауегйз): /* получить прибывший кадр */ /* мненно этот кадр и ожидался */ /* передат~ данные сетевоиу уровню */ /* в следуюдий раз ожидать кадр с другин /* попер кадра, для которого посылается /* ни одно из полей не используется */ Протокол 3 отличается от своих предшественников тем, что и отправитель, и получатель запоминают номера кадров.
Отправитель запоминает номер следующего кадра в переменной пехб тгаше Со эепб, а получатель запоминает порядковый номер следующего ожидаемого кадра в переменной бгаше ехресбеб. Перед бесконечным циклом в каждой процедуре размещена короткая фаза инициализации. Передав кадр, отправитель запускает таймер. Если он уже был запущен, он настраивается на отсчет нового полного интервала времени. Период выбирается достаточно большим, чтобы даже в худшей ситуации кадр успел дойти до получателя, получатель успел его обработать и подтверждение успело вернуться к отправителю.
Только по истечении отведенного времени можно утверждать, что потерялся кадр или его подтверждение, а значит, необходимо послать дубликат. Если время, после которого наступает тайм-аут, сделать слишком коротким, то передающая машина будет повторно посылать слишком много кадров, в которых нет необходимости. Хотя лишние кадры в данном случае не повлияют на правильность приема данных, они повлияют на производительность системы. После передачи кадра отправитель запускает таймер и ждет какого-либо события. Возможны три ситуации: либо придет неповрежденный кадр подтвержде.
ния, либо будет получен поврежденный кадр подтверждения, либо просто истечет интервал времени. В первом случае отправитель возьмет у сетевого уровня следующий пакет и положит его в буфер поверх старого пакета. Кроме того, он увеличит порядковый номер кадра. Если жс прибудет поврежденный кадр под тверждсния или подтверждение не придет вовсе, то ни буфер, ни номер не буду~ изменены и будет послан дубликат кадра. Когда неповрежденный кадр прибывает к получателю, проверяется его номер.
Если это не дубликат, то кадр принимается и передается сетевому уровню, после чего формируется подтверждение. Дубликаты и поврежденные кадры на сетевой уровень не передаются. 252 Глава 3. Уровень передачи данных Протоколы скользящего окна В предыдущих протоколах информационные кадры передавались только в одну сторону. В большинстве практических ситуаций требуется передача данных в обоих направлениях.
Один из способов получения дуплексной передачи данных заключается в создании двух отдельных симплексных каналов связи, по которым даннгяе передаются в противоположных направлениях. При этом получается два отдельных физических канала, каждый из которых имеет прямой канал для данных и обратный канал для подтвержлений. В обоих случаях пропускная способность обратных каналов почти не используется. В результате пользователь платит за два канала, но использует емкость одного. Более прогрессивной идеей представляется использование одного канала для передачи данных в обоих направлениях.
В конце концов, ведь в протоколах 2 и 3 кадры уже передавались по каналу в двух направлениях, а обратный канал обладает той же пропускной способностью, что и прямой. В такой модели кадры с данными от машины А для машины В перемешиваются с кадрами подтверждений от А к В. Получатель может о~личить кадр с данными от кадра с подтверждением по специальному полю 11ло' заголовка кадра. Помимо чередования кадров с подтверждениями и информационных кадров, возможно и другое улучшение протокола. Приняв кадр с данными, получатель может не посылать сразу кадр с подтверждением, а подождать, пока сетевой уровень даст ему следующий пакет.
Подтверждение добавляется к исходящему информационному кадру с помощью поля ас~ заголовка кадра. В результате для передачи подтверждения почти не будет затрачено ресурсов. Подобная техника называется р(яяуЬасй(пя (комбинированная, или ярусная, перевозка). Основное преимущество совмещения передачи прямых и обратных пакетов заключается в улучшенном использовании пропускной способности канала.
Поле ас1 в заголовке кадра занимает всего несколько бит, тогда как отдельный кадр потребует заголовка и контрольной суммы. Кроме того, чем меньше количество прибывающих кадров, тем меньше прерываний работы программы, связанных с этим событием, и, возможно, меньше буферов у получателя (в зависимости от способа организации программного обеспечения получателя). В следующем рассматриваемом нами протоколе расходы на совмещение передачи прямых и обратных пакетов составляют всего 1 бит заголовка кадра.
Эти расходы редко превышают несколько бит. Однако при совмещении передачи прямых и обратных пакетов в протоколе появляются новые проблемы. Как долго должен уровень передачи данных ждать пакета, с которым следует переслать подтверждение? Если уровень передачи данных будет ждать дольше, чем отправитель, то последний пошлет кадр повторно, что неприемлемо.