Создание сетевых программ. Операции записи в TCP

advertisement
Московский государственный университет печати
«Информационные сети и телекоммуникации».
Методические указания
по выполнению лабораторных работ
по дисциплине
Москва
2010
1
Рассмотрены и рекомендованы к изданию
Составители
В.Н. Шурыгин, доц., канд. техн. наук
И.В. Ковалев инженер
Методические указания подготовлены кафедрой информационных систем
МГУП. Приводятся задания к лабораторным работам, по дисциплине
«Информационные сети и телекоммуникации».
Предназначены для студентов специальности 654700 «Информационные системы»
направления 230201.65 «Информационные системы и технологии».
Лабораторные работы №1, 4, 5 подготовлены Шурыгиным В.Н.
Лабораторные работы № 2, 3 подготовлены Ковалевым И.В.
2
ЛАБОРАТОРНАЯ РАБОТА № 1
Изучение сетевых утилит
ЦЕЛЬ РАБОТЫ: познакомиться со средствами проверки работоспособности сетевого
подключения, утилитами ipconfig, ping, tracert, nbtstat, netstat запускаемыми из
командной строки, позволяющими детально продиагностировать работоспособность
подключения компьютера к сети.
1. ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ
Адресация в IP-сетях. Типы адресов компьютеров сети
Каждый компьютер в сети TCP/IP имеет три вида адресов на различных уровнях
модели OSI:
Физический адрес
Сетевой адрес
Символьный адрес
 Физический адрес узла определяется технологией, с помощью которой
построена локальная сеть. Физический адрес узла принадлежит МАС
подуровню канального уровня. Примерами физических адресов являются
МАС-адрес сетевого адаптера или порта маршрутизатора. В сетях Ethernet
адрес имеет 6-ти байтную длину. Старшие 3 байта идентифицируют фирму
производителя, а младшие 3 байта являются уникальными для производителя
и назначаются им самим. Таким образом исключается возможность появления
нескольких одинаковых адресов Например, 58-10-37-С0-В6-5А.
 Примерами сетевых адресов может быть IPX адрес или IP-адрес, состоящий
из 4 байт, например, 107.42.7.252. Этот адрес используется на сетевом уровне.
Он назначается администратором во время конфигурирования компьютеров и
маршрутизаторов. IP-адрес состоит из двух частей: номера сети и номера
узла. Количество байт кодирующее номер сети или узла определяется классом
сети. Узел может входить в несколько IP-сетей. В этом случае узел должен
иметь несколько IP-адресов, по числу сетевых связей. Таким образом, IPадрес характеризует не отдельный компьютер или маршрутизатор, а одно
сетевое соединение.
 Символьный адрес этот адрес назначается администратором и состоит из
нескольких частей, например, имени машины, имени организации, имени
домена. Такой адрес, называемый DNS-адресом, используется на прикладном
уровне, например, в протоколах FTP или telnet. Например, IS.MGUP.RU.
Три основных класса IP-адресов
Существует пять классов IP-адресов отличающихся структурой.
Класс А
0
N сети
N узла
Класс В
1
0
N сети
Класс С
1
1
0
N сети
N узла
N узла
3
Класс D
1
1
1
0
адрес группы multicast
Класс Е
1
1
1
1
0
зарезервирован
Адрес состоит из двух логических частей - номера сети и номера узла в сети.
Класс адреса определяется значениями первых битов адреса:
 К классу А относятся адреса начинающиеся с 0, и номер сети занимает один байт,
остальные 3 байта кодируют номер узла в сети. Сети класса А имеют номера в
диапазоне от 1 до 126. (Номер 0 не используется, а номер 127 используется для
адресации локального компьютера.) В сетях класса А количество узлов должно быть
больше 216 , но не превышать 224-2.
 К классу В относятся адреса начинающиеся с 10. В сетях класса В под адрес сети и
под адрес узла отводится по 16 бит, то есть по 2 байта. В сетях класса В количество
узлов должно быть больше 28 , но не превышать 216-2.
 К классу С относятся адреса начинающиеся с 110. Под адрес сети отводится 24 бита,
а под адрес узла - 8 бит. Числом узлов не больше 28-2.
 К классу D относятся адреса начинающиеся с 1110. Он обозначает особый,
групповой адрес - multicast. Если в пакете в качестве адреса назначения указан адрес
класса D, то такой пакет должны получить все узлы, которым присвоен данный
адрес.
 К классу E относятся адреса начинающиеся с 11110. Этот класс зарезервирован и не
используется.
Таблица иллюстрирует диапазоны номеров сетей, соответствующих каждому классу
сетей.
Класс Наименьший адрес Наибольший адрес Наибольшее количество узлов
01.0.0
126.0.0.0
232-2
A
128.0.0.0
191.255.0.0
216-2
B
C
D
E
192.0.1.0.
224.0.0.0
240.0.0.0
223.255.255.0
239.255.255.255
247.255.255.255
28-2
Отображение символьных адресов на IP-адреса: служба DNS
DNS (Domain Name System) - это распределенная база данных, поддерживающая
иерархическую систему имен для идентификации узлов в сети Internet. Служба DNS
предназначена для автоматического поиска IP-адреса по известному символьному имени
узла. Спецификация DNS определяется стандартами RFC 1034 и 1035.
Протокол DNS является служебным протоколом прикладного уровня. В нем
определены DNS-серверы и DNS-клиенты. DNS-серверы хранят часть распределенной
базы данных о соответствии символьных имен и IP-адресов. Эта база данных распределена
по административным доменам сети Internet. Клиенты сервера DNS знают IP-адрес сервера
DNS своего административного домена и по протоколу IP передают запрос, в котором
сообщают известное символьное имя и просят вернуть соответствующий ему IP-адрес.
Если данные о запрошенном соответствии хранятся в базе данного DNS-сервера, то
он сразу посылает ответ клиенту, если же нет - то он посылает запрос DNS-серверу
другого домена, который может сам обработать запрос, либо передать его другому DNS4
серверу. Все DNS-серверы соединены иерархически, в соответствии с иерархией доменов
сети Internet.
Корень иерархии DNS управляется центром Internet Network Information Center.
Домены верхнего уровня назначаются для каждой страны, и на организационной основе.
Например:
 ru – Россия
 de - Германия





