<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://mit.spbau.ru/sewiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Artyom.Aleksyuk</id>
		<title>SEWiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://mit.spbau.ru/sewiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Artyom.Aleksyuk"/>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Artyom.Aleksyuk"/>
		<updated>2026-06-05T23:54:15Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=15089</id>
		<title>Технологии компьютерных сетей весна 2018</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=15089"/>
				<updated>2018-03-20T07:19:58Z</updated>
		
		<summary type="html">&lt;p&gt;Artyom.Aleksyuk: Задание 2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Ицыксон Владимир Михайлович ('''vlad@ftk.spbstu.ru, itsykson@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/au-networks Слайды с лекций]&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/networks Слайды с лекций Политеха]&lt;br /&gt;
&lt;br /&gt;
== Практика ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Алексюк Артем Олегович ('''aleksyuk@kspt.icc.spbstu.ru, artyom.aleksyuk@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
[https://t.me/joinchat/ETSi-A1ZlsxHtWZnWWmX_Q Telegram-группа] для взаимодействия в ходе курса. Участвовать не обязательно, но очень желательно. В группе будут выкладываться объявления по курсу, кроме того, преподаватель будет по мере возможности отвечать там на вопросы. Основные объявления будут дублироваться в SeWiki. &lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
Порядок выполнения:&lt;br /&gt;
# Сделать форк [https://github.com/h31/NetworksLab2018AU репозитория] на GitHub.&lt;br /&gt;
# Для каждого задания сделать отдельную ветку (branch) в своём репозитории.&lt;br /&gt;
# Работать над кодом, сохраняя файлы в соответствующей заданию директории.&lt;br /&gt;
# В тот момент, когда вы будете готовы показать свой код (для проверки или консультации), сделать Pull Request в '''мою''' ветку master.&lt;br /&gt;
# Исправить замечания преподавателя.&lt;br /&gt;
# Дождаться статуса ''Approved'' у вашего Pull Request-а.&lt;br /&gt;
&lt;br /&gt;
=== Задание 1. Простейший TCP-клиент/сервер (мессенджер Elegram) ===&lt;br /&gt;
&lt;br /&gt;
Необходимо разработать простейшую систему обмена мгновенными сообщениями (чат, мессенджер). Чат-сервер должен принимать сообщения от клиентов и рассылать полученные сообщения всем подключенным клиентам. У каждого клиента должен быть собственный никнейм, задаваемый пользователем. При получении сообщения от другого клиента, на экран должно выводиться время получения сообщения, никнейм пользователя-отправителя и текст сообщения. Пример вывода: &amp;lt;code&amp;gt;&amp;lt;4:20&amp;gt; [Peter] Hello!&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Клиент должен иметь консольный интерфейс. Параметры работы клиент принимает через аргументы командной строки в следующем порядке: адрес сервера, порт, никнейм. Функции, которые '''не''' требуются от сервера и клиента:&lt;br /&gt;
* Регистрация клиентов, авторизация, аутентификация.&lt;br /&gt;
* Более чем один канал общения.&lt;br /&gt;
* Хранение истории переписки.&lt;br /&gt;
* Обработка временных зон.&lt;br /&gt;
* Работа с языками, отличными от английского.&lt;br /&gt;
&lt;br /&gt;
Чтобы принимаемые (входящие) сообщения не мешали пользователю вводить свой текст, предлагается включать отдельный режим отправки сообщения, например, при нажатии клавиши ''m''. В этом режиме пользователь вводит своё сообщение, новые сообщения от других пользователей временно не отображаются, после отправки сообщения (по Enter) режим автоматически отключается.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что клиент и сервер будут созданы на основе шаблона, находящегося в директории ''tcp_template'' репозитория. Шаблон заведомо неполный, в нем необходимо устранить следующие проблемы:&lt;br /&gt;
* В коде сервера отсутствуют вызовы для корректного закрытия сокетов.&lt;br /&gt;
* Сервер завершается после обработки первого же запроса.&lt;br /&gt;
* Сервер способен работать одновременно только с одним клиентом.&lt;br /&gt;
* Сервер не знает о длине получаемых сообщений.&lt;br /&gt;
&lt;br /&gt;
Язык программирования - С или C++. Для сборки кода используйте утилиту CMake. Для организации работы с несколькими клиентами используйте потоки. Не забывайте использовать примитивы синхронизации для блокировки общих между несколькими клиентами ресурсов.&lt;br /&gt;
&lt;br /&gt;
Результатом выполнения задания должно быть 4 программы, клиент и сервер под Windows и Linux/BSD/macOS, и описание вашего прикладного протокола. Протокол можно описать либо с помощью текста, либо с помощью изображений (таблицы, схемы и т.д.). Примеры описания протоколов - в слайдах лекций. Описание должно быть в такой степени подробным, чтобы по нему можно было написать альтернативную совместимую реализацию клиента/сервера.&lt;br /&gt;
&lt;br /&gt;
[https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ Бесплатная виртуальная машина] с триальной версией Windows. Для сборки программного кода использовать либо Visual Studio (подойдет Community или Express редакция), либо один из дистрибутивов MinGW. Лично у меня успешно заработал [http://tdm-gcc.tdragon.net/ TDM-GCC].&lt;br /&gt;
&lt;br /&gt;
Крайний срок выполнения: '''18 марта''' в 23:59. К этому времени необходимо выполнить задание, выложить его на GitHub и сделать Pull Request. Замечания преподавателя '''можно''' исправлять после дедлайна, но учтите, что в таком случае вы будете отнимать у себя время на выполнение следующих заданий.&lt;br /&gt;
&lt;br /&gt;
=== Задание 2. Простейший UDP-клиент/сервер ===&lt;br /&gt;
&lt;br /&gt;
Необходимо реализовать клиент и сервер протокола DNS.&lt;br /&gt;
&lt;br /&gt;
Отличия относительно предыдущего задания:&lt;br /&gt;
* ОС - одна, какая именно - на ваш выбор.&lt;br /&gt;
* Не нужно описывать протокол.&lt;br /&gt;
&lt;br /&gt;
Подразумевается, что протокол будет реализован на минимальном рабочем уровне. Рассчитывайте на следующие ограничения:&lt;br /&gt;
* Поддержка только записей типа A.&lt;br /&gt;
* Сервер может указывать любой адрес в ответе. Это может быть хэш доменного имени, адрес из файла (например, /etc/hosts), случайная величина с seed равным длине доменного имени в запросе или что-то другое на ваш выбор. Единственное пожелание - чтобы возвращаемый адрес был функцией от доменного имени в запросе и указанного файла на локальном компьютере и не зависел бы от других величин (для обеспечения идемпотентности запроса). Также возможна реализация сервера, который бы с помощью вызовов getaddrinfo/gethostbyname запрашивал адреса из реальной DNS-сети.&lt;br /&gt;
* В ответе не нужно указывать ни авторитативные сервера, ни дополнительные записи. Только непосредственно ответы.&lt;br /&gt;
&lt;br /&gt;
Для экономии времени можно в качестве шаблона запроса/ответа использовать захваченный сниффером пакет. В Wireshark для этого есть функция Export as C Arrays.&lt;br /&gt;
&lt;br /&gt;
Для проверки разработанного DNS-сервера используйте консольные утилиты host, dig или nslookup, явно указав им обращаться к серверу на том же компьютере. Для проверки DNS-клиента используйте любой существующий DNS-сервер, например, Google Public DNS (8.8.8.8).&lt;br /&gt;
&lt;br /&gt;
[https://tools.ietf.org/html/rfc1035 RFC на протокол DNS]. Кроме того, есть множество упрощенных описаний протокола DNS.&lt;br /&gt;
&lt;br /&gt;
=== План выполнения работ ===&lt;br /&gt;
&lt;br /&gt;
Текущий план:&lt;br /&gt;
* До 18 марта - первое задание (2,5 недели).&lt;br /&gt;
* До 28 марта - второе задание (1,5 недели).&lt;br /&gt;
* До 25 апреля - первая часть третьего задания (4 недели).&lt;br /&gt;
* До 23 мая - вторая часть третьего задания (4 недели).&lt;br /&gt;
&lt;br /&gt;
== Темы для обсуждения на практических занятиях ==&lt;br /&gt;
* Администрирование сетевых сервисов&lt;br /&gt;
** HTTP-сервер. Nginx, Apache httpd, особенности, администрирование. HTTP/2, TLS в HTTP-сервере.&lt;br /&gt;
** FastCGI, реверсивные прокси.&lt;br /&gt;
** Файлообменные серверы. FTP, NFS, SFTP, SMB-сервер. Rsync.&lt;br /&gt;
** VPN-сервер. IPsec, OpenVPN, Wireguard. Сравнение, администрирование. Site-to-site. Туннели.&lt;br /&gt;
** SSH-сервер и всё, что он умеет делать. Авторизация по ключам, ssh-agent, проброс портов, VPN и т.д.&lt;br /&gt;
** Почтовый сервер. SMTP, IMAP-сервер.&lt;br /&gt;
** DNS, DHCP-сервер.&lt;br /&gt;
* Администрирование компьютерных сетей&lt;br /&gt;
** IPv6. Настройка, особенности.&lt;br /&gt;
** Настройка сети в GNU/Linux. Старые и новые утилиты. ifconfig, netstat, ip, ss.&lt;br /&gt;
** Утилита tc. Шейпинг трафика, имитация особенностей различных каналов связи.&lt;br /&gt;
** Отладка компьютерных сетей. mtr, traceroute, ping, iperf3.&lt;br /&gt;
** VLAN, коммутация пакетов.&lt;br /&gt;
** NAT, прокси.&lt;br /&gt;
** QoS.&lt;br /&gt;
** AS, looking glass, IX, маршрутизация в Интернете.&lt;br /&gt;
** IGMP.&lt;br /&gt;
** Снифферы. Wireshark, tcpdump. Задание правил.&lt;br /&gt;
** Network Namespaces.&lt;br /&gt;
** InfiniBand.&lt;br /&gt;
* Особенности использования существующих протоколов&lt;br /&gt;
** Протокол TCP. Алгоритмы контроля перегрузок.&lt;br /&gt;
** Задержки в сети. Round trip time т.п.&lt;br /&gt;
** MTU, MSS, фрагментация, туннели.&lt;br /&gt;
** Сериализация данных.&lt;/div&gt;</summary>
		<author><name>Artyom.Aleksyuk</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=15036</id>
		<title>Технологии компьютерных сетей весна 2018</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=15036"/>
				<updated>2018-03-13T15:26:51Z</updated>
		
		<summary type="html">&lt;p&gt;Artyom.Aleksyuk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Ицыксон Владимир Михайлович ('''vlad@ftk.spbstu.ru, itsykson@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/au-networks Слайды с лекций]&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/networks Слайды с лекций Политеха]&lt;br /&gt;
&lt;br /&gt;
== Практика ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Алексюк Артем Олегович ('''aleksyuk@kspt.icc.spbstu.ru, artyom.aleksyuk@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
[https://t.me/joinchat/ETSi-A1ZlsxHtWZnWWmX_Q Telegram-группа] для взаимодействия в ходе курса. Участвовать не обязательно, но очень желательно. В группе будут выкладываться объявления по курсу, кроме того, преподаватель будет по мере возможности отвечать там на вопросы. Основные объявления будут дублироваться в SeWiki. &lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
Порядок выполнения:&lt;br /&gt;
# Сделать форк [https://github.com/h31/NetworksLab2018AU репозитория] на GitHub.&lt;br /&gt;
# Для каждого задания сделать отдельную ветку (branch) в своём репозитории.&lt;br /&gt;
# Работать над кодом, сохраняя файлы в соответствующей заданию директории.&lt;br /&gt;
# В тот момент, когда вы будете готовы показать свой код (для проверки или консультации), сделать Pull Request в '''мою''' ветку master.&lt;br /&gt;
# Исправить замечания преподавателя.&lt;br /&gt;
# Дождаться статуса ''Approved'' у вашего Pull Request-а.&lt;br /&gt;
&lt;br /&gt;
=== Задание 1. Простейший TCP-клиент/сервер (мессенджер Elegram) ===&lt;br /&gt;
&lt;br /&gt;
Необходимо разработать простейшую систему обмена мгновенными сообщениями (чат, мессенджер). Чат-сервер должен принимать сообщения от клиентов и рассылать полученные сообщения всем подключенным клиентам. У каждого клиента должен быть собственный никнейм, задаваемый пользователем. При получении сообщения от другого клиента, на экран должно выводиться время получения сообщения, никнейм пользователя-отправителя и текст сообщения. Пример вывода: &amp;lt;code&amp;gt;&amp;lt;4:20&amp;gt; [Peter] Hello!&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Клиент должен иметь консольный интерфейс. Параметры работы клиент принимает через аргументы командной строки в следующем порядке: адрес сервера, порт, никнейм. Функции, которые '''не''' требуются от сервера и клиента:&lt;br /&gt;
* Регистрация клиентов, авторизация, аутентификация.&lt;br /&gt;
* Более чем один канал общения.&lt;br /&gt;
* Хранение истории переписки.&lt;br /&gt;
* Обработка временных зон.&lt;br /&gt;
* Работа с языками, отличными от английского.&lt;br /&gt;
&lt;br /&gt;
Чтобы принимаемые (входящие) сообщения не мешали пользователю вводить свой текст, предлагается включать отдельный режим отправки сообщения, например, при нажатии клавиши ''m''. В этом режиме пользователь вводит своё сообщение, новые сообщения от других пользователей временно не отображаются, после отправки сообщения (по Enter) режим автоматически отключается.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что клиент и сервер будут созданы на основе шаблона, находящегося в директории ''tcp_template'' репозитория. Шаблон заведомо неполный, в нем необходимо устранить следующие проблемы:&lt;br /&gt;
* В коде сервера отсутствуют вызовы для корректного закрытия сокетов.&lt;br /&gt;
* Сервер завершается после обработки первого же запроса.&lt;br /&gt;
* Сервер способен работать одновременно только с одним клиентом.&lt;br /&gt;
* Сервер не знает о длине получаемых сообщений.&lt;br /&gt;
&lt;br /&gt;
Язык программирования - С или C++. Для сборки кода используйте утилиту CMake. Для организации работы с несколькими клиентами используйте потоки. Не забывайте использовать примитивы синхронизации для блокировки общих между несколькими клиентами ресурсов.&lt;br /&gt;
&lt;br /&gt;
Результатом выполнения задания должно быть 4 программы, клиент и сервер под Windows и Linux/BSD/macOS, и описание вашего прикладного протокола. Протокол можно описать либо с помощью текста, либо с помощью изображений (таблицы, схемы и т.д.). Примеры описания протоколов - в слайдах лекций. Описание должно быть в такой степени подробным, чтобы по нему можно было написать альтернативную совместимую реализацию клиента/сервера.&lt;br /&gt;
&lt;br /&gt;
[https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ Бесплатная виртуальная машина] с триальной версией Windows. Для сборки программного кода использовать либо Visual Studio (подойдет Community или Express редакция), либо один из дистрибутивов MinGW. Лично у меня успешно заработал [http://tdm-gcc.tdragon.net/ TDM-GCC].&lt;br /&gt;
&lt;br /&gt;
Крайний срок выполнения: '''18 марта''' в 23:59. К этому времени необходимо выполнить задание, выложить его на GitHub и сделать Pull Request. Замечания преподавателя '''можно''' исправлять после дедлайна, но учтите, что в таком случае вы будете отнимать у себя время на выполнение следующих заданий.&lt;br /&gt;
&lt;br /&gt;
Текущий план:&lt;br /&gt;
* До 18 марта - первое задание (2,5 недели).&lt;br /&gt;
* До 28 марта - второе задание (1,5 недели).&lt;br /&gt;
* До 25 апреля - первая часть третьего задания (4 недели).&lt;br /&gt;
* До 23 мая - вторая часть третьего задания (4 недели).&lt;br /&gt;
&lt;br /&gt;
== Темы для обсуждения на практических занятиях ==&lt;br /&gt;
* Администрирование сетевых сервисов&lt;br /&gt;
** HTTP-сервер. Nginx, Apache httpd, особенности, администрирование. HTTP/2, TLS в HTTP-сервере.&lt;br /&gt;
** FastCGI, реверсивные прокси.&lt;br /&gt;
** Файлообменные серверы. FTP, NFS, SFTP, SMB-сервер. Rsync.&lt;br /&gt;
** VPN-сервер. IPsec, OpenVPN, Wireguard. Сравнение, администрирование. Site-to-site. Туннели.&lt;br /&gt;
** SSH-сервер и всё, что он умеет делать. Авторизация по ключам, ssh-agent, проброс портов, VPN и т.д.&lt;br /&gt;
** Почтовый сервер. SMTP, IMAP-сервер.&lt;br /&gt;
** DNS, DHCP-сервер.&lt;br /&gt;
* Администрирование компьютерных сетей&lt;br /&gt;
** IPv6. Настройка, особенности.&lt;br /&gt;
** Настройка сети в GNU/Linux. Старые и новые утилиты. ifconfig, netstat, ip, ss.&lt;br /&gt;
** Утилита tc. Шейпинг трафика, имитация особенностей различных каналов связи.&lt;br /&gt;
** Отладка компьютерных сетей. mtr, traceroute, ping, iperf3.&lt;br /&gt;
** VLAN, коммутация пакетов.&lt;br /&gt;
** NAT, прокси.&lt;br /&gt;
** QoS.&lt;br /&gt;
** AS, looking glass, IX, маршрутизация в Интернете.&lt;br /&gt;
** IGMP.&lt;br /&gt;
** Снифферы. Wireshark, tcpdump. Задание правил.&lt;br /&gt;
** Network Namespaces.&lt;br /&gt;
** InfiniBand.&lt;br /&gt;
* Особенности использования существующих протоколов&lt;br /&gt;
** Протокол TCP. Алгоритмы контроля перегрузок.&lt;br /&gt;
** Задержки в сети. Round trip time т.п.&lt;br /&gt;
** MTU, MSS, фрагментация, туннели.&lt;br /&gt;
** Сериализация данных.&lt;/div&gt;</summary>
		<author><name>Artyom.Aleksyuk</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=15020</id>
		<title>Технологии компьютерных сетей весна 2018</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=15020"/>
				<updated>2018-03-10T19:45:01Z</updated>
		
		<summary type="html">&lt;p&gt;Artyom.Aleksyuk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Ицыксон Владимир Михайлович ('''vlad@ftk.spbstu.ru, itsykson@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/au-networks Слайды с лекций]&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/networks Слайды с лекций Политеха]&lt;br /&gt;
&lt;br /&gt;
== Практика ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Алексюк Артем Олегович ('''aleksyuk@kspt.icc.spbstu.ru, artyom.aleksyuk@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
[https://t.me/joinchat/ETSi-A1ZlsxHtWZnWWmX_Q Telegram-группа] для взаимодействия в ходе курса. Участвовать не обязательно, но очень желательно. В группе будут выкладываться объявления по курсу, кроме того, преподаватель будет по мере возможности отвечать там на вопросы. Основные объявления будут дублироваться в SeWiki. &lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
Порядок выполнения:&lt;br /&gt;
# Сделать форк [https://github.com/h31/NetworksLab2018AU репозитория] на GitHub.&lt;br /&gt;
# Для каждого задания сделать отдельную ветку (branch) в своём репозитории.&lt;br /&gt;
# Работать над кодом, сохраняя файлы в соответствующей заданию директории.&lt;br /&gt;
# В тот момент, когда вы будете готовы показать свой код (для проверки или консультации), сделать Pull Request в '''мою''' ветку master.&lt;br /&gt;
# Исправить замечания преподавателя.&lt;br /&gt;
# Дождаться статуса ''Approved'' у вашего Pull Request-а.&lt;br /&gt;
&lt;br /&gt;
=== Задание 1. Простейший TCP-клиент/сервер (мессенджер Elegram) ===&lt;br /&gt;
&lt;br /&gt;
Необходимо разработать простейшую систему обмена мгновенными сообщениями (чат, мессенджер). Чат-сервер должен принимать сообщения от клиентов и рассылать полученные сообщения всем подключенным клиентам. У каждого клиента должен быть собственный никнейм, задаваемый пользователем. При получении сообщения от другого клиента, на экран должно выводиться время получения сообщения, никнейм пользователя-отправителя и текст сообщения. Пример вывода: &amp;lt;code&amp;gt;&amp;lt;4:20&amp;gt; [Peter] Hello!&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Клиент должен иметь консольный интерфейс. Параметры работы клиент принимает через аргументы командной строки в следующем порядке: адрес сервера, порт, никнейм. Функции, которые '''не''' требуются от сервера и клиента:&lt;br /&gt;
* Регистрация клиентов, авторизация, аутентификация.&lt;br /&gt;
* Более чем один канал общения.&lt;br /&gt;
* Хранение истории переписки.&lt;br /&gt;
* Обработка временных зон.&lt;br /&gt;
* Работа с языками, отличными от английского.&lt;br /&gt;
&lt;br /&gt;
Чтобы принимаемые (входящие) сообщения не мешали пользователю вводить свой текст, предлагается включать отдельный режим отправки сообщения, например, при нажатии клавиши ''m''. В этом режиме пользователь вводит своё сообщение, новые сообщения от других пользователей временно не отображаются, после отправки сообщения (по Enter) режим автоматически отключается.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что клиент и сервер будут созданы на основе шаблона, находящегося в директории ''tcp_template'' репозитория. Шаблон заведомо неполный, в нем необходимо устранить следующие проблемы:&lt;br /&gt;
* В коде сервера отсутствуют вызовы для корректного закрытия сокетов.&lt;br /&gt;
* Сервер завершается после обработки первого же запроса.&lt;br /&gt;
* Сервер способен работать одновременно только с одним клиентом.&lt;br /&gt;
* Сервер не знает о длине получаемых сообщений.&lt;br /&gt;
&lt;br /&gt;
Язык программирования - Си. Для сборки кода используйте утилиту CMake. Для организации работы с несколькими клиентами используйте потоки, pthreads в Linux/BSD/macOS и WinAPI в Windows. Не забывайте использовать примитивы синхронизации для блокировки общих между несколькими клиентами ресурсов.&lt;br /&gt;
&lt;br /&gt;
Результатом выполнения задания должно быть 4 программы, клиент и сервер под Windows и Linux/BSD/macOS, и описание вашего прикладного протокола. Протокол можно описать либо с помощью текста, либо с помощью изображений (таблицы, схемы и т.д.). Примеры описания протоколов - в слайдах лекций. Описание должно быть в такой степени подробным, чтобы по нему можно было написать альтернативную совместимую реализацию клиента/сервера.&lt;br /&gt;
&lt;br /&gt;
[https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ Бесплатная виртуальная машина] с триальной версией Windows. Для сборки программного кода использовать либо Visual Studio (подойдет Community или Express редакция), либо один из дистрибутивов MinGW. Лично у меня успешно заработал [http://tdm-gcc.tdragon.net/ TDM-GCC].&lt;br /&gt;
&lt;br /&gt;
Крайний срок выполнения: '''18 марта''' в 23:59. К этому времени необходимо выполнить задание, выложить его на GitHub и сделать Pull Request. Замечания преподавателя '''можно''' исправлять после дедлайна, но учтите, что в таком случае вы будете отнимать у себя время на выполнение следующих заданий.&lt;br /&gt;
&lt;br /&gt;
Текущий план:&lt;br /&gt;
* До 18 марта - первое задание (2,5 недели).&lt;br /&gt;
* До 28 марта - второе задание (1,5 недели).&lt;br /&gt;
* До 25 апреля - первая часть третьего задания (4 недели).&lt;br /&gt;
* До 23 мая - вторая часть третьего задания (4 недели).&lt;br /&gt;
&lt;br /&gt;
== Темы для обсуждения на практических занятиях ==&lt;br /&gt;
* Администрирование сетевых сервисов&lt;br /&gt;
** HTTP-сервер. Nginx, Apache httpd, особенности, администрирование. HTTP/2, TLS в HTTP-сервере.&lt;br /&gt;
** FastCGI, реверсивные прокси.&lt;br /&gt;
** Файлообменные серверы. FTP, NFS, SFTP, SMB-сервер. Rsync.&lt;br /&gt;
** VPN-сервер. IPsec, OpenVPN, Wireguard. Сравнение, администрирование. Site-to-site. Туннели.&lt;br /&gt;
** SSH-сервер и всё, что он умеет делать. Авторизация по ключам, ssh-agent, проброс портов, VPN и т.д.&lt;br /&gt;
** Почтовый сервер. SMTP, IMAP-сервер.&lt;br /&gt;
** DNS, DHCP-сервер.&lt;br /&gt;
* Администрирование компьютерных сетей&lt;br /&gt;
** IPv6. Настройка, особенности.&lt;br /&gt;
** Настройка сети в GNU/Linux. Старые и новые утилиты. ifconfig, netstat, ip, ss.&lt;br /&gt;
** Утилита tc. Шейпинг трафика, имитация особенностей различных каналов связи.&lt;br /&gt;
** Отладка компьютерных сетей. mtr, traceroute, ping, iperf3.&lt;br /&gt;
** VLAN, коммутация пакетов.&lt;br /&gt;
** NAT, прокси.&lt;br /&gt;
** QoS.&lt;br /&gt;
** AS, looking glass, IX, маршрутизация в Интернете.&lt;br /&gt;
** IGMP.&lt;br /&gt;
** Снифферы. Wireshark, tcpdump. Задание правил.&lt;br /&gt;
** Network Namespaces.&lt;br /&gt;
** InfiniBand.&lt;br /&gt;
* Особенности использования существующих протоколов&lt;br /&gt;
** Протокол TCP. Алгоритмы контроля перегрузок.&lt;br /&gt;
** Задержки в сети. Round trip time т.п.&lt;br /&gt;
** MTU, MSS, фрагментация, туннели.&lt;br /&gt;
** Сериализация данных.&lt;/div&gt;</summary>
		<author><name>Artyom.Aleksyuk</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=15008</id>
		<title>Технологии компьютерных сетей весна 2018</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=15008"/>
				<updated>2018-03-09T00:36:55Z</updated>
		
		<summary type="html">&lt;p&gt;Artyom.Aleksyuk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Ицыксон Владимир Михайлович ('''vlad@ftk.spbstu.ru, itsykson@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/au-networks Слайды с лекций]&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/networks Слайды с лекций Политеха]&lt;br /&gt;
&lt;br /&gt;
== Практика ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Алексюк Артем Олегович ('''aleksyuk@kspt.icc.spbstu.ru, artyom.aleksyuk@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
[https://t.me/joinchat/ETSi-A1ZlsxHtWZnWWmX_Q Telegram-группа] для взаимодействия в ходе курса. Участвовать не обязательно, но очень желательно. В группе будут выкладываться объявления по курсу, кроме того, преподаватель будет по мере возможности отвечать там на вопросы. Основные объявления будут дублироваться в SeWiki. &lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
Порядок выполнения:&lt;br /&gt;
# Сделать форк [https://github.com/h31/ProgrammingLabTask1 репозитория] на GitHub.&lt;br /&gt;
# Для каждого задания сделать отдельную ветку (branch) в своём репозитории.&lt;br /&gt;
# Работать над кодом, сохраняя файлы в соответствующей заданию директории.&lt;br /&gt;
# В тот момент, когда вы будете готовы показать свой код (для проверки или консультации), сделать Pull Request в '''мою''' ветку master.&lt;br /&gt;
# Исправить замечания преподавателя.&lt;br /&gt;
# Дождаться статуса ''Approved'' у вашего Pull Request-а.&lt;br /&gt;
&lt;br /&gt;
=== Задание 1. Простейший TCP-клиент/сервер (мессенджер Elegram) ===&lt;br /&gt;
&lt;br /&gt;
Необходимо разработать простейшую систему обмена мгновенными сообщениями (чат, мессенджер). Чат-сервер должен принимать сообщения от клиентов и рассылать полученные сообщения всем подключенным клиентам. У каждого клиента должен быть собственный никнейм, задаваемый пользователем. При получении сообщения от другого клиента, на экран должно выводиться время получения сообщения, никнейм пользователя-отправителя и текст сообщения. Пример вывода: &amp;lt;code&amp;gt;&amp;lt;4:20&amp;gt; [Peter] Hello!&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Клиент должен иметь консольный интерфейс. Параметры работы клиент принимает через аргументы командной строки в следующем порядке: адрес сервера, порт, никнейм. Функции, которые '''не''' требуются от сервера и клиента:&lt;br /&gt;
* Регистрация клиентов, авторизация, аутентификация.&lt;br /&gt;
* Более чем один канал общения.&lt;br /&gt;
* Хранение истории переписки.&lt;br /&gt;
* Обработка временных зон.&lt;br /&gt;
* Работа с языками, отличными от английского.&lt;br /&gt;
&lt;br /&gt;
Чтобы принимаемые (входящие) сообщения не мешали пользователю вводить свой текст, предлагается включать отдельный режим отправки сообщения, например, при нажатии клавиши ''m''. В этом режиме пользователь вводит своё сообщение, новые сообщения от других пользователей временно не отображаются, после отправки сообщения (по Enter) режим автоматически отключается.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что клиент и сервер будут созданы на основе шаблона, находящегося в директории ''tcp_template'' репозитория. Шаблон заведомо неполный, в нем необходимо устранить следующие проблемы:&lt;br /&gt;
* В коде сервера отсутствуют вызовы для корректного закрытия сокетов.&lt;br /&gt;
* Сервер завершается после обработки первого же запроса.&lt;br /&gt;
* Сервер способен работать одновременно только с одним клиентом.&lt;br /&gt;
* Сервер не знает о длине получаемых сообщений.&lt;br /&gt;
&lt;br /&gt;
Язык программирования - Си. Для сборки кода используйте утилиту CMake. Для организации работы с несколькими клиентами используйте потоки, pthreads в Linux/BSD/macOS и WinAPI в Windows. Не забывайте использовать примитивы синхронизации для блокировки общих между несколькими клиентами ресурсов.&lt;br /&gt;
&lt;br /&gt;
Результатом выполнения задания должно быть 4 программы, клиент и сервер под Windows и Linux/BSD/macOS, и описание вашего прикладного протокола. Протокол можно описать либо с помощью текста, либо с помощью изображений (таблицы, схемы и т.д.). Примеры описания протоколов - в слайдах лекций. Описание должно быть в такой степени подробным, чтобы по нему можно было написать альтернативную совместимую реализацию клиента/сервера.&lt;br /&gt;
&lt;br /&gt;
[https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ Бесплатная виртуальная машина] с триальной версией Windows. Для сборки программного кода использовать либо Visual Studio (подойдет Community или Express редакция), либо один из дистрибутивов MinGW. Лично у меня успешно заработал [http://tdm-gcc.tdragon.net/ TDM-GCC].&lt;br /&gt;
&lt;br /&gt;
Крайний срок выполнения: '''18 марта''' в 23:59. К этому времени необходимо выполнить задание, выложить его на GitHub и сделать Pull Request. Замечания преподавателя '''можно''' исправлять после дедлайна, но учтите, что в таком случае вы будете отнимать у себя время на выполнение следующих заданий.&lt;br /&gt;
&lt;br /&gt;
Текущий план:&lt;br /&gt;
* До 18 марта - первое задание (2,5 недели).&lt;br /&gt;
* До 28 марта - второе задание (1,5 недели).&lt;br /&gt;
* До 25 апреля - первая часть третьего задания (4 недели).&lt;br /&gt;
* До 23 мая - вторая часть третьего задания (4 недели).&lt;br /&gt;
&lt;br /&gt;
== Темы для обсуждения на практических занятиях ==&lt;br /&gt;
* Администрирование сетевых сервисов&lt;br /&gt;
** HTTP-сервер. Nginx, Apache httpd, особенности, администрирование. HTTP/2, TLS в HTTP-сервере.&lt;br /&gt;
** FastCGI, реверсивные прокси.&lt;br /&gt;
** Файлообменные серверы. FTP, NFS, SFTP, SMB-сервер. Rsync.&lt;br /&gt;
** VPN-сервер. IPsec, OpenVPN, Wireguard. Сравнение, администрирование. Site-to-site. Туннели.&lt;br /&gt;
** SSH-сервер и всё, что он умеет делать. Авторизация по ключам, ssh-agent, проброс портов, VPN и т.д.&lt;br /&gt;
** Почтовый сервер. SMTP, IMAP-сервер.&lt;br /&gt;
** DNS, DHCP-сервер.&lt;br /&gt;
* Администрирование компьютерных сетей&lt;br /&gt;
** IPv6. Настройка, особенности.&lt;br /&gt;
** Настройка сети в GNU/Linux. Старые и новые утилиты. ifconfig, netstat, ip, ss.&lt;br /&gt;
** Утилита tc. Шейпинг трафика, имитация особенностей различных каналов связи.&lt;br /&gt;
** Отладка компьютерных сетей. mtr, traceroute, ping, iperf3.&lt;br /&gt;
** VLAN, коммутация пакетов.&lt;br /&gt;
** NAT, прокси.&lt;br /&gt;
** QoS.&lt;br /&gt;
** AS, looking glass, IX, маршрутизация в Интернете.&lt;br /&gt;
** IGMP.&lt;br /&gt;
** Снифферы. Wireshark, tcpdump. Задание правил.&lt;br /&gt;
** Network Namespaces.&lt;br /&gt;
** InfiniBand.&lt;br /&gt;
* Особенности использования существующих протоколов&lt;br /&gt;
** Протокол TCP. Алгоритмы контроля перегрузок.&lt;br /&gt;
** Задержки в сети. Round trip time т.п.&lt;br /&gt;
** MTU, MSS, фрагментация, туннели.&lt;br /&gt;
** Сериализация данных.&lt;/div&gt;</summary>
		<author><name>Artyom.Aleksyuk</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=15007</id>
		<title>Технологии компьютерных сетей весна 2018</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=15007"/>
				<updated>2018-03-09T00:36:27Z</updated>
		
		<summary type="html">&lt;p&gt;Artyom.Aleksyuk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Ицыксон Владимир Михайлович ('''vlad@ftk.spbstu.ru, itsykson@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/au-networks Слайды с лекций]&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/networks Слайды с лекций Политеха]&lt;br /&gt;
&lt;br /&gt;
== Практика ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Алексюк Артем Олегович ('''aleksyuk@kspt.icc.spbstu.ru, artyom.aleksyuk@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
[https://t.me/joinchat/ETSi-A1ZlsxHtWZnWWmX_Q Telegram-группа] для взаимодействия в ходе курса. Участвовать не обязательно, но очень желательно. В группе будут выкладываться объявления по курсу, кроме того, преподаватель будет по мере возможности отвечать там на вопросы. Основные объявления будут дублироваться в SeWiki. &lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
Порядок выполнения:&lt;br /&gt;
# Сделать форк [https://github.com/h31/ProgrammingLabTask1 репозитория] на GitHub.&lt;br /&gt;
# Для каждого задания сделать отдельную ветку (branch) в своём репозитории.&lt;br /&gt;
# Работать над кодом, сохраняя файлы в соответствующей заданию директории.&lt;br /&gt;
# В тот момент, когда вы будете готовы показать свой код (для проверки или консультации), сделать Pull Request в '''мою''' ветку master.&lt;br /&gt;
# Исправить замечания преподавателя.&lt;br /&gt;
# Дождаться статуса ''Approved'' у вашего Pull Request-а.&lt;br /&gt;
&lt;br /&gt;
=== Задание 1. Простейший TCP-клиент/сервер (мессенджер Elegram) ===&lt;br /&gt;
&lt;br /&gt;
Необходимо разработать простейшую систему обмена мгновенными сообщениями (чат, мессенджер). Чат-сервер должен принимать сообщения от клиентов и рассылать полученные сообщения всем подключенным клиентам. У каждого клиента должен быть собственный никнейм, задаваемый пользователем. При получении сообщения от другого клиента, на экран должно выводиться время получения сообщения, никнейм пользователя-отправителя и текст сообщения. Пример вывода: &amp;lt;code&amp;gt;&amp;lt;4:20&amp;gt; [Peter] Hello!&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Клиент должен иметь консольный интерфейс. Параметры работы клиент принимает через аргументы командной строки в следующем порядке: адрес сервера, порт, никнейм. Функции, которые '''не''' требуются от сервера и клиента:&lt;br /&gt;
* Регистрация клиентов, авторизация, аутентификация.&lt;br /&gt;
* Более чем один канал общения.&lt;br /&gt;
* Хранение истории переписки.&lt;br /&gt;
* Обработка временных зон.&lt;br /&gt;
* Работа с языками, отличными от английского.&lt;br /&gt;
&lt;br /&gt;
Чтобы принимаемые (входящие) сообщения не мешали пользователю вводить свой текст, предлагается включать отдельный режим отправки сообщения, например, при нажатии клавиши ''m''. В этом режиме пользователь вводит своё сообщение, новые сообщения от других пользователей временно не отображаются, после отправки сообщения (по Enter) режим автоматически отключается.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что клиент и сервер будут созданы на основе шаблона, находящегося в директории ''tcp_template'' репозитория. Шаблон заведомо неполный, в нем необходимо устранить следующие проблемы:&lt;br /&gt;
* В коде сервера отсутствуют вызовы для корректного закрытия сокетов.&lt;br /&gt;
* Сервер завершается после обработки первого же запроса.&lt;br /&gt;
* Сервер способен работать одновременно только с одним клиентом.&lt;br /&gt;
* Сервер не знает о длине получаемых сообщений.&lt;br /&gt;
&lt;br /&gt;
Язык программирования - Си. Для сборки кода используйте утилиту CMake. Для организации работы с несколькими клиентами используйте потоки, pthreads в Linux/BSD/macOS и WinAPI в Windows. Не забывайте использовать примитивы синхронизации для блокировки общих между несколькими клиентами ресурсов.&lt;br /&gt;
&lt;br /&gt;
Результатом выполнения задания должно быть 4 программы, клиент и сервер под Windows и Linux/BSD/macOS, и описание вашего прикладного протокола. Протокол можно описать либо с помощью текста, либо с помощью изображений (таблицы, схемы и т.д.). Примеры описания протоколов - в слайдах лекций. Описание должно быть в такой степени подробным, чтобы по нему можно было написать альтернативную совместимую реализацию клиента/сервера.&lt;br /&gt;
&lt;br /&gt;
[https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ Бесплатная виртуальная машина] с триальной версией Windows. Для сборки программного кода использовать либо Visual Studio (подойдет Community или Express редакция), либо один из дистрибутивов MinGW. Лично у меня успешно заработал [http://tdm-gcc.tdragon.net/ TDM-GCC].&lt;br /&gt;
&lt;br /&gt;
Крайний срок выполнения: '''18 марта''' в 23:59. К этому времени необходимо выполнить задание, выложить его на GitHub и сделать Pull Request. Замечания преподавателя '''можно''' исправлять после дедлайна, но учтите, что в таком случае вы будете отнимать у себя время на выполнение следующих заданий.&lt;br /&gt;
&lt;br /&gt;
Текущий план:&lt;br /&gt;
* До 18 марта - первое задание (2,5 недели).&lt;br /&gt;
* До 28 марта - второе задание (1,5 недели).&lt;br /&gt;
* До 25 апреля - первая часть третьего задания (4 недели).&lt;br /&gt;
* До 23 мая - вторая часть третьего задания (4 недели).&lt;br /&gt;
&lt;br /&gt;
== Темы для обсуждения на практических занятиях ==&lt;br /&gt;
* Администрирование сетевых сервисов&lt;br /&gt;
** HTTP-сервер. Nginx, Apache httpd, особенности, администрирование. HTTP/2, TLS в HTTP-сервере.&lt;br /&gt;
** FastCGI, реверсивные прокси.&lt;br /&gt;
** Файлообменные серверы. FTP, NFS, SFTP, SMB-сервер. Rsync.&lt;br /&gt;
** VPN-сервер. IPsec, OpenVPN, Wireguard. Сравнение, администрирование. Site-to-site. Туннели.&lt;br /&gt;
** SSH-сервер и всё, что он умеет делать. Авторизация по ключам, ssh-agent, проброс портов, VPN и т.д.&lt;br /&gt;
** Почтовый сервер. SMTP, IMAP-сервер.&lt;br /&gt;
** DNS, DHCP-сервер.&lt;br /&gt;
* Администрирование компьютерных сетей&lt;br /&gt;
** IPv6. Настройка, особенности.&lt;br /&gt;
** Настройка сети в GNU/Linux. Старые и новые утилиты. ifconfig, netstat, ip, ss.&lt;br /&gt;
** Утилита tc. Шейпинг трафика, имитация особенностей различных каналов связи.&lt;br /&gt;
** Отладка компьютерных сетей. mtr, traceroute, ping, iperf3.&lt;br /&gt;
** VLAN, коммутация пакетов.&lt;br /&gt;
** NAT, прокси.&lt;br /&gt;
** QoS.&lt;br /&gt;
** AS, looking glass, IX, маршрутизация в Интернете.&lt;br /&gt;
** IGMP.&lt;br /&gt;
** Снифферы. Wireshark, tcpdump. Задание правил.&lt;br /&gt;
** Network Namespaces&lt;br /&gt;
** InfiniBand&lt;br /&gt;
* Особенности использования существующих протоколов&lt;br /&gt;
** Протокол TCP. Алгоритмы контроля перегрузок.&lt;br /&gt;
** Задержки в сети. Round trip time т.п.&lt;br /&gt;
** MTU, MSS, фрагментация, туннели.&lt;br /&gt;
** Сериализация данных.&lt;/div&gt;</summary>
		<author><name>Artyom.Aleksyuk</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=14982</id>
		<title>Технологии компьютерных сетей весна 2018</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=14982"/>
				<updated>2018-03-07T13:10:02Z</updated>
		
		<summary type="html">&lt;p&gt;Artyom.Aleksyuk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Ицыксон Владимир Михайлович ('''vlad@ftk.spbstu.ru, itsykson@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/au-networks Слайды с лекций]&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/networks Слайды с лекций Политеха]&lt;br /&gt;
&lt;br /&gt;
== Практика ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Алексюк Артем Олегович ('''aleksyuk@kspt.icc.spbstu.ru, artyom.aleksyuk@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
[https://t.me/joinchat/ETSi-A1ZlsxHtWZnWWmX_Q Telegram-группа] для взаимодействия в ходе курса. Участвовать не обязательно, но очень желательно. В группе будут выкладываться объявления по курсу, кроме того, преподаватель будет по мере возможности отвечать там на вопросы. Основные объявления будут дублироваться в SeWiki. &lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
Порядок выполнения:&lt;br /&gt;
# Сделать форк [https://github.com/h31/ProgrammingLabTask1 репозитория] на GitHub.&lt;br /&gt;
# Для каждого задания сделать отдельную ветку (branch) в своём репозитории.&lt;br /&gt;
# Работать над кодом, сохраняя файлы в соответствующей заданию директории.&lt;br /&gt;
# В тот момент, когда вы будете готовы показать свой код (для проверки или консультации), сделать Pull Request в '''мою''' ветку master.&lt;br /&gt;
# Исправить замечания преподавателя.&lt;br /&gt;
# Дождаться статуса ''Approved'' у вашего Pull Request-а.&lt;br /&gt;
&lt;br /&gt;
=== Задание 1. Простейший TCP-клиент/сервер (мессенджер Elegram) ===&lt;br /&gt;
&lt;br /&gt;
Необходимо разработать простейшую систему обмена мгновенными сообщениями (чат, мессенджер). Чат-сервер должен принимать сообщения от клиентов и рассылать полученные сообщения всем подключенным клиентам. У каждого клиента должен быть собственный никнейм, задаваемый пользователем. При получении сообщения от другого клиента, на экран должно выводиться время получения сообщения, никнейм пользователя-отправителя и текст сообщения. Пример вывода: &amp;lt;code&amp;gt;&amp;lt;4:20&amp;gt; [Peter] Hello!&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Клиент должен иметь консольный интерфейс. Параметры работы клиент принимает через аргументы командной строки в следующем порядке: адрес сервера, порт, никнейм. Функции, которые '''не''' требуются от сервера и клиента:&lt;br /&gt;
* Регистрация клиентов, авторизация, аутентификация.&lt;br /&gt;
* Более чем один канал общения.&lt;br /&gt;
* Хранение истории переписки.&lt;br /&gt;
* Обработка временных зон.&lt;br /&gt;
* Работа с языками, отличными от английского.&lt;br /&gt;
&lt;br /&gt;
Чтобы принимаемые (входящие) сообщения не мешали пользователю вводить свой текст, предлагается включать отдельный режим отправки сообщения, например, при нажатии клавиши ''m''. В этом режиме пользователь вводит своё сообщение, новые сообщения от других пользователей временно не отображаются, после отправки сообщения (по Enter) режим автоматически отключается.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что клиент и сервер будут созданы на основе шаблона, находящегося в директории ''tcp_template'' репозитория. Шаблон заведомо неполный, в нем необходимо устранить следующие проблемы:&lt;br /&gt;
* В коде сервера отсутствуют вызовы для корректного закрытия сокетов.&lt;br /&gt;
* Сервер завершается после обработки первого же запроса.&lt;br /&gt;
* Сервер способен работать одновременно только с одним клиентом.&lt;br /&gt;
* Сервер не знает о длине получаемых сообщений.&lt;br /&gt;
&lt;br /&gt;
Язык программирования - Си. Для сборки кода используйте утилиту CMake. Для организации работы с несколькими клиентами используйте потоки, pthreads в Linux/BSD/macOS и WinAPI в Windows. Не забывайте использовать примитивы синхронизации для блокировки общих между несколькими клиентами ресурсов.&lt;br /&gt;
&lt;br /&gt;
Результатом выполнения задания должно быть 4 программы, клиент и сервер под Windows и Linux/BSD/macOS, и описание вашего прикладного протокола. Протокол можно описать либо с помощью текста, либо с помощью изображений (таблицы, схемы и т.д.). Примеры описания протоколов - в слайдах лекций. Описание должно быть в такой степени подробным, чтобы по нему можно было написать альтернативную совместимую реализацию клиента/сервера.&lt;br /&gt;
&lt;br /&gt;
[https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ Бесплатная виртуальная машина] с триальной версией Windows. Для сборки программного кода использовать либо Visual Studio (подойдет Community или Express редакция), либо один из дистрибутивов MinGW. Лично у меня успешно заработал [http://tdm-gcc.tdragon.net/ TDM-GCC].&lt;br /&gt;
&lt;br /&gt;
Крайний срок выполнения: '''18 марта''' в 23:59. К этому времени необходимо выполнить задание, выложить его на GitHub и сделать Pull Request. Замечания преподавателя '''можно''' исправлять после дедлайна, но учтите, что в таком случае вы будете отнимать у себя время на выполнение следующих заданий.&lt;br /&gt;
&lt;br /&gt;
Текущий план:&lt;br /&gt;
* До 18 марта - первое задание (2,5 недели).&lt;br /&gt;
* До 28 марта - второе задание (1,5 недели).&lt;br /&gt;
* До 25 апреля - первая часть третьего задания (4 недели).&lt;br /&gt;
* До 23 мая - вторая часть третьего задания (4 недели).&lt;br /&gt;
&lt;br /&gt;
== Темы для обсуждения на практических занятиях ==&lt;br /&gt;
* Администрирование сетевых сервисов&lt;br /&gt;
** HTTP-сервер. Nginx, Apache httpd, особенности, администрирование. HTTP/2, TLS в HTTP-сервере.&lt;br /&gt;
** FastCGI, реверсивные прокси.&lt;br /&gt;
** Файлообменные серверы. FTP, NFS, SFTP, SMB-сервер. Rsync.&lt;br /&gt;
** VPN-сервер. IPsec, OpenVPN, Wireguard. Сравнение, администрирование. Site-to-site.&lt;br /&gt;
** SSH-сервер и всё, что он умеет делать. Авторизация по ключам, ssh-agent, проброс портов, VPN и т.д.&lt;br /&gt;
** Почтовый сервер. SMTP, IMAP-сервер.&lt;br /&gt;
** DNS, DHCP-сервер.&lt;br /&gt;
* Администрирование компьютерных сетей&lt;br /&gt;
** IPv6. Настройка, особенности.&lt;br /&gt;
** Настройка сети в GNU/Linux. Старые и новые утилиты. ifconfig, netstat, ip, ss.&lt;br /&gt;
** Утилита tc. Шейпинг трафика, имитация особенностей различных каналов связи.&lt;br /&gt;
** Отладка компьютерных сетей. mtr, traceroute, ping, iperf3.&lt;br /&gt;
** VLAN, коммутация пакетов.&lt;br /&gt;
** NAT, прокси.&lt;br /&gt;
** QoS.&lt;br /&gt;
** AS, looking glass, IX, маршрутизация в Интернете.&lt;br /&gt;
** IGMP.&lt;br /&gt;
** Снифферы. Wireshark, tcpdump. Задание правил.&lt;br /&gt;
* Особенности использования существующих протоколов&lt;br /&gt;
** Протокол TCP. Алгоритмы контроля перегрузок.&lt;br /&gt;
** Задержки в сети. Round trip time т.п.&lt;br /&gt;
** MTU, MSS, фрагментация, туннели.&lt;/div&gt;</summary>
		<author><name>Artyom.Aleksyuk</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=14981</id>
		<title>Технологии компьютерных сетей весна 2018</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=14981"/>
				<updated>2018-03-07T12:33:22Z</updated>
		
		<summary type="html">&lt;p&gt;Artyom.Aleksyuk: Темы для обсуждения&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Ицыксон Владимир Михайлович ('''vlad@ftk.spbstu.ru, itsykson@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/au-networks Слайды с лекций]&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/networks Слайды с лекций Политеха]&lt;br /&gt;
&lt;br /&gt;
== Практика ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Алексюк Артем Олегович ('''aleksyuk@kspt.icc.spbstu.ru, artyom.aleksyuk@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
[https://t.me/joinchat/ETSi-A1ZlsxHtWZnWWmX_Q Telegram-группа] для взаимодействия в ходе курса. Участвовать не обязательно, но очень желательно. В группе будут выкладываться объявления по курсу, кроме того, преподаватель будет по мере возможности отвечать там на вопросы. Основные объявления будут дублироваться в SeWiki. &lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
Порядок выполнения:&lt;br /&gt;
# Сделать форк [https://github.com/h31/ProgrammingLabTask1 репозитория] на GitHub.&lt;br /&gt;
# Для каждого задания сделать отдельную ветку (branch) в своём репозитории.&lt;br /&gt;
# Работать над кодом, сохраняя файлы в соответствующей заданию директории.&lt;br /&gt;
# В тот момент, когда вы будете готовы показать свой код (для проверки или консультации), сделать Pull Request в '''мою''' ветку master.&lt;br /&gt;
# Исправить замечания преподавателя.&lt;br /&gt;
# Дождаться статуса ''Approved'' у вашего Pull Request-а.&lt;br /&gt;
&lt;br /&gt;
=== Задание 1. Простейший TCP-клиент/сервер (мессенджер Elegram) ===&lt;br /&gt;
&lt;br /&gt;
Необходимо разработать простейшую систему обмена мгновенными сообщениями (чат, мессенджер). Чат-сервер должен принимать сообщения от клиентов и рассылать полученные сообщения всем подключенным клиентам. У каждого клиента должен быть собственный никнейм, задаваемый пользователем. При получении сообщения от другого клиента, на экран должно выводиться время получения сообщения, никнейм пользователя-отправителя и текст сообщения. Пример вывода: &amp;lt;code&amp;gt;&amp;lt;4:20&amp;gt; [Peter] Hello!&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Клиент должен иметь консольный интерфейс. Параметры работы клиент принимает через аргументы командной строки в следующем порядке: адрес сервера, порт, никнейм. Функции, которые '''не''' требуются от сервера и клиента:&lt;br /&gt;
* Регистрация клиентов, авторизация, аутентификация.&lt;br /&gt;
* Более чем один канал общения.&lt;br /&gt;
* Хранение истории переписки.&lt;br /&gt;
* Обработка временных зон.&lt;br /&gt;
* Работа с языками, отличными от английского.&lt;br /&gt;
&lt;br /&gt;
Чтобы принимаемые (входящие) сообщения не мешали пользователю вводить свой текст, предлагается включать отдельный режим отправки сообщения, например, при нажатии клавиши ''m''. В этом режиме пользователь вводит своё сообщение, новые сообщения от других пользователей временно не отображаются, после отправки сообщения (по Enter) режим автоматически отключается.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что клиент и сервер будут созданы на основе шаблона, находящегося в директории ''tcp_template'' репозитория. Шаблон заведомо неполный, в нем необходимо устранить следующие проблемы:&lt;br /&gt;
* В коде сервера отсутствуют вызовы для корректного закрытия сокетов.&lt;br /&gt;
* Сервер завершается после обработки первого же запроса.&lt;br /&gt;
* Сервер способен работать одновременно только с одним клиентом.&lt;br /&gt;
* Сервер не знает о длине получаемых сообщений.&lt;br /&gt;
&lt;br /&gt;
Язык программирования - Си. Для сборки кода используйте утилиту CMake. Для организации работы с несколькими клиентами используйте потоки, pthreads в Linux/BSD/macOS и WinAPI в Windows. Не забывайте использовать примитивы синхронизации для блокировки общих между несколькими клиентами ресурсов.&lt;br /&gt;
&lt;br /&gt;
Результатом выполнения задания должно быть 4 программы, клиент и сервер под Windows и Linux/BSD/macOS, и описание вашего прикладного протокола. Протокол можно описать либо с помощью текста, либо с помощью изображений (таблицы, схемы и т.д.). Примеры описания протоколов - в слайдах лекций. Описание должно быть в такой степени подробным, чтобы по нему можно было написать альтернативную совместимую реализацию клиента/сервера.&lt;br /&gt;
&lt;br /&gt;
[https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ Бесплатная виртуальная машина] с триальной версией Windows. Для сборки программного кода использовать либо Visual Studio (подойдет Community или Express редакция), либо один из дистрибутивов MinGW. Лично у меня успешно заработал [http://tdm-gcc.tdragon.net/ TDM-GCC].&lt;br /&gt;
&lt;br /&gt;
Крайний срок выполнения: '''18 марта''' в 23:59. К этому времени необходимо выполнить задание, выложить его на GitHub и сделать Pull Request. Замечания преподавателя '''можно''' исправлять после дедлайна, но учтите, что в таком случае вы будете отнимать у себя время на выполнение следующих заданий.&lt;br /&gt;
&lt;br /&gt;
Текущий план:&lt;br /&gt;
* До 18 марта - первое задание (2,5 недели).&lt;br /&gt;
* До 28 марта - второе задание (1,5 недели).&lt;br /&gt;
* До 25 апреля - первая часть третьего задания (4 недели).&lt;br /&gt;
* До 23 мая - вторая часть третьего задания (4 недели).&lt;br /&gt;
&lt;br /&gt;
== Темы для обсуждения на практических занятиях ==&lt;br /&gt;
* Администрирование сетевых сервисов&lt;br /&gt;
** HTTP-сервер. Nginx, Apache httpd, особенности, администрирование. HTTP/2, TLS в HTTP-сервере.&lt;br /&gt;
** Файлообменные серверы. FTP, NFS, SFTP, SMB-сервер. Rsync.&lt;br /&gt;
** VPN-сервер. IPsec, OpenVPN, Wireguard. Сравнение, администрирование.&lt;br /&gt;
** SSH-сервер и всё, что он умеет делать. Авторизация по ключам, ssh-agent, проброс портов, VPN и т.д.&lt;br /&gt;
** Почтовый сервер. SMTP, IMAP-сервер.&lt;br /&gt;
** DNS, DHCP-сервер.&lt;br /&gt;
* Администрирование компьютерных сетей&lt;br /&gt;
** IPv6. Настройка, особенности.&lt;br /&gt;
** Настройка сети в GNU/Linux. Старые и новые утилиты. ifconfig, netstat, ip, ss.&lt;br /&gt;
** Утилита tc. Шейпинг трафика, имитация особенностей различных каналов связи.&lt;br /&gt;
** Отладка компьютерных сетей. mtr, traceroute, ping, iperf3.&lt;br /&gt;
* Реализация существующих протоколов в различных системах&lt;br /&gt;
** Протокол TCP. Алгоритмы контроля перегрузок.&lt;br /&gt;
** Задержки в сети. Round trip time и так далее.&lt;/div&gt;</summary>
		<author><name>Artyom.Aleksyuk</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=14916</id>
		<title>Технологии компьютерных сетей весна 2018</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=14916"/>
				<updated>2018-03-02T15:41:10Z</updated>
		
		<summary type="html">&lt;p&gt;Artyom.Aleksyuk: Мессенджер&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Ицыксон Владимир Михайлович ('''vlad@ftk.spbstu.ru, itsykson@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/au-networks Слайды с лекций]&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/networks Слайды с лекций Политеха]&lt;br /&gt;
&lt;br /&gt;
== Практика ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Алексюк Артем Олегович ('''aleksyuk@kspt.icc.spbstu.ru, artyom.aleksyuk@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
[https://t.me/joinchat/ETSi-A1ZlsxHtWZnWWmX_Q Telegram-группа] для взаимодействия в ходе курса. Участвовать не обязательно, но очень желательно. В группе будут выкладываться объявления по курсу, кроме того, преподаватель будет по мере возможности отвечать там на вопросы. Основные объявления будут дублироваться в SeWiki. &lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
Порядок выполнения:&lt;br /&gt;
# Сделать форк [https://github.com/h31/ProgrammingLabTask1 репозитория] на GitHub.&lt;br /&gt;
# Для каждого задания сделать отдельную ветку (branch) в своём репозитории.&lt;br /&gt;
# Работать над кодом, сохраняя файлы в соответствующей заданию директории.&lt;br /&gt;
# В тот момент, когда вы будете готовы показать свой код (для проверки или консультации), сделать Pull Request в '''мою''' ветку master.&lt;br /&gt;
# Исправить замечания преподавателя.&lt;br /&gt;
# Дождаться статуса ''Approved'' у вашего Pull Request-а.&lt;br /&gt;
&lt;br /&gt;
=== Задание 1. Простейший TCP-клиент/сервер (мессенджер Elegram) ===&lt;br /&gt;
&lt;br /&gt;
Необходимо разработать простейшую систему обмена мгновенными сообщениями (чат, мессенджер). Чат-сервер должен принимать сообщения от клиентов и рассылать полученные сообщения всем подключенным клиентам. У каждого клиента должен быть собственный никнейм, задаваемый пользователем. При получении сообщения от другого клиента, на экран должно выводиться время получения сообщения, никнейм пользователя-отправителя и текст сообщения. Пример вывода: &amp;lt;code&amp;gt;&amp;lt;4:20&amp;gt; [Peter] Hello!&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Клиент должен иметь консольный интерфейс. Параметры работы клиент принимает через аргументы командной строки в следующем порядке: адрес сервера, порт, никнейм. Функции, которые '''не''' требуются от сервера и клиента:&lt;br /&gt;
* Регистрация клиентов, авторизация, аутентификация.&lt;br /&gt;
* Более чем один канал общения.&lt;br /&gt;
* Хранение истории переписки.&lt;br /&gt;
* Обработка временных зон.&lt;br /&gt;
* Работа с языками, отличными от английского.&lt;br /&gt;
&lt;br /&gt;
Чтобы принимаемые (входящие) сообщения не мешали пользователю вводить свой текст, предлагается включать отдельный режим отправки сообщения, например, при нажатии клавиши ''m''. В этом режиме пользователь вводит своё сообщение, новые сообщения от других пользователей временно не отображаются, после отправки сообщения (по Enter) режим автоматически отключается.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что клиент и сервер будут созданы на основе шаблона, находящегося в директории ''tcp_template'' репозитория. Шаблон заведомо неполный, в нем необходимо устранить следующие проблемы:&lt;br /&gt;
* В коде сервера отсутствуют вызовы для корректного закрытия сокетов.&lt;br /&gt;
* Сервер завершается после обработки первого же запроса.&lt;br /&gt;
* Сервер способен работать одновременно только с одним клиентом.&lt;br /&gt;
* Сервер не знает о длине получаемых сообщений.&lt;br /&gt;
&lt;br /&gt;
Язык программирования - Си. Для сборки кода используйте утилиту CMake. Для организации работы с несколькими клиентами используйте потоки, pthreads в Linux/BSD/macOS и WinAPI в Windows. Не забывайте использовать примитивы синхронизации для блокировки общих между несколькими клиентами ресурсов.&lt;br /&gt;
&lt;br /&gt;
Результатом выполнения задания должно быть 4 программы, клиент и сервер под Windows и Linux/BSD/macOS, и описание вашего прикладного протокола. Протокол можно описать либо с помощью текста, либо с помощью изображений (таблицы, схемы и т.д.). Примеры описания протоколов - в слайдах лекций. Описание должно быть в такой степени подробным, чтобы по нему можно было написать альтернативную совместимую реализацию клиента/сервера.&lt;br /&gt;
&lt;br /&gt;
[https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ Бесплатная виртуальная машина] с триальной версией Windows. Для сборки программного кода использовать либо Visual Studio (подойдет Community или Express редакция), либо один из дистрибутивов MinGW. Лично у меня успешно заработал [http://tdm-gcc.tdragon.net/ TDM-GCC].&lt;br /&gt;
&lt;br /&gt;
Крайний срок выполнения: '''18 марта''' в 23:59. К этому времени необходимо выполнить задание, выложить его на GitHub и сделать Pull Request. Замечания преподавателя '''можно''' исправлять после дедлайна, но учтите, что в таком случае вы будете отнимать у себя время на выполнение следующих заданий.&lt;br /&gt;
&lt;br /&gt;
Текущий план:&lt;br /&gt;
* До 18 марта - первое задание (2,5 недели).&lt;br /&gt;
* До 28 марта - второе задание (1,5 недели).&lt;br /&gt;
* До 25 апреля - первая часть третьего задания (4 недели).&lt;br /&gt;
* До 23 мая - вторая часть третьего задания (4 недели).&lt;/div&gt;</summary>
		<author><name>Artyom.Aleksyuk</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=14915</id>
		<title>Технологии компьютерных сетей весна 2018</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=14915"/>
				<updated>2018-03-02T15:30:45Z</updated>
		
		<summary type="html">&lt;p&gt;Artyom.Aleksyuk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Ицыксон Владимир Михайлович ('''vlad@ftk.spbstu.ru, itsykson@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/au-networks Слайды с лекций]&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/networks Слайды с лекций Политеха]&lt;br /&gt;
&lt;br /&gt;
== Практика ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Алексюк Артем Олегович ('''aleksyuk@kspt.icc.spbstu.ru, artyom.aleksyuk@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
[https://t.me/joinchat/ETSi-A1ZlsxHtWZnWWmX_Q Telegram-группа] для взаимодействия в ходе курса. Участвовать не обязательно, но очень желательно. В группе будут выкладываться объявления по курсу, кроме того, преподаватель будет по мере возможности отвечать там на вопросы. Основные объявления будут дублироваться в SeWiki. &lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
Порядок выполнения:&lt;br /&gt;
# Сделать форк [https://github.com/h31/ProgrammingLabTask1 репозитория] на GitHub.&lt;br /&gt;
# Для каждого задания сделать отдельную ветку (branch) в своём репозитории.&lt;br /&gt;
# Работать над кодом, сохраняя файлы в соответствующей заданию директории.&lt;br /&gt;
# В тот момент, когда вы будете готовы показать свой код (для проверки или консультации), сделать Pull Request в '''мою''' ветку master.&lt;br /&gt;
# Исправить замечания преподавателя.&lt;br /&gt;
# Дождаться статуса ''Approved'' у вашего Pull Request-а.&lt;br /&gt;
&lt;br /&gt;
=== Задание 1. Простейший TCP-клиент/сервер (мессенджер) ===&lt;br /&gt;
&lt;br /&gt;
Необходимо разработать простейшую систему обмена мгновенными сообщениями (чат, мессенджер). Чат-сервер должен принимать сообщения от клиентов и рассылать полученные сообщения всем подключенным клиентам. У каждого клиента должен быть собственный никнейм, задаваемый пользователем. При получении сообщения от другого клиента, на экран должно выводиться время получения сообщения, никнейм пользователя-отправителя и текст сообщения. Пример вывода: &amp;lt;code&amp;gt;&amp;lt;4:20&amp;gt; [Peter] Hello!&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Клиент должен иметь консольный интерфейс. Параметры работы клиент принимает через аргументы командной строки в следующем порядке: адрес сервера, порт, никнейм. Функции, которые '''не''' требуются от сервера и клиента:&lt;br /&gt;
* Регистрация клиентов, авторизация, аутентификация.&lt;br /&gt;
* Хранение истории переписки.&lt;br /&gt;
* Проверка уникальности никнеймов.&lt;br /&gt;
* Обработка временных зон.&lt;br /&gt;
* Работа с языками, отличными от английского.&lt;br /&gt;
&lt;br /&gt;
Чтобы принимаемые (входящие) сообщения не мешали пользователю вводить свой текст, предлагается включать отдельный режим отправки сообщения, например, при нажатии клавиши ''m''. В этом режиме пользователь вводит своё сообщение, новые сообщения от других пользователей временно не отображаются, после отправки сообщения (по Enter) режим автоматически отключается.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что клиент и сервер будут созданы на основе шаблона, находящегося в директории ''tcp_template'' репозитория. Шаблон заведомо неполный, в нем необходимо устранить следующие проблемы:&lt;br /&gt;
* В коде сервера отсутствуют вызовы для корректного закрытия сокетов.&lt;br /&gt;
* Сервер завершается после обработки первого же запроса.&lt;br /&gt;
* Сервер способен работать одновременно только с одним клиентом.&lt;br /&gt;
* Сервер не знает о длине получаемых сообщений.&lt;br /&gt;
&lt;br /&gt;
Язык программирования - Си. Для сборки кода используйте утилиту CMake. Для организации работы с несколькими клиентами используйте потоки, pthreads в Linux/BSD/macOS и WinAPI в Windows. Не забывайте использовать примитивы синхронизации для блокировки общих между несколькими клиентами ресурсов.&lt;br /&gt;
&lt;br /&gt;
Результатом выполнения задания должно быть 4 программы, клиент и сервер под Windows и Linux/BSD/macOS, и описание вашего прикладного протокола. Протокол можно описать либо с помощью текста, либо с помощью изображений (таблицы, схемы и т.д.). Примеры описания протоколов - в слайдах лекций. Описание должно быть в такой степени подробным, чтобы по нему можно было написать альтернативную совместимую реализацию клиента/сервера.&lt;br /&gt;
&lt;br /&gt;
[https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ Бесплатная виртуальная машина] с триальной версией Windows. Для сборки программного кода использовать либо Visual Studio (подойдет Community или Express редакция), либо один из дистрибутивов MinGW. Лично у меня успешно заработал [http://tdm-gcc.tdragon.net/ TDM-GCC].&lt;br /&gt;
&lt;br /&gt;
Крайний срок выполнения: '''18 марта''' в 23:59. К этому времени необходимо выполнить задание, выложить его на GitHub и сделать Pull Request. Замечания преподавателя '''можно''' исправлять после дедлайна, но учтите, что в таком случае вы будете отнимать у себя время на выполнение следующих заданий.&lt;br /&gt;
&lt;br /&gt;
Текущий план:&lt;br /&gt;
* До 18 марта - первое задание (2,5 недели).&lt;br /&gt;
* До 28 марта - второе задание (1,5 недели).&lt;br /&gt;
* До 25 апреля - первая часть третьего задания (4 недели).&lt;br /&gt;
* До 23 мая - вторая часть третьего задания (4 недели).&lt;/div&gt;</summary>
		<author><name>Artyom.Aleksyuk</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=14914</id>
		<title>Технологии компьютерных сетей весна 2018</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=14914"/>
				<updated>2018-03-02T15:22:11Z</updated>
		
		<summary type="html">&lt;p&gt;Artyom.Aleksyuk: Исправления&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Ицыксон Владимир Михайлович ('''vlad@ftk.spbstu.ru, itsykson@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/au-networks Слайды с лекций]&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/networks Слайды с лекций Политеха]&lt;br /&gt;
&lt;br /&gt;
== Практика ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Алексюк Артем Олегович ('''aleksyuk@kspt.icc.spbstu.ru, artyom.aleksyuk@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
[https://t.me/joinchat/ETSi-A1ZlsxHtWZnWWmX_Q Telegram-группа] для взаимодействия в ходе курса. Участвовать не обязательно, но очень желательно. В группе будут выкладываться объявления по курсу, кроме того, преподаватель будет по мере возможности отвечать там на вопросы. Основные объявления будут дублироваться в SeWiki. &lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
Порядок выполнения:&lt;br /&gt;
# Сделать форк [https://github.com/h31/ProgrammingLabTask1 репозитория] на GitHub.&lt;br /&gt;
# Для каждого задания сделать отдельную ветку (branch) в своём репозитории.&lt;br /&gt;
# Работать над кодом, сохраняя файлы в соответствующей заданию директории.&lt;br /&gt;
# В тот момент, когда вы будете готовы показать свой код (для проверки или консультации), сделать Pull Request в '''мою''' ветку master.&lt;br /&gt;
# Исправить замечания преподавателя.&lt;br /&gt;
# Дождаться статуса ''Approved'' у вашего Pull Request-а.&lt;br /&gt;
&lt;br /&gt;
=== Задание 1. Простейший TCP-клиент/сервер (мессенджер) ===&lt;br /&gt;
&lt;br /&gt;
Необходимо разработать простейшую систему обмена мгновенными сообщениями (чат, мессенджер). Чат-сервер должен принимать сообщения от клиентов и рассылать полученные сообщения всем подключенным клиентам. У каждого клиента должен быть собственный никнейм, задаваемый пользователем. При получении сообщения от другого клиента, на экран должно выводиться время получения сообщения, никнейм пользователя-отправителя и текст сообщения. Пример вывода: &amp;lt;code&amp;gt;&amp;lt;4:20&amp;gt; [Peter] Hello!&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Клиент должен иметь консольный интерфейс. Параметры работы клиент принимает через аргументы командной строки в следующем порядке: адрес сервера, порт, никнейм. Функции, которые '''не''' требуются от сервера и клиента:&lt;br /&gt;
* Регистрация клиентов, авторизация, аутентификация.&lt;br /&gt;
* Хранение истории переписки.&lt;br /&gt;
* Проверка уникальности никнеймов.&lt;br /&gt;
* Обработка временных зон.&lt;br /&gt;
* Работа с языками, отличными от английского.&lt;br /&gt;
&lt;br /&gt;
Чтобы принимаемые (входящие) сообщения не мешали пользователю вводить свой текст, предлагается включать отдельный режим отправки сообщения, например, при нажатии клавиши ''m''. В этом режиме пользователь вводит своё сообщение, новые сообщения от других пользователей временно не отображаются, после отправки сообщения (по Enter) режим автоматически отключается.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что клиент и сервер будут созданы на основе шаблона, находящегося в директории ''tcp_template'' репозитория. Шаблон заведомо неполный, в нем необходимо устранить следующие проблемы:&lt;br /&gt;
* В коде сервера отсутствуют вызовы для корректного закрытия сокетов.&lt;br /&gt;
* Сервер завершается после обработки первого же запроса.&lt;br /&gt;
* Сервер способен работать одновременно только с одним клиентом.&lt;br /&gt;
* Сервер не знает о длине получаемых сообщений.&lt;br /&gt;
&lt;br /&gt;
Язык программирования - Си. Для сборки кода используйте утилиту CMake. Для организации работы с несколькими клиентами используйте потоки, pthreads в Linux/BSD/macOS и WinAPI в Windows. Не забывайте использовать примитивы синхронизации для блокировки общих между несколькими клиентами ресурсов.&lt;br /&gt;
&lt;br /&gt;
Результатом выполнения задания должно быть 4 программы, клиент и сервер под Windows и Linux/BSD/macOS, и описание вашего прикладного протокола. Протокол можно описать либо с помощью текста, либо с помощью изображения (таблицы, схемы и т.д.). Примеры описания протоколов - в слайдах лекций. Описание должно быть в такой степени подробным, чтобы по нему можно было написать альтернативную совместимую реализацию клиента/сервера.&lt;br /&gt;
&lt;br /&gt;
[https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ Бесплатная виртуальная машина] с триальной версией Windows.&lt;br /&gt;
&lt;br /&gt;
Крайний срок выполнения: 18 марта в 23:59. К этому времени необходимо выполнить задание, выложить его на GitHub и сделать Pull Request. Замечания преподавателя '''можно''' исправлять после дедлайна, но учтите, что в таком случае вы будете отнимать у себя время на выполнение следующих заданий.&lt;br /&gt;
&lt;br /&gt;
Текущий план:&lt;br /&gt;
* До 18 марта - первое задание (2,5 недели).&lt;br /&gt;
* До 28 марта - второе задание (1,5 недели).&lt;br /&gt;
* До 25 апреля - первая часть третьего задания (4 недели).&lt;br /&gt;
* До 23 мая - вторая часть третьего задания (4 недели).&lt;/div&gt;</summary>
		<author><name>Artyom.Aleksyuk</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=14843</id>
		<title>Технологии компьютерных сетей весна 2018</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=14843"/>
				<updated>2018-02-28T19:24:42Z</updated>
		
		<summary type="html">&lt;p&gt;Artyom.Aleksyuk: Задание 1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Ицыксон Владимир Михайлович ('''vlad@ftk.spbstu.ru, itsykson@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/au-networks Слайды с лекций]&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/networks Слайды с лекций Политеха]&lt;br /&gt;
&lt;br /&gt;
== Практика ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Алексюк Артем Олегович ('''aleksyuk@kspt.icc.spbstu.ru, artyom.aleksyuk@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
[https://t.me/joinchat/ETSi-A1ZlsxHtWZnWWmX_Q Telegram-группа] для взаимодействия в ходе курса. Участвовать не обязательно, но очень желательно. В группе будут выкладываться объявления по курсу, кроме того, преподаватель будет по мере возможности отвечать там на вопросы. Основные объявления будут дублироваться в SeWiki. &lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
Порядок выполнения:&lt;br /&gt;
# Сделать форк [https://github.com/h31/ProgrammingLabTask1 репозитория] на GitHub.&lt;br /&gt;
# Для каждого задания сделать отдельную ветку (branch) в своём репозитории.&lt;br /&gt;
# Работать над кодом, сохраняя файлы в соответствующей заданию директории.&lt;br /&gt;
# В тот момент, когда вы будете готовы показать свой код (для проверки или консультации), сделать Pull Request.&lt;br /&gt;
# Исправить замечания преподавателя.&lt;br /&gt;
# Дождаться статуса ''Approved'' у вашего Pull Request-а.&lt;br /&gt;
&lt;br /&gt;
=== Задание 1. Простейший TCP-клиент/сервер (мессенджер) ===&lt;br /&gt;
&lt;br /&gt;
Необходимо разработать простейшую систему обмена мгновенными сообщениями (чат, мессенджер). Чат-сервер должен принимать сообщения от клиентов и рассылать полученные сообщения всем подключенным клиентам. У каждого клиента должен быть собственный никнейм, задаваемый пользователем. При получении сообщения от другого клиента, на экран должно выводиться время получения сообщения, никнейм пользователя-отправителя и текст сообщения. Пример вывода: &amp;lt;code&amp;gt;&amp;lt;4:20&amp;gt; [Peter] Hello!&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Клиент должен иметь консольный интерфейс. Параметры работы клиент принимает через аргументы командной строки в следующем порядке: адрес сервера, порт, никнейм. Функции, которые '''не''' требуются от сервера и клиента:&lt;br /&gt;
* Регистрация клиентов, логины-пароли.&lt;br /&gt;
* Хранение истории переписки.&lt;br /&gt;
* Проверка уникальности никнеймов.&lt;br /&gt;
* Обработка временных зон.&lt;br /&gt;
* Работа с языками, отличными от английского.&lt;br /&gt;
&lt;br /&gt;
Чтобы принимаемые (входящие) сообщения не мешали пользователю вводить свой текст, предлагается включать отдельный режим отправки сообщения, например, при нажатии клавиши ''m''. В этом режиме пользователь вводит своё сообщение, новые сообщения от других пользователей временно не отображаются, после отправки сообщения (по Enter) режим автоматически отключается.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что клиент и сервер будут созданы на основе шаблона, находящегося в директории ''tcp_template'' репозитория. Шаблон заведомо неполный, в нем необходимо устранить следующие проблемы:&lt;br /&gt;
* В коде сервера отсутствуют вызовы для корректного закрытия сокетов.&lt;br /&gt;
* Сервер завершается после обработки первого же запроса.&lt;br /&gt;
* Сервер способен работать одновременно только с одним клиентом.&lt;br /&gt;
* Сервер не знает о длине получаемых сообщений.&lt;br /&gt;
&lt;br /&gt;
Язык программирования - Си. Для сборки кода используйте утилиту CMake. Для организации работы с несколькими клиентами используйте потоки, pthreads в Linux/BSD/macOS и WinAPI в Windows. Не забывайте использовать примитивы синхронизации для блокировки общих между несколькими клиентами ресурсов.&lt;br /&gt;
&lt;br /&gt;
Результатом выполнения задания должно быть 4 программы, клиент и сервер под Windows и Linux/BSD/macOS, и описание вашего прикладного протокола. Протокол можно описать либо с помощью текста, либо с помощью изображения (таблицы, схемы и т.д.). Примеры описания протоколов - в слайдах лекций. Описание должно быть в такой степени подробным, чтобы по нему можно было написать альтернативную совместимую реализацию клиента/сервера.&lt;br /&gt;
&lt;br /&gt;
Крайний срок выполнения: 18 марта. Обратите внимание, что замечания должны быть исправлены до дедлайна.&lt;/div&gt;</summary>
		<author><name>Artyom.Aleksyuk</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=14832</id>
		<title>Технологии компьютерных сетей весна 2018</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0_2018&amp;diff=14832"/>
				<updated>2018-02-27T19:44:46Z</updated>
		
		<summary type="html">&lt;p&gt;Artyom.Aleksyuk: Текст задания (incomplete)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Ицыксон Владимир Михайлович ('''vlad@ftk.spbstu.ru, itsykson@gmail.com''')&lt;br /&gt;
&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/au-networks Слайды с лекций]&lt;br /&gt;
* [http://kspt.icc.spbstu.ru/course/networks Слайды с лекций Политеха]&lt;br /&gt;
&lt;br /&gt;
== Практика Алексюк ==&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Алексюк Артем ('''aleksyuk@kspt.icc.spbstu.ru''')&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
=== Задание 1. Простейший TCP-клиент/сервер ===&lt;br /&gt;
&lt;br /&gt;
Необходимо разработать простейшую систему обмена мгновенными сообщениями (чат). Чат-сервер должен принимать сообщения от клиентов и рассылать полученные сообщения всем подключенным клиентам. У каждого клиента есть собственный уникальный никнейм, задаваемый пользователем. При получении сообщения от другого клиента, на экран должно выводиться время получения сообщения, никнейм пользователя-отправителя и текст сообщения. Чтобы принимаемые сообщения не мешали пользователю вводить свой текст, предлагается &lt;br /&gt;
&lt;br /&gt;
Язык программирования - Си. Для сборки системы&lt;/div&gt;</summary>
		<author><name>Artyom.Aleksyuk</name></author>	</entry>

	</feed>