Module 1 improvements

pull/1/head^2
vlpr 1 year ago
parent dd2461a163
commit c0499abeae

@ -3,33 +3,35 @@
История операционных систем тесно связана с развитием компьютеров.
Основные идеи с 1950 по 1990. Наибольшая активность в 60х и 70х. Эволюция операционных систем прошла через 7 фаз:
- open shop (нужна аналогия)
- batch processing (пакетная обработка)
- multiprogramming (асинхронное выполнение ввода/вывода)
- timesharing (разделения времени)
- concurrent programming
- персональные компьютеры (personal computing)
- распределённые системы (distributed systems)
1. open shop (нужна аналогия)
2. batch processing (пакетная обработка)
3. multiprogramming (асинхронное выполнение ввода/вывода)
4. timesharing (разделения времени)
5. concurrent programming
6. персональные компьютеры (personal computing)
7. распределённые системы (distributed systems)
По Таненбауму 4 поколения:
- 1945 - 1955 Электронные лампы
- 1955 - 1965 Транзисторы и системы пакетной обработки
- 1965 - 1980 Интегральные схемы и многозадачность
- 1980 - сегодня Персональные компьютеры
Системы по фазам Hansen:
- IBM 701 open shop (1954)
- BKS (1961)
- Atlas supervisor (1961), B5000 (1964), Exec II (1966), Egdon (1966)
- CTSS (1962), Multics file system (1965), Titan file system (1972), Unix (1974)
- THE (1968), RC 4000 (1969), Venus (1972), Boss 2 (1975), Solo (1976)
- OS 6 (1972), Alto (1979), Pilot (1980), Star user interface (1982)
- WFS file server (1979), Unix United (1982), Amoeba (1990)
1. 1945-1955 Электронные лампы
2. 1955-1965 Транзисторы и системы пакетной обработки
3. 1965-1980 Интегральные схемы и многозадачность
4. 1980-сегодня Персональные компьютеры
Операционные системы по фазам Hansen:
1. IBM 701 open shop (1954)
2. BKS (1961)
3. Atlas supervisor (1961), B5000 (1964), Exec II (1966), Egdon (1966)
4. CTSS (1962), Multics file system (1965), Titan file system (1972), Unix (1974)
5. THE (1968), RC 4000 (1969), Venus (1972), Boss 2 (1975), Solo (1976)
6. OS 6 (1972), Alto (1979), Pilot (1980), Star user interface (1982)
7. WFS file server (1979), Unix United (1982), Amoeba (1990)
## 1 Open shop
Можно сказать, что история операционных систем начинается в 1954 году, когда у первых серийных компьютеров ещё не было операционных систем. Тогда пользователи управляли ими вручную. Доступ к компьютерам был организован поочереди в стиле open shop.
Операторы первых серийных компьютеров 701 были предшествениками современных системных администраторов. Группа по обмену информацией между ними SHARE существует до сих пор. В эру системных операторов компьютер был инструментом специального назначения, наподобие пилы. Переход от системных операторов к системному администратору начался тогда, когда компьютеры превратились в универсальные инструменты.
Сразу стало очевидным, что open shop организация приводит к большому времени простоя процессора. Джордж Рикман вспомнил о вопиющей неэффективности эксплуатации первого компьютера IBM, знаменитого 701: "Каждому пользователю был выделен 15-минутный интервал, из которых обычно он тратил 10 минут на настройку оборудования для выполнения своих вычислений. К тому времени, когда он начинал свои вычисления, для них оставалось только 5 минут или меньше - трата две трети его временного интервала."
Джон Маккарти (1962) сделал аналогичное замечание о компьютере TX-0, который использовался в режиме открытого магазина в Массачусетском технологическом институте. Он добавил: "Если бы TX-0 был компьютером гораздо большего размера и если бы он работал так же, как сейчас, количество пользователей, которых он обслуживал было бы примерно таким же."
@ -40,9 +42,9 @@
Теперь процессорное время тратилось эффективно, его не нужно был запускать во время подготовки программ. Чем длиннее были ленты, тем меньше простаивал главный компьютер. Но большие серии задач значительно увеличили время выполнения с точки зрения пользователей. Обычно требуется несколько часов (или даже день или два), прежде чем они могли получить результаты одного задания. Если задание включало компиляцию программы, единственным выходом в этот день могло быть сообщение об ошибке, вызванное неуместной точкой с запятой.
## 3 Multiprogramming (асинхронный ввод/вывод)
## 3 Multiprogramming/Многозадачность
В 1960-х годах большая основная память, вторичное хранилище с произвольным доступом, каналы данных и аппаратные прерывания радикально изменили операционные системы. Прерывания позволяли процессору имитировать одновременное выполнение нескольких программ и управлять одновременными операциями ввода/вывода. Эта форма параллелизма стала известна как мультипрограммирование.
В 1960-х годах большая основная память, вторичное хранилище с произвольным доступом, каналы данных и аппаратные прерывания радикально изменили операционные системы. Прерывания позволяли процессору имитировать одновременное выполнение нескольких программ и управлять одновременными операциями ввода/вывода. Эта форма параллелизма стала известна как мультипрограммирование (многозадачность).
Мультипрограммирование и вторичное хранилище сделали возможным создание операционных систем, которые обрабатывали непрерывный поток ввода, вычислений и вывода на одном компьютере, используя барабаны (или диски) для хранения больших буферов. Такая схема называлась спулингом/подкачка (Spooling - это акроним “Simultaneous Peripheral Operation On-Line.). Барабаны были удобнее лент, так как заполнялись с одной стороны устройство чтения перфокарт, а с другой считывались основным процессором. Больше не было накладных расходов на монтирование ленты (если только пользовательские программы не обрабатывали свои собственные ленты данных). Большие буферы произвольного доступа позволили использовать приоритетное планирование заданий, например, «кратчайшее задание — следующее» (вместо «первым пришел — первым обслужен»).
@ -58,9 +60,7 @@
Atlas был организован так, чтобы защитить пользовательские программы и системные вызовы друг от друга.
## 4 Timesharing
Операторы первых серийных компьютеров 701 были предшествениками современных системных администраторов. Группа по обмену информацией между ними SHARE существует до сих пор. В эру системных операторов компьютер был инструментом специального назначения, наподобие пилы. Переход от системных операторов к системному администратору начался тогда, когда компьютеры превратились в универсальные инструменты.
## 4 Timesharing/Разделение времени
В 1962 году Джон МакКарти написал следующее:
@ -68,17 +68,19 @@ Atlas был организован так, чтобы защитить поль
Поскольку программы могут выполнять только относительно короткие фрагменты работы между взаимодействиями с людьми, неэкономично постоянно перемещать их туда и обратно во вторичное хранилище. Следовательно, существует потребность в большой первичной памяти. Последнее требование заключается в том, чтобы вторичное хранилище было достаточно большим для хранения пользовательских файлов, чтобы пользователям не приходилось иметь отдельные карты или ленточные устройства ввода-вывода."
Разделение времени значительно снизило цену предоставления вычислительных мощностей.
CTSS 1965 и Multics 1969 были первыми реализациями этой идеи. Также современным ОС от них досталась технология иерархичной файловой системы для вторичного хранилища.
*Посмотреть MULTICS https://www.youtube.com/watch?v=q0yfhZB7VpA или подключиться к menu@tty.livingcomputers.org*
В 1969 Денис Ритчи И Кен Томпсон начали разработку альтернативы Multics о которой стало известно публично в 1974 году. Проект Multics превысил бюджет, безнадёжной отстал от графика, и был свёрнут. Денис: "Мы были немного подавлены большим менталитетом системы, Кен хотел создать что-то простое... Операционная система Multics больше не существовала для нас, но нам нравилось ощущение интерактивной работаы на компьютере, которые она предлагала пользователю." Такие команды как: as, cal, chmod, chown, cmp, cp, date, dc, du, ed были созданы в 1971 году. В 1973 появились два важных нововведения в UNIX: язык С и реализация каналов. Каналы позволили легко комбинировать существующие программы в конвейры обработки данных. К середине 1980 Unix стала стандартом для систем с разделением времени и была установлена практически во всех крупных университетах мира.
В 1969 Денис Ритчи И Кен Томпсон начали разработку альтернативы Multics о которой стало известно публично в 1974 году. Проект Multics превысил бюджет, безнадёжной отстал от графика, и был свёрнут. Денис: "Мы были немного подавлены большим менталитетом системы, Кен хотел создать что-то простое... Операционная система Multics больше не существовала для нас, но нам нравилось ощущение интерактивной работы на компьютере, которые она предлагала пользователю." Такие команды как: as, cal, chmod, chown, cmp, cp, date, dc, du, ed были созданы в 1971 году. В 1973 появились два важных нововведения в UNIX: язык С и реализация каналов. Каналы позволили легко комбинировать существующие программы в конвейры обработки данных. К середине 1980 Unix стала стандартом для систем с разделением времени и была установлена практически во всех крупных университетах мира.
*Включить AT&T Archives: The UNIX Operating System https://www.youtube.com/watch?v=tc4ROCJYbm0*
Примерно в это время системное администрирование стало формироваться как профессия. Считается что такие учебные заведения, как Университет Пердью, Унивеситет штата Нью-Йорк (SUNY) в г. Буффало, Университет штатов [Колорадо, Юта, Мэриленд] стали рассадниками этих специалистов. Это были как сейчас говорят эникейщики, ангелы-хранители компьютеров и их пользователей, готовые починить лазерный принтер, помочь студенту отладить новый драйвер, записать данные на архивные ленты, уговорить пользователей почистить персональные каталоги, чтобы освободить место, найти запчасти по всей стране.
С ростом популярности профессии возникла потребность в документации знаний об администрировании. "Идя навстречу пожеланиям трудящихся" Тим О'Reilly и его команда в конце 80-х начали публиковать документацию по UNIX. В 1989 коду было опубликовано певое издание книги Эви Немет Unix System Adminstration Handbook (в это время появилось множество директорий `/and so on/passwd`, вместо `/etc/`).
С ростом популярности профессии возникла потребность в документации знаний об администрировании. "Идя навстречу пожеланиям трудящихся" Тим О'Reilly и его команда в конце 80-х начали публиковать документацию по UNIX. В 1989 коду было опубликовано первое издание книги Эви Немет Unix System Adminstration Handbook (в это время появилось множество директорий `/and so on/passwd`, вместо `/etc/`).
## 5 Конкурентное программирование
@ -117,7 +119,7 @@ Amoeba — амбициозная распределенная система,
Спохватившись, AT&T начала судебный процесс, заявив о копировании кода и краже производственных секретов. В результате судебного разбирательства в течение двух лет из кода BSD было удалено три файла из более 18000. К сожалению, это период неопределённости оказал негативное влияние на весь мир UNIX.
В 1987 Танненбаум выпустил небольшой клон системы UNIX - MINIX под лицензией, разрешающий использование только в образовательных целях. Желая получить свободно распространяемую версию UNIX, финский студент Линус Торвальдс написал собтвенную макроядерную систему-клон Linux. Так началась эра Linux.
В 1987 Танненбаум выпустил небольшой клон системы UNIX - MINIX под лицензией, разрешающий использование только в образовательных целях. Желая получить свободно распространяемую версию UNIX, финский студент Линус Торвальдс написал собственную микроядерную систему-клон Linux. Так началась эра Linux.
## Итоги
@ -142,6 +144,7 @@ Amoeba — амбициозная распределенная система,
За это время компьютеры ушли от вида специализированных устройств, проводящих расчёты военного назначения, к универсальным машинам для обработки данных. Это не могло стать возможным без эволюции операционных систем. Администрирование этих систем сформировалось как профессия.
# Архитектура ОС
Наверное к этому моменту у вас уже сложилось представление о том, что такое операционная система. Можно дать два определения ОС. С одной стороны, операционная система - это интерфейс между hardware и software, слой абстракции для прикладных программ и аппаратного обеспечения. С другой стороны, операционная система - это менеджер ресурсов.
@ -151,7 +154,9 @@ Amoeba — амбициозная распределенная система,
- оболочка,
- пользовательские программы.
# Ссылки
- Hansen. The evolution of operating systems
- Таненбаум. Современные операционные системы
- Немет Э. Руководство системного администратора (Краткая история системного администрирования)
@ -160,3 +165,5 @@ Amoeba — амбициозная распределенная система,
- Rebel Code. Linux and the Open Source Revolution
- Петцольд, Чарльз. Код. Тайный язык информатики
- https://elektronika.su/
- https://yandex.ru/museum/
- https://computerhistory.org/

