Files
go-interview/docs/COMMON.md
2020-05-13 17:06:50 +03:00

68 lines
9.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### <a name="common_questions"></a>Общие вопросы
**1. В чем отличие протоколов TCP и UDP? В каком случае UDP предпочтительнее?**
__TCP__ транспортный протокол передачи данных в сетях TCP/IP, предварительно устанавливающий соединение с сетью.
__UDP__ транспортный протокол, передающий сообщения-датаграммы без необходимости установки соединения в IP-сети.
Разница между протоколами TCP и UDP в так называемой _"гарантии доставки"_.
TCP требует отклика от клиента, которому доставлен пакет данных, подтверждения доставки, и для этого ему необходимо установленное заранее соединение.
Также протокол TCP считается надежным, тогда как UDP получил даже именование протокол ненадежных датаграмм.
TCP исключает потери данных, дублирование и перемешивание пакетов, задержки.
UDP все это допускает, и соединение для работы ему не требуется.
Процессы, которым данные передаются по UDP, должны обходиться полученным, даже и с потерями.
TCP контролирует загруженность соединения, UDP не контролирует ничего, кроме целостности полученных датаграмм.
С другой стороны, благодаря такой не избирательности и бесконтрольности, UDP доставляет пакеты данных (датаграммы) гораздо быстрее, потому для приложений, которые рассчитаны на широкую пропускную способность и быстрый обмен, UDP можно считать оптимальным протоколом.
К таковым относятся сетевые и браузерные игры, а также программы просмотра потокового видео и приложения для видеосвязи (или голосовой): от потери пакета, полной или частичной, ничего не меняется, повторять запрос не обязательно, зато загрузка происходит намного быстрее.
Протокол TCP, как более надежный, с успехом применяется даже в почтовых программах, позволяя контролировать не только трафик, но и длину сообщения и скорость обмена трафиком.
**2. Что такое NAT?**
Сети обычно проектируются с использованием частных IP адресов.
Это адреса __10.0.0.0/8__, __172.16.0.0/12__ и __192.168.0.0/16__.
Эти частные адреса используются внутри организации или площадки, чтобы позволить устройствам общаться локально, и они не маршрутизируются в интернете.
Чтобы позволить устройству с приватным IPv4-адресом обращаться к устройствам и ресурсам за пределами локальной сети, приватный адрес сначала должен быть переведен на общедоступный публичный адрес.
И вот как раз NAT переводит приватные адреса, в общедоступные.
Это позволяет устройству с частным адресом IPv4 обращаться к ресурсам за пределами его частной сети. NAT в сочетании с частными адресами IPv4 оказался полезным методом сохранения общедоступных IPv4-адресов.
Один общедоступный IPv4-адрес может быть использован сотнями, даже тысячами устройств, каждый из которых имеет частный IPv4-адрес.
NAT имеет дополнительное преимущество, заключающееся в добавлении степени конфиденциальности и безопасности в сеть, поскольку он скрывает внутренние IPv4-адреса из внешних сетей.
**3. Что такое HTTP и HTTPS, в чем их отличия?**
__HTTP__ _(от англ. HyperText Transfer Protocol протокол передачи гипертекста)_ это прикладной протокол передачи данных в сети.
На текущий момент используется для получения информации с веб-сайтов.
Протокол HTTP основан на использовании технологии «клиент-сервер»: клиент, отправляющий запрос, является инициатором соединения; сервер, получающий запрос, выполняет его и отправляет клиенту результат.
__HTTPS__ _(от англ. HyperText Transfer Protocol Secure безопасный протокол передачи гипертекста)_ это расширение протокола HTTP, поддерживающее шифрование посредством криптографических протоколов __SSL__ и __TLS__.
Чем отличаются HTTP от HTTPS:
- HTTPS не является отдельным протоколом передачи данных, а представляет собой расширение протокола HTTP с надстройкой шифрования;
- передаваемые по протоколу HTTP данные не защищены, HTTPS обеспечивает конфиденциальность информации путем ее шифрования;
- HTTP использует порт 80, HTTPS порт 443.
**4. Что такое SSL и TSL, есть ли между ними отличия?**
__SSL__ или слой защищенных сокетов было оригинальным названием протокола, который разработала компания Netscape в середине 90-х.
SSL 1.0 никогда не был публично доступным, а в версии 2.0 были серьезные недостатки.
Протокол SSL 3.0, выпущенный в 1996, был полностью переделан и задал тон следующей стадии развития.
Когда следующую версию протокола выпустили в 1999, ее стандартизировала специальная рабочая группа проектирования сети Интернет и дала ей новое название: защита транспортного уровня, или TLS.
Как говорится в TLS-документации, «разница между этим протоколом и SSL 3.0 не критичная».
TLS и SSL формируют постоянно обновляемую серию протоколов, и их часто объединяют под названием __SSL/TLS__.
Протокол TLS шифрует интернет-трафик любого вида. Самый распространенный вид веб-трафик.
Вы знаете, когда ваш браузер устанавливает соединение по TLS если ссылка в адресной строке начинается с «https».
TLS также используется другими приложениями например, в почте и системах телеконференций.
Самый безопасный метод шифрования это асимметричное шифрование. Для этого требуется 2 ключа, 1 публичный и 1 приватный.
Это файлы с информацией, чаще всего очень большие числа.
Механизм сложный, но если попросту, вы можете использовать публичный ключ, чтобы шифровать данные, но вам нужен приватный ключ, чтобы расшифровывать их.
Два ключа связаны с помощью сложной математической формулы, которую сложно хакнуть.
Так как в асимметричном шифровании применяются сложные математические расчеты, нужно много вычислительных ресурсов.
TLS решает эту проблему, используя асимметричное шифрование только в начале сессии, чтобы зашифровать общение между сервером и клиентом.
Сервер и клиент должны договориться об одном ключе сессии, который они будут вдвоем использовать, чтобы зашифровать пакеты данных.