Стеком TCP/IP называют набор упорядоченных сетевых протоколов. Он был назван в честь двух широкораспространенных протоколов:
TCP (Transmission Control Protocol)
IP (Internet Protocol)
Стек TCP/IP является открытым и платформонезависимым, поэтому он получил такое широкое распространение
В 1967 году начался проект ARPA (Advanced Research Projects Agency), в 1972 году появился ARPANET - сеть, соединявшая 30 узлов. В 1980-1981 годах были опубликованы в рамках работы протоколы IP, TCP, UDP
Далее TCP/IP был переработан из монолитной архитектуры в слоенную (наподобие модели OSI), а его реализация была включена в операционную систему BSD
Так как BSD распространялась в университетах, стек TCP/IP получил распространение в университетах. К концу 80-ых годов ARPANET стала называется Internet (Interconnected networks) и объединяла университеты и научные центры США, Канады, Европы
В 1992 появляется WWW, World Wide Web, основанный на протоколе HTTP
В стек TCP/IP входят 4 уровня:

На транспортном уровне в основном используются два протокола:
Сейчас стек TCP/IP развивается благодаря комитету IETF (Internet Engineering Task Force, Инженерный совет Интернета) и документа RFC (Request for Comments)
В стеке TCP/IP адресация установлена на разных уровнях
| Уровень | Адрес | Пример |
|---|---|---|
| Прикладной | Доменное имя из DNS | itmo.ru |
| Транспортный | Номер порта TCP или UDP | 443 |
| Сетевой | IP-адрес | 192.0.2.227 |
| Канальный | MAC-адрес | 16:52:91:ff:13:c4 |
Рассмотрим механизм установления соединения, например, при доступе к сайту google.com
Для начала компьютеру с браузером и серверу Google назначаются IP-адреса, пусть это будут 198.18.55.205 и 203.0.113.209. Так как браузер использует TCP, то на сервере будет открыт порт TCP 80, которые в операционной системе привязан к веб-приложению
Далее при отправке запроса браузер запрашивает случайный свободный порт у ОС выше 1024, пусть это будет 29384
29384 и получателя 80198.18.55.205 и 203.0.113.209Заметим, что у клиента порт случайный, а у сервера заранее был известен
В протоколе IP есть возможность указать тип рассылки:
Unicast - данные отправляются от одного узла к другому, для этого используются и IP-адрес, и MAC-адрес
Broadcast - данные отправляются ко всем узлам в сети. Для этого MAC-адрес в заголовке равен ff:ff:ff:ff:ff:ff, а IP-адрес составляет адрес сети, дополнены единицами в конце
В IPv6 нет широковещания, вместо него используется Multicast
Multicast - данные отправляются группе узлов в сети
Anycast - данные отправляются к одному узлу из целевой группы

Долгое время популярным остается четвертая версия протокола IP - IPv4. IPv4-адрес состоит из 4 байтов (октетов) и записываются так: W.X.Y.Z, где W, X, Y, Z - числа от 0 до 255
Таким образом, пространство IPv4 адресов занимает 2^32 адресов (около 4 миллиардов)
Адрес делится на две части - адрес сети, до которой пакет надо доставить, и адрес конкретного узла внутри сети
Адреса делятся двумя способами:
Классовая адресация - метод структурирования, при котором количество разрядов в адресе сети фиксировано и зависит от первых бит адреса. Есть
0.X.X.X до 127.X.X.X - всего 128 подсетей с 2^24 адресами128.0.X.X до 191.255.X.X - всего 2^14 подсетей с 2^16 адресами192.0.0.X до 223.255.255.X - всего 2^21 подсетей с 256 адресами224.X.X.X до 239.X.X.X - 16 подсетей для назначения групп для многоадресной рассылки240.X.X.X до 255.X.X.X - зарезервировано для использования в будущем, но есть мнение, что их так и не начнут использоватьСейчас такая схема не актуальна
Бесклассовая адресация - метод, в котором вместо классов используется маска сети - количество бит, которые обозначают сеть
Например, локальная сеть - это адреса 192.168.0.0 - 192.168.0.255. Здесь сеть определяют первые 24 бита, поэтому можно диапазон записать как 192.168.0.0/24 или “192.168.0.0 с маской 255.255.255.0”
Таким образом, можно любую подсеть разделить на удобные подсети с нужным количеством адресом
Также существуют специальные IP-адреса
255.255.255.255 - универсальный широковещательный адрес127.0.0.0/8 - адреса для коммуникаций внутри хоста и для тестирования (целых 2^24)169.254.0.0/16 - автоконфигурирование IPv4, если конфигурация по DHCP не работает
Еще были зарезервированы несколько диапазонов адресов классов A, B и С, которые не маршрутизированы в Интернет. Такие адреса называют частными или серыми:
10.0.0.0/8172.16.0.0/12192.168.0.0/16Еще существует маска “wildcard mask” - 4 байта, с помощью которых можно настроить фильтрацию трафика на специальные адреса. В этой маске 0 значит, что разряд в адресе получателя должен совпадать с разрядом адреса-образца
Количество IPv4-адресов мало, поэтому появился IPv6
Адрес IPv6 представляет собой 128 бит, записанных в формате x:x:x:x:x:x:x:x, например, 2001:0db8:00af:abcd:0000:0000:0000:0034
Ведущие нули при этом убирают, а группы нулей сокращают до ::: 2001:db8:af:abcd::0034
В IPv6 есть только префиксные маски, по умолчанию префикс - 64
Типы адресов делятся на:
Unicast - идентифицируют только один сетевой интерфейс
Global unicast - глобальные индивидуальные адреса, которые могут быть настроены статически или присвоены динамически. Начинается с 2 или с 3, то есть 2000::/3
Из этой группы отдельно выделяется сеть 2001:0db8::/32, предназначенная для документации
Link-local - локальный адрес, позволяющий устройству обмениваться данными с другими устройствами под управлением IPv6 по одному и тому же каналу и только по данному каналу (подсети)
Локальные IPv6 адреса канала находятся в диапазоне fe80::/10
Unique local - адреса, находящиеся в диапазоне от fc00::/7
Хотя протокол IPv6 обеспечивает особую адресацию для сайтов, он не предназначен для того, чтобы скрывать внутренние устройства с IPv6-адресом от всемирной сети (аналогично серым IPv4-сетям)
FF, FF02::1 - все узлы на канале, FF02::2 - все роутерыАдресов для широковещания нет, чтобы снизить нагрузку на сеть
Также специальные адреса:
::1/128 - адрес для отправки себе же (loopback)::/64 - адреса для перехода с IPv4 (например, ::192:0:2:212)::/128 - неопределенный адрес