@ -4,7 +4,7 @@
Установить Debian на виртуальную машину tabularasaX в Proxmox.
## Задание 2
Найдите и 2-5 предложениями расскажите остальным про одну из следующих машин:
Найдите и 2-5 предложениями расскажите остальным про один из этих вычислительных инструментов:
- аналитическая машина Бэббиджа,
- разностная машина Бэббиджа,
- Comptometer,

@ -1,11 +1,6 @@
на основе материалов
- Michael Lucas. Networking for System Administrator
- https://www.youtube.com/playlist?list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW
# Сетевые уровни, модель ОСИ
Сеть содержит физические провода или радиоволны, устройства соединения, такие как коммутаторы, логические протоколы, такие как TCPIP, пользовательские веб-страницы и электронные письма и многое другое. коммутаторы, логические протоколы TCP/IP, видимые пользователем веб-страницы и электронные письма, и многое другое. В каком-то смысле все это перемешано в единое целое, но на самом деле для удобства и простоты они разделены на несколько логических уровней. Каждый слой решает вполне конкретную задачу и обычно взаимодействует только со слоями, расположенными непосредственно над и под ним.
Сеть содержит физические провода или радиоволны, устройства соединения, такие как коммутаторы, логические протоколы, такие как TCP/IP, пользовательские веб-страницы и электронные письма и многое другое. В каком-то смысле все это перемешано в единое целое, но на самом деле для удобства и простоты они разделены на несколько логических уровней. Каждый слой решает вполне конкретную задачу и обычно взаимодействует только со слоями, расположенными непосредственно над и под ним.
Системные администраторы часто используют словосочетания "сетевой" или "прикладной" уровни в совершенно другом смысле. Ваше сложное веб-приложение может иметь уровень базы данных, уровень хранилища и уровень веб-сервера. Это совершенно правильное использование слова "слой" и вполне уместное в вашем контексте, но имейте в виду, что сетевые специалисты имеют в виду нечто совершенно иное.
@ -21,16 +16,20 @@
Для понимания современной сети, подключенной к Интернету, необходимо всего пять уровней: физический, канальный, сетевой, транспортный и прикладной. Сетевые уровни часто обозначаются часто обозначают номерами.
Далее в каждой секции приводятся релевантные ссылки на уроки мини-курса Ben Eater для углубления в тему.
### 1 Физический
Сети должны по чему-то перемещаться. Если об него можно споткнуться, зацепиться, отломить дурацкий язычок от пластикового разъема на его конце или передать по нему статическое электричество, то это физический уровень. Многие из нас называют физический уровень проводом, хотя это могут быть и радиоволны, и коаксиальный кабель, и любые другие вещи, отличные от типичного провода Ethernet. Если ваш провод соответствует стандарту, определенному для данного типа физического уровня, у вас есть сеть. Если нет, то сеть работать не будет.
Данные в сети должны по чему-то перемещаться. Если об это можно споткнуться, зацепиться, отломить дурацкий язычок от пластикового разъема на его конце или передать по нему статическое электричество, то это физический уровень. Многие из нас называют физический уровень проводом, хотя это могут быть и радиоволны, и коаксиальный кабель, и любые другие вещи, отличные от типичного провода Ethernet. Если ваш провод соответствует стандарту, определенному для данного типа физического уровня, у вас есть сеть. Если нет, то сеть работать не будет.
Большинство серверов подключаются к сети с помощью кабеля Ethernet, обычно по кабелю cat5 или cat6, но иногда и по оптическому волокну. Даже если сервер использует протокол, отличный от Ethernet, например Asynchronous Transfer Mode (ATM), Token Ring, FDDI или другой, он, скорее всего, использует кабель cat5, cat6 или оптическое волокно. Очень и очень старайтесь не подключать серверы к локальной сети по беспроводной сети. (Беспроводные сети очень подвержены ошибкам и помехам на канальном уровне и могут быть перегружены силами, не зависящими от вас и даже не осознаваемыми вами.
Большинство серверов подключаются к сети с помощью кабеля Ethernet, обычно по кабелю cat5 или cat6, но иногда и по оптическому волокну. Даже если сервер использует протокол, отличный от Ethernet, например Asynchronous Transfer Mode (ATM), Token Ring, FDDI или другой, он, скорее всего, использует кабель cat5, cat6 или оптическое волокно. Очень и очень старайтесь избегать подключения серверов к локальной сети по беспроводной сети. Беспроводные сети сильно подвержены ошибкам и помехам на канальном уровне и могут быть подвержены явлениям, не зависящими от вас и даже не осознаваемыми вами.
Физический уровень традиционно не имеет никакого интеллекта. Канальный уровень определяет, как он используется.
// притащить осциллограф, чтобы показать канальный уровень манчестерское кодирование https://www.youtube.com/watch?v=i8CmibhvZ0c
[Sending digital information over a wire | Networking tutorial (1 of 13)](https://www.youtube.com/watch?v=XaGXPObx2Gs&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=1)
[Intro to fiber optics and RF encoding | Networking tutorial (2 of 13)](https://www.youtube.com/watch?v=lUo45NqPyq8&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=2)
[Clock synchronization and Manchester coding | Networking tutorial (3 of 13)](https://www.youtube.com/watch?v=8BhjXqw9MqI&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=3)
[Analyzing actual Ethernet encoding | Networking tutorial (4 of 13)](https://www.youtube.com/watch?v=i8CmibhvZ0c&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=4)
### 2 Канальный
@ -38,14 +37,24 @@
Если вы используете протокол IPv4, то на канальном уровне используются адреса Media Access Control (MAC) и протокол разрешения адресов (ARP). В IPv6 используются MAC-адреса и протокол Neighbor Discovery (ND). Если у вас возникли проблемы с обменом данными с локальной сетью, обратитесь к этим главам и проверьте наличие проблем с ARP или ND.
[The importance of framing | Networking tutorial (5 of 13)](https://www.youtube.com/watch?v=xrVN9jKjIKQ&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=5)
[Frame formats | Networking tutorial (6 of 13)](https://www.youtube.com/watch?v=1XrRT0CmzYw&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=6)
[Lower layers of the OSI model | Networking tutorial (7 of 13)](https://www.youtube.com/watch?v=MGAaTqFct_I&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=7)
### 3 Сетевой
Не является ли все это сетью? Да, но сетевой уровень отображает возможности соединения между хостами. Именно здесь система отвечает на вопросы типа "Как мне добраться до этого другого хоста? Могу ли я попасть на этот другой хост?". Сетевой уровень обеспечивает согласованный интерфейс для сетевых программ, чтобы они могли использовать сеть на любом физическом и канальном уровнях. Отдельный фрагмент сетевых данных называется пакетом.
Не является ли все это сетью? Да, но сетевой уровень отражает возможность соединения между хостами. Именно здесь система отвечает на вопросы типа "Как мне добраться до другого хоста? Могу ли я попасть на другой хост?". Сетевой уровень обеспечивает согласованный интерфейс для сетевых программ, чтобы они могли использовать сеть на любом физическом и канальном уровнях. Отдельный фрагмент сетевых данных называется пакетом.
В Интернете используется протокол Internet Protocol, или IP. Это IP в TCP/IP. Во всех версиях IP каждому узлу присваивается один или несколько уникальных IP-адресов, чтобы любой другой узел в сети мог его найти. Трансляция сетевых адресов (NAT) изменяет правило "уникального адреса", но где-то в вашей сети или в сети вашего провайдера у вас есть глобально уникальный IP-адрес.
Мы рассмотрим подробно далее только версию 4.
[The Internet Protocol | Networking tutorial (8 of 13)](https://www.youtube.com/watch?v=rPoalUa4m8E&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=8)
[ARP: Mapping between IP and Ethernet | Networking tutorial (9 of 13)](https://www.youtube.com/watch?v=aamG4-tH_m8&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=9)
[Looking at ARP and ping packets | Networking tutorial (10 of 13)](https://www.youtube.com/watch?v=xNbdeyEI-nE&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=10)
[Hop-by-hop routing | Networking tutorial (11 of 13)](https://www.youtube.com/watch?v=VWJ8GmYnjTs&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=11)
### 4 Транспортный
Данные, о которых вы заботитесь, передаются на транспортном уровне. Нижние уровни стека существуют для поддержки транспортного уровня. Фрагмент данных транспортного уровня - это сегмент. Три наиболее распространенных протокола транспортного уровня - это протокол управляющих сообщений Интернета (ICMP), протокол управления передачей (TCP) и протокол пользовательских датаграмм (UDP).
@ -55,47 +64,453 @@ ICMP обрабатывает низкоуровневые сообщения о
UDP и TCP обеспечивают передачу прикладных данных между узлами. Они настолько распространены, что набор протоколов Интернета обычно называют TCP/IP. (UDP/TCP/IP слишком громоздки.) UDP, или User Datagram Protocol, предоставляет минимальные услуги, необходимые для передачи данных по сети. Хотя люди шутят, что U в UDP означает "ненадежный", он предназначен для приложений, где надежность обеспечивается приложением, а не сетью. Протокол TCP, или Transmission Control Protocol, включает в себя проверку ошибок, управление перегрузками и повторную передачу потерянных данных, но ему не хватает гибкости и простоты UDP.
### 5 Прикладной (сессионный, представления, приложения)
В заголовке перечислены их названия согласно теоретической модели ОСИ. Сессионный уровень отвечает за открытие, использование и закрытие соединений транспортного уровня. Уровень представления отвечает за обмен данными между приложениями. На уровне приложения работает протокол передачи данных приложения. На практике всё зависит от поставщика приложения, который может реализовать чёткое разделение ответственности по слоям или смешать всё воедино.
Примерами протоколов высших слоёв являются: HTTP, SMTP, LDAP.
# Ethernet
https://www.youtube.com/watch?v=aamG4-tH_m8&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=9
[TCP: Transmission control protocol | Networking tutorial (12 of 13)](https://www.youtube.com/watch?v=4IMc3CaMhyY&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=12)
[TCP connection walkthrough | Networking tutorial (13 of 13)](https://www.youtube.com/watch?v=F27PLin3TV0&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=13)
# IPv4
https://www.youtube.com/watch?v=VWJ8GmYnjTs&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=11
### 5 Прикладной (сессионный, представления, приложения)
# TCP/IP
В заголовке перечислены их названия согласно теоретической модели ОСИ. Сессионный уровень отвечает за открытие, использование и закрытие соединений транспортного уровня. Уровень представления отвечает за обмен данными между приложениями. На уровне приложения работает протокол передачи данных приложения. На практике всё зависит от поставщика приложения, который может реализовать чёткое разделение ответственности по слоям или смешать всё воедино.
https://www.youtube.com/watch?v=4IMc3CaMhyY&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=12
Примерами протоколов высших слоёв являются: `HTTP`, `SMTP`, `LDAP`.
[DNS: Why was Facebook down for five hours?](https://www.youtube.com/watch?v=-wMU8vmfaYo&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=14)
# Работа сети на примере
В данном примере отследим путь ICMP пакета по сети из точки A в точку B с топологией сети изображённой ниже. Рёбра этого графа - провода, а узлы - компьютеры или роутеры. Это также пример автономной системы, например автономная система провайдера. Автономная система - группа сетей, находящихся под административным или политическим контролем одного юридического лица.
```
68:56:35:8e:2c:2d 04:f1:3e:6c:86:ad
192.168.9.2/24 192.168.20.2/24
│ 10.0.13.2┌───┐ │ ┌───┐
┌───┐ │ ┌─────┤ │ ├────┤ B │
│ A ├────┤ │ └───┘ │ └───┘
└───┘ │ │ Уфа │
│ │ │ ┌───┐
┌───┐ │68:56:35:8e:5b:74 │10.0.13.1 ├────┤ │
│ ├────┤ 192.168.9.1/24 ┌─┴─┐ 10.0.15.2┌───┐ 10.0.21.2┌───┐ │ └───┘
└───┘ ├─────────────────┤ ├──────────────┤ ├─────────────────────────┤ ├───────────────┤
│ └───┘10.0.15.1 └─┬─┘10.0.21.1 └─┬─┘192.168.20.1/24│ ┌───┐
┌───┐ │ Самара │ │ ├────┤ │
│ ├────┤ │ 10.0.16.2 ┌───┐ 10.0.8.2│ │ └───┘
└───┘ │ └────────────┤ ├────────────┘ │
│ 10.0.16.1 └───┘10.0.8.1 │ ┌───┐
│ Москва Рыбинск Питер |────┤ │
| | └───┘
Ethernet сеть 1 (4 хоста) Ethernet network 2 (5 хостов)
```
Как мы можем отправить информацию от хоста A хосту B? Рассмотрим что произойдёт при запуске команды ping.
### Ethernet
При настройке сетевой карты в системе заполняются 3 параметра: ip адрес хоста, ip адрес шлюза, маска сети. Маска сети - общие первые N бит адреса для хостов сети. Когда пакет посылается хосту B хост A видит, что первые N бит этого адреса отличаются от первых N бит его адреса из локальной сети, и отправляет ethernet пакет c ip пакетом внутри шлюзу. Шлюз - это узел, подключенный к нескольким сетям.
Кадр Ethernet начинается со специальной последовательности Preamble/SFD, которая позволяет принимающей стороне однозначно определить с какого бита в канале связи начинается пакет.
Затем следует MAC адрес назначения. В случае если адрес назначения неизвестен, кадр может быть адресован всем устройствам в локальной сети по адресу ffffffffffff.
Пример заголовка Ethernet кадра для широковещательного запроса - поле Destination Address заполняется единицами.
```
| Preamble/SFD | Destination Address | Source Address | Ether Type | Payload | Frame check sequence |
|--------------|---------------------|----------------|-------------------|---------|----------------------|
| 1010....1011 | ffffffffffff | 6856358e2c2d | 0806 (ARP packet) | | |
```
Чтобы отправить ethernet пакет шлюзу, нужно знать его MAC адрес. Для поиска устройства в локальной сети с заданным IP адресом используется ARP (address resolution protocol) протокол. В сети может быть два типа ARP пакетов: широковещательный запрос с просьбой ответить на вопрос "У кого назначен 192.168.9.1?".
Пример заголовка ARP сообщения (помещается в Payload Ethernet кадра) для установки соответствия между Ethernet адресом и IP адресом
```
| HW Address Type | Protocol Addr Type | HW Address Length | Protocol Addr Len | OP Code |
|-----------------|--------------------|-------------------|-------------------|------------------------------------|
| 1 (Ethernet) | 0800 (IP) | 6 (для Ethernet) | 4 (для IP) | 1 (2 для ответа) |
| Hadrware Address of Sender | Protocol Address of Sender | Hardware Address of Target | Protocol Address of Target |
|----------------------------|----------------------------|----------------------------|----------------------------|
| 6856358e2c2d | 192.168.9.2 | 000000000000 | 192.168.9.1 |
```
При запросе поле "Hardware Address of Target" заполняется нулями, а в ARP ответе хост A получит "68:56:35:8e:5b:74". Получив ответ, хост A с этого момента может отправлять ip пакеты шлюзу для его дальнейшей маршрутизации.
Источники:
- https://datatracker.ietf.org/doc/html/rfc894
- https://www.youtube.com/watch?v=aamG4-tH_m8&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=9
### IP
Хорошо, мы понимаем пакет найдёт путь по локальной Ethernet сети до роутера. Как ему достичь другой Ethernet сети на другом конце интернета?
Для начала подготовим ICMP пакет к отправке. Для этого заполним следующие поля.
ICMP Header (Protocol code = 1)
```
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| unused / Pointer / Gateway Internet Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
```
ICMP пакет будет вложен в IP пакет, который будет вложен в Ethernet пакет. Однако это не значит, что размер IP пакета должен быть меньше Ethernet пакета. В случае превышения MTU (размера Ethernet пакета), IP пакет будет фрагментирован на несколько Ethernet пакетов.
IP заголовок
```
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
```
Пример заголовка Ethernet кадра для передачи IP пакета.
```
| Preamble/SFD | Destination Address | Source Address | Ether Type | Payload | Frame check sequence |
|--------------|---------------------|----------------|-------------------|---------|----------------------|
| | ffffffffffff | 6856358e2c2d | 0800 (IP packet) | | |
```
Задача сетевого уровня обеспечить маршрутизацию пакета от компьютера одной локальной сети до компьютера другой не зависимо от технологий, используемых в локальных сетях. Для этого компьютерам назначается глобальный IP адрес. Количество хостов в IPv4 2^32. Количество хостов в IPv6 2^128. Чтобы эффективно маршрутизировать пакеты между сетями адресное пространство в начале был разделено на блоки разного разметра, называемые классами. Это означало, что первые N бит характеризовали сеть, а оставшиеся хост в сети. Однако фиксированное разделение приводило к неэффективному расходованию адресов, поэтому вскоре вышел стандарт бесклассовой адресации CIDR, который позволял владельцам уже имеющим большие блоки адресов делить их самостоятельно на подсети с помощью маски подсети, которая состояля из единиц в первых N битах.
Чтобы проложить маршрут роутеры между двумя локальными сетями обмениваются информацией, наподобие того как обнаруживают другу друга компьютеры в локальной сети. После обмена информацией о сетях (ip адреса портов роутера с масками подсетей) каждый роутер формирует таблицу маршрутизации. Протоколы маршрутизации внутри автономных систем:
- RIP,
- OSPF,
- EIGRP.
Существует также возможность внести маршрут в данную таблицу вручную.
Таблица говорит, о том какие сети существуют за каждым подключенным портом. Так что, пакет попавший на роутер Самара на порт 1 слева согласно таблице отправляется на порт 2 справа. Аналогичное действие происходит на каждом роутере в цепи Самара-Москва-Питер, пока пакет не попадёт в целевую локальную Ethernet сеть 192.168.20.0. Hop-by-hop маршрутизация фундаметальная характеристика сетевого слоя и IP протокола.
Глобальная сеть Интернет объединяет множество автономных систем. Специфика масштаба маршрутизации между АС требует использования другого оборудования и других протоколов маршрутизации между автономными системами. В данный момент используется в основном BGP.
ICMP используется не только для проверки доступности хостов командой `ping`. Это все возможные типы сообщений и их коды:
- Destination Unreachable Message (3)
- Source Quench Message (4)
- Redirect Message (5)
- Echo or Echo Reply Message (8)
- Time Exceeded Message (11)
- Parameter Problem Message (12)
- Timestamp or Timestamp Reply Message (14)
- Information Request/Information Reply Message (15/16)
Источники:
- IP RFC https://www.ietf.org/rfc/rfc792.txt
- ICMP RFC https://www.ietf.org/rfc/rfc792.txt
- https://www.youtube.com/watch?v=VWJ8GmYnjTs&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=11
# Передача данных приложений по сети
Иерархия протоколов
```
+------+ +-----+ +-----+ +-----+
|Telnet| | FTP | |Voice| ... | | Application Level
+------+ +-----+ +-----+ +-----+
| | | |
+-----+ +-----+ +-----+
| TCP | | RTP | ... | | Host Level
+-----+ +-----+ +-----+
| | |
+-------------------------------+
| Internet Protocol & ICMP | Gateway Level
+-------------------------------+
|
+---------------------------+
| Local Network Protocol | Network Level
+---------------------------+
Protocol Relationships
```
Для передачи пользовательских нужно подняться на один уровень выше, на транспортный уровень, до протоколов TCP и UDP.
Протокол TCP является протоколом ориентированным на потоки бит и как следствие требует установки соединения перед передачей данных, разбиение потока бит на пакеты и восстановления потока на принимающей стороне. А это в свою очередь требует от протокола буферизации и сортировки на принимающей стороне, а также детектирования пропущенных пакетов и механизма повторной отправки для таких случаев. Всё это делает протокол более надёжным, но требует дополнительных накладных расходов на контроль за доставкой. Механизм повторной отправки также может привести усугублению ситуации в сети, если пакеты не доставляются из-за перегрузки оборудования большим количеством пакетов.
Протокол UDP является протоколом без гарантии доставки. Используется при доставке аудио и видео данных, так как отдельные потерянные пакеты не сильно влияют на опыт использования, а отстуствие инициализации соединения и контроля за доставкой приводит к меньшим задержкам.
## TCP/IP
Приведём подробнее формат заголовка TCP пакета.
TCP header (ethernet protocol code = 6)
```
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
```
Поддержание TCP-соединения требует запоминания нескольких переменных. Эти переменные хранятся в записи соединения, называемой блоком управления передачей или TCB.
Диаграмма установки соединения
```
+---------+ ---------\ active OPEN
| CLOSED | \ -----------
+---------+<---------\ \ create TCB
| ^ \ \ snd SYN
passive OPEN | | CLOSE \ \
------------ | | ---------- \ \
create TCB | | delete TCB \ \
V | \ \
+---------+ CLOSE | \
| LISTEN | ---------- | |
+---------+ delete TCB | |
rcv SYN | | SEND | |
----------- | | ------- | V
+---------+ snd SYN,ACK / \ snd SYN +---------+
| |<----------------- ------------------>| |
| SYN | rcv SYN | SYN |
| RCVD |<-----------------------------------------------| SENT |
| | snd ACK | |
| |------------------ -------------------| |
+---------+ rcv ACK of SYN \ / rcv SYN,ACK +---------+
| -------------- | | -----------
| x | | snd ACK
| V V
| CLOSE +---------+
| ------- | ESTAB |
| snd FIN +---------+
| CLOSE | | rcv FIN
V ------- | | -------
+---------+ snd FIN / \ snd ACK +---------+
| FIN |<----------------- ------------------>| CLOSE |
| WAIT-1 |------------------ | WAIT |
+---------+ rcv FIN \ +---------+
| rcv ACK of FIN ------- | CLOSE |
| -------------- snd ACK | ------- |
V x V snd FIN V
+---------+ +---------+ +---------+
|FINWAIT-2| | CLOSING | | LAST-ACK|
+---------+ +---------+ +---------+
| rcv ACK of FIN | rcv ACK of FIN |
| rcv FIN -------------- | Timeout=2MSL -------------- |
| ------- x V ------------ x V
\ snd ACK +---------+delete TCB +---------+
------------------------>|TIME WAIT|------------------>| CLOSED |
+---------+ +---------+
```
Временная диаграмма установки соединения, передачи данных и закрытия соединения
```
Клиент Сервер
192.168.9.2:1234 192.168.20.2:80
│ SYN seq=0 │
├──────────────────►│
│ │
│ SYN,ACK=1 seq=0 │ УСТАНОВКА
│◄──────────────────┤ СОЕДИНЕНИЯ
│ │
│ ACK=1 seq=1 │
├──────────────────►│
│ │
│───────────────────┼───────────────
│ │
│ пакет с данными │
│ длиной 22 байта │
│ seq=1 │ ПЕРЕДАЧА
│◄──────────────────┤ ДАННЫХ
│ │
│ ACK=1 seq=23 │
├──────────────────►│
│ │
│───────────────────┼────────────────
│ │
│ FIN,ACK=1 seq=23 │
│◄──────────────────┤
│ │
│ ACK=24 seq=1 │
├──────────────────►│ ЗАКРЫТИЕ
│ │ СОЕДИНЕНИЯ
│ FIN,ACK=24 seq=1 │
│──────────────────►│
│ │
│ ACK=2 seq=24 │
│◄──────────────────┤
│ │
│ │
v v
```
Попробуйте получить похожий лог для любого TCP соединения у себя на хосте с помощью утилит `tcpdump` или `wireshark`.
Источники:
- TCP RFC https://www.ietf.org/rfc/rfc793.txt
- https://www.youtube.com/watch?v=4IMc3CaMhyY&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=12
# DHCP
Кто назначает IP адреса на сетевые порты?
Администратор может назначить их вручную или автоматически с помощью DHCP.
DHCP предназначен для предоставления DHCP-клиентам параметров конфигурации, определенных в RFC «Требования к хосту». После получения параметров через DHCP клиент DHCP должен иметь возможность обмениваться пакетами с любым другим хостом в Интернете.
DHCP состоит из двух компонентов: протокола для доставки специфичных для хоста параметров конфигурации от DHCP-сервера к хосту и механизма выделения сетевых адресов хостам.
Временная диаграмма автоматического получения IP адреса.
```
Server Client Server
(not selected) (selected)
v v v
| | |
| Begins initialization |
| | |
| _____________/|\____________ |
|/DHCPDISCOVER | DHCPDISCOVER \|
| | |
Determines | Determines
configuration | configuration
| | |
|\ | ____________/|
| \________ | /DHCPOFFER |
| DHCPOFFER\ |/ |
| \ | |
| Collects replies |
| \| |
| Selects configuration |
| | |
| _____________/|\____________ |
|/ DHCPREQUEST | DHCPREQUEST\ |
| | |
| | Commits configuration
| | |
| | _____________/|
| |/ DHCPACK |
| | |
| Initialization complete |
| | |
. . .
. . .
| | |
| Graceful shutdown |
| | |
| |\ ____________ |
| | DHCPRELEASE \|
| | |
| | Discards lease
| | |
v v v
```
Источники:
- https://www.rfc-editor.org/rfc/rfc2131
# DNS
https://www.youtube.com/watch?v=-wMU8vmfaYo&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=14
Основная функция DNS хранить связь между IP адресом и человеко-читаемым именем. DNS система - это распределённая база данных.
Хост может участвовать в системе доменных имен несколькими способами: в зависимости от того, запускает ли хост программы, извлекающие информацию из доменной системы, серверы имен, отвечающие на запросы других хосты или различные комбинации обеих функций.
Схема работы DNS с точки зрения клиентского хоста:
```
Локальный хост | Хосты сети
|
+---------+ +----------+ | +--------+
| | user queries | |queries | | |
| User |-------------->| |---------|->|Foreign |
| Program | | Resolver | | | Name |
| |<--------------| |<--------|--| Server |
| | user responses| |responses| | |
+---------+ +----------+ | +--------+
| A |
cache additions | | references |
V | |
+----------+ |
| cache | |
+----------+ |
```
Пользовательские программы взаимодействуют с пространством доменных имен через Resolver. Формат пользовательских запросов и ответов зависит от хоста и его операционной системы. Пользовательские запросы обычно представляют собой вызовы операционной системы, а Resolver и его кэш являются частью операционной системы хоста. Resolver отвечают на запросы пользователей информацией, которую они получают посредством запросов к внешним серверам имен и локальному кешу.
Схема работы сервера имён:
```
Локальный хост | Хосты сети
|
+---------+ |
/ /| |
+---------+ | +----------+ | +--------+
| | | | |responses| | |
| | | | Name |---------|->|Foreign |
| Master |-------------->| Server | | |Resolver|
| files | | | |<--------|--| |
| |/ | | queries | +--------+
+---------+ +----------+ |
A |maintenance | +--------+
| +------------|->| |
| queries | |Foreign |
| | | Name |
+------------------|--| Server |
maintenance responses | +--------+
```
Таблица 1. Типы записей сервера имён
|TYPE| value | meaning|
|---|---|----|
|A |1 |a host address|
|NS |2 |an authoritative name server|
|MD |3 |a mail destination (Obsolete - use MX)|
|MF |4 |a mail forwarder (Obsolete - use MX)|
|CNAME |5 |the canonical name for an alias|
|SOA |6 |marks the start of a zone of authority|
|MB |7 |a mailbox domain name (EXPERIMENTAL)|
|MG |8 |a mail group member (EXPERIMENTAL)|
|MR |9 |a mail rename domain name (EXPERIMENTAL)|
|NULL |10| a null RR (EXPERIMENTAL)|
|WKS |11| a well known service description|
|PTR |12| a domain name pointer|
|HINFO |13| host information|
|MINFO |14| mailbox or mail list information|
|MX |15| mail exchange|
|TXT |16| text strings|
Источники:
- https://datatracker.ietf.org/doc/html/rfc1035
- https://www.youtube.com/watch?v=-wMU8vmfaYo&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=14
# Troubleshooting
Таблица 1. Утилиты
Таблица 1. Утилиты для отладки проблем с сетью
| Уровень | Название утилит |
|---------|-----------------|
| 1 Физический | |
| 2 Канальный | |
| 3 Сетевой | |
| 4 Транспортный | |
| 5 Прикладной (сессионный, представления, приложения) | |
| 1 Физический | лампочка порта, ip/ipconfig/ifconfig, замена кабеля |
| 2 Канальный | arp, ND, tcpdump, arpping |
| 3 Сетевой | ip, traceroute, ping, netstat, nmap, ss, SmokePing, iperf, ipcalc |
| 4 Транспортный | netstat, ss, telnet, ifstat |
| 5 Прикладной (сессионный, представления, приложения) | telnet, nmap, curl, wget, postman |
### 1 Физический
### 2 Канальный
### 3 Сетевой
### 4 Транспортный
### 5 Прикладной (сессионный, представления, приложения)
Источники:
- Michael Lucas. Networking for System Administrator
- https://www.youtube.com/playlist?list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW
- https://www.brendangregg.com/linuxperf.html

@ -1,16 +1,16 @@
# Задание 1
0. Узнайте статус сервиса systemd-networkd.
0. Узнайте статус сервиса `systemd-networkd`.
```
# systemctl status systemd-networkd
```
1. Активируйте systemd-networkd, если он не активирован (disabled).
1. Активируйте `systemd-networkd`, если он не активирован (disabled).
```
# systemctl enable systemd-networkd
```
2. Запустите systemd-networkd, если он не запущен (inactive, dead).
2. Запустите `systemd-networkd`, если он не запущен (inactive, dead).
```
# systemctl start systemd-networkd
```
@ -20,10 +20,10 @@
# ip link
```
4. Для настройки интерфейса ens18 машин stud1-1v1 и stud1-2v1 создайте
или отредактируйте в каждой /etc/systemd/network/ens18.network.
4. Для настройки интерфейса `ens18` машин `stud1-1v1` и `stud1-2v1` создайте
или отредактируйте в каждой `/etc/systemd/network/ens18.network`.
конфигурация ens18.network машины stud1-1v1
конфигурация `ens18.network` машины `stud1-1v1`
```
[Match]
Name=ens18
@ -32,7 +32,7 @@ Name=ens18
Address=192.168.1.1/24
```
конфигурация ens18.network машины stud1-2v1
конфигурация `ens18.network` машины `stud1-2v1`
```
[Match]
Name=ens18
@ -46,13 +46,17 @@ Address=192.168.1.2/24
# networkctl reload
```
6. После конфигурации на обеих машинах проверьте их взаимную доступность по сети.
6. После конфигурации на обеих машинах проверьте их взаимную доступность по сети
```
stud@stud1-2v1$ ping 192.168.1.1
stud@stud1-1v1$ ping 192.168.1.2
```
7. В случае проблемы, проверьте, что systemd-networkd запущен и в его логах нет ошибок.
7. В случае проблемы, проверьте, что `systemd-networkd` запущен и в его логах нет ошибок.
```
# systemctl status systemd-networkd
```
# TODO научить пользоваться ip утилитой, дать расшифровку выдачи ip link, ip addr,
как понять по выдаче ip, что отключен провод, или что отключен интерфейс программно?

@ -1,16 +1,16 @@
# Задание 2
0. Узнайте статус сервиса systemd-networkd.
0. Узнайте статус сервиса `systemd-networkd`.
```
# systemctl status systemd-networkd
```
1. Активируйте systemd-networkd, если он не активирован (disabled).
1. Активируйте `systemd-networkd`, если он не активирован (disabled).
```
# systemctl enable systemd-networkd
```
2. Запустите systemd-networkd, если он не запущен (inactive, dead).
2. Запустите `systemd-networkd`, если он не запущен (inactive, dead).
```
# systemctl start systemd-networkd
```
@ -20,10 +20,10 @@
# ip link
```
4. Для настройки интерфейса ens18 машин stud1-1v1 и stud1-2v1 создайте
или отредактируйте в каждой /etc/systemd/network/ens18.network.
4. Для настройки интерфейса `ens18` машин `stud1-1v1` и `stud1-2v1` создайте
или отредактируйте в каждой `/etc/systemd/network/ens18.network`.
конфигурация ens18.network машины stud1-1v1 с DHCP сервером.
конфигурация `ens18.network` машины `stud1-1v1` с DHCP сервером.
```
[Match]
Name=ens18
@ -33,7 +33,7 @@ Address=192.168.1.1/24
DHCPServer=yes
```
конфигурация ens18.network машины stud1-2v1, которая получает адрес от DHCP сервера.
конфигурация `ens18.network` машины `stud1-2v1`, которая получает адрес от DHCP сервера.
```
[Match]
Name=ens18
@ -48,7 +48,7 @@ DHCP=yes
```
6. После конфигурации на обеих машинах проверьте их взаимную доступность по сети.
На машине stud1-2v1 определите выданный DHCP сервером ip адрес для интерфейса ens18.
На машине `stud1-2v1` определите выданный DHCP сервером ip адрес для интерфейса `ens18`.
```
ip a
```
@ -58,7 +58,7 @@ stud@stud1-2v1$ ping 192.168.1.1
stud@stud1-1v1$ ping 192.168.1.X
```
7. В случае проблемы, проверьте, что systemd-networkd запущен и в его логах нет ошибок.
7. В случае проблемы, проверьте, что `systemd-networkd` запущен и в его логах нет ошибок.
```
# systemctl status systemd-networkd
```

@ -25,10 +25,10 @@
4. Для настройки интерфейса `ens18` машины `stud1-2v1` создайте
или отредактируйте в каждой `/etc/systemd/network/ens18.network`.
Адрес машины взят из такой сети, в которой присутствует шлюз в
Адрес машины должен быть взят из такой сети, в которой присутствует шлюз в
интернет `10.160.179.1`.
конфигурация ens18.network машины stud1-2v1
конфигурация `ens18.network` машины stud1-2v1
```
[Match]
Name=ens18
@ -67,8 +67,8 @@ DNS=1.1.1.1
stud@stud1-2v1$ ping yandex.ru
```
10. В случае проблемы, проверьте, что systemd-networkd запущен,
systemd-resolved запущен, DNS настроен.
10. В случае проблемы, проверьте, что `systemd-networkd` запущен,
`systemd-resolved` запущен, DNS настроен.
```
# systemctl status systemd-networkd
# systemctl status systemd-resolved

@ -14,6 +14,29 @@
Запустите прослушивание пакетов на некоторое время в сети на одной из машин командой tcpdump. Какие типы пакетов вы перехватили? Отфильтруйте ARP пакеты, ICMP пакеты, TCP пакеты.
# Задание 5
Повторите топологию сети в симуляторе сетей GNS3 в виртуальной машине `studX-gns3`. Соединения между маршрутизаторами, обозначенными R, являются PPP соединениями. Попробуйте отправить ICMP пакет другим хостам, изучите таблицы arp и маршрутизации до и после отправки пакетов.
```
68:56:35:8e:2c:2d 04:f1:3e:6c:86:ad
192.168.9.2 192.168.20.2
│ 10.0.13.2┌───┐ │ ┌───┐
┌───┐ │ ┌─────┤ R │ ├────┤ B │
│ A ├────┤ │ └───┘ │ └───┘
└───┘ │ │ Уфа │
│ │ │ ┌───┐
┌───┐ │68:56:35:8e:5b:74 │10.0.13.1 ├────┤ │
│ ├────┤ 192.168.9.1┌─┴─┐ 10.0.15.2┌───┐ 10.0.21.2┌───┐ │ └───┘
└───┘ ├─────────────────┤ R ├──────────────┤ R ├─────────────────────────┤ R ├───────────────┤
│ └───┘10.0.15.1 └─┬─┘10.0.21.1 └─┬─┘192.168.20.1 │ ┌───┐
┌───┐ │ Самара │ │ ├────┤ │
│ ├────┤ │ 10.0.16.2 ┌───┐ 10.0.8.2│ │ └───┘
└───┘ │ └────────────┤ R ├────────────┘ │
│ 10.0.16.1 └───┘10.0.8.1 │ ┌───┐
│ Москва Рыбинск Питер |────┤ │
| | └───┘
Ethernet сеть 1 (4 хоста) Ethernet network 2 (5 хостов)
```
Связанные с заданием страницы документации man:
- systemd.network
- networkctl

@ -1,7 +1,7 @@
# Задания
### 1.
Скачайте дистрибутив debian debian-11.4.0-amd64-netinst.iso c http://mirror.corbina.net/debian-cd/current/amd64/iso-cd/.
Скачайте дистрибутив `debian-11.4.0-amd64-netinst.iso` по ссылке http://mirror.corbina.net/debian-cd/current/amd64/iso-cd/.
Рассчитайте хэш sha256 командой sha256sum для дистрибутива debian и проверьте целостность данных, сравнив значение
с значением в файле SHA256SUMS.
@ -54,10 +54,13 @@ gpg --output un_encrypted.data --decrypt encrypted.data
Страница документации конфигурационного файла sshd `man sshd_config`.
Попробуйте подключиться ещё раз. Попробуйте подключиться ещё раз по паролю (добавьте флаг -o PubkeyAuthentication=no к ssh команде).
Попробуйте подключиться ещё раз. Попробуйте подключиться ещё раз по паролю (добавьте флаг `-o PubkeyAuthentication=no` к ssh команде).
### 8.
Сгенерируйте сертификат x.509 и ключ с помощью openssl. Посмотрите содержимое сертификата командой `openssl x509`.
Сгенерируйте самоподписанный сертификат x.509 и ключ с помощью `openssl`. Посмотрите содержимое сертификата командой `openssl x509`.
### 9.
Получите сертификат с помощью утилиты `certbot` https://certbot.eff.org/ или скрипта `acme.sh` https://github.com/acmesh-official/acme.sh от центра сертификации https://letsencrypt.org/. Изучите его содержимое командой `openssl`.
# Справка
@ -87,3 +90,8 @@ sign(данные, закрытый ключ) -> массив<байт> (под
verify(данные, подпись: массив<байт>, открытый ключ) -> bool (является ли подпись действительной или нет)
```
Примеры: RSA, ed25519
Релевантные ссылки:
- https://missing.csail.mit.edu/2020/security/
- https://letsencrypt.org/how-it-works/

@ -97,7 +97,7 @@ ln -s /etc/nginx/sites-available/static-server.conf /etc/nginx/sites-enabled/sta
Проверьте, что веб-сервер работает по адресу 193.32.63.170+X, где X ваши идентификатор. Если что-то не работает должным образом, вы можете попытаться выяснить причину в файлах `access.log` и `error.log` в каталоге `/usr/local/nginx/logs` или `/var/log/nginx`.
### 9.
### 9.1
Переведите веб-сервер на https. Измените порт прослушивания на `443 ssl`, сгенерируйте сертификаты и ключ командой openssl в директорию `/data/certs/`. Вам понадобятся следующие параметры в блоке server:
- listen,
- ssl_certificate,
@ -115,6 +115,9 @@ server {
}
```
### 9.2
Переведите веб-сервер на https с сертификатом, полученным утилитой `certbot`` от Letsencrypt.
### 10.1
Одним из частых применений nginx является его настройка в качестве прокси-сервера, что означает сервер, который получает запросы, передает их на проксируемые серверы, получает от них ответы и отправляет их клиентам.

@ -167,6 +167,13 @@ $ host -t Веб-сайт.com
$ dig +trace веб-сайт.com
```
Рисунок 1. Утилиты для отладки в среде Linux
![Linux observability tools (https://www.brendangregg.com/Perf/linux_perf_tools_full.svg)](https://www.brendangregg.com/Perf/linux_perf_tools_full.svg)
Источники:
- https://www.brendangregg.com/linuxperf.html
Литература

@ -1,98 +1,99 @@
# Руководство для преподавателя
## Подготовка среды проведения лабораторных работ
# Руководство для преподавателя. Подготовка среды проведения лабораторных работ
Лабораторные проводятся на виртуальных машинах в системе виртуализации Proxmox. Задания выкладываются в публичный git репозиторий. Для получения новых заданий студенты первоначально скачивают их по ссылке командой `git clone`, а затем в начале каждого урок обновляют их командой `git pull`.
Будем считать, что N - количество студентов умноженное на 1.5, округлённое в большую сторону. X - идентификатор студента от 1 до N.
Будем считать, что `N` - количество студентов умноженное на `1.5`, округлённое в большую сторону. X - идентификатор студента от `1` до `N`.
Создайте N пользователей в Proxmox с именами studX (stud1, stud2, ...). Используйте Realm "Proxmox VE authentication server".
Создайте `N` пользователей в Proxmox с именами `studX` (`stud1`, `stud2`, ...). Используйте Realm "Proxmox VE authentication server".
Загрузите образ debian-11.4.0-amd64-netinst.iso в Proxmox хранилище.
Загрузите образ `debian-11.4.0-amd64-netinst.iso` в Proxmox хранилище.
Для массового создания виртуальных машин рекомендуется использовать возможность Proxmox конвертации виртуальной машины в шаблон. Из шаблона копия создаётся на порядки быстрее по времени, чем при полном клонировании. Следуйте следующим шагам:
1. настройте машину с общими для всех копий настройками,
2. преобразуйте её в шаблон (template),
3. создайте клоны из шаблона и донастройте, если необходимо,
4. сделайте snapshot основных машин, чтобы вы и студенты имели возможность отката до рабочего состояния.
4. сделайте snapshot с именем `initial` основных машин, чтобы вы и студенты имели возможность отката до рабочего состояния.
При наличии нескольких дисков рекомендуется RAID оптимизирующий производительность. Неправильный raid или медленный тип диска может привести к существенному замедлению работы во время установки ОС или пакетов.
Список шаблонов виртуальных машин:
- `stud0-tabularasa-template`
- `stud0-template`
- `stud0-net-[1-2]-template`
- `stud0-troublesome-[1-6]-template`
(TODO Написать скрипт для создания шаблонов.)
(TODO Написать скрипт для создания учётки и виртуалок для студента на основе шаблонов.)
При наличии нескольких дисков рекомендуется RAID оптимизирующий производительность. Неправильный raid или медленный тип диска может привести к существенному замедлению работы во время установки ОС или пакетов.
### Основные виртуальные машины
Данные виртуальные машины предназначены для всех заданий, исключая:
- 00_os_installation,
- 03_networking,
- 12_troubleshooting,
- final_exam.
## 1. Подготовка виртуальной машины к занятиям `01`, `02`, `04`, `05`, `06`, `07`, `08`, `09`, `10`, `11`.
Создайте vlan с доступом в интернет. Например, bond0.499 и мост vmbr499 с параметрами:
- Bridge ports: bond0.499,
- VLAN aware: false,
- IPv4/CIDR: 10.160.179.254/24,
- Gateway (IPv4): 10.160.179.1.
Создайте vlan с доступом в интернет. Например, `bond0.499` и мост `vmbr499` с параметрами:
- Bridge ports: `bond0.499`,
- VLAN aware: `false`,
- IPv4/CIDR: `10.160.179.254/24`,
- Gateway (IPv4): `10.160.179.1`.
До начала занятий создайте N виртуальных машин со следующими характеристиками:
- 1 сокет с 4 ядрами,
- 8 Гб оперативной памяти,
- 16 Гб дискового пространства.
Каждой виртуальной машине назначьте статический IPv4 адрес 10.160.179.10 + X (10.160.179.11, 10.160.179.12, ...). Используйте инструкцию из задания про настройку сети данного учебного модуля.
Каждой виртуальной машине назначьте статический IPv4 адрес `10.160.179.10 + X` (`10.160.179.11`, `10.160.179.12`, ...). Используйте инструкцию из задания про настройку сети данного учебного модуля.
Установите минимальный дистрибутив debian на каждую. Установите пакеты:
- man-db,
- ssh,
- vim,
- tree,
- jq,
- lsof.
```
apt install man-db ssh vim tree jq lsof git mc fail2ban
```
Удалите пакет ifupdown.
Удалите пакет `ifupdown`, так как настройка сети будет производится средствами `systemd-networkd`.
```
apt remove ifupdown
```
Пробросьте порты: 22, 80, 443.
Пробросьте порты: `22`, `80`, `443`.
Организуйте удалённый доступ к машинам по ssh ключу.
Организуйте удалённый доступ к машинам по `ssh` ключу.
### Подготовка к занятию "История операционных систем. Установка Debian"
## 2. Подготовка виртуальной машины к занятиям `00`.
Данные виртуальные машины предназначены для тренировки в установке debian.
Данные виртуальные машины предназначены для тренировки в установке debian в уроке `00`.
До начала занятий создайте N виртуальных машин со следующими характеристиками:
- 1 сокет с 4 ядрами,
- 8 Гб оперативной памяти,
- 32 Гб дискового пространства,
- сетевой интерфейс vmbr499 с доступом в интернет.
- сетевой интерфейс `vmbr499` с доступом в интернет.
Студенты могут назначить статический IPv4: 10.160.179.10 + N + X, Gateway (IPv4): 10.160.179.1.
Студенты могут назначить статический IPv4: `10.160.179.10 + N + X`, Gateway (IPv4): `10.160.179.1`.
Подключите cdrom с образом debian-11.4.0-amd64-netinst.iso.
Подключите cdrom с образом `debian-11.4.0-amd64-netinst.iso`.
### Подготовка к занятию "Настройка сетевого подключения"
## 3. Подготовка виртуальной машины к занятиям `03`.
Данные виртуальные машины предназначены для настройки сетевого интерфейса в конфигурациях systemd. Студентам необходимо работать в индивидуальных vlan для настройки по DHCP и снижению вероятности ошибок при назначении статического адреса.
Данные виртуальные машины предназначены для настройки сетевого интерфейса в конфигурациях `systemd` в уроке `03`. Студентам необходимо работать в индивидуальных vlan для настройки по DHCP и снижению вероятности ошибок при назначении статического адреса.
Создайте N vlan без доступа в интернет. Например, bond0.X и мост vmbrX с параметрами:
- Bridge ports: bond0.X,
- VLAN aware: false.
Создайте `N` vlan без доступа в интернет. Например, `bond0.X` и мост `vmbrX` с параметрами:
- Bridge ports: `bond0.X`,
- VLAN aware: `false`.
Создайте N виртуальных машин studX-net1 и N виртуальных машин studX-net2 для vmbrX. Удалите пакет ifupdown.
Создайте `N` виртуальных машин `studX-net1` и `N` виртуальных машин `studX-net2` для `vmbrX`. Удалите пакет `ifupdown`.
### Подготовка к занятию "Поиск и устранение неисправностей"
## 4. Подготовка виртуальной машины к занятиям `12`.
Данные виртуальные
Создайте N vlan без доступа в интернет: bond0.N+X и мост vmbrN+X с параметрами:
- Bridge ports: bond0.N+X,
- VLAN aware: false.
Создайте `N` vlan без доступа в интернет: `bond0.N+X` и мост `vmbrN+X` с параметрами:
- Bridge ports: `bond0.N+X`,
- VLAN aware: `false`.
Создайте N виртуальных машин troublesome-gwX, играющих роль шлюза для vmbrN+X. Установите минимальный образ debian. Удалите пакет ifupdown. Каждой виртуальной машине назначьте добавьте два сетевых интерфейса. Для первого интерфейса назначьте IPv4 адрес 10.160.179.100 + X (10.160.179.101, 10.160.179.102, ...). Для второго интерфейса назначьте IPv4 адрес 192.168.0.1.
Создайте `N` виртуальных машин `troublesome-gwX`, играющих роль шлюза для `vmbrN+X`. Установите минимальный образ debian. Удалите пакет `ifupdown`. Каждой виртуальной машине назначьте добавьте два сетевых интерфейса. Для первого интерфейса назначьте IPv4 адрес `10.160.179.100 + X` (`10.160.179.101`, `10.160.179.102`, ...). Для второго интерфейса назначьте IPv4 адрес `192.168.0.1`.
Создайте виртуальную машину troublesome. Установите минимальный образ debian. Скопируйте скрипты, приведенные ниже в /sbin/. Превратите машину в шаблон Proxmox.
Создайте виртуальную машину `troublesome`. Установите минимальный образ debian. Скопируйте скрипты, приведенные ниже в `/sbin/`. Превратите машину в шаблон Proxmox.
Для каждого из 6 заданий создайте виртуальную машину из шаблона troublesome: troublesomeX-task1, troublesomeX-task2, ..., troublesomeX-task6. Каждой виртуальной машине назначьте статический IPv4 адрес 192.168.0.1 + номер задания. Для 6 задания настройте беспарольный доступ по ssh от пользователя stud к пользователю mike. Команда `ssh localhost -l mike` должна отработать без ввода пароля. Внесите неисправности, активируя скрипты. Превратите машины в шаблоны.
Для каждого из 6 заданий создайте виртуальную машину из шаблона `troublesome`: `troublesomeX-task1`, `troublesomeX-task2`, ..., `troublesomeX-task6`. Каждой виртуальной машине назначьте статический IPv4 адрес `192.168.0.1 + номер задания`. Для 6 задания настройте беспарольный доступ по ssh от пользователя stud к пользователю mike. Команда `ssh localhost -l mike` должна отработать без ввода пароля. Внесите неисправности, активируя скрипты. Превратите машины в шаблоны.
Создайте N виртуальных машин для каждого задания из шаблонов: troublesomeX-task1, troublesomeX-task2, ..., troublesomeX-task6.
Создайте N виртуальных машин для каждого задания из шаблонов: `troublesomeX-task1`, `troublesomeX-task2`, ..., `troublesomeX-task6`.
Скрипты для внесения неисправностей для заданий.
@ -160,7 +161,7 @@ WantedBy=multi-user.target
chmod 777 /home/stud/.ssh
```
### Подготовка к экзамену
## 5. Подготовка к экзамену
До начала занятий создайте N виртуальных машин со следующими характеристиками:
- 1 сокет с 4 ядрами,
@ -168,4 +169,4 @@ chmod 777 /home/stud/.ssh
- 6 Гб дискового пространства,
- сетевой интерфейс vmbr499.
Подключите cdrom с образом debian-11.4.0-amd64-netinst.iso.
Подключите cdrom с образом `debian-11.4.0-amd64-netinst.iso`.
Loading…
Cancel
Save