<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://www.wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8_2</id>
	<title>Компьютерные сети 2 - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://www.wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8_2"/>
	<link rel="alternate" type="text/html" href="https://www.wikicshse.ru/index.php?title=%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8_2&amp;action=history"/>
	<updated>2026-06-06T14:46:02Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://www.wikicshse.ru/index.php?title=%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8_2&amp;diff=1130&amp;oldid=prev</id>
		<title>imported&gt;Mednik: Откат правок Seosky (обсуждение) к версии Gamajun</title>
		<link rel="alternate" type="text/html" href="https://www.wikicshse.ru/index.php?title=%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8_2&amp;diff=1130&amp;oldid=prev"/>
		<updated>2022-08-26T10:35:31Z</updated>

		<summary type="html">&lt;p&gt;Откат правок &lt;a href=&quot;/%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/Seosky&quot; title=&quot;Служебная:Вклад/Seosky&quot;&gt;Seosky&lt;/a&gt; (&lt;a href=&quot;/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Seosky&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Обсуждение участника:Seosky (страница не существует)&quot;&gt;обсуждение&lt;/a&gt;) к версии &lt;a href=&quot;/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Gamajun&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Участник:Gamajun (страница не существует)&quot;&gt;Gamajun&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Компьютерные сети ==&lt;br /&gt;
