МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ Московский государственный институт электроники и математики (технический университет) «УТВЕРЖДАЮ» Проректор по учебной работе _____________ А.Ф. Каперко "____"_____________ 2011 г. РАБОЧАЯ ПРОГРАММА Наименование дисциплины: Программирование сетевых приложений Направление подготовки: 230100 Информатика и вычислительная техника Магистерская программа: Сети ЭВМ и телекоммуникации Квалификация выпускника: магистр Форма обучения: очно-заочная Факультет: Вечерний Кафедра: Вычислительные системы и сети Москва 2011 1. Цели и задачи дисциплины: Целью и задачами изучения дисциплины является получение знаний принципов разработки независимых от программной и аппаратной платформы многопоточных сетевых приложений, использующих протоколы TCP и UDP. Студенты должны уметь выбирать подходящие под задачу тип сетевого протокола, модель сетевого ввода-вывода, а также модель клиентского и серверного приложения; разрабатывать сетевое программного обеспечение с использованием выбранных моделей, пользоваться современными средствами разработки приложений. 2. Место дисциплины в структуре ООП Дисциплина относится к дисциплинам профессионального цикла. Дисциплина базируется на материале ранее изученной дисциплины «Технология разработки программного обеспечения». Знания и навыки, полученные в результате изучения дисциплины, должны быть использованы в дисциплинах: «Организация распределенных вычислений», «Сетевое программное обеспечение». 3. Требования к результатам освоения дисциплины: Процесс изучения дисциплины направлен на компетенций: формирование следующих способен свободно пользоваться русским и иностранным языками, как средством делового общения (ОК–3); способен к эксплуатации современного оборудования и приборов (в соответствии с целями магистерской программы) (ОК–7); применять современные технологии разработки программных комплексов с использованием CASE-средств, контролировать качество разрабатываемых программных продуктов (ПК–6); организовывать работу и руководить коллективами разработчиков аппаратных и/или программных средств информационных и автоматизированных систем (ПК– 7). В результате изучения дисциплины студент должен: Знать: назначение и состав прикладного программного интерфейса сокетов, основные отличия реализации этого интерфейса для ОС семейства UNIX и Windows; способы описания адресов сокетов, функции создания, установки режимов, использования и удаления сокетов; модели сетевого ввода-вывода; отличия между многоадресной и широковещательной рассылкой, принципы использования многоадресных групп; основы создания многопоточных сетевых приложений, базовые примитивы синхронизации потоков; основные модели построения многопоточных сетевых приложений. 2 Уметь: выбирать программную платформу для реализации сетевого приложения, модель сетевого ввода-вывода, тип сетевого взаимодействия, тип приложения (однопоточное/многопоточное), модель построения многопоточных серверных приложений. Владеть: методами реализации сетевых приложений с использованием прикладного интерфейса программирования сокетов; средой разработки прикладных сетевых приложений; иметь опыт разработки сетевых программных средств. 4. Объем дисциплины и виды учебной работы Вид учебной работы Всего часов / зачетных Семестры 9 единиц Аудиторные занятия (всего) 54/1.5 54 18/0.5 18 Лабораторные работы (ЛР) 36/1.0 36 Самостоятельная работа (всего) 54/1.5 54 Подготовка к выполнению лабораторных работ 54/2.5 54 Вид промежуточной аттестации (зачет, экзамен) 36/1.0 36 Общая трудоемкость 108/3.0 108 4.0 4.0 В том числе: Лекции Практические занятия (ПЗ) Семинары (С) В том числе: Курсовой проект (работа) Расчетно-графические работы Реферат Другие виды самостоятельной работы часы зачетные единицы 5. Содержание дисциплины 5.1. Содержание разделов дисциплины 1. Введение в сетевое программирование. Краткая история развития прикладного программного интерфейса сокетов BSD для UNIX, его дальнейшее развитие и текущее состояние в операционных системах семейств Windows и UNIX. 3 2. Введение в архитектуру протоколов TCP/IP. Соотношение между OSI/ISO и TCP/IP. Межсетевой протокол IP: заголовок IP-сегмента, IP-адрес, фрагментация IP-сегментов, дополнительные данные IP-заголовка. Протокол управления передачей TCP: заголовок TCP-пакета, номер порта, принцип «скользящего окна», важные данные, этапы TCPвзаимодействия, таймеры (таймер повторной передачи, таймер возобновления передачи, таймер закрытия связи, таймеры поддержки соединения), алгоритмы повышения эффективности (задержка подтверждения, исключение малых окон, исключение коротких TCP-пакетов, алгоритм медленного старта). Протокол дейтаграмм пользователя UDP. Межсетевой протокол управляющих сообщений ICMP. 3. Интерфейсы прикладного программирования WinSock и сокеты UNIX, основные функции сетевого взаимодействия, определенные в стандарте POSIX. Введение в сокеты. Структура адреса сокетов IPv4 и IPv6, универсальная структура адреса сокетов (sockaddr). Функции преобразования порядка байтов, строковых и двоичных представлений адреса и порта. Базовые функции управления TCP-сокетами: создание (socket), удаление (close), локальное связывание (bind), установка соединения с удаленным узлом (connect), перевод в состояние ожидания подключения (listen). Аргументы функций типа «значение-результат». Функции получения свойств и состояния сокетов (getsockopt, setsockopt), ioctl-команды управления сокетом, преобразования имен и адресов (gethostbyname, gethostbyaddr). Основные отличия UDP-сокетов от TCP-сокетов. Функции получения и отправки данных (read, write), векторный ввод-вывод (readv, writev, sendmsg, recvmsg). Получение размера готовых к приему данных, проблема обрезания UDPдейтаграмм. Методы создания клиентского приложения, использующего соединения TCP и UDP. 4. Модели сетевого ввода-вывода. Мультиплексирование ввода-вывода (функции select и poll). Блокируемый и неблокируемый ввод-вывод. Ввод-вывод, управляемый сигналом. Асинхронный ввод-вывод. Сравнение моделей ввода-вывода. Создание однопоточного сервера, обслуживающего несколько подключений. 5. Многоадресная и широковещательная рассылка. Многоадресная передача, адрес многоадресной передачи, область его действия. Сравнение многоадресной и широковещательной передачи в локальной сети. Многоадресная передача в глобальной сети. Понятие широковещательной группы, функции вхождения и выхода из широковещательной группы (mcast_join и родственные функции), получение анонсов сеансов многоадресной передачи, отправка и получение данных в широковещательной группе. Создание клиентского приложения, использующего широковещательную и многоадресную рассылку. 4 6. Многопоточные сетевые приложения. Функции стандарта POSIX для управления программными потоками: создание (pthread_create) и остановка (pthread_join, pthread_exit), управление атрибутами и состоянием (группа функций pthread_attr_*). Прикладные системные функции, безопасные в многопоточной среде. Собственные данные потоков. Ситуации взаимоблокировок и примитивы синхронизации: мьютексы и условные переменные. Создание простого многопоточного сетевого приложения. 7. Обзор моделей построения многопоточных серверных приложений. Однопоточное серверное приложение. Сервер TCP с предварительным порождением процессов без блокировки и вызова accept. Сервер TCP с предварительным порождением процессов и защитой вызова accept блокировкой файла. Сервер TCP с предварительным порождением процессов и защитой вызова accept мьютексом. Сервер TCP с предварительным порождением процессов и передачей дескрипторов. Параллельный сервер TCP с одним потоком для каждого клиента. Сервер TCP с предварительным порождением потоков, каждый из которых вызывает accept. Сервер TCP с предварительным порождением потоков; основной поток вызывает accept. Сравнение моделей. 5.2 Разделы дисциплины и междисциплинарные связи с обеспечиваемыми (последующими) дисциплинами № п/п 1. 2. Наименование обеспечиваемых (последующих) дисциплин № № разделов данной дисциплины, необходимых для изучения обеспечиваемых (последующих) дисциплин 1 2 3 4 5 6 7 Организация распределенных вычислений * * * * * * Сетевое программное обеспечение * * * * * * 5.3. Разделы дисциплин и виды занятий № Наименование раздела дисциплины Лекц. Практ. Лаб. п/п зан. 1. Введение в сетевое программирование 1 2. Введение в архитектуру протоколов TCP/IP 1 3. Интерфейсы прикладного программирования WinSock и сокеты UNIX, основные функции сетевого 4 5 Сем. СРС зан. Всего 1 10 1 2 13 27 взаимодействия, определенные в стандарте POSIX 4. Модели сетевого ввода-вывода 3 6 10 19 5. Многоадресная и широковещательная рассылка 2 6 10 18 6. Многопоточные сетевые приложения 5 14 19 38 7. Обзор моделей построения многопоточных серверных приложений 2 1 3 6. Лабораторный практикум № п/п № раздела дисциплины Наименование лабораторных работ Трудоемкость (часы/за четные ед.) 1. 3 Интерфейсы прикладного программирования WinSock и сокеты UNIX, основные функции сетевого взаимодействия, определенные в стандарте POSIX 10/0.27 2. 4 Модели сетевого ввода-вывода 6/0.17 3. 5 Многоадресная и широковещательная рассылка 6/0.17 4. 6 Многопоточные сетевые приложения 14/0.39 7. Примерная тематика курсовых проектов (работ) В качестве задания на курсовую работу предлагается разработать сетевое приложение одного из следующих типов: простой Web-сервер, система обмена мгновенными сообщениями, простой почтовый клиент, TFTP-клиент, SNTP-клиент и сервер. Курсовая работа включает выбор (в зависимости приложения) типа сетевого протокола, модели ввода-вывода, типа приложения (однопоточное/многопоточное); реализацию программы на языке C или C++. 8. Учебно-методическое и информационное обеспечение дисциплины: а) основная литература: Стивенс У.Р., Феннер Б., Рудофф Э.М. UNIX: разработка сетевых приложений . 3-е изд. — СПб.: Питер, 2007. 1039 с.: ил. ISBN 5–94723–991–4. Джонс Э., Оланд Дж. Программирование в сетях Microsoft Windows. Мастер-класс. / Пер. с англ. — СПб.: Питер; М.: Издательско-торговый дом «Русская Редакция», 2002. — 608 с.: ил. ISBN 5–318–00725–2, 5–7502–0148–1. 6 б) дополнительная литература: Камер, Дуглас Э. Сети TCP/IP, том 1. Принципы, протоколы и структура, 4-е изд.: Пер. с англ. — М.: Издательский дом «Вильямс», 2003. — 880 с.: ил. — парал. тит. англ. ISBN 5–8459–0419–6. Стивенс Р., Раго С. UNIX. Профессиональное программирование, 2-е издание. — СПб.: Символ-Плюс, 2007. — 1040 с., ил. ISBN 5–93286–089–8. Харт Дж. Системное программирование в среде Windows. : Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 592 с.: ил. ISBN 5–8459–0879–5, 0–321– 25619–0. в) программное обеспечение: среда разработки Microsoft Visual Studio 2005 Express Edition с языком программирования C++; системная библиотека Pthreads-w32 для поддержки потоков POSIX в ОС семейства Windows. 9. Материально-техническое обеспечение дисциплины: При выполнении лабораторных работ используются дисплейный класс, состоящий из ПЭВМ типа IBM РС с процессорами архитектуры Intel Pentium 4 и выше, объединенными в локальную сеть, с выходом в Интернет. 10. Методические рекомендации по организации изучения дисциплины: При изучении дисциплины целесообразно давать примеры проектирования упрощенных реализаций реальных сетевых приложений, широко распространенных в сети Интернет: приложения для обмена мгновенными сообщениями, Web-серверы, почтовые и Web-клиенты. Текущий контроль подразумевает регулярную проверку преподавателем правильности выполнения заданий для лабораторных работ. Итоговая аттестация — зачет и экзамен. Составитель: / Королев С.В. / Рецензент: / Саксонов Е.А. / Заведующий кафедрой ВСиС: / Вишнеков А.В. / Декан вечернего факультета АВТ: / Симонов В.П. / 7