com - коммерческие организации;
org - некоммерческие организации;
net - организации, поддерживающие сети;
edu - образовательные;
gov - правительственные организации.
Каждый домен DNS администрируется отдельной организацией, которая обычно
разбивает свой домен на поддомены и передает функции администрирования этих
поддоменов другим организациям. Каждый домен имеет уникальное имя, а каждый из
поддоменов имеет уникальное имя внутри своего домена. Имя домена может содержать до
63 символов. Каждый хост в сети Internet однозначно определяется своим полным
доменным именем, которое включает имена всех доменов по направлению от хоста к
корню. Пример полного DNS-имени:
is.mgup.edu.ru
Автоматизация процесса назначения IP-адресов узлам сети - протокол DHCP
Наряду с ручным способом назначения IP-адресов существует динамическое их
назначениес помощью протокола DHCP (Dynamic Host Configuration Protocol).
Основным назначением DHCP является автоматическое назначение IP-адресов.
При автоматическом статическом способе DHCP-сервер присваивает IP-адрес (и,
возможно, другие параметры конфигурации клиента) из набора наличных IP-адресов без
вмешательства оператора. Границы пула назначаемых адресов задает администратор при
конфигурировании DHCP-сервера. Между идентификатором клиента и его IP-адресом
существует постоянное соответствие. Оно устанавливается в момент первичного
назначения сервером DHCP IP-адреса клиенту. При всех последующих запросах сервер
возвращает тот же самый IP-адрес.
При динамическом распределении адресов DHCP-сервер выдает адрес клиенту на
ограниченное время, что дает возможность впоследствии повторно использовать IP-адреса
другими компьютерами. Динамическое разделение адресов позволяет строить IP-сеть,
количество узлов в которой намного превышает количество имеющихся в распоряжении
администратора IP-адресов.
2. Ход работы
Диагностика сети с использованием утилиты Диагностика сети.
В ОС Windows XP для диагностики сетевого подключения можно воспользоваться специальным
мастером. Этот мастер вызывается из меню программы Сведения о системе (Пуск > Все
программы > Стандартные > Служебные > Сведения о системе).
Далее: меню Сервис > Диагностика сети:
5
Рис. 1.1. Утилита диагностика сети
Определение настроек для подключения к локальной сети и к сети Internet с
использованием утилиты ipconfig.
Утилита ipconfig (IP configuration) предназначена для получения информации о
соединении по локальной сети и настройки протокола IP для операционной системы
Windows. Для получения этой информации выполните ПускСтандартныеКомандная
строка.
На подключенном к сети компьютре введите:
ipconfig /all
Скопируйте в отчет полученный листинг. Изучите его и прокомментируйте информацию
содержащуюся в строках. Поместить изображение текущего окна в отчёт можно
нажатием ALT+PrintScreen при активном копируемом окне, а затем клавиш CTRL+V в
редакторе MS Word. Скопировать текст из окна командной строки можно, выделив
необходимый текст с помощью мыши и нажав на выделенном участке правой кнопкой
мыши, затем нажатием Ctrl+V вставить в редакторе MS Word.
Отключите сетевое подключение компьютера и повторите команду. При отсутствующем
соединении на экран выводятся только данные о "физических" параметрах сетевой карты и
сообщение, что сеть не подключена.
6
Исследование статистических временных характеристик сегментов составной сети с
использованием утилиты ping.
Утилита ping (Packet Internet Groper) является одним из главных средств,
используемых для отладки сетей, и служит для принудительного вызова ответа
конкретного компьютера. Она используется для проверки работы протоколов TCP/IP на
удаленных устройствах, адресов устройств в локальной сети, адреса и маршрута для
удаленного сетевого устройства. В выполнении команды ping участвуют система
маршрутизации, процедуры разрешения адресов и сетевые шлюзы. PING - утилита низкого
уровня, которая не требует наличия серверных процессов на опрашиваемом узле, поэтому
успешный результат при прохождении запроса говорит только о том, что сеть находится в
рабочем состоянии, питание опрашиваемой машины включено, и машина не находится в
состоянии отказа.
Запросы утилиты ping передаются по протоколу ICMP (Internet Control Message
Protocol). Получив такой запрос, программное обеспечение, реализующее протокол IP у
адресата, посылает эхо-ответ. По умолчанию передается 4-е запроса, после чего выводятся
статистические данные. При необходимости изменения количества запросов следует
использовать ключ – n. Некоторые серверы в целях безопасности могут не посылать эхоответы (например, www.microsoft.com).
Формат команды: ping [-t][-a][-n][-l][-f][-i TTL][-v TOS]
[-r][][имя машины][[-j списокУзлов]|[-k списокУзлов]][-w]
Параметры утилиты ping
Ключи
Функции
-t
Отправка пакетов на указанный узел до команды прерывания
-a
Определение адресов по именам узлов
-n
Число отправляемых запросов
-l
Размер буфера отправки
-f
Установка флага, запрещающего фрагментацию пакета
-i TTL
Задание времени жизни пакета (поле "Time To Live")
-v TOS
Задание типа службы (поле "Type Of Service")
-r
Запись маршрута для указанного числа переходов
-s
Штамп времени для указанного числа переходов
-j список узлов Свободный выбор маршрута по списку узлов
-k список узлов Жесткий выбор маршрута по списку узлов
-w интервал
Интервал ожидания каждого ответа в миллисекундах
На практике большинство опций в формате команды можно опустить, тогда в
командной строке может быть: ping имя узла.
Для проверки правильности работы протокола TCP/IP. Откройте командную строку и выполните
команду:
ping 127.0.0.1
Адрес 127.0.0.1 — это личный адрес любого компьютера. Таким образом, эта команда
проверяет прохождение сигнала "на самого себя". Она может быть выполнена без наличия
какого-либо сетевого подключения.
Включите в отчет листинг с ответом компьютера. Изучите и прокомментируйте его.
По умолчанию команда посылает пакет 32 байта. Размер пакета может быть увеличен до 65
кбайт. Так можно обнаружить ошибки при пересылке пакетов больших размеров. За размером
тестового пакета отображается время отклика удаленной системы (в нашем случае — меньше 1
миллисекунды). Потом показывается еще один параметр протокола — значение TTL. TTL —
7
"время жизни" пакета. На практике это число маршрутизаторов, через которые может пройти
пакет. каждый маршрутизатор уменьшает значение TTL на единицу. При достижении нулевого
значения пакет уничтожается. Такой механизм введен для исключения случаев зацикливания
пакетов.
Если будет показано сообщение о недостижимости адресата, то это означает ошибку
установки протокола IP. В этом случае следует переустановить протокол TCP/IP.
Для проверки видимости другого компьютера сети. Выполните команду ping, указав адрес
соответствующего компьютера сети. Наличие отклика свидетельствует о том, что канал связи
установлен и работает. Включите листинг в отчет и прокомментируйте его.
Для проверки работоспособности сервера имен Internet. Выполните команду
ping www.yandex.ru
Если система сможет различить IP-адрес этого хоста, то система распознавания имен
работоспособна. Включите листинг в отчет и прокомментируйте его.
Как уже упоминалось, при каждом получении ответа от опрашиваемого узла
выводится значение TTL, которое равно начальному значению этого поля, уменьшенному
на количество маршрутизаторов, через которые прошёл пакет. Для определения
количества маршрутизаторов до опрашиваемого узла, необходимо из исходного значения
TTL вычесть полученное значение TTL. Исходное значение TTL может быть разным на
разных компьютерах, поэтому для определения количества маршрутизаторов до
опрашиваемого узла необходимо с помощью ключа i явно задать значение TTL в
параметрах команды ping. Если изменение начального параметра TTL не приводит к изменению
конечного значения TTL, для определения количества маршрутизаторов, через которые прошел
пакет, необходимо использовать утилиту tracert.
Исследование топологии сегментов составной сети с использованием утилиты tracert.
Утилита tracert позволяет выявлять последовательность шлюзов, через которые
проходит IP-пакет на пути к пункту своего назначения.
Формат команды: tracert имя_компьютера
Имя компьютера может быть задано в символической или числовой форме.
Выходная информация представляет собой список машин, начиная с первого шлюза и
кончая пунктом назначения. Кроме того, показано полное время прохождения каждого
шлюза.
Пример:
tracert ya.ru
Трассировка маршрута к ya.ru [213.180.204.8]
с максимальным числом прыжков 30:
1 2 ms 2 ms 2 ms zakat-20.ultra.net.ru [192.168.20.1]
2 3 ms 2 ms 2 ms r0-7-3.ultra.net.ru [10.7.3.1]
3 12 ms 10 ms 9 ms gw.ultranet.ru [213.33.170.41]
4 7 ms 9 ms 7 ms border.ultranet.ru [213.33.170.35]
5 97 ms 23 ms 22 ms 213.33.134.45
6 16 ms 17 ms 17 ms cisco02.Moscow.gldn.net [194.67.17.66]
7 21 ms 20 ms 19 ms cisco13.Moscow.gldn.net [194.186.157.206]
8 20 ms 25 ms 23 ms ix1-m10.yandex.net [193.232.246.93]
9 20 ms 20 ms 19 ms ya.ru [213.180.204.8]
8
Трассировка завершена.
Пакеты посылаются по три на каждый узел. Если узел не отвечает, то при
превышении интервала ожидания ответа выдается сообщение «Превышен интервал
ожидания для запроса». Интервал ожидания ответа может быть изменен с помощью опции
–w команды tracert. Символ * означает потерю посланного пакет.
Команда tracert работает путем установки поля времени жизни (числа переходов)
исходящего пакета таким образом, чтобы это время истекало до достижения пакетом
пункта назначения. Когда время жизни истечет, текущий шлюз отправит сообщение об
ошибке на машину-источник. Каждое приращение поля времени жизни (числа переходов)
позволяет пакету пройти на один шлюз дальше.
Команда tracert посылает для каждого значения поля времени жизни (числа
переходов) три пакета. Если промежуточный шлюз распределяет трафик по нескольким
маршрутам, то эти пакеты могут возвращаться разными машинами. В этом случае на
печать выводятся они все. Некоторые системы не посылают уведомлений о пакетах, время
жизни которых истекло, а некоторые посылают уведомления, которые поступают обратно
на машину-источник только после того, как истекло время их ожидания командой tracert.
Эти шлюзы обозначаются рядом звездочек. Даже если конкретный шлюз определить
нельзя, tracert чаще всего сможет увидеть следующие за ним узлы маршрута.
Примечание:
Для вывода информации в файл используйте символ перенаправления потока вывода
«>». Данный символ справедлив и для утилит ping и tracert.
Пример:
tracert 195.208.164.1 > tracert.txt
Отчет о трассировке маршрута до указанного узла будет помещен в файл tracert.txt.
Сбор статистической информации о взаимодействиях по протоколам NetBIOS и
TCP/IP.
Для указанной цели служат команды NBTSTAT и NETSTAT соответственно.
Наберите эти команды со знаком вопроса для получения описания о ключах.
Изучите их назначение и примените в сочетании с адресами узлов вашей сети.
Программный продукт Smart Whois
Программный продукт Smart Whois был разработан для возможности определения
пользователем принадлежности заданного IP-адреса к одной из существующих подсетей
сети Internet. Также данный продукт позволяет определить провайдера услуг Интернет,
ответственного за оказание услуг связи, его адрес, а также некоторую личную
информацию.
Ниже на рисунке показано окно программы Smart Whois.
В верхней строке, в поле IP, вводиться DNS-имя узла, либо его IP-адрес. После
нажатия кнопки «Запрос» происходит автоматическое соединение с сервером Whois,
который генерирует отображенную на рисунке информацию, используя свою внутреннюю
базу данных. В левой части окна отображается информация принадлежности выбранного
компьютера к группе подсетей Интернет. В правой части экрана отображается информация
об организации, которой принадлежит данный участок сети, и об администраторе,
обслуживающем данный участок сети.
9
Рис.1.2.
Программный продукт Smart Whois
3. ЗАДАНИЕ НА ЛАБОРАТОРНУЮ РАБОТУ
Список адресов узлов для всех вариантов приведён в 4-ом пункте.
3.1.
Подобрать три DNS адреса.
3.2.
Для каждого DNS адреса с помощью утилиты ipconfig определить IP адрес
компьютера, адреса DNS-серверов и используется ли DHCP.
3.3.
С помощью команды ping проверить состояние связи cо всеми тремя узлами
(работоспособными) в соответствии с вариантом задания. Число отправляемых
запросов должно составлять не менее 20. В отчёте привести одну копию окна с
результатами команды ping. В качестве результата отразить для каждого из
исследуемых узлов:
a. процент потерянных пакетов;
b. время передачи и приема (наименьшее, наибольшее и среднее);
c. количество маршрутизаторов до опрашиваемого узла;
d. IP адрес узла.
a.
b.
c.
d.
3.4.
№
узл
а
Произвести трассировку не менее двух работоспособных узлов в соответствии с
вариантом задания. Результаты запротоколировать в таблице.
время
Время
время
среднее
DNS-имя
IP-адрес
прохождени прохождени прохождени
вермя
маршрутизатор Маршрутизатор
я
я
я
прохождени
а
а
пакета №1
пакета №2
пакета №3
я пакета
В отчёте привести одну копию окна с результатами команды tracert. Для каждого
опрашиваемого узла определить участок сети, который характеризуется наибольшей
задержкой при пересылке пакетов.
10
3.5. С помощью программы Smart Whois, требуется для двух работоспособных Internetузлов определить:
 a. страну, где находится узел;
 b. диапазон IP-адресов, т.е. IP-сеть, к которой принадлежит исследуемый узел;
 c. класс сети, к которой принадлежит IP-узел;
 d. кому принадлежит рассматриваемая IP-сеть;
 e. если есть – администраторов сети.