&lt;br /&gt;
Продвинутый курс по компьютерным сетям для специальности РС.&lt;br /&gt;
&lt;br /&gt;
=== План курса ===&lt;br /&gt;
&lt;br /&gt;
# Современное состояние сети Интернет и актуальные технологические тренды. Веб как новый десктоп, мобильные клиенты, Интернет вещей.&lt;br /&gt;
# Модельный пример №1 – веб-приложение. Цепочка технологий, которые обеспечивают функционирование современного веба. От протоколов HTTP (HTTPS) вниз через DNS и TCP к канальной сети.&lt;br /&gt;
# (Две лекции) Принципы работы основных веб-технологий: протокола HTTP, мехнизма реализации сеансов cookies, набора технологий HTML 4 (объектная модель документа + CSS + язык javascript). Эволюция HTTP. Современная экосистема протоколов, обслуживающих веб. Протокол DNS. Перспективы – HTTP/2. &lt;br /&gt;
# Особенности функционирования веб-приложений в современной сетевой инфраструктуре, высоконагруженные приложения, поддержка на стороне механизмов операционных систем и инфраструктуры. Основы BGP маршрутизации, IP anycast, CDN.&lt;br /&gt;
# Защита соединения.  Семейство протоколов SSL/TLS. Аутентификация пользователей в сетевых приложениях на примере веб-приложений. HTTP basic auth, digest, аутентификация по сертификатам. Способы представления и хранения парольной информации в нагруженных сервисах.&lt;br /&gt;
# Протокол TCP в деталях. Механизмы управления потоком и перегрузками – варианты протокола для различных условий канальной среды. Эволюция протокола, современные расширения, аппаратная поддержка – large segments, tcp offloading.&lt;br /&gt;
# Нагрузочное тестирование сетевых приложений на примере веб-приложения. Шаблоны настройки производительности сетевых приложений. Варианты архитектур приложений, разделение на фронтенд и бэкенд части, протоколы взаимодействия сервера с бэкендом (CGI/FastCGI/бинарные). Защита от атак «отказ в обслуживании».&lt;br /&gt;
# Два варианта реализации сетевого приложения – централизованный и распределенный. Обмен файлами, обмен мгновенными сообщениями, разделение контента между клиентами. P2P протоколы. BitTorrent. DHT. Системы мгновенного обмена сообщениями, сравниваем централизованные и распределенные (P2P) сети. Signal/OTR, TorChat. Типовые проблемы распределенных сетей и их решение.&lt;br /&gt;
# Обзорное введение в виртуализацию сетей, MPLS, Overlay сети – VPN, CDN, архитектура сетей в ЦОД и эволюция коммутационных протоколов, SDN. Заключение.&lt;br /&gt;
&lt;br /&gt;
=== Материалы лекций ===&lt;br /&gt;
&lt;br /&gt;
Лекционные материалы публикуются по мере продвижения по курсу.&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/presentation/d/1t2IDq0I6ne-YydWgSKZDzeHIO9iAAN0KLPZseXqwX-Q/edit?usp=sharing Лекция 1]&lt;br /&gt;
* [https://docs.google.com/presentation/d/1yA6CH1IVsOyNaYA_o7bHKIdvn_TsyrWnm78du_bhzLI/edit?usp=sharing Лекция 2]&lt;br /&gt;
* [https://docs.google.com/presentation/d/12ZxUgvwsELDMLRqKG42DihYnXflbO0fesa5IfZ6s77Y/edit?usp=sharing Лекция 3]&lt;br /&gt;
* [https://docs.google.com/presentation/d/126_iNg3x7B2pKHtpZBx-cOnpzDs7QaGbBzJTI-0HTYk/edit?usp=sharing Лекция 4]&lt;br /&gt;
* [https://docs.google.com/presentation/d/1af_FQ8Pvxn0hBTH7G1bOxqc4HrG0tMOhbnQN32vybRQ/edit?usp=sharing Лекция 5]&lt;br /&gt;
* [https://docs.google.com/presentation/d/1KbDPmvUIaZUvpKnqDhYZkKgPZ_r8Q1eecwzi2fBVR8E/edit?usp=sharing Лекция 6]&lt;br /&gt;
* [https://docs.google.com/presentation/d/1_4Rn45tAEROq43zXQhwAWzU55Gjmb0QNlPSIoZfQ0M8/edit?usp=sharing Лекция 7]&lt;br /&gt;
* [https://docs.google.com/presentation/d/1xaX0ZiE6uBH84hRwuR3fVoEBeHcbv-JaVQ41wbQ392k/edit?usp=sharing Лекция 8]&lt;br /&gt;
&lt;br /&gt;
=== Практические задания ===&lt;br /&gt;
&lt;br /&gt;
Дедлайн по заданиям: задание 1 - 9 июня 2017 г., задание 2 - 12 июня 2017 г.&lt;br /&gt;
&lt;br /&gt;
В рамках курса нужно написать два приложения, на которых исследовать поведение стека протоколов и сетевого стека операционной системы.&lt;br /&gt;
&lt;br /&gt;
==== Задание 1: Динамическое веб-приложение ====&lt;br /&gt;
&lt;br /&gt;
В первом задании нужно разработать асимметричное клиент-серверное приложение вида &amp;quot;много клиентов, один сервер&amp;quot; и побенчмаркать его в различных условиях. Код приложения вместе с бенчмарками и результатами тестов опубликовать на github.&lt;br /&gt;
&lt;br /&gt;
   Описание задачи:&lt;br /&gt;
Вам нужно разработать веб-приложение со статической и динамической частью. Динамическая часть должна быть реализована с использованием базовых средств выбранного языка программирования и его стандартной библиотеки для реализации HTTP сервера (для python используйте flask). Приложение должно реализовывать регистрацию и аутентификацию пользователей внутри приложения (не средствами веб-сервера), для хранения пользовательских данных можно использовать файл на диске или любую СУБД. Работа с паролями - scrypt (PBKDF2) и sha256. Аутентифицированный пользователь получает доступ к трем функциям приложения: &amp;quot;быстрая&amp;quot; (поле ввода query к СУБД, POST запрос на приложение, передача query в СУБД, передача результата клиенту), &amp;quot;вычислительная&amp;quot; (факторизовать большое число), &amp;quot;медленная&amp;quot; (обратный ping - клиент через POST запрос отправляет команду серверу пропинговать клиента с параметрами для ping, использовать все поддерживаемые параметры ping, сервер по мере работы ping отправляет клиенту вывод, клиент отрисовывает динамически получаемые данные по мере прихода от сервера).&lt;br /&gt;
Статическая часть содержит картинки и &amp;quot;большие&amp;quot; файлы (четыре файла по 50Мб). Два варианта раздачи статики - через код приложения и через веб-север (nginx или apache).&lt;br /&gt;
Бенчмарк для приложения на основе yandex tank и динамического бота на phantomjs. На phantomjs реализовать основные сценарии работы с приложением: регистрация пользователя, логин, выполнение каждой из трех функций, логаут, удаление пользователя. Реализовать нагрузочный тест с тремя различными распределениями &amp;quot;пользовательской&amp;quot; активности:&lt;br /&gt;
* Пользователи часто регистрируются и логинятся/выходят из приложения (нагрузка на систему аутентификации и работы с паролями).&lt;br /&gt;
* Много пользователей одновременно приходят на одну из функций приложения (отдельно на &amp;quot;быструю&amp;quot;, &amp;quot;вычислительную&amp;quot; и &amp;quot;медленную&amp;quot;).&lt;br /&gt;
* Много пользователей запрашивают статические ресурсы.&lt;br /&gt;
   Условия функционирования приложения:&lt;br /&gt;
Для тестирования приложения нужно создать две виртуальные машины - серверная и клиентская. На серверной машине нужно настроить DNS-сервер, который будет обслуживать домен (например, omg.test) с использованием приватного адресного пространства ваших виртуальных машин. Сервер и клиент должны разрешаться этим DNS сервером по символическим доменным именам в созданной зоне. &lt;br /&gt;
* Приложение обслуживает клиентов непосредственно без участия веб-сервера.&lt;br /&gt;
* Приложение обслуживает клиентов через веб-сервер nginx (как обратный прокси или через API uWSGI).&lt;br /&gt;
* (опционально, бонус) Статику раздавать с файловой системы pingfs: https://github.com/yarrick/pingfs&lt;br /&gt;
   Результаты тестирования:&lt;br /&gt;
В каждом из вариантов нужно прогнать бенчмарк сервера в течение значительного времени (5-10 минут). По каждому прогону бенчмарка необходимо собирать следующие данные:&lt;br /&gt;
* Пропускная способность приложения в количестве запросов в секунду (RPS)&lt;br /&gt;
* Время отклика (latency)&lt;br /&gt;
* Распределение кодов ответа и ошибок&lt;br /&gt;
* Использование памяти на сервере&lt;br /&gt;
* Использование CPU на сервере&lt;br /&gt;
* Количество открытых файловых дескрипторов на сервере&lt;br /&gt;
* Для действий регистрации пользователей и аутентификации - количество действий в секунду (отдельно для реализации с PBKDF2, отдельно с SHA256).&lt;br /&gt;
&lt;br /&gt;
По собранным метрикам построить графики и написать аналитический отчет, в котором объяснить полученные результаты (как меняется RPS при разных условиях и почему, как себя ведёт стек операционной системы).&lt;br /&gt;
&lt;br /&gt;
==== Задание 2: Распределенный P2P браузерный мессенджер ====&lt;br /&gt;
&lt;br /&gt;
Нужно реализовать распределенный P2P чат поверх peerjs/WebRTC, который позволяет обмениваться сообщениями между пирами в чате и файлами. В библиотеке peerjs есть развернутый example пример чата, который можно взять за основу.&lt;br /&gt;
&lt;br /&gt;
(простая часть): &lt;br /&gt;
* взять готовый example чат, и реализовать поверх него распределенный алгоритм вычисления минимума из множества чисел&lt;br /&gt;
* каждый &amp;quot;клиент&amp;quot; при запуске случайно выбирает целое число&lt;br /&gt;
* между клиентами задана некоторая произвольная топология, т.е. каждый знает, кто у него является соседом, топологию можно задать статически в коде, но это не должен быть полносвязный граф&lt;br /&gt;
* с помощью волнового алгоритма эха ([http://mk.cs.msu.ru/images/b/b7/DistrAlg_7.pdf Лекция] или &amp;quot;Введение в распределенные алгоритмы&amp;quot;, Жерар Тель, страница 206) посчитать минимум из этих чисел, передавая их между соседями в виде сообщений&lt;br /&gt;
&lt;br /&gt;
(сложная часть, опциональная):&lt;br /&gt;
* В чате должна храниться key-value таблица соответствия id - Name, Surname, email для участников чата, в виде distributed hash table (DHT), для этого нужно выбрать алгоритм DHT (Kademlia?)&lt;br /&gt;
* Новые пиры должны подключаться с помощью bootstrap-процесса через известный id участника P2P чата, получать DHT-идентификатор, и хранить у себя часть общей DHT в соответствии с выбранным алгоритмом реализации DHT.&lt;br /&gt;
* Сообщения в чате должны маршрутизироваться по-разному, в зависимости от префикса сообщения - если сообщение начинается с команды /msg DHT-id или какой-то из частей value (Name, Surname, email) через спецсимвол @, то отправлять его следует только тому пиру, который является адресатом (для этого надо уметь делать поиск по DHT). Обычные сообщения отправляются всем пирам.&lt;br /&gt;
* Аналогично с отправкой файла - через команду /sendfile или без команды.&lt;br /&gt;
&lt;br /&gt;
==== Общее ====&lt;br /&gt;
&lt;br /&gt;
Для практических заданий рекомендуется использовать python и javascript, разрешено использовать любую другую комбинацию серверного и клиентского языков программирования (erlang + coffeescript, nodesj + js, go + actionscript, etc).&lt;br /&gt;
&lt;br /&gt;
Рекомендованные фреймворки и библиотеки:&lt;br /&gt;
* http://flask.pocoo.org/&lt;br /&gt;
* http://yaws.hyber.org/&lt;br /&gt;
* https://github.com/peers/peerjs&lt;br /&gt;
&lt;br /&gt;
Для тестирования:&lt;br /&gt;
* https://github.com/yandex/yandex-tank&lt;br /&gt;
* http://phantomjs.org/&lt;br /&gt;
* http://tinydns.org/&lt;br /&gt;
* atop - сбор информации об используемых ресурсах в системе, изучить фоновый режим работы&lt;br /&gt;
* htop, lsof, netstat&lt;br /&gt;
&lt;br /&gt;
=== Итоговый тест ===&lt;br /&gt;
&lt;br /&gt;
https://docs.google.com/forms/d/e/1FAIpQLSfRaxJwQn4yz2BUJy9zOt3a1D8viBk35GglSzVN9AynIaIZFw/viewform&lt;br /&gt;
&lt;br /&gt;
=== Оценки ===&lt;br /&gt;
https://docs.google.com/spreadsheets/d/1BYUds4FV1pxtAVoUIYcwvDBxa6XcsoD0TcxTWDUsnP4/edit?usp=sharing&lt;br /&gt;
&lt;br /&gt;
=== Расчет оценки ===&lt;br /&gt;
Вклад в оценку:&lt;br /&gt;
* Практические задания (2 штуки) - 80%, для зачета обязательно нужно выполнить все задания&lt;br /&gt;
* Итоговый тест (как домашняя работа) - 20%&lt;br /&gt;
&lt;br /&gt;
=== Литература ===&lt;br /&gt;
Основная литература:&lt;br /&gt;
* Michał Zalewski. The Tangled Web: A Guide to Securing Modern Web Applications.&lt;br /&gt;
* James F. Kurose and Keith W. Ross, Computer Networking: A Top-Down Approach, Addison-Wesley, 5th edition. &lt;br /&gt;
* Douglas Comer. Internetworking with TCP/IP: Principles, protocols and architecture. Prentice Hall, 2006. &lt;br /&gt;
* Æleen Frisch. Essential system administration. O’Reilly Media Inc., 2002.&lt;br /&gt;
&lt;br /&gt;
Дополнительная литература:&lt;br /&gt;
* [http://istina.msu.ru/media/diplomas/diploma/aaf/25a/52857264/article-glebius_epasSZw.pdf Глеб Смирнов. Новая неблокирующаяся на дисковом вводе реализация системного вызова sendfile() для FreeBSD]. Магистерская диссертация. МГУ, 2014&lt;br /&gt;
* [http://www.openwall.com/presentations/Passwords12-The-Future-Of-Hashing/ Solar Designer. Passwords: The Future Of Hashing].&lt;br /&gt;
* [https://www.cs.cornell.edu/~shmat/shmat_oak14.pdf C. Brubaker et al. Using Frankencerts for Automated Adversarial Testing of Certificate Validation in SSL/TLS Implementations]&lt;br /&gt;
* [https://www.joyent.com/blog/tcp-puzzlers TCP Puzzlers]&lt;br /&gt;
* [https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf Kademlia DHT - оригинальная статья]&lt;br /&gt;
* [https://pdfs.semanticscholar.org/3885/812a092ff0aad3d45c0464660075e98d0231.pdf The Power of Two Choices in Randomized Load Balancing by Michael David Mitzenmacher, 1996]&lt;br /&gt;
&lt;br /&gt;
=== Контакты ===&lt;br /&gt;
* Почта: gamajun@gmail.com&lt;br /&gt;
* Tg: @jamadharma&lt;/div&gt;</summary>
		<author><name>imported&gt;Mednik</name></author>
	</entry>
</feed>