261 lines
24 KiB
Markdown
261 lines
24 KiB
Markdown
1. Что такое протокол IP?
|
||
|
||
<details>
|
||
<summary>Ответ</summary>
|
||
|
||
IP (Internet Protocol) - протокол сетевого уровня стека TCP/IP.
|
||
|
||
Основной задачей протокола является доставка датаграмм между хостами сетей TCP/IP через произвольное число промежуточных узлов (маршрутизаторов).
|
||
|
||
Функции, реализуемые IP:
|
||
- Основа передачи данных.
|
||
- Адресация.
|
||
- Маршрутизация.
|
||
- Фрагментация датаграмм.
|
||
Протокол IP не гарантирует надежной доставки пакета: пакеты могут прийти в неправильном порядке, пакет может быть утерян, пакет может продублироваться или оказаться поврежденным. За надежность доставки пакетов отвечают протоколы транспортного уровня.
|
||
|
||
На данный момент наиболее распространена четвертая версия протокола (IPv4), однако ведутся активные работы по внедрению более совершенного IPv6.
|
||
|
||
</details>
|
||
|
||
2. Сколько адресов в следующих подсетях?
|
||
```
|
||
192.168.5.0/24
|
||
192.168.5.0/23
|
||
192.168.5.0/19
|
||
```
|
||
|
||
<details>
|
||
<summary>Ответ</summary>
|
||
|
||
|
||
`2^(32-N)-2`, где
|
||
- N маска: `/24`, `/23`, `/19`;
|
||
- 32 бит в маске;
|
||
- `-2` зарезервированных адреса: 1 адрес сети и 1 broadcast.
|
||
|
||
**Следовательно:**
|
||
|
||
сеть | математика | ответ
|
||
-----------------|---------------|-------------
|
||
192.168.5.0/`24` | 2^(32-`24`)-2 | = 254 хостов
|
||
192.168.5.0/`23` | 2^(32-`23`)-2 | = 510 хостов
|
||
192.168.5.0/`19` | 2^(32-`19`)-2 | = 8190 хостов
|
||
|
||
</details>
|
||
|
||
3. Что такое 127.0.0.1 адрес? Для чего нужен?
|
||
|
||
<details>
|
||
<summary>Ответ</summary>
|
||
|
||
127.0.0.1 адрес или localhost доменное имя, а также зарезервированная сеть 127.0.0.1/8 частных IP адресов предназначены для тестирования программы на той же физической машине, где она запускается.
|
||
|
||
Использование адреса 127.0.0.1 позволяет устанавливать соединение и передавать информацию для программ-серверов, работающих на том же компьютере, что и программа-клиент, независимо от конфигурации аппаратных сетевых средств компьютера (не требуется сетевая карта, модем, и прочее коммуникационное оборудование, интерфейс реализуется при помощи драйвера псевдоустройства в ядре операционной системы)
|
||
|
||
Так же адрес 127.0.0.1 устанавливается для запрета доступа к сервису из внешней сети. Например:
|
||
```
|
||
docker run -d -p 127.0.0.1:3306:3306 mysql
|
||
```
|
||
|
||
</details>
|
||
|
||
4. Вы вводите в строке браузера yandex.ru. Опишите процесс от нажатия клавиши до загрузки страницы.
|
||
|
||
<details>
|
||
<summary>Ответ</summary>
|
||
|
||