4. Содержание отчета
1. Титульный лист.
2. Название и цель работы.
3. Теоретическое обоснование.
4. Описание результатов работы примеров из части № 2.
5. Постановка задачи для самостоятельного тестирования (часть № 3).
6. Описание результатов работы заданий из части № 3.
11
Лабораторная работа 2
Настройка беспроводной сети на основе точки доступа
ЦЕЛЬ РАБОТЫ: Изучение беспроводных сетей на основе точек доступа HP
ProCurve Wireless Access Point 10AG WW
1. Теоретическое обоснование
Беспроводная сеть – система передачи данных, в которой в качестве носителя
используются радиоволны. Компьютеры пользователей, серверы, коммутаторы и
другое сетевое оборудование остаются на месте, только провода заменяются
радиоканалами. В остальном беспроводная сеть Wi-Fi – такая же локальная
компьютерная сеть, какую можно встретить сейчас в любом офисе.
Беспроводная сеть предоставляет пользователям доступ к информационным ресурсам
там, где развертывание кабельной системы невозможно, нежелательно или
экономически нецелесообразно. Использование беспроводных технологий позволяет
добиться свободы перемещения пользователя, хотя и в ограниченном пространстве.
Удобно использовать беспроводные технологии для организации временных
подключений, а поскольку не требуется прокладки проводов и установки
информационных розеток, то подключение нового пользователя к сети выполняется
очень быстро.
Технология Wi-Fi разрабатывалась для двух целей. Первая и основная – организация
локальных компьютерных сетей внутри помещений (офисов или квартир). Вторая –
связь двух или нескольких проводных локальных сетей, находящихся на относительно
небольшом расстоянии друг от друга. Под небольшим расстоянием здесь
подразумеваются сотни метров, в отдельных случаях – несколько километров.
1. Стандарты серии IEEE 802.11
Компоненты и характеристики беспроводных сетей определяются семейством
стандартов IEEE 802.11. Этот стандарт входит в серию IEEE 802.x, куда также входят
стандарты 802.3 Ethernet, 802.5 Token Ring и др.
802.11. Первоначальный стандарт беспроводных сетей. Поддерживает передачу данных
со скоростью 1–2 Мбит/с. В настоящее время не используется.
802.11a. Работает на частоте 5 ГГц, поддерживает скорость соединения до 54 Мбит/с.
Преимуществом этого стандарта является то, что диапазон 5 ГГц относительно
свободен. Недостаток – более высокая стоимость оборудования.
802.11b – работает на частоте 2,4 ГГц, поддерживает скорость соединения до 11
Мбит/с. Стандарт был очень распространен, но уступил свои позиции стандарту
802.11g.
802.11g – работает на частоте 2,4 ГГц, поддерживает скорость соединения до 54
Мбит/с. Устройства этого стандарта обратно совместимы с устройствами стандарта
802.11b. Это означает, что могут работать смешанные сети, состоящие из устройств
стандартов 802.11b и 802.11g.
802.11n – спецификация беспроводных сетей, которая разработанная на базе
предложений групп EWC, TGn Sync и WWiSE. Теоретически 802.11n способен
12
обеспечить скорость передачи данных до 480 Мбит/с. Устройства 802.11n работают в
диапазонах 2,4- 2,5 или 5,0 ГГц.
Кроме того, устройства 802.11n могут работать в трёх режимах:
наследуемом (Legacy), в котором обеспечивается поддержка устройств
802.11b/g и 802.11a
смешанном (Mixed), в котором поддерживаются устройства 802.11b/g,
802.11a и 802.11n
«чистом» режиме — 802.11n (именно в этом режиме и можно
воспользоваться преимуществами повышенной скорости и увеличенной
дальностью передачи данных, обеспечиваемыми стандартом 802.11n).
В беспроводных сетях скорость соединения и скорость передачи полезных данных
значительно отличаются. При скорости соединения 54 Мбит/с реальная скорость
передачи данных обычно составляет 22–26 Мбит/с.
Значительное различие скорости соединения и реальной скорости передачи данных в
беспроводных сетях связано с большими накладными расходами в методе обработке
коллизий.
Поскольку не все устройства в беспроводной сети «слышат» друг друга (каждый
«слышит» точку доступа, но не обязательно соседние устройства), метод обнаружения
коллизий CSMA/CD, который используется в сетях Ethernet, в беспроводной сети
работать не может. Поэтому используется метод «CSMA/CD с квитированием»: на
каждый пакет ожидается подтверждение доставки, если подтверждение не поступило,
считается, что произошла коллизия, и пакет передается повторно. Квитанции и
повторно переданные пакеты могут составлять значительный трафик.
Соединение не всегда устанавливается на максимальной скорости. Это зависит от
многих факторов: конфигурации помещения, количества и расположения клиентских
устройств, наличия помех и т. д. Общее правило для беспроводных сетей: скорость
передачи данных падает при увеличении расстояния и при увеличении числа
клиентских устройств.
2. Точка доступа, мост, репитер, беспроводной клиент
Беспроводная сеть Wi-Fi состоит из точек доступа и клиентских устройств (настольных
компьютеров, ноутбуков, КПК), оснащенных беспроводными адаптерами. Точки
доступа могут работать в пяти различных режимах:
собственно точка доступа (Access Point);
мост «точка – точка» (Wireless Bridge);
мост «точка – много точек» (Multi-point Bridge);
репитер (Repeater);
беспроводной клиент (Wireless Client).
Также в состав беспроводной сети могут входить различные устройства со
встроенными точками доступа – ADSL-модемы, маршрутизаторы, принт-серверы,
видеокамеры и т. д.
Точка доступа (access point, AP) – приемо-передающее радиоустройство,
обеспечивающее связь между мобильными пользователями и их подключение к
проводной локальной сети.
Точки доступа, работающие в режиме беспроводного моста, обеспечивают
беспроводное соединение между двумя проводными сетями. Точки доступа в режиме
репитера используются для расширения площади покрытия беспроводной сети. Точки
13
доступа в режиме беспроводного клиента выполняют функции клиентского адаптера.
Этот режим используется, когда нет возможности установить в компьютер обычный
адаптер Wi-Fi, но имеется интерфейс Ethernet.
3. Режимы работы: инфраструктурный и Ad-Hoc
Беспроводное оборудование стандарта Wi-Fi может работать в режиме с
использованием точек доступа (инфраструктурный режим), а также в режиме прямого
соединения устройств, который называют режимом Ad-Hoc, а также Independent Basic
Service Set (IBSS) или режимом Peer-to-Peer (точка-точка).
Одноранговая беспроводная сеть в режиме Ad-Hoc может быть создана для обмена
файлами между участниками совещания, деловой встречи, семинара. Также этот режим
может использоваться для связи двух-трех компьютеров в квартире или малом офисе (в
частности, для совместного использования принтера, подключенного к одному из этих
компьютеров). Такая сеть не имеет подключения к проводной инфраструктуре.
Соединение между компьютерами устанавливается вручную по мере необходимости.
Для развертывания сети в режиме Ad-Hoc необходимо наличие двух или более
устройств, снабженных беспроводными сетевыми адаптерами. Такими устройствами
могут быть ноутбуки, настольные компьютеры, карманные компьютеры (КПК). Работу
в режиме Ad-Hoc поддерживают и некоторые специальные устройства, такие как
беспроводные принт-серверы и видеокамеры.
Теоретически (точнее, по стандарту) в одной сети в режиме Ad-Hoc могут работать до
256 устройств, но приемлемая скорость обмена данными достигается при наличии не
более 6–8 устройств.
На практике режим Ad-Hoc может быть рекомендован только для организации
временных сетей. Другими словами, если нужно быстро скопировать файл с одного
компьютера на другой, этот режим вполне подходит.
4. Обозначения и термины
SSID (Service Set Identifier) – уникальное наименование беспроводной сети,
отличающее одну сеть Wi-Fi от другой. В настройках всех устройств, которые должны
работать в одной беспроводной сети, должен быть указан одинаковый SSID. SSID
выбирается администратором сети самостоятельно и может содержать до 32 символов.
Значение SSID на клиентском устройстве, равное «ANY», означает возможность
подключения к любой доступной сети.
DHCP (англ. Dynamic Host Configuration Protocol — протокол динамической
конфигурации узла) — это сетевой протокол, позволяющий компьютерам
автоматически получать IP-адрес и другие параметры, необходимые для работы в сети
TCP/IP. Данный протокол работает по модели «клиент-сервер». Для автоматической
конфигурации компьютер-клиент на этапе конфигурации сетевого устройства
обращается к т. н. серверу DHCP, и получает от него нужные параметры.
MAC-адрес (от англ. Media Access Control — управление доступом к среде) — это
уникальный идентификатор сетевого адаптера , сопоставляемый с различными типами
оборудования для компьютерных сетей.
Стандарты IEEE определяют 48-разрядный (6 октетов) MAC-адрес, который разделен
на четыре части.
Первые 3 октета содержат 24-битный уникальный идентификатор организации, или код
производителя). Следующие три октета выбираются изготовителем для каждого
14
экземпляра устройства.
Например адрес 00:1D:60:34:AB:40. 00:1D:60 указывает на то что адаптер сделан
компанием ASUStec, а 34:AB:40 случайный набор символов.
5. Режимы работы
Доступ без аутентификации
None
Может подключиться любой клиент. Аутентификации и шифрования трафика нет.
WEP (Wired Equivalent Privacy)
Первый протокол безопасности для сетей Wi-Fi, определенный стандартом IEEE
802.11b. Был разработан для обеспечения уровня безопасности, аналогичного тому,
какой существует в проводных локальных сетях. Реализовано два режима работы Open
System, Shared Key (см. ниже).
Протокол обеспечивает шифрование данных, передаваемых по радиоканалу. К
сожалению, протокол оказался не столь надежным, как ожидалось. Основным его
недостатком является использование статического ключа для шифрования данных.
Open System, Shared Key
При использовании протокола WEP возможны два типа взаимной аутентификации
беспроводных устройств (Authentication Type): Open System и Shared Key. При
аутентификации Open System к беспроводной сети может подключиться любое
устройство с соответствующим значением SSID. Ключи WEP в процессе
аутентификации не проверяются.
Аутентификация типа Shared Key требует, чтобы точка доступа и беспроводной
адаптер имели одинаковый ключ WEP который вбивается администратором точки и
выдаётся клиенту.
Процесс аутентификации в режиме Shared Key выглядит следующим образом. В ответ
на запрос клиентского устройства на подключение к сети Wi-Fi точка доступа посылает
незашифрованное тестовое сообщение (challenge text). Клиент зашифровывает это
сообщение своим ключом WEP и возвращает точке доступа. Точка доступа
расшифровывает сообщение с помощью своего ключа WEP и, если результат совпадает
с исходным сообщением, разрешает доступ.
На смену WEP пришли более надежные протоколы WPA и 802.11i. Тем не менее
протокол WEP продолжает широко использоваться, так как не все устройства
поддерживают новые протоколы безопасности и не везде требуется уровень защиты
обеспечиваемый протоколами WPA и WPA2.
WPA (Wi-Fi Protected Access)
Протокол представляет собой обновленную программу сертификации устройств
беспроводной связи. Технология WPA пришла на замену технологии защиты
беспроводных сетей WEP. Плюсами WPA являются усиленная безопасность данных и
ужесточенный контроль доступа к беспроводным сетям. Немаловажной
характеристикой является совместимость между множеством беспроводных устройств
как на аппаратном уровне, так и на программном.
Также, WPA оснащен временным модулем для шифрования WEP-движка посредствам
128 – битного шифрования ключей и использует временной протокол целостности
ключей (TKIP). А с помощью контрольной суммы сообщения (MIC) предотвращается
изменение или форматирование пакетов данных. Такое сочетание технологий
15
защищает конфиденциальность и целостность передачи данных и гарантирует
обеспечение безопасности путем контроля доступа, так чтобы только авторизованные
пользователи получили доступ к сети.
WPA2,
WPA2 определяется стандартом IEEE 802.11i, принятым в июне 2004 года, и призван
заменить WPA. В нём реализовано CCMP и шифрование AES, за счет чего WPA2 стал
более защищенным, чем свой предшественник. С 13 марта 2006 года поддержка WPA2
является обязательным условием для всех сертифицированных Wi-Fi устройств.
Для протоколов WPA и WPA2 реализовано два режима аутентификации и шифрования
трафика Pre-Shared Key и 802.1x
Pre-Shared Key (WPA-PSK).
При применении режима PSK необходимо ввести один пароль для каждого отдельного
узла беспроводной сети (беспроводные маршрутизаторы, точки доступа, мосты,
клиентские адаптеры). Если пароли совпадают с записями в базе, пользователь получит
разрешение на доступ в сеть.
802.1x
Протокол, определенный стандартом IEEE 802.1x, используется при аутентификации и
авторизации пользователей с последующим предоставлением доступа к среде передачи
данных. При этом применяются динамические ключи вместо статических,
используемых в WEP (предусматривается частая смена ключей шифрования, что
сильно затрудняет взлом сети).
Протокол предполагает совместную работу трех протоколов:
EAP (Extensible Authentication Protocol) – расширяемый протокол аутентификации;
TLS (Transport Layer Security) – протокол безопасности транспортного уровня;
RADIUS (Remote Authentication Dial-In User Server) – сервер аутентификации
удаленных пользователей.
Запрос пользователя на доступ к сети переадресовывается на отдельный сервер
RADIUS (реализуемый аппаратно или устанавливаемый как программа на OC Linux и
BSD), который выполняет аутентификацию и разрешает или запрещает доступ.
Описание точки доступа
На передней панели (рис 2.1) расположены индикаторы активности устройства
(Power), начальной диагностики (Diag), наличия и скорости подключения к
локальной сети (LAN), режимов работы беспроводной сети (Wireless)
16
Рис. 2.1. Вид спереди точки доступа
На задней панели установлены (рис 2.2) (слева направо) гнездо для блока питания
(адаптера 220-12 В), порт для подключения сетевого кабеля, кнопка сброса
настроек.
Всенаправленные антенны
Гнездо блока
питания
Порт 10/100
BASE-TX Ethernet
LAN
Кнопка сброса
настроек
Рис. 2.2. Вид сзади точки доступа
2. Ход работы
Настройка точки доступа через web-интерфейс
17
Для настройки точки доступа нужно подключиться по ethernet кабелю к точке
доступа. В сетевых настройках компьютера вбить ip-адрес 192.168.1.4 и маску сети
(net mask) 255.255.255.0.
В браузере ввести адрес 192.168.1.14 (адрес точки по умолчанию). Логин и пароль
для входа в систему admin/password
Появится информационное окно показанное на рис. 3.3.
Рис. 3.3 Идентификация пользователя.
войдя в меню Basic Settings (рис 3.4) впишите сетевые реквизиты как показано на
рисунке:
Рис. 3.4. Базовые настройки
Где System name – имя данной точки (а не имя беспроводной сети); Location –
местоположение точки
Contact – телефон/email или иной способ связи с ответственным за эту точку
IP Address
18
DHCP client Disable (в лабораторной подсети нет DHCP сервера);
IP Address – 192.168.0.5;
IP Subnet Mask – 255.255.255.240;
Default gateway - 192.168.0.1
Country/Region – Russia
Подтвердите настройки нажав клавишу Apply. Появится предупреждение (рис .3.5)
Рис. 3.5. Подтверждение настроек
Нажмите “OK”
Измените сетевые реквизиты вашего компьютера на изначальные и введите в браузере
адрес 192.168.0.5. вбейте логин и пароль admin/password. Окно информации теперь
имеет вид показанный на рис. 3.6
Рис. 3.6. Информационное окно с новыми настройками.
19
Переходим к настройке беспроводной сети. Щелкните по Wireless Settings. Откроется
экран со списком созданных сетей. По умолчанию создана одна сеть с названием
(SSID) wireless-g работающая в смешанном режиме (g/b) на шестом канале без какойлибо защиты (рис .3.7).
Рис 3.7. Настройка беспроводной сети.
Нажмите кнопку edit и измените настройки сети как показано на рис. 3.8.
Рис 3.8. Задание параметров беспроводной сети
Где Wireless Network Name (SSID) - идентификатор сети
SSID Broadcast – разрешена широковещательная передача идентификатора сети или
нет.
Channel / Frequency – канал/частота на которой идёт приём и передача для данной сети
Mode - режим связи (а, b, g, g и b)
Data rate – максимальная скорость передачи данных.
Выставив настройки как указано на рисунке, нажмите кнопку Apply.
Перейдите к следующему пункту «Security Settings» (рис. 3.9).
Для обеспечения максимальной защиты созданной сети выберите пункт WPAPSK(TKIP)/ WPA2-PSK(AES). Введите Password Phrase (в разных устройствах также
называется пароль или ключ), например qwertyuiop. Нажмите кнопку Apply.
20
Рис 3.9. Выбор параметров безопасности.
Пункты Access Control (настройка доступа по mac-адресам) и Advanced Settings
пропускаем
Переходим к настройке клиента (коммуникатора).
На коммуникаторе коснитесь стилусом значка участка экрана со статусами
беспроводных адаптеров (рис 3.10).
Рис. 3.10. Вход в меню беспорводных сетей.
Появится меню беспроводных соединений. Коснитесь стилусом области экрана где
написано Wi-Fi. Подождите пока адаптер активируется (появится надпись доступен)
(рис 3.11 а, б).
21
а
б
Рис. 3.11. Активация wi-fi адаптера.
Затем выберите в области Меню пункт «Параметры Wi-Fi».
Появится список доступных сетей. Выберите сеть lab-wifi-1 и нажмите подключить
(рис 3.12).
а
б
Рис. 3.12. Выбор беспроводной сети
В появившемся экране нажмите «Далее».
Выставьте проверку подлинности WPA2-PSK, шифрование данных AES, ключ
шифрования (Password Phrase). Переключение на латиницу производится клавишей au
(рис 3.13).
22
а
б
Рис. 3.13. Выбор режима защиты и ввод пароля.
Нажмите Далее, затем Готово.
Коммуникатор автоматически подключится к сети (рис 3.14).
а
б
23
в
г
Рис. 3.14. Подключение коммутатора к беспроводной сети
3. Содержание отчета
1. Титульный лист.
2. Название и цель работы.
3. Теоретическое обоснование.
4. Постановка задачи для самостоятельной разработки.
5. Описание операций (включая скриншоты) выполненных при настройке беспроводной сети
24
ЛАБОРАТОРНАЯ РАБОТА №3
Настройка коммутаторов
Цель работы: Изучение базовой настройки коммутаторов HP ProCurve Switch 2512
(J4812A).
Теоретическое обоснование
Сетевой коммутатор или свитч (от англ. switch — переключатель) —
устройство, предназначенное для соединения нескольких узлов компьютерной сети
в пределах одного сегмента. В отличие от концентратора, который распространяет
трафик от одного подключенного устройства ко всем остальным, коммутатор
передаёт данные только непосредственно получателю, исключение составляет
широковещательный трафик (на MAC-адрес FF:FF:FF:FF:FF:FF) всем узлам сети.
Это повышает производительность и безопасность сети, избавляя остальные
сегменты сети от необходимости (и возможности) обрабатывать данные, которые им
не предназначались.
Коммутатор работает на канальном уровне модели OSI, и потому в общем
случае может только объединять узлы одной сети по их MAC-адресам.
Коммутаторы были разработаны с использованием мостовых технологий и часто
рассматриваются как многопортовые мосты. Для соединения нескольких сетей на
основе сетевого уровня служат маршрутизаторы.
Принцип работы коммутатора
Коммутатор хранит в памяти таблицу коммутации (хранящуюся в
ассоциативной памяти), в которой указывается соответствие MAC-адреса узла порту
коммутатора. При включении коммутатора эта таблица пуста, и он работает в
режиме обучения. В этом режиме поступающие на какой-либо порт данные
передаются на все остальные порты коммутатора. При этом коммутатор
анализирует кадры (фреймы) и, определив MAC-адрес хоста-отправителя, заносит
его в таблицу. Впоследствии, если на один из портов коммутатора поступит кадр,
предназначенный для хоста, MAC-адрес которого уже есть в таблице, то этот кадр
будет передан только через порт, указанный в таблице. Если MAC-адрес хостаполучателя не ассоциирован с каким-либо портом коммутатора, то кадр будет
отправлен на все порты. Со временем коммутатор строит полную таблицу для всех
своих портов, и в результате трафик локализуется.
Режимы коммутации
Существует три способа коммутации. Каждый из них — это комбинация таких
параметров, как время ожидания и надёжность передачи.
1. С промежуточным хранением (Store and Forward). Коммутатор читает всю
информацию в кадре, проверяет его на отсутствие ошибок, выбирает порт
коммутации и после этого посылает в него кадр.
25
2. Сквозной (cut-through). Коммутатор считывает в кадре только адрес
назначения и после выполняет коммутацию. Этот режим уменьшает задержки при
передаче, но в нём нет метода обнаружения ошибок.
3. Бесфрагментный (fragment-free) или гибридный. Этот режим является
модификацией сквозного режима. Передача осуществляется после фильтрации
фрагментов коллизий (кадр размером 64 байта обрабатываются по технологии storeand-forward, остальные по технологии cut-through).
Латентность, связанная с «принятием коммутатором решения», добавляется к
времени, которое требуется кадру для входа на порт коммутатора и выхода с него и
вместе с ним определяет общую задержку коммутатора.
Симметричная и асимметричная коммутация
Свойство симметрии при коммутации позволяет дать характеристику
коммутатора с точки зрения ширины полосы пропускания для каждого его порта.
Симметричный коммутатор обеспечивает коммутируемые соединения между
портами с одинаковой шириной полосы пропускания, например, когда все порты
имеют ширину пропускания 10 Мб/с или 100 Мб/с.
Асимметричный коммутатор обеспечивает коммутируемые соединения между
портами с различной шириной полосы пропускания, например, в случаях
комбинации портов с шириной полосы пропускания 10 Мб/с и 100 Мб/с или 100
Мб/с и 1000 Мб/с.
Асимметричная коммутация используется в случае наличия больших сетевых
потоков типа клиент-сервер, когда многочисленные пользователи обмениваются
информацией с сервером одновременно, что требует большей ширины пропускания
для того порта коммутатора, к которому подсоединен сервер, с целью
предотвращения переполнения на этом порте. Для того, чтобы направить поток
данных с порта 100 Мб/с на порт 10 Мб/с без опасности переполнения на
последнем, асимметричный коммутатор должен иметь буфер памяти.
Асимметричный коммутатор также необходим для обеспечения большей
ширины полосы пропускания каналов между коммутаторами, осуществляемых
через вертикальные кросс-соединения или каналов между сегментами магистрали.
Буфер памяти
Для временного хранения пакетов и последующей их отправки по нужному
адресу коммутатор может использовать буферизацию. Буферизация может быть
также использована в том случае, когда порт пункта назначения занят. Буфером
называется область памяти, в которой коммутатор хранит передаваемые данные.
Буфер памяти может использовать два метода хранения и отправки пакетов —
буферизация по портам и буферизация с общей памятью. При буферизации по
портам, пакеты хранятся в очередях (queue), которые связаны с отдельными
входными портами. Пакет передается на выходной порт только тогда, когда все
пакеты, находившиеся впереди него в очереди, были успешно переданы. При этом
возможна ситуация, когда один пакет задерживает всю очередь из-за занятости
порта его пункта назначения. Эта задержка может происходить даже в том случае,
26
когда остальные пакеты могут быть переданы на открытые порты их пунктов
назначения.
При буферизации в общей памяти, все пакеты хранятся в общем буфере памяти,
который используется всеми портами коммутатора. Количество памяти, отводимой
порту, определяется требуемым ему количеством. Такой метод называется
динамическим распределением буферной памяти. После этого пакеты,
находившиеся в буфере динамически распределяются по выходным портам. Это
позволяет получить пакет на одном порте и отправить его с другого порта, не
устанавливая его в очередь.
Коммутатор поддерживает карту портов, в которые требуется отправить
пакеты. Очистка этой карты происходит только после того, как пакет успешно
отправлен.
Поскольку память буфера является общей, размер пакета ограничивается всем
размером буфера, а не долей предназначенной для конкретного порта. Это означает,
что крупные пакеты, могут быть переданы с меньшими потерями, что особенно
важно при асимметричной коммутации, т. е. когда порт с шириной полосы
пропускания 100 Мб/с должен отправлять пакеты на порт 10 Мб/с.
Возможности и разновидности коммутаторов
Коммутаторы подразделяются на управляемые и неуправляемые (наиболее
простые). Более сложные коммутаторы позволяют управлять коммутацией на
канальном (втором) и сетевом (третьем) уровне модели OSI. Обычно их именуют
соответственно, например Layer 2 Switch или просто, сокращенно L2. Управление
коммутатором может осуществляться посредством протокола Web-интерфейса,
SNMP, RMON (протокол, разработанный Cisco) и т. п. Многие управляемые
коммутаторы позволяют выполнять дополнительные функции: VLAN, QoS,
агрегирование, зеркалирование. Сложные коммутаторы можно объединять в одно
логическое устройство — стек, с целью увеличения числа портов (например, можно
объединить 4 коммутатора с 24 портами и получить логический коммутатор с (4*244=92) портами, либо с 96-ю портами (если для стекирования используются
специальные порты)).
Описание передней панели
Внешние порты ввода-вывода (рис. 3.1)
1 - консольный порт RS-232C DB-9 (1)
2 - слоты для модулей расширения (2)
3 - 16 портов с автоопределением 10/100
4 - индикаторы питания и активности портов
27
1
3
2
4
Рис. 3.1. Внешние порты ввода-вывода и индикаторы активности
28
Практическая часть
2. Задание на лабораторную работу
Подключение к коммутатору через com-порт.
Соедините консольные порты коммутатора и компьютера com-кабелем. Оба
устройства должны быть выключены.
Включите компьютер и запустите программу HyperTerminal (рис. 3.2)
Рис. 3.2. Запуск программы HyperTerminal
создайте подключение с параметрами показанными на рис. 3.3 а, б, в
а
б
29
в
Рис. 3.3 Настройка подключения к коммутатору
Включите коммутатор и дождитесь окончания процесса загрузки. Нажмите два раза
Enter (рис 3.4)
Рис. 3.4. Экран начальной загрузки коммутатора
30
В появившемся информационном окне нажмите любую клавишу (рис. 3.5)
Рис. 3.5 Информационное окно
В появившейся командной строке наберите setup и нажмите Enter (рис 3.6)
Рис. 3.6. Командная строка
31
Появится меню начальных настроек (рис. 3.7)
Рис. 3.7. Меню настроек
В нём вбейте настройки как показано на рис. 3.8. Для изменения параметров Logon
Default, Time Sync Method, IP Config [DHCP/Bootp] используйте клавишу пробел.
Сохраните данные нажав Enter, а затем s
Рис. 3.8. Ввод настроек коммутатора
32
После этого наберите reload и нажмите Enter. Для подтверждения нажмите y (рис
3.9).
Рис. 3.9. Перезагрузка.
После перезагрузки появится новое меню, более удобное для работы (рис 3.10)
Рис 3.10. Новое стартовое меню.
33
Клавишей 2 выберите пункт Switch Configuration и нажмите Enter (рис. 3.11)
Рис. 3.11. Экран информации
Просмотрите настройки которые вы ввели и если надо исправьте неправильные
3. Содержание отчета
1. Титульный лист.
2. Название и цель работы.
3. Теоретическое обоснование.
4. Постановка задачи для самостоятельной разработки.
5. Описание операций (включая скриншоты) выполненных при настройке коммутатора
34
ЛАБОРАТОРНАЯ РАБОТА №4
Разработка клиент-серверного приложения
1.
Теоретические сведения
Клиент-серверная архитектура
Для построения сетей, как правило, используется клиент-серверная архитектура. Сервером
называется машина, прослушивающая порт, чтобы обнаружить входящие TCP-соединения или
UDP-датаграммы от одного или нескольких клиентов. Клиент начинает диалог первым. На рис.4.1
показаны три типичных случая клиент-серверной архитектуры.
Рис 4.1 Три случая клиент-серверной архитектуры
Наиболее простым случаем является тот, когда клиент и сервер находятся на одной машине.
Посылаемые данные, передаются стеку TCP/IP, но не помещаются в выходную очередь сетевого
устройства, а закольцовываются системой и возвращаются обратно в стек, но уже в качестве
принятых данных.
Второй вариант: сервер и клиенты работают в одной локальной сети. Здесь имеет место реальная
сеть, однако условия близки к идеальным. Пакеты редко теряются и обычно приходят в
правильном порядке.
В третьем случае сервер соединен с клиентом глобальной сетью, эти условия более жесткие. По
мере роста трафика в глобальной сети начинают переполняться очереди, в которых
маршрутизатор временно хранит поступающие пакеты, пока не отправит их адресату. А когда в
очереди больше нет места, маршрутизатор отбрасывает пакеты. В результате клиент должен
передавать пакеты повторно, что приводит к появлению дубликатов и доставке пакетов в
неправильном порядке.
API сокеты
Для начала рассмотрим основы API сокетов и простейшие клиентское и серверное приложения.
35
Начнем с вызовов API, необходимых для простого клиента. На рис.4.2 показаны функции,
применяемые в любом клиенте. Адрес удаленного хоста задается с помощью структуры
sockaddr_in, которая передается функции connect.
Первое, что вы должны сделать, - это получить сокет для логического соединения. Для этого
предназначен системный вызов socket.
#include <sys/socket.h> /* UNIX */
#include <winsock2.h> /* Windows */
SOCKET socket( int domain, int type, int protocol);
Возвращаемое значение: дескриптор сокета в случае успеха; —1 (UNIX) или INVALID_SOCKET
(Windows) - ошибка.
API сокетов не зависит от протокола и может поддерживать разные адресные домены. Параметр
domain - это константа, указывающая, какой домен нужен сокету.
Чаще используются домены AF_INET (то есть Internet) и AF_LOCAL (или AF_UNIX). В книге
рассматривается только домен AF_INET. Домен AF_LOCAL применяется для межпроцессного
взаимодействия (IPC) на одной и той же машине.
С помощью параметра type задается тип создаваемого сокета. Чаще встречаются следующие
значения (а в этой книге только такие) сокетов:
 SOCK_STREAM - обеспечивают надежный дуплексный протокол на основе установления
