Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


АППАРАТНОГО И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ



Аппаратное обеспечение терминального класса №208б

Рис.7.6. Терминальный класс I-208б. Infrastructure Mode (BSS)

На рисунке схематично изображен терминальный класс I-208б. На сегодняшний день он оборудован тремя компьютерами с встроенными беспроводными адаптерами (клиенты). В непосредственной близости от него установлена точка доступа (сервер), что исключает ее хищение. Следует отметить, что в терминальном классе реализована распределенная архитектура, что предполагает осуществлять безопасность средствами точки доступа (база MAC-адресов точки доступа, WEP-шифрование). В случае добавления клиентов нет необходимости перестраивать архитектуру сети.

Таким образом, терминальный класс I-208б обеспечен необходимыми условиями для использования услуг беспроводного доступа.

 


Настройки клиента и сервера для различных ОС

Следует отметить, что настройки клиентского адаптера в разных операционных системах (Windows, UNIX) в общем случае происходят по-разному, но они одинаково прозрачны для пользователя, то есть настройка происходит автоматически. Применяется множество способов настройки точки доступа из различных операционных систем: web-интерфейс, telnet и др. Настройка точки доступа терминального класса 208б осуществлялась из операционной системы Windows через интуитивно понятный web-интерфейс.[2]

 

 

Работа с базой данных, содержащей MAC-адреса

Любая лабораторная работа – это практическое применение полученных знаний, или проверка теоретических умозаключений. В данной лабораторной работе студентам предлагается настроить точку доступа. Специально для этого было разработано программное обеспечение, позволяющее студентам применить свои теоретические знания, а также защитить лабораторную работу (тест).

Настройка базы данных MAC-адресов точки доступа максимально приближена к реальной картине настройки точки доступа, обслуживающей терминальный класс.

 

Исследование уровня сигнала на территории факультета ПМИ

В общем случае, разные беспроводные сетевые адаптеры по-разному реагируют на уровень сигнала точки доступа, поэтому можно говорить только об уровне сигнала относительно конкретного оборудования.

Задание к лабораторной работе

1. Изучить основы построения беспроводной технологии

2. Провести сравнение безопасности беспроводной и проводной локальных сетей.

3. Определить необходимые условия для использования услуг беспроводного доступа (оборудование на клиенте и сервере).

4. Ответить на контрольные вопросы.

Контрольные вопросы

1. Чем отличается работа сетевых приложений, сетевых операционных систем в Ethernet и Radio Ethenet?

· различия на уровне представления данных эталонной модели ISO/OSI

· различия на транспортном и сетевом уровнях эталонной модели ISO/OSI

· различия на сессионном уровне эталонной модели ISO/OSI

· ничем


2. Спецификация 802.11b затрагивает:

· только физический уровень эталонной модели ISO/OSI

· физический и канальный уровни эталонной модели ISO/OSI

· только канальный уровень эталонной модели ISO/OSI

· не затрагивает ни один уровень эталонной модели ISO/OSI

 

3. Точка доступа выполняет роль моста между

· internet и Radio Ethernet

· internet и Ethernet

· Ethernet и Radio Ethernet

· Ethernet и Ethernet

 

4. Стандарт 802.11 определяет

· два режима работы: Ad-hoc и Infrastructure mode

· только режим Ad-hoc, так как режим Infrastructure mode определяется в стандарте 802.11b

· только режим Infrastructure mode, так как режим Ad-hoc определяется в стандарте 802.11b

 

5. Когда клиент попадает в зону действия нескольких точек доступа происходит следующее:

· клиентский адаптер пытается подключиться к ближайшей точке доступа

· клиентский адаптер пытается подключиться к той точке доступа, которая обеспечивает наиболее надежную связь

· клиентский адаптер пытается подключиться к точке доступа, выбранной случайным образом

 

6. При перемещении клиента в зоне действия нескольких точек доступа

· выбрав одну точку доступа клиентский адаптер работает только с ней по налаженному каналу

· клиентский адаптер время от времени проверяет все каналы, чтобы установить, нет ли такой точки доступа, которая обеспечивает наиболее надежную связь. Если такая точка доступа находится, то происходит переподключение к ней

 