|
||
|
||
Любой URL содержит следующую структуру `<протокол>/<хост>/путь`, например `https://yandex.ru/pogoda/samara`. Также URL может содержать данные для отображения страницы.
|
||
|
||
1. При вводе URL браузер смотрит на протокол запроса. Если протокол в URL не указан, то браузер смотрит на список HSTS (HTTP Strict Transport Security - механизм, принудительно активирующий защищенное соединение через протокол HTTPS), если хост есть в данном списке, то браузер отправит запрос по протоколу HTTPS, если нет, то по HTTP.
|
||
|
||
2. Для того, чтобы установить соединение с сервером, необходим его IP адрес. Так как мы используем домен, то необходимо установить соответствие домена и IP адреса сервера, где размещается ресурс. При запросе мы обращаемся к DNS. Cначала проверяется кеш DNS. Приоритет опроса DNS кеша следующий:
|
||
- Кеш браузера,
|
||
- Проверяется hosts файл ,
|
||
- Кеш ОС,
|
||
- Кеш роутера,
|
||
- Кеш интернет-провайдера
|
||
Если данных о данном запрашиваеомом хосте в кеше нет, то:
|
||
- DNS интернет провайдера отправляет запрос к контевому серверу DNS (.),
|
||
- Если корневой сервер не знает запрашиваемого домена, то он отправляет запрос серверу ответственному за зону (.ru), в которому привязан домен,
|
||
- Если DNS сервер зоны не знает запрашиваемого домена, то запрос отправляется к NS серверу домена.
|
||
IP адрес хоста, при его наличии у DNS сервера, возвращается обратно по цепочке
|
||
|
||
3. После того, как IP адрес хоста получили, необходимо сформировать на прикладном уровне запрос к серверу. К запросу добавляются следующие заголовки:
|
||
- Прикладной уровень: протокол запроса (HTTP/S, FTP и т.д),
|
||
- Транспортный (TCP/UDP): порт, по которому обращаемся к серверу.
|
||
- Сетевой уровень: IP адрес пакета
|
||
- Канальный уровень: определяет есть ли такой адрес в сети. Если нет, то пакет передаётся шлюзу. Устройство шлюза проверяет свою таблицу маршрутизации и направляет пакет в нужном направлении.
|
||
|
||
4. Далее выполняется следующий алгоритм действий установления соединения:
|
||
- После того, как запрос достиг сервера, клиент отправляет клиенту запрос (client hello) и свою версию протокола TLS на защищенное соединение.
|
||
- Сервер отвечает клиенту (server hello) с информацией о выбранной версии TLS, методом шифрования, методом компресии и публичный сертификат сервера, подписанный центром сертификации. Сертификат содержит публичный ключ, который будет использован клиентом для шифрования данных.
|
||
- Клиент подтверждает сертификат сервера с помощью своего списка центров сертификации. Если сертификат подписан центром из списка, то серверу можно доверять.
|
||
- Клиент шифрует данные публичным ключем и отправляет серверу зашифрованное сообщение.
|
||
- Сервер расшифровывает сообщение с помощью своего приватного ключа и генерирует симметричный мастер-ключ и отправляет его клиенту.
|
||
- Клиент отправляет серверу сообщение о финише, шифруя хэш передачи с помощью симметричного ключа.
|
||
- Сервер генерирует собственный хеш, а затем расшифровывает полученный от клиента хэш, чтобы проверить совпадает ли хэш клиента с хэшом сервера. Если совпадение обнаружено, то сервер отправляет клиенту сообщение о финише.
|
||
|
||
После этого защищенное соединение с сервером установлено.
|
||
|
||
5. Далее необходимо сформировать запрос серверу:
|
||
- Клиент формирует запрос HTTP, в котором участвует метод (например GET), URL и версию протокола. Например `GET /pogoda/samara HTTP/2`.
|
||
- Следующий заголовок клиента HOST, в котором указывается к какому хосту необходимо обратиться. Например `HOST: yandex.ru`. По заголовку HOST сервер может определить к какому сайту на сервере необходимо обратиться.
|
||
- Запрос может также содержать и другие заголовки. Необходимо только, чтобы сервер смог понять эти заголовки.
|
||
|
||
</details>
|
||
|
||
5. Чем отличается TCP от UDP? Что лучше?
|
||
|
||
<details>
|
||
<summary>Ответ</summary>
|
||
|
||
TCP – транспортный протокол передачи данных в сетях TCP/IP, предназначен для управления передачей данных интернета. Пакеты в TCP называются сегментами.
|
||
Ориентирован на соединение, используется для передачи данных (электронная почта, файлы, сообщения). При определении потери пакетов будет выполнен перезапрос потерянных пакетов.
|
||
|
||
UDP – транспортный протокол, передающий сообщения-датаграммы без необходимости установки соединения в IP-сети. Не ориентирован на установление соединения, используется в потоковой передаче данных (IPTV, VoIP). При потере пакетов перезапроса потерянных пакетов не происходит.
|
||
|
||
Нельзя сказать, что TCP лучше UDP, т.к. данные транспортные протоколы используются для различных типов передачи трафика.
|
||
|
||
</details>
|
||
|
||
6. Как происходит соединение TCP?
|
||
|
||
<details>
|
||
<summary>Ответ</summary>
|
||
|
||