логического соединения. Если говорится о семействе протоколов TCP/IP, то это TCP;
 SOCK_DGRAM - обеспечивают ненадежный сервис доставки датаграмм. В рамках TCP/IP
это будет протокол UDP;
 SOCK_RAW -предоставляют доступ к некоторым датаграммам на уровне протокола IP Они
используются в особых случаях, например для просмотра всех ICMP - сообщений.
Рис. 4.2. Основные вызовы API сокетов для клиентов
Параметр protocol показывает, какой протокол следует использовать с данным сокетом. В
контексте TCP/IP он обычно неявно определяется типом сокета, поэтому в качестве значения
задают 0. Иногда, например в случае простых (raw) сокетов, имеется несколько возможных
протоколов, так что нужный необходимо задавать явно. Об этом будет рассказано в совете 40.
Для самого простого TCP-клиента потребуется еще один вызов API сокетов, обеспечивающий
установление соединения:
#include <sys./socket.h> /* UNIX */
#include <winsock2.h> /* Windows */
int connect(SOCKET s, const struct sockaddr *peer, int peer_len);
Возвращаемое значение: 0 - нормально, -1 (UNIX) или не 0 (Windows) - ошибка.
Параметр s — это дескриптор сокета, который вернул системный вызов socket. Параметр peer
указывает на структуру, в которой хранится адрес удаленного хоста и некоторая дополнительная
информация. Для домена AF_INET - это структура типа sockaddr_in. Ниже вы увидите, как она
заполняется. Параметр peer_len содержит размер структуры в байтах, на которую указывает peer.
После установления соединения можно передавать данные. В ОС UNIX вы должны обратиться к
системным вызовам read и write и передать им дескриптор сокета точно так же, как передали бы
36
дескриптор открытого файла. Увы, как уже говорилось, в Windows эти системные вызовы не
поддерживают семантику сокетов, поэтому приходится пользоваться вызовами recv и send. Они
отличаются от read и write только наличием дополнительного параметра.
#include <sys/socket.h> /*UNIX*/
#include <winsock2.h> /*Windows*/
int recv(SOCKET s, void *buf, size_t left, int flags);
int send(SOCKET s, const void *buf, size_t len, int flags);
Возвращаемое значение: число принятых или переданных байтов в случае успеха или -1 в случае
ошибки.
Параметры s, buf и len означают то же, что и для вызовов read и write. Значение параметра flags в
основном зависит от системы, но и UNIX, и Windows поддерживают следующие флаги:
 MSG_OOB - следует послать или принять срочные данные;
 MSG_PEEK - используется для просмотра поступивших данных без их удаления из
