Компьютерные сети

Что это такое

Сеть — это набор машин, которые договорились, как передавать друг другу небольшие куски данных. Куски эти называются пакетами, схемой адресации служит IP, два главных способа передать поток таких кусков — TCP и UDP, а вести на одной машине много разговоров сразу позволяет порт. Имя в адрес превращает система имён DNS, и происходит это до того, как начнётся всё перечисленное.

Почему это важно

Каждый запрос вашей программы покидает процесс и пересекает этот слой — и именно здесь обычно и прячется задержка. Эндпоинт может быть эффективен в каждой строке своего кода и всё равно занимать 400 миллисекунд, потому что ждёт четыре круговых обхода. Знание слоя подсказывает, какое число атаковать: соединение, поиск имени или полезную нагрузку, — и вдобавок делает словарь честным: «тайм-аут» здесь означает конкретную вещь, а «в соединении отказано» — другую, и исправления у них разные.

Что в этом треке

  1. Пакеты, TCP/IP и порты (01-cs-fundamentals/03-computer-networks/01-packets-tcp-ip-and-ports) — что на самом деле путешествует, как над ненадёжными пакетами строится надёжный поток и как порты разделяют разговоры.
  2. DNS и путь запроса (01-cs-fundamentals/03-computer-networks/02-dns-and-the-path-of-a-request) — разрешение имени, его кэширование и подсчёт круговых обходов до первого байта ответа.

Предварительные требования

Нет.

Что читать дальше

  • Основы сетей (HTTP / DNS / TLS) (06-cloud-devops/10-networking-fundamentals-http-dns-tls) — прикладные протоколы поверх этих пакетов, до которых эта запись намеренно не доходит.
  • Операционные системы (01-cs-fundamentals/15-operating-systems) — сокет здесь оказывается файловым дескриптором, поэтому этот слой встречается с тем на системном вызове.
  • Конкурентность и асинхронное программирование (01-cs-fundamentals/05-concurrency-async-programming) — почему ожидание сети — классический случай для неблокирующего кода.