7. 802.11b обеспечивает контроль доступа

· на MAC уровне, и механизмы шифрования (WEP)

· только на MAC уровне

· с помощью механизмов шифрования (WEP)

· на физическом и канальном уровне эталонной модели ISO/OSI, а также с помощью механизмов шифрования (WEP)

 


8. WEP защищает

· пакеты данных и заголовки физического уровня

· только пакеты данных

· только заголовки физического уровня

 

9. Для дополнительной безопасности беспроводной сети точка доступа может хранить

· список разрешенных MAC адресов

· список разрешенных IP адресов

· список разрешенных MAC и IP адресов

· не может ничего хранить

 

10. Клиентский адаптер может иметь

· только статический IP-адрес

· только динамический IP-адрес

· как статический, так и динамический IP-адреса

 

11. Терминальный класс I-208б имеет

· централизованную архитектуру беспроводной сети

· распределенную архитектуру беспроводной сети

· смешанную архитектуру беспроводной сети

 

12. Эквивалентные сети Ethernet и Radio Ethernet

· работают на одинаковой скорости

· медленнее работает сеть Ethernet

· медленнее работает сеть Radio Ethernet

 

13. В терминальном классе I-208б реализован

· режим Ad-hoc

· режим Infrastructure mode

· смешанный режим

 

14. Стандарт IEEE 802.11 имеет максимальную скорость передачи данных равную

· 1 Мбит/с

· 2 Мбит/с

· 5, 5 Мбит/с

· 11 Мбит/с

· 54 Мбит/с

 

15. Стандарт IEEE 802.11b имеет максимальную скорость передачи данных равную

· 1 Мбит/с

· 2 Мбит/с

· 5, 5 Мбит/с

· 11 Мбит/с

· 54 Мбит/с

 

16. Стандарт IEEE 802.11g имеет максимальную скорость передачи данных равную

· 1 Мбит/с

· 2 Мбит/с

· 5, 5 Мбит/с

· 11 Мбит/с

· 54 Мбит/с

 

17. Радиочастотные методы работают в ISM диапазоне 2, 4 ГГц и обычно используют полосу

· 63 МГц

· 73 МГц

· 83 МГц

· 93 МГц

 

18. Стандарт 802.11 использует метод прямой последовательности (DSSS) и метод частотных скачков (FHSS). Эти методы

· кардинально отличаются, и несовместимы друг с другом

· отличаются, однако все же совместимы друг с другом

· по существу ничем не отличаются

 

19. Согласно стандарту 802.11, заголовки физического уровня всегда передаются на скорости 1 Mbps,

· поэтому данные передаются тоже на скорости 1 Mbps

· однако данные передаются на скорости 2 Mbps

· однако данные могут передаваться со скоростями 1 и 2 Mbps

 

20. В стандарте 802.11b используется метод

· DSSS

· FHSS

· DSSS или FHSS


 

 

СПИСОК ЛИТЕРАТУРЫ

1.Камер Дуглас. Компьютерные сети и Internet. Разработка приложений для Internet: Пер. с англ. –М.: Издательский дом «Вильямс», 2002.-640с.

2.Куроуз Дж., Росс К. Компьютерные сети. Многоуровневая архитектура Интернета. 2-е изд. –СПб.: Питер, 2004. -765с.

3. Основы WEB-технологий/ П.Б. Храмцов и др. –М.: ИНТУИТ.РУ «Интернет-Университет Информационных Технологий», 2003. -512с.

4. Семёнов Ю.А. (ГНЦ ИТЭФ), book.itep.ru Телекоммуникационные технологии. http: //www.citforum.ru

 


ПРИЛОЖЕНИЕ А

Пример API-интерфейса прикладного

программирования для обмена данными по сети.

Для демонстрации принципов сетевого программирования был реализован простой API-интерфейс для операций обмена данными по сети.

Таблица 1. Пример API-интерфейса, включающий в себя семь операций.

