🔍 КАК ЭТО УСТРОЕНО

Порты и сокеты: почему у одного компьютера тысячи дверей

У вашего компьютера один сетевой адрес, но через него одновременно идут почта, видео и сотня вкладок. Кто их не путает? Ответ — в номерах дверей, о которых вы не подозревали.

Адрес приводит письмо к нужному дому. Но в доме сотня квартир — и без номера квартиры письмо не дойдёт. В сети роль квартиры играет порт.
IP-адрес — это здание. Порт — конкретная дверь в нём. Сокет — это уже состоявшийся разговор через эту дверь.

Проблема одного адреса

У вашего компьютера в сети один IP-адрес. Но прямо сейчас он, скорее всего, делает кучу вещей сразу: грузит страницы в нескольких вкладках, проверяет почту, играет музыку из стриминга, обновляет мессенджер. Все эти потоки данных приходят на один и тот же адрес. Почему же ответ для почты не попадает по ошибке в окно видео?

Потому что одного адреса мало. Нужен ещё один уровень адресации — порт.

Порт — это номер двери

Порт — это просто число от 0 до 65535, которое уточняет, какому именно приложению или сервису предназначены данные. Если IP-адрес — это многоквартирный дом, то порт — номер квартиры. Письмо приходит на адрес дома (IP), а порт говорит, в какую дверь его занести.

Когда пакет приходит на компьютер, система смотрит на номер порта и отдаёт данные тому приложению, которое этот порт «слушает». Браузер ждёт ответы на своих портах, почтовый клиент — на своих. Никто никого не путает.

Знаменитые номера дверей

Часть портов закреплена за стандартными службами по всеобщему соглашению — их называют хорошо известными:

ПортКто за ним
80Веб по HTTP
443Веб по HTTPS (защищённый)
53DNS, поиск адресов по именам
25Отправка электронной почты

Поэтому, открывая сайт, вы по умолчанию стучитесь в дверь 80 или 443 — браузер подставляет эти порты сам, вы их просто не видите в адресной строке.

А что тогда сокет

Здесь часто путаются, но разница простая. Порт — это номер двери, абстрактный адрес. Сокет — это уже открытое соединение, конкретный канал связи между двумя сторонами.

Сокет однозначно описывается четвёркой: адрес и порт одной стороны плюс адрес и порт другой. Именно эта комбинация делает каждый разговор уникальным. Можно открыть десять вкладок одного сайта — у каждой будет свой сокет: адрес сервера и его порт одинаковы, но порт на вашей стороне у каждой вкладки свой. Так система и различает потоки.

Аналогия: порт — это телефонный номер, а сокет — конкретный состоявшийся звонок между двумя номерами. Номер один, но звонков через него может идти много, и каждый — отдельный.

Откуда берутся ваши порты

Серверы слушают известные порты (80, 443) — чтобы клиенты знали, куда стучаться. А вот ваша сторона при подключении получает временный порт из верхнего диапазона, выданный системой на этот разговор. Закрыли вкладку — порт освободился и вернётся в общий пул. Поэтому тысячи одновременных соединений уживаются на одном компьютере: дверей-портов десятки тысяч.

Зачем это знать

Понятие порта объясняет массу повседневных вещей: почему «открыть порт» нужно для игрового сервера, что значит «порт занят» при запуске программы, как файрвол «закрывает порты» от чужих. А идея сокета — фундамент любого сетевого приложения: каждый чат, игра и сайт под капотом открывает и закрывает сокеты.

Так что за скромным «один компьютер — один адрес» прячется здание с десятками тысяч дверей, и в каждую может идти свой независимый разговор. Именно эта многодверность и позволяет одной машине делать в Сети сотню дел одновременно, ничего не перепутав.

#tcp#интернет#порты#сети#сокеты