приемного буфера. После возврата из системного вызова данные еще могут быть получены
при последующем вызове read или recv;
 MSG_DONTROUTE - сообщает ядру, что не надо выполнять обычный алгоритм
маршрутизации. Как правило, используется программами маршрутизации или для
диагностических целей.
При работе с протоколом TCP вам ничего больше не понадобится. Но при работе с UDP нужны
еще системные вызовы recvfrom и sendto. Они очень похожи на recv и send, но позволяют при
отправке датаграммы задать адрес назначения, а при приеме - получить адрес источника.
#include <sys/socket.h> /*UNIX*/
#include <winsock2.h> /*Windows*/
int recvfrom(SOCKET s, void *buf, size_t len, int flags,
struct sockaddr *from, int *fromlen);
int sendto(SOCKET s, const void *buf, size_t len, int flags,
const struct sockaddr *to, int tolen);
Возвращаемое значение: число принятых или переданных байтов в случае успеха или -1 при
ошибке.
Первые четыре параметра - s, buf, len к flags - такие же, как в вызовах recv и send. Параметр from в
вызове recvfrom указывает на структуру, в которую ядро помещает адрес источника пришедшей
датаграммы. Длина этого адреса хранится в целом числе, на которое указывает параметр fromlen.
Обратите внимание, что fromlen - это указатель на целое.
Аналогично параметр to в вызове sendto указывает на адрес структуры, содержащей адреса
назначения датаграммы, а параметр tolen - длина этого адреса. Заметьте, что to- это целое, а не
указатель.
Алгоритм:
1. Подготовка адреса сервера.
2. Получение сокета и соединение с сервером.
3. Отправка и получение одного байта.
Прежде чем тестировать клиента, необходим сервер. Вызовы API сокетов для сервера немного
иные, чем для клиента. Они показам на рис. 4.3.
Сервер должен быть готов к установлению соединений с клиентами. Для этого он обязан
прослушивать известный ему порт с помощью системного вызова listen. Но предварительно
необходимо привязан адрес интерфейса и номер порта к прослушивающему сокету. Для этого
предназначен вызов bind:
#include <sys/socket.h> /* UNIX */
#include <winsock2.h> /* Windows */
int bind(SOCKET s, const struct sockaddl *name, int namelen);
37
Возвращаемое значение: 0 - нормально, -1 (UNIX) или SOCKET_ERROR (Windows) - ошибка.
Параметр s - это дескриптор прослушивающег сокета. С помощью параметров name и namelen
передаются порт и сетевой интерфейс, которые нужно прослушивать. Обычно в качестве адреса
задается консанта INADDR_ANY. Это означает, что будет принято соединение, запрашиваемое по
любому интерфейсу. Если хосту с несколькими сетевыми адресами нужно принимать соединения
только по одному интерфейсу, то следует указать IP-адрес этого интерфейса. Как обычно, namelen
- длина структуры sockaddr_in.
После привязки локального адреса к сокету нужно перевести сокет в режим прослушивания
входящих соединений с помощью системного вызова listen, назначение которого часто не
понимают. Его единственная задача - пометить сокет как прослушивающий. Когда хосту
поступает запрос на установление соединения, ядро ищет в списке прослушивающих сокетов тот,
для которого адрес назначения и номер порта соответствуют указанным в запросе.
#include <sys/socket.h> /* UNIX */
#include <winsock2.h> /* Windows */
int listen( SOCKET s, int backlog);
Возвращаемое значение: О - нормально, -1 (UNIX) или SOCKET_ERROR (Windows) - ошибка.
Параметр s - это дескриптор сокета, который нужно перевести в режим прослушивания. Параметр
backlog - это максимальное число ожидающих, но еще не принятых соединений. Следует
отметить, что это не максимальное число одновременных соединений с данным портом, а лишь
максимальное число частично установленных соединений, ожидающих в очереди, пока
приложение их примет (описание системного вызова accept дано ниже).
Рис. 4.3. Основные вызовы API сокетов для сервера
Традиционно значение параметра backlog не более пяти соединений, но в современных
реализациях, которые должны поддерживать приложения с высокой нагрузкой, например, Webсервера, оно может быть намного больше. Поэтому, чтобы выяснить его истинное значение,
необходимо изучить документацию по конкретной системе. Если задать значение, большее
максимально допустимого, то система уменьшит его, не сообщив об ошибке.
И последний вызов, который будет здесь рассмотрен, - это accept. Он служит для приема
соединения, ожидающего во входной очереди. После того как соединение принято, его можно
использовать для передачи Данных, например, с помощью вызовов recv и send. В случае успеха
38
accept возвращает дескриптор нового сокета, по которому и будет происходить обмен данными.
Номер локального порта для этого сокета такой же, как и для прослушивающего сокета. Адрес
интерфейса, на который поступил запрос о соединении, называется Локальным. Адрес и номер
порта клиента считаются удаленными.
Обратите внимание, что оба сокета имеют один и тот же номер локального порта. Это нормально
поскольку TCP-соединение полностью определяется четырьмя параметрами - локальным адресом,
локальным портом, удаленным адресом и удаленным портом. Поскольку удаленные адрес и порт
для этих двух сокетов различны, то ядро может отличить их друг от друга.
#include <sys/socket.h> /* UNIX */
#include <winsock2.h> /* windows */
int accept (SOCKET s, struct sockaddr *addr, int *addrlen);
Возвращаемое значение: 0- нормально, -1 (UNIX) или INVALID_SOCKET (Windows) - ошибка
Параметр s – это дескриптор прослушивающего сокета. Как показано на рис.4.3, accept возвращает
адрес приложения на другом конце соединения в структуре sockaddr_in, на которую указывает
параметр addr. Целому числу, на которое указывает параметр addrlen, ядро присваивает значение,
равное длине этой структуры. Часто нет необходимости знать адрес клиентского приложения,
поэтому в качестве add и addrlen будет передаваться NULL.
Алгоритм программы-сервера таков:
1. Заполнение адресной структуры и заполнение сокета.
2. Привязка известного порта и вызов listen.
3. Принятие соединения.
4. Обмен данными.
Каркасы приложений
Большинство приложений TCP/IP попадают в одну из четырех категорий:
TCP-сервер;
TCP-клиент;
UDP-сервер;
UDP-клиент.
Иногда приложению нужна слегка видоизмененная последовательность инициализации. В таком
случае придется либо написать ее с нуля, либо извлечь нужный фрагмент кода из библиотеки и
подправить его.
Чтобы справиться и с такими ситуациями, можно построить каркас приложения, в котором уже
есть весь необходимый код. Затем скопировать этот каркас, внести необходимые изменения, после
чего заняться логикой самого приложения. Не имея каркаса, легко поддаться искушению и срезать
некоторые углы, например, жестко «зашить» в приложение адреса или сделать еще что-то
сомнительное. Разработав каркас, вы сможете убрать все типичные функции в библиотеку, а
каркас оставить только для необычных задач.
TCP
TСР - потоковый протокол. Это означает, что данные доставляются получателю в виде потока
байтов, в котором нет понятий «сообщения» или «границы сообщения». В этом отношении чтение
данных по протоколу TCP похоже на чтение из последовательного порта - заранее не известно,
сколько байтов будет возвращено после обращения к функции чтения.
Самый простой случай - это сообщения фиксированной длины. Тогда вам нужно прочесть заранее
известное число байтов из потока. В соответствии с вышесказанным, для этого недостаточно
выполнить простое однократное чтение:
Принимающей стороне нужно просмотреть все сообщение, удалить символы экранирования и
найти разделители записей. Поскольку при использовании маркеров конца записи все сообщение
приходится просматривать дважды, этот метод лучше применять только при наличии
«естественного» разделителя, например символа новой строки, разделяющего строки текста.
Другой метод работы с сообщениями переменной длины предусматривает снабжение каждого
сообщения заголовком, содержащим (как минимум) длину следующего за ним тела.
39
Создание сетевых программ. Операции записи в TCP
Операция записи с точки зрения приложения
Когда пользователь выполняет запись в TCP-соединение, данные сначала копируются из буфера
пользователя в память ядра. Дальнейшее зависит от состояния соединения. TCP может «решить»,
что надо послать все данные, только часть или ничего не посылать. Операцию записи лучше
представлять себе как копирование в очередь для передачи, сопровождаемое извещением TCP о
появлении новых данных. Понятно, какую работу TCP произведет дальше, но эти действия будут
асинхронны по отношению к самой записи. С точки зрения приложения данные записаны.
Поэтому, помня о гарантиях доставки, предлагаемых TCP, можно считать, что информация дошла
до другого конца. В действительности, некоторые (или все) эти данные в момент возврата из
операции записи могут все еще стоять в очереди на передачу. И если хост или приложение на
другом конце постигнет крах, то информация будет потеряна.
Размыкание TCP-соединений
В работе TCP-соединения есть три фазы:
1. Установления соединения.
2. Передачи данных.
3. Разрыва соединения.
Как приложение закрывает свой конец соединения? Оно не может просто завершить сеанс или
закрыть сокет, поскольку у партнера могут быть еще данные. " API сокетов есть интерфейс
shutdown. Он используется так же, как и вызов close, но при этом передается дополнительный
параметр, означающий, какую сторону соединения надо закрыть.
#include <sys/socket.h> /* UNIX. */
#include <winsock2.h> /* Windows. */
int shutdown( int s, int how ); /* UNIX. */
int shutdown( SOCKET s, int how ); /* Windows. */
Возвращаемое значение: 0- нормально, -1 (UNIX) или SOCKET_ERROR (Windows) - ошибка.
К сожалению, между реализациями shutdown в UNIX и Windows есть различия в семантике и API.
Традиционно в качестве значений параметра how вызова shutdown использовались числа. И в
стандарте POSIX, и в спецификации Winsock им присвоены символические имена, только разные.
В табл. 3.1 приведены значения, символические константы для них и семантика параметра how.
Различия в символических именах можно легко компенсировать, определив в заголовочном файле
одни константы через другие или используя числовые значения. А вот семантические отличия
гораздо серьезнее. Посмотрим, для чего предназначено каждое значение.
Значения параметра how для вызова shutdown:
Числовое
0
1
2
Значение how
Действие
POSIX
WINSOCK
SHUT_RD
SD_RECEIVE Закрывается принимающая сторона соединения
SHUT_WR
SD_SEND
Закрывается передающая сторона соединения
SHUT_RDWR
SD_BOTH
Закрываются обе стороны
how = 0. Закрывается принимающая сторона соединения. В обеих реализациях в сокете делается
пометка, что он больше не может принимать данные и должен вернуть EOF, если приложением
делаются попытки еще что-то читать. Но отношение к данным, уже находившимся в очереди приложения в момент выполнения shutdown, а также к приему новых данных от хоста на другом
конце различное. В UNIX все ранее принятые, но еще не прочитанные данные уничтожаются, так
что приложение их уже не получит. Если поступают новые данные, то TCP их подтверждает и тут
же отбрасывает, поскольку приложение не хочет принимать новые данные. Наоборот, в
40
соответствии с Winsock соединение вообще разрывается, если в очереди есть еще данные или
поступают новые Поэтому некоторые авторы (например, [Quinn and Shute 1996]) считают, что под
Windows использование конструкции shutdown (s, 0) ; небезопасно.
how = 1. Закрывается отправляющая сторона соединения. В сокете делается пометка, что данные
посылаться больше не будут; все последующие пытки выполнить для него операцию записи
заканчиваются ошибкой. После того как вся информация из буфера отправлена, TCP посылает
сегмент FIN, сообщая партнеру, что данных больше не будет. Это называется полузакрытием (half
close). Такое использование вызова shutdown наиболее типично, и его семантика в обеих
реализациях одинакова.
how = 2. Закрываются обе стороны соединения. Эффект такой же, как при выполнении вызова
shutdown дважды, один раз с how = 0, а другой - с how = 1. Хотя, на первый взгляд, обращение
shutdown (s, 2);
эквивалентно вызову close или closesocket, в действительности это не так. Обычно нет причин для
вызова shutdown с параметром how = 2, но в работе [Quinn and Shute 1996] сообщается, что в
некоторых реализациях Winsock вызов closesocket работает неправильно, если предварительно не
было обращения к shutdown с how = 2. В соответствии с Winsock вызов shutdown с how= 2 создает
ту же проблему, что и вызов с how = 0, - может быть разорвано соединение.
Между закрытием сокета и вызовом shutdown есть существенные различия. Во-первых, shutdown
не закрывает сокет по-настоящему, даже если он вызван с параметром 2. Иными словами, ни
сокет, ни ассоциированные с ним ресурсы (за исключением буфера приема, если how= 0 или 2) не
освобождаются. Кроме того, воздействие shutdown распространяется на все процессы, в которых
этот сокет открыт. Так, например, вызов shutdown с параметром how = 1 делает невозможной
запись в этот сокет для всех его владельцев. При вызове же с lose или closesocket все остальные
процессы могут продолжать пользоваться сокетом.
Последний факт во многих случаях можно обратить на пользу. Вызывая shutdown c how = 1,
будьте уверены, что партнер получит EOF, даже если этот сокет открыт и другими процессами.
При вызове close или closesocket это не гарантируется, поскольку TCP не пошлет FIN, пока
счетчик ссылок на сокет не станет равным нулю. А это произойдет только тогда, когда все
процессы закроют этот сокет.
Пример приложения
Клиент
simplec.cpp
#include "stdafx.h"
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char* argv[] )
{
WSADATA
ws;
struct sockaddr_in peer;
int s;
int rc;
char buf[ 1 ];
// Заполняем поля структуры для использование ее в connect
peer.sin_family = AF_INET;
peer.sin_port = htons( 7500 );//порт
peer.sin_addr.s_addr = inet_addr( "127.0.0.1" );//адрес означает, что сервер на той же машине, что и клиент
// Init
if (WSAStartup (0x0202, &ws) != 0)
{
printf("error");
exit(1);
}
41
//Создаем сокет
s = socket( AF_INET, SOCK_STREAM, 0 );
if ( s == INVALID_SOCKET )
{
perror( "socket call failed" );
exit( 1 );
}
// Устанавливаем соединение с сервером
rc = connect( s, ( struct sockaddr * )&peer, sizeof( peer ) );
if ( rc )
{
perror( "connect call failed" );
exit( 1 );
}
//Посылаем серверу сообщение
rc = send( s, "1", 1, 0 );
if ( rc <= 0 )
{
perror( "send call failed" );
exit( 1 );
}
//получаем ответ
rc = recv( s, buf, 1, 0 );
if ( rc <= 0 )
perror( "recv call failed" );
else
printf( "Server answer: %c\n", buf[ 0 ] );
exit( 0 );
return 0;
}
stdafx.h
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
//
are changed infrequently
//
#if !defined(AFX_STDAFX_H__AD3FDE11_B011_48BC_84CE_6B486D9EFA82__INCLUDED_)
#define AFX_STDAFX_H__AD3FDE11_B011_48BC_84CE_6B486D9EFA82__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define WIN32_LEAN_AND_MEAN
// Exclude rarely-used stuff from Windows headers
#include <stdio.h>
// TODO: reference additional headers your program requires here
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__AD3FDE11_B011_48BC_84CE_6B486D9EFA82__INCLUDED_)
stdafx.cpp
// stdafx.cpp : source file that includes just the standard includes
//
socktest.pch will be the pre-compiled header
//
stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
// TODO: reference any additional headers you need in STDAFX.H
// and not in this file
42
Сервер
simples.cpp
#include "stdafx.h"
#include "winsock2.h"
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
WSADATA
ws;
struct sockaddr_in local;
int s;
int s1;
int rc;
char buf[ 1 ];
local.sin_family = AF_INET;
local.sin_port = htons( 7500 );//порт, который прослушивает сервер
local.sin_addr.s_addr = htonl( INADDR_ANY );
// Init
if (WSAStartup (0x0202, &ws) != 0)
{
printf("error");
exit(1);
}
// Создаём сокет
s = socket( AF_INET, SOCK_STREAM, 0 );
if ( s < 0 )
{
perror( "socket call failed" );
exit( 1 );
}
//Привязываем адрес интерфейса и номер порта к прослушивающему сокету
rc = bind( s, ( struct sockaddr * )&local, sizeof( local ) );
if ( rc < 0 )
{
perror( "bind call failure" );
exit( 1 );
}
//прослушивание порта
rc = listen( s, 5 );
if ( rc )
{
perror( "listen call failed" );
exit( 1 );
}
//прием соединения, ожидающего во входной очереди
s1 = accept( s, NULL, NULL );
if ( s1 < 0 )
{
perror( "accept call failed" );
exit( 1 );
}
// Получаем сообщение от клиента
rc = recv( s1, buf, 1, 0 );
if ( rc <= 0 )
{
perror( "recv call failed" );
43
exit( 1 );
}
printf( "Client message: %c\n", buf[ 0 ] );
//запись принятого сообщения
rc = send( s1, "2", 1, 0 );
if ( rc <= 0 )
perror( "send call failed" );
exit( 0 );
return 0;
}
Примечание 1. К проекту с простейшим сервером тоже следует подключить stdafx.h и stdafx.cpp.
Примечание 2. Необходимо прописать в настройках проекта линк Ws2_32.lib.
Результат работы
Сервер получил сообщение от клиента.
Рис.4.4
Результат работы серверного приложения
Клиент получил ответ от сервера
Рис.4.5
Результат работы клиентского приложения
Результаты работы приведенных приложений показаны на рис.4.4 и рис.4.5.
2. ЗАДАНИЕ НА ЛАБОРАТОРНУЮ РАБОТУ
Разработайте оконное сетевое приложение, предусматривающее возможность установления соединения с сервером,
передачу файла на сервер и чтение файла с сервера.
3. Содержание отчета
1. Титульный лист.
2. Название и цель работы.
3. Теоретическое обоснование.
4. Описание результатов работы примера.
5. Постановка задачи для самостоятельной разработки.
6. Описание кода разработанного приложения и результатов его работы.
44
Лабораторная работа №5
Технология «фонового» обмена данными браузера с веб-сервером в
информационных сетях.
(продолжительность 2 часа)
Цель: Получить теоретические знания и практические навыки в использовании технологии
AJAX.
1. Теоретические сведения
Средством т.н. «фонового» обмена данными в информационных сетях между браузером и вебсервером служит технология Asynchronous JavaScript and XML (AJAX).
AJAX не зависит от программного обеспечения веб-сервера и использует следующие вебстандарты:




JavaScript
XML
HTML
CSS
Поскольку эти веб-стандарты поддерживаются наиболее распространенными веб-браузерами, то
AJAX приложения являются браузеро- и платформо-независимыми. Использование AJAX
позволяет значительно сократить трафик при работе с веб-приложением благодаря тому, что часто
вместо загрузки всей страницы достаточно загрузить только изменившуюся часть. AJAX
позволяет несколько снизить нагрузку на сервер. Поскольку нужно загрузить только
изменившуюся часть, пользователь видит результат своих действий быстрее.
Важнейшей составляющей технологии AJAX является класс XMLHttpRequest. Объекты этого
класса поддерживается в Internet Explorer (начиная 5 версии и выше), Safari 1.2, Mozilla 1.0 /
Firefox, Opera 8+ и Netscape 7.
Объекты класса XMLHttpRequest по-разному создаются в различных браузерах. Так, Internet Explorer
для этого использует ActiveXObject, в то время как остальные браузеры используют встроенный в
JavaScript класс XMLHttpRequest.
В частности для Internet Explorer 6.0+ объект создается как:
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP").
Для Internet Explorer 5.5+ как:
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP").
Для браузеров Firefox, Opera или Safari как:
xmlHttp = new XMLHttpRequest().
Использование объекта класса XMLHttpRequest реализуется посредством методов и свойств,
основные из которых перечислены ниже.
Методы объекта XMLHttpRequest.
Метод open()
Метод open() создает запрос для Web-сервера.
Метод send()
Метод send() посылает запрос серверу.
Метод abort()
Метод abort() отменяет текущий запрос к серверу.
Свойство onreadystatechange объекта XMLHttpRequest.
Определяет обработчик события, которое происходит при каждой смене состояния объекта. Имя
должно быть записано в нижнем регистре.
Свойство readyState объекта XMLHttpRequest.
Свойство readyState определяет текущее состояние объекта XMLHttpRequest.
В таблице показаны возможные значения свойства readyState:
Состояние
Описание
0
Запрос не инициализирован
1
Запрос создан
45
2
Запрос послан
3
Запрос обрабатывается
4
Запрос завершен
readyState=0 после создания объекта XMLHttpRequest, но до вызова метода open().
readyState=1 после вызова метода open(), но до вызова метода send().
readyState=2 после вызова метода send().
readyState=3 после того, как браузер соединится с сервером, но до завершения сервером ответа.
readyState=4 после завершения запроса и полного получения всех данных ответа с сервера.
Различные браузеры используют свойство состояния готовности по-разному. Не стоит
рассчитывать, что все браузеры будут сообщать обо всех состояниях. Некоторые не сообщают о
состоянии 0 и 1.
Для приложений AJAX представляет интерес фактически только состояние 4. Те есть, когда
запрос завершен, и можно использовать полученные данные.
Свойство responseText объекта XMLHttpRequest
Свойство responseText содержит присланный сервером текст.
Приложения, использующие AJAX каждый раз, когда вводится символ, предусматривают
выполнение следующих действий.
Вызывается функция обработчик.
Формируется url с необходимыми параметрами для отправки веб-серверу.
Создается объект класса XMLHttpRequest.
Указывается имя функции подлежащей исполнению при наступлении события ввода символа (Она обеспечит
отображение изменяющейся части страницы, когда ответ сервера будет готов).
Открывается созданный объект класса XMLHttpRequest с указанным значением url.
Отправляется HTTP запрос веб-серверу.
2. Ход работы
Реализация сетевого взаимодействия с использованием технологии AJAX предусматривает
наличие клиентской и серверной частей веб-приложений.
Клиентская часть.
Предполагается, что пользователь может вводить в текстовое поле формы вариант подбираемого
логина, получая при этом динамически ответ о существовании или отсутствии такого логина в
списке зарегистрированных пользователей без перезагрузки страницы.
Создайте следующую веб-страницу:
<html>
<head>
<script src="bearbeiter.js"></script>
</head>
<body>
<form>
Login:
<input type="text" id="txt1" onkeyup="zeigenAntwort(this.value)">
</form>
<p>Такой логин: <span id="txtAntwort"></span></p>
</body>
</html>
В коде задано, что при наступлении события onkeyup (отжатие клавиши)
zeigenAntwort().
вызывается обработчик
В файле bearbeiter.js сохраните следующий код обработчика
Код обработчика загружается из файла bearbeiter.js:
var xmlHttp;
//---------------------------------------------------------function zeigenAntwort(str)
{
/* Если поле ввода пустое, происходит очистка содержимого раздела txtAntwort на веб-странице.*/
if (str.length==0)
46
{
document.getElementById("txtAntwort ").innerHTML="";
return;
}
/* Если содержимое текстового поля формы непустое */
/*Вызов функции для создания объукта класса XMLHttpRequest*/
xmlHttp=GetXmlHttpObject();
/*Проверка возможности использования AJAX для текущего браузера*/
if (xmlHttp==null)
{
alert ("Your browser does not support AJAX!");
return;
}
var url = "server_bearbeiter.php"; /* Формирование url для отправки веб-серверу*/
url = url + "?log = " + str; /* Добавление значения параметра log, равное содержимому текстового поля, к url*/
url = url + "&r_id=" + Math.random(); /* Добавление к url случайного числа для предотвращения
кеширования*/
xmlHttp.onreadystatechange = anderung; /* Свойство класса XMLHttpRequest. Задает обработчик события,
которое происходит при каждой смене состояния объекта. Свойству указывается функция (anderung)
подлежащая исполнению при наступлении события ввода символа*/
xmlHttp.open("GET", url, true); /* Открывается объект XMLHTTP с указанным значением url*/
xmlHttp.send(null); //Отправляется HTTP запрос веб-серверу
}
//----------------------------------------------------------function anderung()
{
if (xmlHttp.readyState==4) /* Свойство класса XMLHttpRequest. Содержит текущее состояние объекта (0 — не
инициализирован, 1 — открыт, 2 — отправка данных, 3 — получение данных и 4 — данные загружены) */
{
document.getElementById("txtAntwort").innerHTML = xmlHttp.responseText;
/* responseText - свойство класса XMLHttpRequest. Содержит текст ответа на запрос. Если состояние не 3 или
4, возвращает пустую строку.
С помощью свойства innerHTML можно добавить новые вложенные элементы на страницу. Или прочитать
уже существующие на странице элементы со всеми входящими в этот элемент атрибутами. */
}
}
//----------------------------------------------------------//---------создание объекта XMLHttpRequest для разных браузеров----------function GetXmlHttpObject()
{
var xmlHttp=null;
/*делается попытка создать объект XMLHttpRequest для браузеров Firefox, Opera или Safari:*/
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest();
}
catch (e)
{
/* В случае неудачи попытки создать объект XMLHttpRequest для браузеров Firefox, Opera или Safari,
делается попытка создания объекта для Internet Explorer 6.0+ : */
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
/* Если предыдущие попытки неудачны, делается попытка создания объекта для Internet Explorer 5.5+ :*/
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
/*В случае, если все попытки не принесли успеха, возврат нуля приводит к выдаче сообщения об отсутствии
поддержки AJAX браузером.*/
return xmlHttp;
47
}
Серверная часть.
Разместите на веб-сервере в файле с именем server_bearbeiter.php следующий PHP сценарий::
<?php
header("Cache-Control: no-cache, must-revalidate");
// Прошедшая дата
header("Expires: Mon, 1 Sep 2008 07:30:00 GMT");
// Инициализация массива названий
$login[]="aazc";
$login[]="bblk";
$login[]="cclk";
//получение параметра log из URL
$q = $_GET["log"];
//поиск соответствий из массива если длина log > 0
$antvort = "";
if (strlen($log) > 0)
{
for($i = 0; $i<count($login); $i++)
{
if (strtolower($log) == strtolower(substr($login[$i],0,strlen($log))))
$antvort = "УЖЕ СУЩЕСТВУЕТ";
else
$antvort = "ВОЗМОЖЕН";
}
}
//вывод результата
echo $antvort;
?>
3. ЗАДАНИЕ НА ЛАБОРАТОРНУЮ РАБОТУ
Разработайте веб-приложение предусматривающее возможность ввода в поле формы арифметических выражений
типа «23*6» с асинхронной передачей данных между браузером и сервером с помощью AJAX и
отображением результата.
4. Содержание отчета
1. Титульный лист.
2. Название и цель работы.
3. Теоретическое обоснование.
4. Описание результатов работы примера.
5. Постановка задачи для самостоятельной разработки.
6. Описание кода разработанного веб-приложения и результатов его работы.
48
Download