Операция Описание операции
await_contact Используется сервером для перехода в режим ожидания запроса клиента на установление соединения
make_contact Используется клиентом для передачи серверу запроса на установление соединения
cname_to_comp Используется для преобразования имени компьютера в эквивалентное внутреннее двоичное значение
appname_to_appnum Используется для преобразования имени программы в эквивалентное внутреннее двоичное значение
send Используется клиентом и сервером для передачи данных
recv Используется клиентом и сервером для приема данных
send_eof Используется клиентом и сервером после завершения передачи данных

Замечание

Функции send и recv входят непосредственно в состав операционной системы.

Сервер начинает свою работу с вызова функции await_contact для перехода в режим ожидания запроса на установление соединения от клиента. Клиент начинает свою работу с вызова функции make_contact для установления соединения. После установления соединения клиента с сервером эти две программы могут обмениваться сообщениями с помощью функций send и recv. Оба приложения должны быть запрограммированы так, чтобы каждое из них могло определить, должно ли оно отправлять или получать сообщения, поскольку, если оба приложения будут пытаться только получать но не отправлять сообщения, они будут заблокированы.

После завершения передачи данных одно приложение вызывает функцию send_eof. В другом приложении функция recv возвращает значение ноль в качестве указания на то, что достигнут конец файла. После того, как оба участника обмена данными вызовут функцию send_eof, соединение разрывается.


Функция await_contact

Используется сервером для перехода в режим ожидания запроса клиента на установление соединения.

connection await_contact( appnum a)

Параметр задает число, которое обозначает серверное приложение; в клиентской программе при передаче на сервер запроса на установление соединения должно быть указано то же число. Сервер использует возвращаемое значение для передачи данных.

Функция make_contact

Используется клиентом для передачи серверу запроса на установление соединения.

coonection make_contact(computer c, appnum a)

Этот вызов принимает два параметра с обозначением компьютера, на котором работает сервер, и номера приложения, используемого сервером на этом компьютере. Клиент применяет возвращаемое значение для передачи данных.

Функция cname_to_comp

Клиенты могут вызвать эту функцию для преобразования имени компьютера, которое предназначено для восприятия человеком, во внутреннее двоичное значение.

computer cname_to_comp(char *c)

Этот вызов принимает один параметр строкового типа и возвращает эквивалентное двоичное значение типа computer.

Функция appname_to_appnum

Клиент и сервер используют эту функцию для преобразования имени службы, предназначенного для восприятия человеком, во внутренне двоичное значение.

appnum appname_to_appnum(char *a)

Этот вызов принимает один параметр строкового типа и возвращает эквивалентное двоичное значение типа appnum.


Функция send

Используется клиентом и сервером для передачи данных по сети.

int send(connection con, char *buffer, int length, int flags)

Первый параметр обозначает соединение, установленное ранее, второй – адрес буфера, содержащего данные, предназначенные для передачи, третий – длину данных в байтах, а четвертый при обычной передаче равен нулю. Функция send возвращает число переданных байтов или отрицательное значение, если возникла ошибка.

Функция recv

Используется клиентом и сервером для приема данных

int recv(connection con, char *buffer, int length, int flags)

Первый параметр обозначает соединение, установленное ранее, второй –адрес буфера, в который должны быть размещены данные, третий – задает длину буфера в байтах, а четвертый при обычной передаче равен нулю. Функция recv возвращает число байтов, помещенных в буфер, ноль для обозначения того, что достигнут конец файла, или отрицательное значение, если возникла ошибка.

Функция send_eof

И клиент и сервер после отправки данных должны вызвать эту функцию, для передачи второму участнику соединения сообщения о том, что передача данных на этом закончена. На другом конце соединения функция recv при получении признака конца файла возвращает значение ноль.

int send_eof(connection con)

Единственный параметр этой функции указывает соединение. Функция возвращает отрицательное значение, если возникла ошибка, иначе положительное значение или ноль.

Далее приведены примеры прикладных программ, которые показывают, как этот API-интерфейс может применяться в клиентском и серверном программном обеспечении для обмена данными.


Пример кода эхо-сервера

 

/* echoserver.c */

 

#include < stdlib.h>

#include < stdio.h>

#include < cnaiapi.h>

 

#define BUFFSIZE 256

 

/*------------------------------------------------------------------

*

* Program: echoserver

* Purpose: wait for a connection from an echoclient and echo data

* Usage: echoserver < appnum>

*

*------------------------------------------------------------------

*/

