Материал: Методические указания к практическим занятиям по дисциплине «Основы построения защищенных компьютерных сетей». Деревянко В.Н

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

ФГБОУ ВПО «Воронежский государственный технический университет»

Кафедра систем информационной безопасности

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

к практическим занятиям по дисциплине «Основы построения защищенных компьютерных сетей»

для студентов специальности 090301 «Компьютерная безопасность» очной формы обучения

Воронеж 2014

Составитель канд. техн. наук В. Н. Деревянко

УДК 681.326

Методические указания к практическим занятиям по дисциплине «Основы построения защищенных компьютерных сетей» для студентов специальности 090301 «Компьютерная безопасность» очной формы обучения / ФГБОУ ВПО «Воронежский государственный технический университет»; сост. В.Н. Деревянко. Воронеж, 2014. 51 с.

В методических указаниях изложен порядок выполнения заданий при проведении практических занятий и пояснения по их выполнению по курсу «Основы построения защищенных компьютерных сетей» для студентов специальности 090301 «Компьютерная безопасность». В результате выполнения этих работ студенты получают практические навыки по разработке сетевых программ на языках С, С++ для операционных систем

Windows и UNIX (LINUX).

Методические указания подготовлены в электронном виде в текстовом редакторе MS Word 2013 и содержатся в файле Деревянко_ПЗ_ОПЗКС.pdf.

Табл. 1. Ил. 4. Библиогр.: 5 назв.

Рецензент д-р техн. наук, проф. А.Г. Остапенко

Ответственный за выпуск зав. кафедрой д-р техн. наук, проф. А.Г. Остапенко

Издается по решению редакционно-издательского совета Воронежского государственного технического университета

© ФГБОУ ВПО «Воронежский государственный технический университет», 2014

Практическое занятие №1 Разработка клиент-серверных приложений на основе

механизма сокетов с применением протокола TCP

Цель практического занятия Изучить механизм сокетов и освоить разработку кли-

ент-серверных программ обмена данными на основе протокола TCP, получить практические навыки по разработке сетевых программ на языках С, С++.

Теоретические сведения

Базовые операции сокетов приведены в таблице ниже. Операция SOCKET создает новый сокет и учитывает его

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

 

Таблица

Базовые операции сокетов для TCP

Базовая операция

Значение

 

socket (сокет)

Создать новый сокет

 

bind (связать)

Связать локальный адрес с сокетом

 

listen (ожидать)

Объявить о желании принять соеди-

 

 

нение; указать размер очереди

 

accept (принять)

Пассивно установить входящее со-

 

 

единение

 

connect(соединить)

Активно пытаться установить соеди-

 

 

нение

 

send (послать)

Послать данные по соединению

 

receive(получить)

Получить данные у соединения

 

 

 

 

close (закрыть)

Разорвать соединение

 

Адреса созданному сокету назначаются с помощью операции bind. После того как сервер привязывает адрес к сокету, с ним могут cвязаться удаленные клиенты. Вызов socket не создает адрес напрямую, так как некоторые процессы придают адресам большое значение (например, они использовали один и тот же адрес годами, и этот адрес всем известен), тогда как другим процессам это не важно.

Следом идет вызов listen, который выделяет место для очереди входящих соединений на случай, если несколько клиентов попытаются соединиться одновременно.

В данном примере модели сокетов операция listen не является блокирующим вызовом.

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

На стороне клиента также сначала с помощью операции socket должен быть создан сокет, но операция bind здесь не требуется, так как используемый порт не имеет значения для клиента. connect блокирует вызывающего и инициирует активный процесс соединения. Когда этот процесс завершается (то есть когда соответствующий сегмент, посланный сервером, получен), процесс клиента разблокируется, и соединение считается установленным. После этого обе стороны могут использовать send и recieve для передачи и получения данных по полнодуплексному соединению. Могут также применяться стандартные UNIX-вызовы read и write, если нет нужды в использовании специальных свойств send и recieve.

В модели сокетов используется симметричный разрыв соединения. Соединение разрывается, когда обе стороны выполняют операцию close.

2

С помощью сокетов можно реализовать транспортный сервис и без установления соединения. В таком случае операция connect будет задавать адрес удаленного узла, а send и receive — отправлять и получать дейтаграммы. (Иногда используется расширенный набор вызовов — например, операции sendto и receivefrom, позволяющие приложению не ограничиваться одним транспортным узлом.) Иногда сокеты используются с протоколами, в которых вместо байтового потока применяется поток сообщений и которые могут включать или не включать управление перегрузкой.

Рассмотрим программу, демонстрирующую работу клиента и простого файл-сервера. Клиент запрашивает файл у сервера. Сервер в ответ высылает файл.

/* Программа для клиента */

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h>

#define SERVER_PORT 12345 /*По соглашению между клиентом и сервером*/

#define BUF_SIZE 4096 /* Размер передаваемых блоков */ int main(int argc, char *argv)

{

int c,s,bytes;

 

char buf[BUF_SIZE];

/*буфер для входящего файла */

struct hostent *h;

/*информация о сервере */

struct sockaddr_in channel;

/*хранит IP=адрес */

if (argc!=3) fatal("Для запуска введите: client имя_сервера имя_файла"); h = gethostbyname(argv[1]); / *поиск IP-адреса хоста*/

if(!h) fatal("Ошибка выполнения gethostbyname") s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); if (s<0) fatal("Сокет");

memset(&channel, 0, sizeof(channel)); channel.sin_family=AF_INET;

3

Источник: https://studfile.net/preview/16565401/