|
||
|
||
1. Клиент, который намеревается установить соединение, посылает серверу сегмент с номером последовательности и флагом SYN.
|
||
Дальнейший алгоритм:
|
||
Сервер получает сегмент, запоминает номер последовательности и пытается создать сокет (буферы и управляющие структуры памяти) для обслуживания нового клиента;
|
||
В случае успеха сервер посылает клиенту сегмент с номером последовательности и флагами SYN и ACK, и переходит в состояние SYN-RECEIVED;
|
||
В случае неудачи сервер посылает клиенту сегмент с флагом RST.
|
||
2. Если клиент получает сегмент с флагом SYN, то он запоминает номер последовательности и посылает сегмент с флагом ACK.
|
||
Дальнейший алгоритм:
|
||
Если он одновременно получает и флаг ACK (что обычно и происходит), то он переходит в состояние ESTABLISHED;
|
||
Если клиент получает сегмент с флагом RST, то он прекращает попытки соединиться;
|
||
Если клиент не получает ответа в течение 10 секунд, то он повторяет процесс соединения заново.
|
||
|
||
3. Если сервер в состоянии SYN-RECEIVED получает сегмент с флагом ACK, то он переходит в состояние ESTABLISHED.
|
||
В противном случае после тайм-аута он закрывает сокет и переходит в состояние CLOSED.
|
||
Процесс называется «трёхэтапным рукопожатием» (англ. three way handshake), так как несмотря на то что возможен процесс установления соединения с использованием четырёх сегментов (SYN в сторону сервера, ACK в сторону клиента, SYN в сторону клиента, ACK в сторону сервера), на практике для экономии времени используется три сегмента.
|
||
|
||
</details>
|
||
|
||
7. Как происходит HTTPS соединение?
|
||
|
||
<details>
|
||
<summary>Ответ</summary>
|
||
|
||
Когда вы вводите адрес сайта в браузере, он спрашивает у сервера, установлен ли для сайта сертификат. В ответ сервер отправляет общую информацию об SSL-сертификате и публичный ключ, то есть сам сертификат. Браузер сверяет информацию со списком авторизованных центров сертификации. Если всё в порядке, браузер генерирует сеансовый ключ, зашифровывает его публичным ключом и отправляет на сервер. Сервер расшифровывает сообщение и сохраняет сеансовый ключ. После этого между браузером и сайтом устанавливается безопасное соединение через протокол HTTPS.
|
||
|
||