int

main(int argc, char *argv[])

{

connection conn;

int len;

char buff[BUFFSIZE];

 

if (argc! = 2) {

(void) fprintf(stderr, " usage: %s < appnum> \n", argv[0]);

exit(1);

}

 

/* wait for a connection from an echo client */

 

conn = await_contact((appnum) atoi(argv[1]));

if (conn < 0)

exit(1);

 

/* iterate, echoing all data received until end of file */

 

while((len = recv(conn, buff, BUFFSIZE, 0)) > 0)

(void) send(conn, buff, len, 0);

send_eof(conn);

return 0;

}

 


Пример кода клиента службы эхо-повтора

/* echoclient.c */

 

#include < stdlib.h>

#include < stdio.h>

#include < cnaiapi.h>

 

#define BUFFSIZE 256

#define INPUT_PROMPT " Input > "

#define RECEIVED_PROMPT " Received> "

 

int readln(char *, int);

 

/*------------------------------------------------------------------

*

* Program: echoclient

* Purpose: contact echoserver, send user input and print server
* response

* Usage: echoclient < compname> [appnum]

* Note: Appnum is optional. If not specified the standard echo
* appnum

* (7) is used.

*

*------------------------------------------------------------------

*/

int

main(int argc, char *argv[])

{

computer comp;

appnum app;

connection conn;

char buff[BUFFSIZE];

int expect, received, len;

 

if (argc < 2 || argc > 3) {

(void) fprintf(stderr, " usage: %s < compname> [appnum]\n",

argv[0]);

exit(1);

}

 

/* convert the arguments to binary format comp and appnum */

 

comp = cname_to_comp(argv[1]);

if (comp == -1)

exit(1);

 

if (argc == 3)

app = (appnum) atoi(argv[2]);

else

if ((app = appname_to_appnum(" echo" )) == -1)

exit(1);

 

/* form a connection with the echoserver */

 

conn = make_contact(comp, app);

if (conn < 0)

exit(1);

 

(void) printf(INPUT_PROMPT);

(void) fflush(stdout);

 

/* iterate: read input from the user, send to the server, */

/* receive reply from the server, and display for user */

 

while((len = readln(buff, BUFFSIZE)) > 0) {

 

/* send the input to the echoserver */

 

(void) send(conn, buff, len, 0);

(void) printf(RECEIVED_PROMPT);

(void) fflush(stdout);

 

/* read and print same no. of bytes from echo server */

 

expect = len;

for (received = 0; received < expect; ) {

len = recv(conn, buff, (expect - received) < BUFFSIZE?

(expect - received): BUFFSIZE, 0);

if (len < 0) {

send_eof(conn);

return 1;

}

(void) write(STDOUT_FILENO, buff, len);

received += len;

}

(void) printf(" \n" );

(void) printf(INPUT_PROMPT);

(void) fflush(stdout);

}

 

/* iteration ends when EOF found on stdin */

 

(void) send_eof(conn);

(void) printf(" \n" );

return 0;

}

 

 


ПРИЛОЖЕНИЕ Б

Пример API-интерфейса прикладного

программирования для обмена данными по сети.

Интерфейс написан на языке Python. Он включает в себя два класса – Клиент и Сервер, а так же модуль с функциями для преобразования имен компьютеров и сервисов, которые значительно упрощают написание сетевых клиент-серверных приложений и изолируют программиста от интерфейса сокетов.

Классы Client и Server включают в себя следующие методы:

Ø методы для установления соединения

Ø методы для посылки и для приема данных

Ø методы для построения графического интерфейса

Модуль transform включает в себя функции для преобразования имен сервисов и компьютеров в эквивалентное двоичное значение, которое используется при передаче данных по сети.

Класс Server

Объект класса Server создается вызовом

server.Server([fc]) -> server_object

При этом выполняется конструктор класса Server, который инициализирует объект и создает графический интерфейс для работы с объектом. Объект класса сервер сразу после создания приведен на рисунке 3. Необязательный параметр fc по умолчанию равен 1. Если задать значение этого параметра нулевым, не будет вызвана функция, которая создает поле для ввода порта и кнопку “Active”(при нажатии этой кнопки вызывается функция, которая позволяет войти в режим приема запросов на соединение). То есть сервер будет состоять из поля для вывода информации, поля ввода строки и кнопок “Go” и “Quit”.

