Э. Таненбаум - Компьютерные сети. (4-е издание) (DJVU) (1130092), страница 151
Текст из файла (страница 151)
Листинг 6.1. Программы использования аскетов для клиента и сервера /* На втой странице содержится клиентская програииа, запрашивающая файл у серверной прогрвнны, расположенной на следующей странице. */ /* Сервер в ответ на запрос высылает файл.*/ 4(тпс!цбе <зуз/бурев.п> Фтпс!цбе <зуз/зосиет.п> Ф)пс1цбе <пег!лет/тп.П> Ф1пс!цбе <петПЬ.П> Нет!пе 5ЕКНЕК РОКТ !2345 /* По договоренности иежду клиентои и серверои */ 4(бет1пе ВОГ 5!7Е 409б /* Разиер передаваеных блоков */ тп! швтп((пт агдс. спвг *агдч) [ !пт с,з.Ьутез; спвг ьцг[ВОГ 517е]: /*буфер для входящего файла */ зтгисс Поз(ей! *П; /*информация о сервере */ вггцст зоскаббг тп спвппе1; /*хранит !Р=адрес */ (т (агдс)-3) Гаса)("Для запуска введите: клиент иия сервера иия файла" ); П - дебпоз(Ьупаще(агдч[Ц ); /* поиск 1Р-адреса хоста */ тт()П) Га(а1("Ошибка выполнения дегпов!Ьупвше") з - зосиет(РГ !НЕТ, 5ОСК 5ТКЕРН.
1РРКОТО ТСР); тт (з<0) Га(аТ("Сонет"): вешает(дспаппе1, О. зттеоцспаппе1)); спаппе1.зтп Тают)у-РГ !НЕТ; шещсру(дсПайпе1.зтп айбг.з аббг,П>П аббг,П>П 1епд(П); сцаппе1.зтп рог(=птопз(5ЕКЙЕК РОКТ): с - соппесь(з.(з(гцст зосиаббг *) всцаппе1. з(теог(спаппе))); тт (с<0) Гага!("Ошибка соединения"): /* Соединение установлено. Посылается имя файла с нулевым байтои на конце */ ыгттбеиз, агдч[2], з[г1еп(агдч[2])+!); /* Получить файл. записать на стандартное устройство вывода */ 662 Глава 8.
Транспортный уровень юП!1е (1) ( Ьутез - геаб(з, Ьцг, ВОГ 517Е); !т Сбутез <- 0) ех!1(О); ыг!Ье(1. Ьцт. Ьуьез); /* Читать из сокета */ /* Проверка конца файла */ /* Записать на стандартное устройство вывода */ ГаСа1(сПаг *зтг!п9) ( рг!ПЬТ( взтп". 5тг!ПО)' ех!Ь(1); ) /* Код про/рампы для сервера */ ((!пс1цбе <зуз/Сурез.п> ф!Пс)цбе <зуз/Тспт).П> Ф!Пс1цбе «зуз/зосхеС.П> ш!пс1цбе <лет!лет/тп.п> (/!пс1цбе <пеббЬ.П> !п( ша!п(!Пс аг9с.
спаг *агОУЕ)): ( !пс з, Ь. 1, Тб. за. Ьутез. оп - 1: сбаг Ьцг[ВОГ 517Е); /* буфер для исходящего файла */ зтгцсс зосйаббг !и сПаппе1: /* содержит !Р-адрес */ /* Создать структуру адреса для привязки к сокету */ шаваев(аспаппе1, О, зтзеог(спаппе1)); /* Нулевой канал */ спаппе1.зтп Ташт1у - АГ 1ИЕТ: сцаппе).з1п асбг.з абог = Птоп)(1ИАООЙ АИУ); сПаппе1.5тп рогт - Птопз(5ЕКУЕЙ РОКТ); /* Пассивный режии. Ожидание соединения */ з - зосйет(АГ 1ИЕТ, 50СК 5ТКЕАМ, 1РРКОТО ТСР); /* создать сокет */ тТ (з<0) тасаТ("ошибка сокета"): зевзоскорт(з, БОБ 5ОСКЕТ.
50 ЙЕОБЕАООЙ. (спаг *) Воп. з!герт(оп)); Ь = Ь!Пб(з, (зтгцст зосхаббг *) асбаппе1, з!геоТ(спаппе1)); !т (Ь<0) Тата1("Ошибка связывания" ); 1 - 1!зтеп(з, ООЕОЕ 517Е); /* Определение размера очереди */ !Т (1<0) тата)("Ошибка ожидания"): /* Теперь сокет установлен и связан. Ожидание и обработка соединения */ ыП11е (1) ( за - ассерв(з. О, О): /* Блокировать обработку запроса */ !Т (за<0) таса1("Ошибка доступа"); геаб(за, Ьцг. ВОГ 517Е); /* считать иия файла из сокета */ /* Получить и вернуть файл */ гц - орел(ьцт. 0 ЙООиеу): /" Открыть файл для отсылки */ Убег!пе 5ЕЙУЕЙ РОЙТ 17345 /* По договоренности между клиентом и серверои */ (/бег!пе ВОГ 517Е 4096 /* Разиер передаваеиых блоков */ обет!пе ПОБОЕ 517Е 10 Элементы транспортных протоколов 663 !т (/б < О) тата)("Ошибка открытия файла" ); иЫ)е (1) ( Ьугев - геаб(/б.
Ьц/, ВОР 51ЛЕ); )т (Ьувев <- О) Ьгеах: ыг((е(ва, Ьц/, в/вез): ) с)озе(тб); с)ове(ва); /* Читать из файла */ /* Проверка конца файла */ /* Записать байты в сокет */ /* Закрыть файл */ /* Разорвать соединение */ ) ) Кстати говоря, такой сервер построен далеко не по последнему слову техники. Осуществляемая проверка ошибок минимальна, а сообщения об ошибках реализованы весьма посредственно. Понятно, что ни о какой защите информации здесь говорить не приходится, а применение аскетичных системных вызовов (Ль(1Х вЂ” зто не лучшее решение с точки зрения независимости от платформы, Делаются нскоторыс нскоррсктныс с тсхничсской точки зрения предположения, например, о том, что имя файла всегда поместится в буфер и будет передано без ошибок.
Система будет обладать низкой производительностью, поскольку все запросы обрабатываются только последовательно (используется один поток запросов). Несмотря на эти недостатки, с помощью данной программы можно организовать полноценный работающий файл-сервер для Интернета. Более подробную информацию можно найти в (Ыуепз, 1997), Элементы транспортных протоколов Подсеть Маршрутизатор Мвршрутизвто Хост квнвп связи в б рис. 6.4.
Окрухгение уровня передачи данных (в); окр)лкение транспортного уровня (б) Транспортная служба реализуется транспортным протоколом, используемым между двумя трштспортиыми сущностями. В некоторых отношениях транспортные протоколы напоминают протоколы передачи данных, подробно изучавшиеся в главе 3. Все эти протоколы, наряду с другими вопросами, занимаются обработкой ошибок, управлением очередями и потоками. Однако у протоколов разных уровней имеется и много различий, обусловленных различиями условий, в которых работают зги протоколы, как показано на рис. бА. На уровне передачи дютных два маршрутизатора общаются напрямую по физическому каналу, тогда как на транспортном уровне физический канал заменен целой подсетью.
Это отличие оказьгвает важное влияние на протоколы. 664 Глава 6, Транспортный уровень Во-первых, на уровне передачи данных маршрутизатору не требуется указывать, с каким маршрутизатором он хочет поговорить, — каждая выходная линия однозначно определяет маршрутизатор, На транспортном уровне требуется явно указывать адрес получателя.
Во-вторых, процесс установки соединения по проводу (рис. 6.4, а) прост: противоположная сторона всегда присутствует (если только она не вышла из строя). В любом случае, работы не очень много. На транспортном уровне начальная установка соединения, как будет показано далее, происходит более сложно. Еще одно весьма досадное различие между уровнем передачи данных и транспортным уровнем состоит в том, что подсеть потенциально обладает возможностями хранения информации. Когда маршрутизатор посылает кадр, он может прибыть или потеряться, но кадр не может побродить где-то какое-то время, спрятаться в отдаленном уголке земного шара, а затем внезапно появиться в самый неподходящий момент 30 секунд спустя. Если подсеть использует дейтаграммы и адаптивную маршрутизацию, то всегда есть ненулевая вероятность того, что пакет будет храниться где-нибудь несколько секунд, а уже потом будет доставлен по назначению.
Последствия способности подсети хранить пакеты иногда могут быть катастрофичными и требуют применения специальных протоколов. Последнее различие между уровнем передачи данных и транспортным уровнем является скорее количественным, чем качественным. Буферизация и управление потоком необходимы на обоих уровнях, но наличие большого динамически изменяющегося количества соединений на транспортном уровне может потребовать принципиально другого подхода, нежели использовавшийся на уровне передачи данных.
Некоторые протоколы, упоминавшиеся в главе 3, выделяют фиксированное количество буферов для каждой линии, так что, когда прибывает кадр, всегда имеется свободный буфер. На транспортном уровне из-за большого количества управляемых соединений идея выделения нескольких буферов каждому соединению выглядит не столь привлекательно. В следующих разделах мы изучим эти и другие важные вопросы. Адресация Когда один прикладной процесс желает установить соединение с другим прикладным процессом, он должен указать, с кем именно он хочет связаться.
(У не требуюшей соединений транспортной службы проблемы такие же; кому следует посылать каждое сообщение?) Применяемый обычно метод состоит в определении транспортных адресов, к которым процессы могут посылать запросы на установку соединения. В Интернете такие конечные точки называются портами.
В сетях АТМ это точки доступа к службе АА1.-ВАР (Яегч1се Ассезз Ро!пг). Мы будем пользоваться нейтральным термином ТИАР (Тгапзрогг Бегч(се Ассезз Ро1пг— точка доступа к службам транспортного уровня). Аналогичные конечные точки сетевого уровня называются ХОР (Хегюогк Бегч1се Ассезз Ро1пг — точка доступа к сетевому сервису). Примерами ХБАР являются 1Р-адреса. Рисунок 6.5 иллюстрирует взаимоотношения между ХБАР, Т5АР и транспортным соединением. Прикладные процессы как клиента, так и сервера могут Элементы транспортных протоколов 566 связываться с ТИАР для установки соединения с удаленным Т8АР. Такие соединения проходят через ХЯАР на каждом хосте, как показано на рисунке. ТВАР нужны для того, чтобы различать конечные точки, совместно использующие М5АР, в сетях, где у каждого компьютера есть свой 1ч1ЯАР.