|
||
|
||
</details>
|
||
|
||
8. Какие стандартные коды ответов есть у веб-серверов?
|
||
|
||
<details>
|
||
<summary>Ответ</summary>
|
||
|
||
- 1XX — информационные коды. Они отвечают за процесс передачи данных. Это временные коды, они информируют о том, что запрос принят и обработка будет продолжаться.
|
||
- 2XX — успешная обработка. Запрос был получен и успешно обработан сервером.
|
||
- 3XX — перенаправление (редирект). Эти ответы сервера гласят, что нужно предпринять дальнейшие действия для выполнения запроса. Например, сделать запрос по другому адресу.
|
||
- 4XX — ошибка пользователя. Это значит, что запрос не может быть выполнен по его вине.
|
||
- 5XX — ошибка сервера. Эти коды возникают из-за ошибок на стороне сервера. В данном случае пользователь всё сделал правильно, но сервер не может выполнить запрос. Для кодов этого класса сервер обязательно показывает сообщение, что не может обработать запрос и по какой причине.
|
||
|
||
</details>
|
||
|
||
9. Какие существуют основные типы запросов HTTP?
|
||
|
||
<details>
|
||
<summary>Ответ</summary>
|
||
|
||
Два наиболее часто используемых видов HTTP запросов это: GET и POST.
|
||
|
||
GET - запрашивает данные с определенного ресурса (сайта).
|
||
POST - отправляет данные на сервер для последующей их обработки.
|
||
|
||
Особенности GET запроса:
|
||
- Может быть закэширован
|
||
- Остается в истории браузера
|
||
- Может быть закладкой в браузере
|
||
- Не должен использоваться при работе с крайне важными данными
|
||
- Имеет ограниченную длину
|
||
- Должен применяться только для получения данных
|
||
|
||
Особенности POST запроса:
|
||
- Не кэшируется
|
||
- Не может быть закладкой в браузере
|
||
- Не остаётся в истории браузера
|
||
- Нет ограничений по длине запроса
|
||
|
||
| Заголовок | Описание |
|
||
|-----------|---------------------------------------------------------------------------------------------|
|
||
| HEAD | Тоже самое что GET, однако возвращает только HTTP заголовки и не возвращает тело документа. |
|
||
| DELETE | Удаляет определенный ресурс. |
|
||
| PUT | Загружает представление определенного URI. |
|
||
| OPTIONS | Возвращает список видов запросов, поддерживаемых веб-сервером. |
|
||
| CONNECT | Создает прозрачный TCP/IP туннель для передачи запросов. |
|
||
|
||
</details>
|
||
|
||
10. Клиент пишет, что заходит на свой сайт и он к нему подключается через раз. Что делать, что спрашивать от клиента?
|
||
|
||
<details>
|
||
<summary>Ответ</summary>
|
||
|
||
Необходимо спросить у клиента какую ошибку он наблюдает при неудачном запросе сайта, в какое время. Если проблема периодическая, то возможно проблема на стороне провайдера клиента. Необходимо запросить у клиента анализ сети с помощью утилит `traceroute`, `mtr` с того узла, где он наблюдает проблему и до сайта
|
||
|
||
</details>
|
||
|
||
11. Какой транспортный протокол использует DNS? В каком случае DNS работает по UDP, а в каком по TCP?
|
||
|
||
<details>
|
||
<summary>Ответ</summary>
|
||
|
||
Все реализации DNS серверов должны поддерживать использование обоих протоколов транспортного уровня (TCP и UDP). Большинство DNS-запросов будет обрабатываться с использованием протокола UDP, исключение составляют трансфер зоны (Query type AXFR) и ответы сервера, превышающие 512 байт на одно сообщение. На вопрос "зачем?" ответ простой -- чтобы не использовались для DDoS.
|
||
|
||
</details>
|
||
|
||
11. Какие DNS записи бывают? Что такое DKIM, DMARC, PTR?
|
||
|
||
<details>
|
||
<summary>Ответ</summary>
|
||
|
||
Основные DNS записи:
|
||
|
||
| Тип | Расшифрока | Описание |
|
||
|-|-|-|
|
||
| A | Address | Адресная запись, соответствие между именем и IP-адресом. |
|
||
| AAAA | Address v6 | Аналог A записи для IPv6 адресов. |
|
||
| CNAME | Canonical Name | Каноническое имя для псевдонима (одноуровневая переадресация) |
|
||
| MX | Mail Exchanger | Адрес почтового шлюза для домена. Состоит из двух частей — приоритета (чем число больше, тем ниже приоритет), и адреса узла. |
|
||
| NS | Authoritative name server | Адрес узла, отвечающего за доменную зону. Критически важна для функционирования самой системы доменных имён. |
|
||
| PTR | Pointer | Соответствие адреса имени — обратное соответствие для A и AAAA. |
|
||
| SOA | Start of authority | Указание на авторитетность информации, используется для указания на новую зону. |
|
||
| TXT | Text string | Запись произвольных двоичных данных, до 255 байт в размере. |
|
||
| SPF | Sender Policy Framework | Указывает серверы, которые могут отправлять почту с данного домена. |
|
||
|
||
DomainKeys Identified Mail (DKIM) — метод E-mail аутентификации, разработанный для обнаружения подделывания сообщений, пересылаемых по email. Метод дает возможность получателю проверить, что письмо действительно было отправлено с заявленного домена. DKIM упрощает борьбу с поддельными адресами отправителей, которые часто используются в фишинговых письмах и в почтовом спаме.
|
||
|
||
Domain-based Message Authentication, Reporting and Conformance (идентификация сообщений, создание отчётов и определение соответствия по доменному имени) или DMARC — это техническая спецификация, созданная группой организаций, предназначенная для снижения количества спамовых и фишинговых электронных писем, основанная на идентификации почтовых доменов отправителя на основании правил и признаков, заданных на почтовом сервере получателя.
|
||
|
||
Информация о DKIM и DMARC устанавливается в TXT записи домена.
|
||
|
||
</details>
|
||
|
||
12. Что такое RoundRobin DNS как работает?
|
||
|
||
<details>
|
||
<summary>Ответ</summary>
|
||
|
||
Round-robin - алгоритм распределения нагрузки распределенной вычислительной системы методом перебора и упорядочения её элементов по круговому циклу.
|
||
|
||
Round-robin DNS работает, отвечая на запросы не только одним IP-адресом, а списком из нескольких адресов серверов, предоставляющих идентичный сервис. Порядок, в котором возвращаются IP-адреса из списка, основан на алгоритме Round-robin. То есть на практике на доменное имя назначаются несколько IP адресов серверов, которые отвечают на запросы.
|
||
|
||
</details>
|