Метод await_contact класса Server используется сервером для перехода в режим ожидания запроса от клиента на установление соединения.

await_contact() -> 0/-1

Метод не принимает параметров, поэтому, прежде чем его вызывать, нужно объекту – серверу задать номер порта для приема запросов. Это можно сделать двумя способами. Можно непосредственно присвоить атрибуту объекта PORT значение порта. Но лучше для этого воспользоваться методом set_port, который помимо того, что устанавливает значение атрибута PORT, проверяет это значение на корректность:

set_port(port) -> 0/-1

В случае удачного присваивания метод возвращает 0, иначе -1. Обратным к методу set_port является метод get_port, возвращающий значение атрибута PORT:

get_port() -> port

Аналогичные методы set_host и get_host позволяют установить и получить информацию о самом сервере:

set_host(host) -> 0/-1

get_host() -> host

Метод face() создает поле для ввода порта и кнопку “Active”(войти в режим приема запросов на соединение):

face() -> None

None – в языке Python специальный тип, который используется для обозначения отсутствия значения. Функция, не имеющая оператора return(возвратить) возвращает None.

Графический интерфейс пользователя требует от программы иметь событийную ориентацию, поэтому разработаны несколько методов для управления циклом событий. После создания объекта-сервера программа находится в главном цикле обработки событий. Для выхода из этого цикла используется метод go() (ему соответствует кнопка “Go” сервера):

go() -> None

Для входа в главный цикл обработки событий используется метод wait_event():

wait_event() -> None

Для выхода из программы служит метод quit() (ему соответствует кнопка “Quit” сервера):

quit() -> None

Для разрыва соединения используется метод shutdown_connection(). У этого метода нет параметров и он ничего не возвращает. При вызове этого метода происходит закрытие сокета.

Так как основной задачей разработки клиент-серверных приложений является организация обмена данными между локальным и удаленным компьютерами для посылки и приема данных используются методы send и recv:

send(data) -> bytes/-1

Метод используется сервером для передачи данных. Параметр data представляет собой строку данных, которую необходимо переслать. Функция возвращает количество посланных байт в случае успешного выполнения и -1 в случае неудачи.

Метод recv используется сервером для получения данных от клиента.

recv([buffsz]) -> data/-1

Параметр вызова buffsz представляет собой максимальный объем порции данных, получаемых за вызов одной процедуры. Он не является обязательным и по умолчанию равен 1024. Метод возвращает полученные данные в случае успешного выполнения, иначе возвращает -1.

В классе Server содержится еще небольшое количество разнообразных методов. В основном они связаны с реализацией графического интерфейса и работой с ним: метод accept_query() используется режима приема запросов на соединение, с помощью формы, которая приведена на рис.1(кнопка Active – при нажатии этой кнопки методом accept_query выполняется считывание и проверка данных, введенных пользователем, а затем вызывается метод await_contact); метод printc(data) реализует вывод строк в окно сервера, а метод readc() осуществляет ввод пользователем строки из специального поля, расположенного внизу окна сервера(рис.1). Метод is_connect() служит для определения активно соединение сервера с клиентом или нет.

Класс Client

Объект класса Client создается вызовом

client.Client([fc]) -> client_object

При этом выполняется конструктор класса Client, инициализирующий объект и создающий графический интерфейс для работы с объектом. Объект класса клиент сразу после создания приведен на рисунке 4. Необязательный параметр fc по умолчанию равен 1. Если задать значение этого параметра нулевым, не будет вызвана функция, которая создает поле для ввода порта и кнопку “Connect”(при нажатии этой кнопки вызывается функция, которая посылает серверу запрос на соединение). То есть клиент будет состоять из поля для вывода информации, поля ввода строки и кнопок “Go” и “Quit”.

Метод make_contact класса Client используется клиентом для передачи серверу запроса на установление соединения.

make_contact() -> 0/-1

