Глоссарий — Computer Networks для Junior
Справочник ключевых терминов курса Computer Networks для Junior.
Адресация и идентификация
IP
IP (Internet Protocol)Сетевой протокол уровня L3 (Network) в стеке TCP/IP, отвечающий за маршрутизацию пакетов между host'ами через несколько сетей. Connectionless и unreliable: не гарантирует доставку, порядок и отсутствие дубликатов -- это задача транспортного уровня (TCP). Каждый пакет содержит source и destination IP-адреса, по которым промежуточные роутеры решают, в какой интерфейс отправить пакет дальше (longest prefix match). Существуют две версии: IPv4 (32 бита, ~4.3 млрд адресов, исчерпан) и IPv6 (128 бит, фактически неисчерпаем). Для DE и backend важно: IP -- это адрес интерфейса, а не машины (у host'а может быть несколько IP), и в большинстве случаев приватный IP сидит за NAT.
IPv4
IPv4 (Internet Protocol version 4)Четвёртая версия IP, 32-битный адрес в dotted decimal нотации (192.168.1.10). Адресное пространство ~4.3 млрд, исчерпано в 2011 году на уровне IANA. Структура заголовка: 20 байт минимум (Version, IHL, TOS, Total Length, Identification, Flags+Fragment Offset, TTL, Protocol, Header Checksum, Src IP, Dst IP, опции). MTU обычно 1500 байт на Ethernet. Несмотря на дефицит, IPv4 до сих пор доминирует благодаря NAT: миллионы private IP за одним публичным. Для разработчика типичные сценарии IPv4 -- 10.0.0.0/8 во внутренних сетях, 127.0.0.1 как loopback, 0.0.0.0 для bind на все интерфейсы.
IPv6
IPv6 (Internet Protocol version 6)Шестая версия IP с 128-битным адресом (~3.4 * 10^38 адресов). Записывается как 8 групп hex по 16 бит через двоеточие: 2001:0db8:85a3:0000:0000:8a2e:0370:7334; разрешено сокращение нулей (2001:db8:85a3::8a2e:370:7334). Не имеет broadcast (заменён на multicast), нет fragmentation на роутерах (только на host'е), упрощённый заголовок, встроенный IPsec в спецификации. Адаптация постепенная: dual-stack (IPv4 + IPv6 параллельно), tunneling. На практике большинство современных мобильных сетей и облачных провайдеров уже IPv6-native, но в legacy DC всё ещё IPv4.
MAC address
MAC address (Media Access Control)48-битный (6 байт) аппаратный адрес сетевого интерфейса L2 (Data Link). Записывается как 6 hex-октетов через двоеточие или дефис: aa:bb:cc:dd:ee:ff. Первые 3 байта (OUI) идентифицируют производителя, последние 3 -- уникальный номер интерфейса. В отличие от IP, MAC не маршрутизируется -- работает только внутри одного broadcast-домена (LAN). Frame на L2 содержит source MAC + destination MAC. Switch ведёт MAC-таблицу: какой MAC за каким портом. MAC может быть изменён программно (spoofing) -- частая атака для обхода фильтров.
CIDR
CIDR (Classless Inter-Domain Routing)Способ обозначения подсети через slash-нотацию: 192.168.1.0/24 значит, что первые 24 бита -- адрес сети, последние 8 -- хосты. Заменил исторические классы A/B/C (с фиксированными границами /8, /16, /24). CIDR позволяет создавать подсети любой длины: /22 это 1024 адреса, /29 это 8 адресов (6 usable, 2 зарезервированы под network и broadcast). Маска /24 равна 255.255.255.0. Для routing table CIDR используется в longest prefix match: маршрут /28 победит /24 при выборе. На практике инженер пишет /24, /22, /16 для VPC subnets в AWS/GCP.
Subnet
Subnet (subnetwork)Логическое разделение IP-сети на меньшие сегменты через subnet mask. Все host'ы внутри подсети могут общаться напрямую на L2 без роутера; для выхода за пределы нужен default gateway. Mask определяет границу network/host битов: 255.255.255.0 = /24 = 256 адресов (254 usable). Subnetting нужен для изоляции (production vs staging), безопасности (firewall между subnets), масштабирования (broadcast не уходит за subnet), оптимизации (минимизация broadcast domain). В AWS VPC subnet -- это базовый строительный блок, привязанный к AZ.
Gateway
Default GatewayIP-адрес роутера, через который host отправляет пакеты в сети, не входящие в его собственную подсеть. Когда destination IP не попадает ни под один маршрут в routing table, пакет уходит в default gateway (маршрут 0.0.0.0/0). В типичном home Wi-Fi gateway -- это сам router (обычно 192.168.1.1 или 192.168.0.1). В корпоративной сети gateway часто отдельный L3-switch или firewall. На Linux/macOS gateway показывает netstat -rn или ip route show default.
NAT
NAT (Network Address Translation)Механизм трансляции IP-адресов на границе сети, чаще всего из приватных (RFC 1918) в публичные. Когда пакет из 192.168.1.42 идёт в интернет, router заменяет src IP на свой публичный, запоминает соответствие (source IP + port -> public IP + port) в NAT-таблице и подменяет обратно для ответных пакетов. Это позволяет тысячам приватных host'ов делить один публичный IP. Типы: full cone (любой внешний может слать на mapped port), restricted cone, port-restricted, symmetric (для каждого dst создаётся отдельный mapping -- ломает P2P). NAT усложняет inbound-соединения -- отсюда port forwarding, UPnP, hole punching, STUN/TURN.
Port
Port (TCP/UDP port)16-битный (0-65535) идентификатор endpoint на host'е, по которому ОС различает, в какое приложение отдавать пакет. Адрес соединения = IP + port (socket). Well-known ports 0-1023 (требуют root для bind), registered 1024-49151, ephemeral 49152-65535 (выделяются клиенту динамически). Стандартные: 22 (SSH), 53 (DNS), 80 (HTTP), 443 (HTTPS), 3306 (MySQL), 5432 (PostgreSQL), 6379 (Redis), 9092 (Kafka). Один порт = одно слушающее приложение на интерфейсе. Несколько клиентов могут одновременно подключаться к одному серверному порту -- ОС различает их по 4-tuple (src IP, src port, dst IP, dst port).
Socket
Socket (Berkeley socket)Абстракция в ОС, представляющая endpoint сетевого соединения. Уникально идентифицируется 4-tuple: (local IP, local port, remote IP, remote port) для TCP, или 2-tuple для listening UDP. Berkeley API даёт системные вызовы: socket() создать, bind() привязать к адресу, listen() начать слушать (TCP), accept() принять входящее соединение, connect() подключиться, send/recv обменяться данными, close() закрыть. На уровне ядра socket -- это file descriptor, поэтому в Unix всё работает через read/write/poll/epoll. В Python обёртка -- модуль socket в stdlib.
Транспортный уровень: TCP и UDP
TCP
TCP (Transmission Control Protocol)Транспортный протокол L4, обеспечивающий надёжную, упорядоченную, потоковую передачу данных между двумя endpoint'ами. Connection-oriented: сначала three-way handshake (SYN, SYN-ACK, ACK), потом обмен сегментами с sequence numbers и ACK, в конце четырёхэтапное закрытие (FIN, ACK, FIN, ACK). Гарантирует: данные дойдут (retransmission при потере), в порядке (по sequence number), без дублей (по ack), и с flow + congestion control. Header ~20 байт. На TCP работают HTTP/1.1, HTTP/2, SSH, SMTP, IMAP, FTP, большинство БД. Цена надёжности: handshake latency (1 RTT), head-of-line blocking, в плохих сетях ретрансмиты убивают throughput.
UDP
UDP (User Datagram Protocol)Транспортный протокол L4, connectionless и unreliable. Не делает handshake, не гарантирует доставку, порядок и отсутствие дубликатов -- просто шлёт datagrams. Header ровно 8 байт: src port, dst port, length, checksum. Каждый datagram самодостаточен. Используется там, где важна latency и допустимы потери: DNS (короткий запрос + ответ), VoIP / video calls (потеря кадра лучше задержки), streaming media, online games, NTP, DHCP, QUIC (поверх UDP реализован свой reliability). При необходимости reliability (как в QUIC) её реализуют на application layer.
Three-way handshake
TCP Three-way handshakeПроцесс установки TCP-соединения через обмен тремя пакетами: (1) клиент шлёт SYN с initial sequence number ISN_c, (2) сервер отвечает SYN-ACK с ISN_s и ack = ISN_c+1, (3) клиент шлёт ACK = ISN_s+1. После этого соединение в состоянии ESTABLISHED и можно отправлять данные. Зачем три пакета: чтобы обе стороны убедились, что и приём, и отправка работают двусторонне. ISN выбирается псевдослучайно для защиты от SYN-spoofing. Latency handshake'а = 1 RTT -- это причина, по которой TCP медленнее UDP при коротких запросах. Атака SYN flood: посылается много SYN без завершения handshake, забивая очередь полусоединений.
Sequence number
Sequence Number (TCP)32-битный счётчик байт в TCP, по которому получатель собирает поток в правильном порядке. Начальное значение (ISN) выбирается псевдослучайно при handshake. Каждый сегмент имеет seq = байт-номер первого байта данных в сегменте. Получатель шлёт ACK с номером следующего ожидаемого байта. Если приходят сегменты с разрывом (пропуск), получатель буферизирует их и шлёт duplicate ACK -- это сигнал отправителю об потере и триггер fast retransmit. После 4 ГБ передачи sequence number wraps around (через 2^32 байт).
ACK
ACK (Acknowledgement)Подтверждение получения данных в TCP. ACK number в заголовке = номер следующего ожидаемого байта. Это cumulative ACK: ACK 1000 означает 'все байты до 999 включительно получены'. ACK обычно идёт piggyback с данными в обратном направлении или как pure ACK без payload. Если отправитель не получил ACK в течение RTO (retransmission timeout), он повторно отправит сегмент. Selective ACK (SACK, RFC 2018) -- расширение, в котором получатель указывает диапазоны полученных out-of-order сегментов, чтобы отправитель не ретрансмитил уже доставленные данные.
Sliding window
Sliding Window (TCP)Механизм потокового управления передачей, при котором отправитель может слать сразу несколько unacknowledged сегментов в пределах окна (window size, передаётся в каждом ACK). После получения ACK окно сдвигается вправо. Это позволяет утилизировать пропускную способность канала: вместо stop-and-wait (один пакет -- один ACK) можно держать в полёте BDP (bandwidth-delay product) байт. Window size в TCP header -- 16 бит (макс 64 KB), для высокоскоростных сетей используется TCP window scaling option (множитель 2^n).
Flow control
TCP Flow controlМеханизм, не дающий быстрому отправителю переполнить буфер медленного получателя. Реализован через receive window: получатель в каждом ACK сообщает, сколько ещё байт он готов принять. Если приложение медленно читает данные из буфера, окно уменьшается. При window = 0 отправитель останавливается и периодически шлёт window probe, пока получатель не освободит место. Это решает локальную проблему 'producer faster than consumer'. Отдельно от flow control работает congestion control, который заботится о состоянии сети между host'ами.
Congestion control
TCP Congestion controlМеханизм, не дающий отправителю переполнить промежуточные роутеры на пути к получателю. Реализован через congestion window (cwnd), которое растёт при успешных ACK и резко уменьшается при потерях (interpret packet loss as congestion). Классические алгоритмы: slow start (экспоненциальный рост cwnd с 1 MSS), congestion avoidance (линейный рост после порога ssthresh), fast retransmit (по 3 dup ACK), fast recovery. Современные: CUBIC (default в Linux), BBR (Google), DCTCP (для DC). При потерях TCP замедляется -- именно поэтому plot throughput имеет 'зубцы пилы'.
Segment
TCP SegmentЕдиница данных TCP, состоящая из TCP-заголовка (20-60 байт) и payload. Сегмент инкапсулируется в IP-пакет. Максимальный размер payload -- MSS (Maximum Segment Size), обычно = MTU - 40 (IP + TCP заголовки) = 1460 байт для Ethernet с MTU 1500. MSS согласовывается во время handshake. Если приложение пишет в socket 100 KB, TCP разрежет это на ~70 сегментов. Сегментация позволяет проходить через сети с разным MTU без fragmentation на L3.
Datagram
UDP DatagramЕдиница данных UDP: 8 байт заголовка + payload. Каждый datagram независим, шлётся как один IP-пакет (если влезает в MTU) или фрагментируется на L3. Максимальный размер UDP datagram теоретически 65507 байт (65535 - 20 IP - 8 UDP), но на практике лучше держать < MTU чтобы избежать fragmentation. Если фрагментирован, потеря одного фрагмента = потеря всего datagram. В отличие от TCP segment, у datagram нет sequence number и нет ACK -- application layer должен сам это реализовать, если нужно.
MTU
MTU (Maximum Transmission Unit)Максимальный размер payload на L2 frame в байтах. На Ethernet стандарт 1500 байт (всего frame 1518 с заголовками). Jumbo frames -- до 9000 байт, используются в DC для повышения throughput. PPPoE снижает MTU до 1492 из-за заголовка. Если IP-пакет больше MTU, он фрагментируется (IPv4) или дроп с ICMP 'Fragmentation Needed' (IPv6). MTU mismatch -- частая проблема: туннели (VPN, GRE) уменьшают эффективный MTU; если PMTUD не работает (ICMP заблокирован), получается black hole -- пакеты пропадают молча.
Link layer: Ethernet и ARP
Ethernet
Ethernet (IEEE 802.3)Семейство технологий L2 для проводных LAN, стандартизированных IEEE 802.3. Современные скорости: 1 GbE, 10 GbE, 25/40/100/400 GbE в DC. Frame состоит из: preamble (7 B), SFD (1 B), dst MAC (6 B), src MAC (6 B), EtherType (2 B, например 0x0800 для IPv4, 0x86DD для IPv6, 0x0806 для ARP), payload (46-1500 B), FCS (4 B, CRC). На физическом уровне -- кабели cat5e/cat6/cat6a (twisted pair), оптика (SFP+, QSFP). Полудуплекс с CSMA/CD устарел -- современный switched Ethernet работает full duplex.
Frame
Ethernet FrameЕдиница данных L2 в Ethernet-сети. Структура: dst MAC, src MAC, EtherType (тип payload, например IPv4), payload (внутри которого обычно IP-пакет), FCS (Frame Check Sequence -- CRC-32 для обнаружения ошибок). Frame передаётся между host'ами в одном broadcast-домене (без роутинга). Switch смотрит dst MAC и форвардит frame только в нужный порт (если знает MAC) или флудит во все (если не знает -- unknown unicast flooding). Размер frame'а: минимум 64 байта (с padding), максимум 1518 (или 9018 для jumbo).
Packet
IP PacketЕдиница данных L3 (IP). Состоит из IP-заголовка (20-60 байт в IPv4, 40 байт в IPv6) и payload (обычно TCP segment или UDP datagram). Содержит src IP, dst IP, TTL/Hop Limit, protocol number (6=TCP, 17=UDP, 1=ICMP). Маршрутизаторы смотрят на dst IP и форвардят пакет согласно routing table. TTL уменьшается на каждом hop -- защита от бесконечных циклов. В IPv4 пакет может фрагментироваться на роутерах при превышении MTU; в IPv6 фрагментация только на отправителе (через PMTUD).
ARP
ARP (Address Resolution Protocol)Протокол L2-L3 (формально между уровнями), который разрешает IP-адрес в MAC-адрес внутри одной подсети. Когда host хочет отправить пакет соседу с IP 192.168.1.10, он сначала шлёт broadcast 'who has 192.168.1.10? tell 192.168.1.1', и нужный host отвечает unicast'ом 'I have 192.168.1.10, my MAC is aa:bb:cc:dd:ee:ff'. Результат кэшируется в ARP-таблице (ip neigh на Linux, arp -a). Gratuitous ARP -- host анонсирует свой MAC сам, без запроса, для обновления соседних кэшей (используется при failover IP). Уязвим к ARP poisoning -- атакующий шлёт фейковые ARP-ответы и перехватывает трафик.
Switch
Network Switch (L2)Сетевое устройство, форвардящее Ethernet frames между портами на основе MAC-адресов. Поддерживает MAC-таблицу (port -> MAC), которую заполняет наблюдая за src MAC во входящих frames (learning). При получении frame: если dst MAC известен в таблице -- шлёт только в нужный порт (unicast), если неизвестен -- флудит во все порты (unknown unicast flooding), если broadcast (ff:ff:ff:ff:ff:ff) -- флудит во все. Не уменьшает broadcast domain -- весь switch это один broadcast domain (если нет VLAN). Современные L3 switch'и умеют ещё и роутить на основе IP.
Hub
Network HubУстаревшее сетевое устройство L1, повторяющее любой входящий сигнал на все остальные порты (электрический повторитель). Не понимает MAC-адресов -- просто dumb repeater. Все host'ы делят один collision domain: если двое говорят одновременно, происходит коллизия и CSMA/CD заставляет ждать. Hub передаёт весь трафик во все порты -- значит, любой подключённый может сниффать чужие frames. Заменён switch'ами 20 лет назад. Сегодня встретить hub можно только в учебниках или старом оборудовании.
Router
Router (L3 routing device)Устройство L3, форвардящее IP-пакеты между разными подсетями на основе routing table. Каждый интерфейс роутера в своей подсети. При получении пакета: проверяет dst IP, ищет в routing table longest prefix match, уменьшает TTL на 1, пересылает в соответствующий next hop. На стыке подсетей роутер выступает как default gateway для host'ов. Делает NAT, фильтрацию, QoS. Дома 'роутер' обычно совмещает функции router + switch + access point + DHCP server + DNS forwarder в одном корпусе.
VLAN
VLAN (Virtual LAN, IEEE 802.1Q)Технология логического разделения одного физического switch'а на несколько изолированных broadcast-доменов. Каждый VLAN имеет ID (1-4094) и работает как отдельная LAN. Tagged port (trunk) переносит трафик нескольких VLAN'ов с 802.1Q-тегом (4 байта между src MAC и EtherType). Untagged port (access) принадлежит одному VLAN -- host'у не видно тэгов. Используется для изоляции (production / staging / dev), безопасности (отделить guests Wi-Fi от internal), оптимизации (уменьшить размер broadcast domain). Между VLAN -- только через L3 routing.
Сетевые модели
OSI model
OSI Model (Open Systems Interconnection)Семиуровневая референсная модель ISO/IEC 7498-1: L1 Physical (биты по проводу), L2 Data Link (frames, MAC), L3 Network (packets, IP), L4 Transport (segments/datagrams, TCP/UDP), L5 Session (логические сессии -- redko используется), L6 Presentation (encoding, encryption -- редко), L7 Application (HTTP, SMTP, DNS). На практике L5-L6 чаще объединяют с L7. Модель полезна для рассуждений и общения ('это работает на L4' = transport), но реальный стек -- TCP/IP, у которого 4 уровня. Запоминается мнемоникой 'Please Do Not Throw Sausage Pizza Away'.
TCP/IP stack
TCP/IP StackЧетырёхуровневая практическая модель: Link (L2-L1 OSI: Ethernet, Wi-Fi, ARP), Internet (L3: IP, ICMP), Transport (L4: TCP, UDP, QUIC), Application (L5-7 OSI: HTTP, DNS, SSH, SMTP). Реальный стек, используемый в Unix-системах. Каждый уровень предоставляет сервис верхнему через интерфейс (socket API между Transport и Application). Пакет инкапсулируется сверху вниз: HTTP -> TCP segment -> IP packet -> Ethernet frame -> биты. На приёмной стороне раскапсулируется обратно.
Encapsulation
Encapsulation (Network)Процесс обёртывания данных одного уровня в заголовок другого. HTTP-запрос (Application) кладётся в TCP-сегмент (Transport: добавляет TCP header), который кладётся в IP-пакет (Network: добавляет IP header), который кладётся в Ethernet frame (Link: добавляет Ethernet header + FCS). Каждый уровень не знает о деталях верхних -- IP не знает, что внутри TCP, а TCP не знает, что внутри HTTP. На принимающей стороне идёт de-encapsulation: уровни последовательно снимают свои заголовки и передают payload наверх. Это даёт layered architecture: можно менять реализацию L4 (TCP -> QUIC), не трогая L3.
DNS
DNS
DNS (Domain Name System)Иерархическая распределённая система, разрешающая доменные имена (example.com) в IP-адреса. Работает поверх UDP (порт 53) для коротких запросов, TCP для больших ответов и zone transfer. Структура иерархическая: root (.), TLD (com, org, ru), authoritative servers конкретного домена. Запрос проходит через recursive resolver (8.8.8.8, 1.1.1.1, провайдерский), который ходит по иерархии. Резолв кэшируется на нескольких уровнях по TTL. DNS -- единственная критическая инфраструктура интернета: если ляжет, никто не достучится до сайтов (хотя IP-адреса работают).
A record
A Record (DNS)DNS-запись, отображающая доменное имя в IPv4-адрес. Самая распространённая запись. Может быть несколько A records на одно имя (DNS round-robin) -- resolver вернёт все, клиент выберет одну. TTL определяет, как долго resolver может кэшировать ответ (от секунд до дней). Пример: example.com -> 93.184.216.34. Для IPv6 аналог -- AAAA-запись. На практике dig +short example.com покажет все A-записи.
AAAA record
AAAA Record (DNS)DNS-запись, отображающая доменное имя в IPv6-адрес. Аналог A-записи для IPv6. Имя 'AAAA' (читается 'quad-A') потому что IPv6 в 4 раза длиннее IPv4 (128 vs 32 бит). Если у домена есть и A и AAAA записи -- это dual-stack, клиент с IPv6-стеком предпочтёт AAAA (Happy Eyeballs algorithm), но fallback на IPv4 при проблемах. dig AAAA example.com покажет IPv6-адрес.
CNAME
CNAME (Canonical Name)DNS-запись, создающая алиас одного домена на другой. www.example.com CNAME example.com значит 'www -- это синоним example.com, иди резолвь его'. Resolver следует цепочке CNAME, пока не упрётся в A или AAAA. Ограничения: нельзя класть CNAME на apex домена (example.com сам по себе), нельзя сочетать с другими записями на том же имени (например, MX и CNAME несовместимы). Активно используется в CDN: www.mysite.com CNAME mysite.cdn-provider.net.
MX record
MX Record (Mail Exchanger)DNS-запись, указывающая mail-сервер для домена. Содержит priority (меньше -- выше приоритет) и hostname почтового сервера. При отправке письма на [email protected] отправитель ищет MX-записи example.com и шлёт SMTP на сервер с минимальным priority. Если он не отвечает -- на следующий по приоритету. Несколько MX обеспечивают отказоустойчивость. Hostname в MX должен резолвиться в A/AAAA (не CNAME).
TTL
TTL (Time To Live)В контексте DNS: время в секундах, в течение которого resolver может кэшировать запись. Низкий TTL (60-300 сек) даёт быстрый rollout изменений, но повышает нагрузку на authoritative DNS. Высокий TTL (3600-86400) снижает нагрузку, но изменения распространяются медленно. Перед миграцией DNS заранее снижают TTL до 60. Помимо DNS, TTL есть в IP-заголовке -- счётчик max hops для предотвращения loops, уменьшается на 1 на каждом роутере.
HTTP и протоколы прикладного уровня
HTTP
HTTP (HyperText Transfer Protocol)Прикладной протокол клиент-серверной модели, основа Web. Stateless: каждый запрос самодостаточен. Версии: HTTP/1.1 (1997, текстовый, до сих пор основной для server-to-server), HTTP/2 (2015, бинарный, multiplexing поверх одного TCP), HTTP/3 (2022, поверх QUIC/UDP). Работает поверх TCP (80) или TLS (443). Структура запроса: method + path + headers + body. Структура ответа: status code + headers + body. Методы: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS.
HTTPS
HTTPS (HTTP over TLS)HTTP, обёрнутый в TLS-туннель. Поверх TCP делается TLS-handshake (обмен сертификатами, согласование cipher, выработка симметричного ключа), затем HTTP идёт по зашифрованному каналу. Защищает от пассивного прослушивания, MITM и tampering. Default-порт 443. Browsers с 2018 года помечают HTTP-сайты как 'Not Secure'. Современный web почти полностью HTTPS -- HTTP редиректится на HTTPS через 301 + HSTS-header.
HTTP/2
HTTP/2 (RFC 7540)Версия HTTP с 2015 года, бинарный формат вместо текстового. Главные улучшения: multiplexing -- много запросов параллельно в одном TCP-соединении (без head-of-line на application layer, но остаётся на TCP), HPACK сжатие заголовков, server push (deprecated в большинстве browsers), приоритеты streams. Решает проблему HTTP/1.1, где для параллелизма открывали 6 соединений на домен. В реальности достиг широкого adoption -- 50%+ web. Минус: head-of-line blocking на уровне TCP всё ещё убивает performance при потерях.
HTTP/3
HTTP/3 (RFC 9114)Версия HTTP с 2022 года, работает поверх QUIC (UDP-based транспорт с встроенной TLS 1.3) вместо TCP. Решает head-of-line blocking на транспортном уровне: потеря пакета в одном stream не блокирует другие. Connection migration: можно сменить сеть (Wi-Fi -> 4G) без переустановки соединения. 0-RTT для повторных подключений. Сейчас 25%+ web, активно используется Google, Cloudflare. Минус: некоторые firewalls/NAT блокируют UDP, fallback на HTTP/2 нужен.
QUIC
QUIC (Quick UDP Internet Connections, RFC 9000)Транспортный протокол поверх UDP, разработанный Google, стандартизирован IETF в 2021. Объединяет функции TCP (надёжность, congestion control), TLS (шифрование) и часть HTTP/2 (multiplexing) в одном протоколе. Преимущества: 1-RTT handshake (или 0-RTT для повторов), per-stream reliability (нет head-of-line), connection migration, всегда зашифрован. Является транспортом для HTTP/3. По метрикам Google -- ускорение 3-8% для коротких запросов, ещё больше в плохих сетях.
Multiplexing
Multiplexing (HTTP/2, HTTP/3)Возможность отправлять несколько логических потоков (streams) параллельно через одно физическое соединение. В HTTP/1.1 на каждый запрос нужно своё TCP-соединение или очередь (head-of-line blocking). В HTTP/2 multiplexing на одном TCP -- много параллельных streams. В HTTP/3/QUIC streams независимы и на транспортном уровне -- потеря пакета в одном не влияет на другие. Это решает проблему параллельной загрузки ресурсов веб-страницы (CSS, JS, images) без open-and-close сотен соединений.
Head-of-line blocking
Head-of-Line (HoL) BlockingСитуация, когда первый элемент очереди блокирует обработку всех последующих. В HTTP/1.1: запросы шлются последовательно (или браузер открывает 6 параллельных соединений). В HTTP/2 решена на application layer (multiplexing), но осталась на транспортном TCP: потеря одного пакета задерживает все streams, потому что TCP ждёт ретрансмит чтобы передать данные in-order. В HTTP/3/QUIC решена полностью: каждый stream имеет независимый ordering.
TLS и безопасность
TLS
TLS (Transport Layer Security)Криптографический протокол, обеспечивающий confidentiality, integrity и authentication между клиентом и сервером. Версии: TLS 1.2 (2008, до сих пор широко), TLS 1.3 (2018, упрощённый handshake -- 1 RTT, обязательное forward secrecy). TLS 1.0/1.1 deprecated. Handshake TLS 1.3: ClientHello (cipher suites + key share) -> ServerHello (выбор + сертификат) -> Finished, далее данные шифруются. Сертификат подписан CA из доверенного root store ОС. Self-signed cert в production -- красный флаг.
SSL
SSL (Secure Sockets Layer)Устаревший предшественник TLS, разработан Netscape в 1990-х (SSL 2.0 в 1995, SSL 3.0 в 1996). SSL 2.0 и 3.0 deprecated (последний -- через атаку POODLE в 2014). С 1999 заменён TLS 1.0, далее TLS 1.1/1.2/1.3. В разговорной речи 'SSL' и 'TLS' часто используются как синонимы, но технически правильно говорить TLS. 'SSL certificate' -- это X.509-сертификат для TLS, название историческое.
Certificate
X.509 CertificateЭлектронный документ, привязывающий публичный ключ к идентификатору (домен, организация). Структура: subject (на кого выдан), issuer (кто выдал, обычно CA), validity period, public key, extensions (SAN -- alternative names, key usage), и подпись issuer'а. Browser проверяет: подпись валидна, не expired, hostname совпадает с SAN, не в CRL/OCSP revocation. Цепочка доверия: server cert -> intermediate CA -> root CA (в trust store ОС). Получить можно через Let's Encrypt бесплатно.
CA
CA (Certificate Authority)Организация, выпускающая сертификаты и подписывающая их своим приватным ключом. Root CA -- топ цепочки, их публичные ключи зашиты в ОС/browser. Когда CA подписывает сертификат сервера, клиент может верифицировать подпись по root key из своего trust store. Известные CA: Let's Encrypt (бесплатно, автоматизация через ACME), DigiCert, GlobalSign, Sectigo. Корпоративные внутренние CA выдают сертификаты для internal сервисов -- их root cert нужно добавить в trust store. Компрометация root CA -- катастрофа (например, DigiNotar в 2011).
PKI
PKI (Public Key Infrastructure)Совокупность ролей, политик, аппаратуры, ПО и процедур для управления цифровыми сертификатами и публично-ключевой криптографией. Включает CA (выпуск сертификатов), RA (registration authority -- верификация запросов), CRL/OCSP (revocation), trust stores, политики использования. Чисто web PKI -- иерархия CA, доверие которой зашито в browser. Корпоративный PKI -- внутренние CA для service-to-service mTLS, code signing, S/MIME. Управление приватным ключом root CA -- задача с HSM (Hardware Security Module) и многоступенчатой аутентификацией.
MITM
MITM (Man-in-the-Middle)Атака, при которой злоумышленник встраивается между клиентом и сервером, перехватывая и (опционально) модифицируя трафик. Способы: ARP poisoning (подмена ARP), DNS spoofing (фейковый IP в DNS-ответе), захват промежуточного хопа, фейковая Wi-Fi точка. TLS делает MITM практически невозможным: сертификат сервера не пройдёт верификацию у клиента, потому что подписан другим CA. Корпоративные SSL inspection proxy (Zscaler, Palo Alto) делают 'легитимный MITM' путём установки своего root CA на endpoint.
DDoS
DDoS (Distributed Denial of Service)Атака, направленная на исчерпание ресурсов жертвы (bandwidth, CPU, соединения) множеством скоординированных источников (botnet, amplification). Типы: volumetric (затопление трафиком, измеряется в Gbps), protocol (SYN flood, fragmentation, измеряется в Mpps), application layer (HTTP flood, slowloris). Защита: anti-DDoS провайдеры (Cloudflare, AWS Shield, Akamai), rate-limiting, blackholing атакующих IP, CDN. Современные DDoS могут превышать 1 Tbps.
Firewall
FirewallУстройство или ПО, фильтрующее сетевой трафик по правилам (allow/deny по IP, port, protocol). Stateless: смотрит каждый пакет независимо (быстрее, проще, меньше defenсе). Stateful: отслеживает состояние соединений (различает new/established/related, может ловить отклонения). Примеры реализаций: iptables/nftables (Linux netfilter), Windows Firewall, hardware Cisco/Palo Alto, облачные Security Groups (AWS), Network ACLs. Также есть application-layer firewall (WAF) для HTTP -- режут SQL injection, XSS.
VPN
VPN (Virtual Private Network)Зашифрованный туннель между двумя сетевыми точками, создающий иллюзию прямого подключения к удалённой сети. Использует: IPsec (стандарт, сложен), OpenVPN (TLS-based, гибкий), WireGuard (новый, быстрый, минималистичный), L2TP/PPTP (устаревшие). Сценарии: remote access (сотрудник к корпсети), site-to-site (соединение офисов), consumer VPN (анонимизация, обход блокировок). Split tunneling -- разделение трафика: что идёт в туннель, что в обычный интернет.
WireGuard
WireGuardСовременный VPN-протокол (2016, mainline Linux kernel с 5.6 в 2020). Минималистичный: ~4000 строк кода (vs ~600k у OpenVPN), что упрощает аудит. Использует современную криптографию: ChaCha20 + Poly1305 для шифрования, Curve25519 для key exchange, BLAKE2s для hashing. UDP-only, не attempts to look like HTTP. Конфигурация декларативная: peer = public key + endpoint + allowed IPs. Быстрее IPsec и OpenVPN на одинаковом железе. Stateless по дизайну -- работает за NAT через keepalive.
IPsec
IPsec (Internet Protocol Security)Набор протоколов для шифрования и аутентификации IP-пакетов на L3. Состоит из: AH (Authentication Header -- integrity без encryption), ESP (Encapsulating Security Payload -- encryption + integrity), IKE (Internet Key Exchange -- согласование ключей). Режимы: transport (шифруется только payload) и tunnel (весь IP-пакет внутри нового, для site-to-site VPN). Стандарт для enterprise VPN, реализован во всех ОС. Минусы: сложность настройки, проблемы с NAT (обходятся через NAT-T).
ARP poisoning
ARP Poisoning (ARP Spoofing)Атака на L2, при которой злоумышленник шлёт фейковые ARP-ответы в локальную сеть, ассоциируя свой MAC с IP жертвы (часто -- gateway). После этого трафик жертв идёт через атакующего, который видит/модифицирует его (MITM). Защита: статические ARP-записи для критичных host'ов, DAI (Dynamic ARP Inspection) на switch'ах, мониторинг (arpwatch). На свич, который видит несколько ARP-ответов на один IP, можно настроить алерт.
DNS spoofing
DNS Spoofing (DNS Cache Poisoning)Атака, при которой атакующий инжектит фейковый DNS-ответ в кэш resolver'а (или клиента), чтобы перенаправить трафик на свой сервер. Способы: race condition на ответе (Kaminsky 2008), компрометация authoritative server, MITM с подменой ответа. Защита: DNSSEC (криптографическая подпись DNS-записей), DoH/DoT (DNS через TLS, против MITM), random source ports (против Kaminsky-style).
Packet sniffing
Packet SniffingПерехват и анализ сетевых пакетов на интерфейсе. Требует raw socket access (root на Linux). Инструменты: tcpdump (CLI), Wireshark (GUI), tshark. На switched LAN видишь только свой трафик + broadcast (если не настроен port mirroring). На Wi-Fi monitor mode видит весь трафик в эфире (но шифрованный, без ключа). TLS-трафик сниффится, но contents зашифрованы -- видны только metadata (адреса, порты, SNI). Используется для дебага сети, security analysis, обучения протоколам.
Маршрутизация и интернет
BGP
BGP (Border Gateway Protocol)Протокол маршрутизации между autonomous systems (между ISP). 'Клей интернета': каждая AS объявляет соседям, какие префиксы у неё есть, и выбирает best path по политикам (preference, AS-path, MED). Работает поверх TCP/179. Не использует metrics типа hop count -- решения принимает по политикам и AS-path length. Уязвим к BGP hijacking: AS может ошибочно или злоумышленно анонсировать чужие префиксы (например, инцидент Pakistan Telecom + YouTube в 2008). Защита: RPKI (Resource Public Key Infrastructure).
OSPF
OSPF (Open Shortest Path First)Внутренний протокол маршрутизации (IGP), работающий внутри AS. Link-state: каждый router знает топологию всей AS, считает shortest path Dijkstra'ом. Делит AS на areas для масштабирования. Сходится быстро при изменениях, но требует CPU и памяти на router'ах. Используется в крупных enterprise сетях, реже в ISP (там обычно IS-IS). Аналоги: RIP (старый, distance-vector), EIGRP (Cisco-proprietary, hybrid).
AS
AS (Autonomous System)Группа IP-сетей под единым административным контролем (например, ISP, крупная корпорация, облачный провайдер). Идентифицируется ASN (Autonomous System Number, 16- или 32-битный). Внутри AS -- свой IGP (OSPF, IS-IS, EIGRP). Между AS -- BGP. Примеры: Cloudflare AS13335, Google AS15169, AT&T AS7018. Интернет -- это ~70000+ AS, обменивающихся маршрутами через BGP.
ISP
ISP (Internet Service Provider)Организация, продающая доступ к интернету. Tier 1 ISP -- глобальные backbone (NTT, Telia, Level 3), peering между собой без оплаты. Tier 2 -- региональные, покупают transit у Tier 1. Tier 3 -- locals, покупают всё. На клиентской стороне ISP даёт CPE (модем, router), public IP (часто динамический), внешнюю связность. Bandwidth измеряется в Mbps/Gbps по плану. Между ISP -- peering point (IXP) для прямого обмена трафиком без uplink через Tier 1.
IXP
IXP (Internet Exchange Point)Физическая точка обмена трафиком между несколькими ISP / AS. Каждый участник подключается к общей фабрике (обычно switched LAN), обмен трафиком по BGP с peering-партнёрами. Снижает стоимость (не платить за transit) и latency (короче путь). Крупные IXP: DE-CIX (Frankfurt, ~10 Tbps), AMS-IX (Amsterdam), LINX (London), MSK-IX (Москва). Контентные провайдеры (Google, Netflix, Cloudflare) ставят CDN-кэши непосредственно в IXP для быстрого доступа местных пользователей.
ICMP
ICMP (Internet Control Message Protocol)Протокол L3 для control messages в IP-сети. Не для передачи данных приложений -- для диагностики и сообщений об ошибках. Типы сообщений: Echo Request/Reply (ping), Destination Unreachable (host/network/port), Time Exceeded (для traceroute), Redirect, Fragmentation Needed (для PMTUD). ICMP-пакет инкапсулируется в IP, без UDP/TCP. Часто блокируется firewall (особенно ping), что осложняет диагностику и ломает PMTUD.
ping
ping (utility)Утилита для проверки доступности host'а через ICMP Echo Request/Reply. Показывает: отвечает ли host, RTT (round-trip time), packet loss. Использование: ping example.com, ping -c 10 8.8.8.8 (10 запросов на Linux). Не показывает работоспособность TCP/UDP-сервисов -- сервер может пинговаться, но HTTP не работать. На Windows используется ICMP type 8/0. Если ping не идёт, не значит, что host недоступен -- ICMP может быть заблокирован firewall'ом.
traceroute
traceroute (tracert on Windows)Утилита, показывающая маршрут пакета от source до destination, hop за hop. Работает так: шлёт пакеты с увеличивающимся TTL (1, 2, 3, ...). Каждый router на пути, увидев TTL=0, шлёт обратно ICMP Time Exceeded -- так мы узнаём его IP. На Linux по умолчанию использует UDP к высокому порту; mtr более интерактивная. Звёздочки (***) на hop -- router не отвечает (может быть rate-limit ICMP, не настроен Time Exceeded, или firewall). Не гарантирует, что обратный путь такой же -- routing асимметричен.
Балансировка и proxies
Reverse proxy
Reverse ProxyСервер, принимающий запросы от клиентов и форвардящий их на backend-сервера, скрывая последних. Функции: load balancing, SSL termination (TLS заканчивается на reverse proxy, backend идёт plain HTTP), caching, compression, security (WAF). Популярные реализации: NGINX, HAProxy, Envoy, Traefik, AWS ALB. Клиент видит только адрес reverse proxy, не знает, сколько backend'ов за ним. В отличие от forward proxy (стоит со стороны клиента, для outbound), reverse стоит со стороны сервера.
Load balancer
Load BalancerУстройство или сервис, распределяющее запросы между несколькими backend-серверами. Цель: scalability (больше серверов -- больше пропускной способности), redundancy (отказ одного backend не убивает сервис), health checks (не слать запросы упавшим). Типы по уровню: L4 (на основе IP+port, видит TCP/UDP), L7 (на основе HTTP-заголовков, URL, cookies). Алгоритмы: round-robin, least-connections, weighted, consistent hashing. Реализации: hardware (F5, Citrix NetScaler), software (HAProxy, NGINX), облачные (AWS NLB/ALB, GCP).
L4 (Layer 4) load balancing
L4 Load BalancingБалансировка на транспортном уровне: принимает решения по IP-адресам и портам (TCP/UDP), не разбираясь в HTTP. Быстрее L7 (меньше парсинга), но и менее гибкая (нельзя роутить по URL). Использует методы: DNAT (destination NAT -- меняет dst IP), Direct Server Return (ответ идёт мимо балансировщика напрямую), L2 forwarding. Применяется для не-HTTP трафика (БД, mail, gaming) и для high-throughput сценариев. Примеры: AWS NLB, HAProxy в mode tcp, LVS (Linux Virtual Server).
L7 (Layer 7) load balancing
L7 Load BalancingБалансировка на application layer: принимает решения на основе HTTP-заголовков, URL, cookies, тела запроса. Может делать: routing /api/v1/users в один cluster, /api/v2/orders в другой; sticky sessions через cookies; request rewriting; A/B testing; rate-limiting per-user. Тяжелее L4 (нужно парсить HTTP), но даёт rich функциональность. Реализации: NGINX, Envoy, HAProxy в mode http, AWS ALB. Современный microservice ingress (Istio, Linkerd) -- всегда L7.
CDN
CDN (Content Delivery Network)Распределённая сеть кэширующих серверов по всему миру, ускоряющая доставку статического контента (картинки, CSS, JS, video) и API. При запросе пользователя CDN отвечает с ближайшего edge-server'а вместо origin-сервера за океаном -- снижается latency, разгружается origin, защищается от DDoS. Крупные CDN: Cloudflare, Akamai, Fastly, CloudFront. Работают через DNS (anycast IP) или CNAME на CDN-домен. Поддерживают cache invalidation, edge functions, image optimization.
Инструменты диагностики
tcpdump
tcpdumpCLI-утилита для захвата и фильтрации сетевых пакетов на интерфейсе. Использует libpcap. Требует root (или CAP_NET_RAW). Базовое использование: tcpdump -i en0 'port 80' (захват HTTP на интерфейсе en0). Поддерживает BPF-фильтры: 'host 8.8.8.8 and tcp port 53'. Запись в файл: -w capture.pcap, чтение: -r. Опции вывода: -n (не резолвить DNS), -v / -vv / -vvv (verbose), -A (показывать payload как ASCII), -X (hex + ASCII). Запись pcap-файла можно открыть в Wireshark для подробного анализа.
Wireshark
WiresharkGUI-приложение для захвата и анализа сетевых пакетов. Самый популярный инструмент для дебага сетей. Поддерживает 3000+ протоколов с детальной декомпозицией: видишь каждое поле в заголовке. Display filter (отдельный от capture filter): http.host == 'example.com', tcp.flags.reset == 1. Follow TCP/HTTP Stream -- собрать payload одного соединения. CLI-вариант: tshark. Бесплатный, open-source. Может анализировать pcap-файлы, захваченные через tcpdump на сервере.
dig
dig (Domain Information Groper)CLI-утилита для DNS-запросов, более гибкая чем nslookup. Использование: dig example.com -- A-запись, dig MX example.com -- MX, dig +short -- только ответ, dig +trace -- полный путь от root, dig @8.8.8.8 example.com -- использовать конкретный resolver. Вывод секции: ANSWER (ответ), AUTHORITY (NS), ADDITIONAL (glue records). Часто используется для дебага DNS-проблем: проверить, какие A-записи отдаёт authoritative, какой TTL, есть ли DNSSEC. На Windows нет dig из коробки -- ставится через BIND-tools.
nslookup
nslookupУтилита для DNS-запросов, проще чем dig. Кросс-платформенная (есть в Windows, Linux, macOS). Базовое: nslookup example.com -- A-запись от системного resolver, nslookup example.com 8.8.8.8 -- от Google DNS. Поддерживает type=A, type=MX, type=NS и т.д. Менее verbose чем dig, но достаточно для быстрых проверок. На Linux/macOS чаще предпочитают dig.
netstat
netstat (network statistics)Старая утилита для показа сетевых соединений, routing table, статистики интерфейсов. Использование: netstat -tunlp (TCP + UDP, listening, не резолвить, показать процесс) на Linux, netstat -an на macOS. Депрекейтнута в большинстве distro в пользу ss. На macOS netstat -rn показывает routing table. Знание netstat нужно для legacy-систем; в новом коде -- ss или lsof.
ss
ss (socket statistics)Современная замена netstat, быстрее и информативнее. Использование: ss -tunlp -- открытые TCP+UDP listening сокеты с процессами, ss -t state established -- активные TCP, ss -K (kill) -- закрыть соединение. Использует netlink API ядра напрямую (быстрее /proc). Стандарт в современных Linux distro. На macOS нет ss, используется lsof -i или netstat.
openssl
openssl (CLI)Универсальный CLI-инструмент для работы с TLS и криптографией. Часто используется для дебага TLS: openssl s_client -connect example.com:443 -servername example.com (показать сертификат, версию протокола, cipher). Поддерживает: создание самоподписанных сертификатов (req -x509), CSR (req -new), проверку дат (x509 -dates), просмотр приватных ключей, расшифровку. Незаменим при настройке HTTPS и mTLS. Поставляется с OpenSSL библиотекой -- основой TLS на Linux.
curl
curlCLI-утилита для отправки HTTP-запросов и других протоколов (FTP, SMTP, telnet, file). Использование: curl -v https://api/v1/users (verbose с заголовками), curl -X POST -d '{"name":"Lev"}' -H 'Content-Type: application/json' (POST с JSON), curl --resolve example.com:443:1.2.3.4 (override DNS). Для дебага: --trace, --trace-time. Не следует редиректам без -L. Поддерживает HTTP/2 (--http2), HTTP/3 (--http3, требует свежей сборки). De facto стандарт для тестирования API из shell.
wget
wgetУтилита для скачивания файлов по HTTP/HTTPS/FTP. В отличие от curl, оптимизирована для рекурсивного скачивания (зеркалирование сайтов): wget -r -np example.com/dir/. Удобна для batch-загрузки: -i urls.txt -- скачать URL'ы из файла. Резюмирует прерванные загрузки (-c). На macOS нужно ставить через brew, на Linux обычно предустановлен. Для interactive дебага API чаще используется curl, для скачивания файла -- wget.
Базовые сервисы: DHCP
DHCP
DHCP (Dynamic Host Configuration Protocol)Протокол, автоматически назначающий IP-параметры host'у при подключении к сети: IP-адрес, маска, gateway, DNS-серверы, lease time. Работает на UDP/67-68. Процесс DORA: Discover (broadcast от клиента 'кто даст IP?'), Offer (от сервера 'возьми этот IP'), Request (клиент 'беру'), Acknowledgement (сервер 'окей'). Lease time -- срок аренды (обычно 24 часа); клиент пытается продлить за половину lease. Если DHCP-сервер падает, существующие клиенты работают до конца lease, новые -- не подключатся.