
630 Глава 6. Транспортный уровень
пуска Джекобсона), чтобы ослабить нагрузку на сеть и тем самым способство-
вать устранению затора.
К сожалению, беспроводные линии передачи являются чрезвычайно нена-
дежными. Они постоянно теряют пакеты. Правильная реакция на потерю пакета
должна состоять в его скорейшей повторной отправке. Снижение скорости мо-
жет лишь ухудшить ситуацию. Если, к примеру, 20 % всех пакетов теряется, а от-
правитель передает по 100 пакетов в секунду, то до получателя доходит около 80
пакетов в секунду. Если отправитель снизит скорость до 50 пакетов в секунду, на
выходе скорость упадет до 40 пакетов в секунду.
Таким образом, если пакет теряется в проводной сети, отправитель должен
снизить скорость. Если же пакет теряется в беспроводной сети, отправитель дол-
жен не снижать скорость, а, возможно, даже увеличить ее (это напоминает раз-
ницу в способах вывода из заноса переднеприводных и заднеприводных автомо-
билей. — Примеч. перев.). Если отправитель не знает, в какой сети он находится,
ему трудно принять верное решение.
Часто путь от отправителя до получателя оказывается неоднородным. Пер-
вые 1000 км могут проходить по проводной сети, но последний километр может
оказаться беспроводным. В такой ситуации принять правильное решение в слу-
чае тайм-аута еще сложнее, так как его причины могут быть различными. Пред-
ложенное решение, получившее название непрямого протокола TCP (Bakne и
Badrinath, 1995), состояло в разбиении TCP-соединения на два отдельных со-
единения, как показано на рис. 6.32. Первое соединение тянется от отправителя
до базовой станции, а второе — от базовой станции до получателя. Базовая стан-
ция просто копирует пакеты из одного соединения в другое в обоих направлениях.
32 бита•
I i i
I I I I I I I
Порт отправителя
Длина UDP
Порт получателя
Контрольная сумма UDP
Рис. 6.32. Разбиение TCP-соединения на два
Преимущество этой схемы состоит в том, что два соединения, на которые раз-
бивается TCP-соединение, оказываются однородными. В ответ на тайм-ауты в
первом соединении отправитель может снизить скорость, а на тайм-ауты во вто-
ром — увеличить. Другие параметры также могут настраиваться независимо для
каждого соединения. Недостаток заключается в том, что такое решение наруша-
ет семантику протокола TCP. Поскольку каждая часть соединения представляет
собой полноценное TCP-соединение, базовая станция сама подтверждает полу-
чение каждого сегмента обычным способом. Только теперь получение подтвер-
ждения отправителем означает не то, что сегмент успешно добрался до получате-
ля, а только то, что его получила базовая станция.
Другое решение, разработанное Балакришнаном (Balakrishnan и др., 1995), не
нарушает семантики протокола TCP. В его основе лежат небольшие изменения
Транспортные протоколы Интернета: TCP 631
в программе сетевого уровня, работающей на базовой станции. Одно из измене-
ний состоит в добавлении специального следящего агента, просматривающего и
кэширующего сегменты, направляемые мобильному хосту, и подтверждений, по-
сылаемых им в ответ. Если следящий агент замечает, что в ответ на ТСР-сегмент,
пересылаемый им мобильному хосту, не поступает подтверждения, он просто пе-
редает этот сегмент еще раз, не информируя об этом отправителя. У следящего
агента есть свой таймер для отслеживания подтверждений, устанавливаемый на
относительно небольшой интервал времени. Он также повторно передает сегмен-
ты, когда получает от мобильного хоста дубликаты подтверждений, означающие,
что хосту чего-то не хватает для счастья. Дубликаты подтверждений уничтожа-
ются на месте, чтобы отправитель на другом конце кабельной сети не принял их
за сигнал о перегрузке.
Недостаток такой прозрачности состоит в том, что при частых потерях сег-
ментов на беспроводном участке у отправителя может истечь интервал ожидания,
и он может запустить механизм борьбы с перегрузкой. В предыдущем варианте
составного TCP-соединения, напротив, алгоритм борьбы с перегрузкой никогда
бы не запустился, если только в сети действительно не образовался бы затор.
Метод Балакришнана также решает проблему потерянных сегментов, отправ-
ляемых мобильным хостом. Если базовая станция замечает разрыв в порядко-
вых номерах получаемых сегментов, она просит повторить недостающие байты.
Благодаря этим двум исправлениям участок беспроводной связи стал более на-
дежным в обоих направлениях, причем для этого не потребовалось изменять се-
мантику протокола TCP и даже информировать о возникающих проблемах от-
правителя.
Хотя протокол UDP и не страдает от тех же самых проблем, что и протокол
TCP, беспроводная связь также представляет для него некоторые трудности. Ос-
новная сложность состоит в том, что программы, использующие протокол UDP,
ожидают от него высокой надежности. Они знают, что гарантии не предоставля-
ются, но, тем не менее, надеются, что протокол UDP почти совершенен. В усло-
виях беспроводной связи до совершенства будет очень далеко. Программы, спо-
собные справляться с потерей UDP-сообщений (но довольно значимой ценой),
попадая из окружения, в котором сообщения теоретически могут теряться, но те-
ряются очень редко, в окружение, в котором они теряются постоянно, могут очень
сильно потерять в производительности.
Беспроводная связь затрагивает также аспекты, отличные от производитель-
ности. Например, как мобильному хосту найти локальный принтер, чтобы не свя-
зываться со своим домашним принтером? В чем-то близкой является проблема
получения веб-страницы для локальной соты, даже если ее имя неизвестно. Кро-
ме того, веб-дизайнеры обычно рассчитывают на большую пропускную способ-
ность сети. Они размещают на каждой странице гигантский логотип, для переда-
чи которого по беспроводному каналу потребуется 10 с при каждом обращении
к этой странице, что чрезвычайно раздражает пользователей.
Беспроводные сети распространяются все шире, поэтому проблемы работы
в них протокола TCP становятся все более острыми. Дополнительную информа-
цию, касающуюся данных вопросов, можно найти в (Barakat и др., 2000; Ghani
и Dixit, 1999; Huston, 2001; Xylomenos и др., 2001).