Метод не принимает параметров, поэтому, прежде чем его вызывать, нужно объекту – серверу задать номер порта и адрес удаленного компьютера для отправки запроса на соединение. Задание номера порта и компьютера классе Client, осуществляется так же как и в классе Server, так как в классе Client присутствуют такие же методы для этих целей. Возвращает 0 – если соединение выполнено удачно, и значение -1, в случае неудачи. Метод устанавливает атрибут SOCK объекта-клиента, клиент применяет этот атрибут значение для передачи данных.

Остальные методы класса Client (методы отправки и получения данных и методы работы с графическими объектами) совпадают с методами класса Server, за исключением метода connect_server(), который используется для установления соединения с сервером с помощью формы, которая приведена на рис.2(кнопка Connect - при нажатии этой кнопки методом connect_server выполняется считывание и проверка данных, введенных пользователем, а затем вызывается метод make_contact).


Модуль transform

Так как пользователи сетевых приложений обычно используют не IP-адрес компьютера, а его символьное название, необходимо привести функции, которые позволяли бы выполнять преобразование имени хоста в его IP-адрес, а так же функцию, выполняющую преобразование имени программы в эквивалентное двоичное значение.

Функция cname_to_comp используется для преобразования имени компьютера в эквивалентное внутреннее двоичное значение.

cname_to_comp (compname) -> IPcomp

Этот вызов принимает один параметр строкового типа – имя компьютера, которое предназначено для восприятия человеком, и преобразует его в эквивалентное двоичное значение.

Функция appname_to_appnum используется для преобразования имени программы в эквивалентное внутренне двоичное значение.

appname_to_appnum (appname) -> appnum

Вызов принимает один параметр строкового типа – имя службы, предназначенное для восприятия человеком, и переводит его во внутренне значение.

Функция self_host возвращает имя и IP-адрес локальной машины:

self_host() -> (self_hostname, self_ip_address)

 

Далее приведены примеры прикладных программ, которые показывают, как этот API-интерфейс может применяться в клиентском и серверном программном обеспечении для обмена данными.

Пример кода эхо-сервера

" " " Server receive one string from client and send client it invertion.

Server begin to waiting for queies from clients on press key < Active> " " "

 

import server

import string

 

print " Sever test"

# Create server

sr = server.Server()

 

end_fl = 1

while end_fl:

# Receive data from client and send a reply

if sr.is_connect() == 1:

sr.printc(" TRY TO RECEIVE DATA" )

datarecv = sr.recv()

if datarecv! = -1:

sr.printc(datarecv)

 

if datarecv == str(" //END" ):

end_fl = 0

 

lst = map(None, datarecv)

lst.reverse()

datasend = string.join(lst, " " )

if sr.send(datasend) < = 0:

sr.printc(" DATA SEND FAILD" )

 

sr.shutdown_connection()

else:

sr.printc(" DATA RECEIVE FAILD" )

sr.shutdown_connection()

else:

sr.printc(" NO CONNECTION!!! " )

if end_fl:

sr.await_contact()

 

sr.printc(" SERVER: GOOD BYE" )

Пример кода клиента службы эхо-повтора

" " " Client send one string to server and receive from server it invertion.

Client connect to server on press key < Connect> " " "

 

import client

 

print " Client test"

# Create client

cln = client.Client()

 

# Output invitation and read data to send server

cln.printc(" PLEASE, INPUT SEND DATA INTO ENTRY FIELD THEN PRESS < CONNECT>: " )

cln.wait_event()

datasend = cln.readc()

 

# Send data to server and receive a reply from it

if cln.is_connect() == 1:

cln.printc(" TRY TO SEND MESSAGE: " )

cln.printc(" \t" +datasend)

if cln.send(datasend) > 0:

datarecv = cln.recv()

if datarecv! = -1:

cln.printc(datarecv)

else:

cln.printc(" DATA RECEIVE FAILED" )

cln.shutdown_connection()

cln.printc(" SHUTDOWN CONNECTION" )

else:

cln.printc(" SEND DATA FAILED" )

else:

cln.printc(" NO CONNECTION!!! " )

 

cln.printc(" CLIENT: GOOD BYE" )


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-05-03; Просмотров: 877; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.181 с.)
Главная | Случайная страница | Обратная связь