## Ports

1. [Service Name and Transport Protocol Port Number Registry. - IANA](https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml)
2. [List of TCP and UDP port numbers. - Wikipedia](https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers)

### Семантика портов

Порт - это логическая форма для идентификации системных действий или различных сетевых служб, используемых для создания локальных или сетевых коммуникаций.

Номер порта - это 16-битное (2 в 16) числовое значение, которое находится в диапазоне от 0 до 65535:
* Известные порты (0-1023), вам потребуются специальные привилегии (root или cap_net_bind_service в Linux)
* Зарегистрированный порт (1024-49151). Для конкретных приложений.
* Динамический порты - это три типа пространства номеров портов. (49152-65535).
 
> Посмотреть конвенцию портов в UNIX системах - `/etc/services` или в [RFC-1700](https://datatracker.ietf.org/doc/html/rfc1700) для Linux.

Порты могут быть открыты и использованы программными приложениями и службами операционной системы для отправки и получения данных по сетям ([LAN или WAN](./2.3.2.2%20LocalAndWideAreaNetwork.md)), использующим определенные протоколы (например, [TCP/UDP](./2.3.2.3%20Protocols.md)).

> Представьте, что ваш компьютер — это большое здание, а программы внутри него — это разные офисы. Порты — это двери в эти офисы. Когда данные приходят на ваш компьютер, они смотрят на номер порта, чтобы узнать, в какой "офис" им нужно пойти.
> 
> Например, когда вы открываете веб-страницу, ваш браузер обычно использует порт 80 или 443, чтобы понять, что это данные для веб-браузера, а не для какой-то другой программы.

Существующее количество портов обеспечивает корректное функционирование всех приложений, которым необходимо использовать сетевое соединение.

### Использование портов в URL-адресах

[URL (Универсальный локатор ресурсов)](/2%20ComputerScience/2.3%20Networking/2.3.1%20API/2.3.1.3%20URI\URL\URN.md) - это способ идентификации и доступа к ресурсам в интернете. Рассмотрим URL на примере `http://www.example.com:8080/page.html`:

1. http - схема, определяющая протокол передачи данных (в данном случае HTTP).
example.com- это доменное имя или адрес сервера.
2. 8080 - номер порта сервера.
3. /page.html - путь к файлу или ресурсу на сервере.
 
Номер порта в URL указывает, на каком сетевом порте сервер ожидает соединения для данного протокола. Это важно, поскольку серверы могут обслуживать множество портов одновременно, каждый из которых может обслуживать разные протоколы или приложения.

#### Почему тогда мы не пишем порт в `github.com:443/eldaroid/iTWiki`?

![NewFullURISchem](/pictures/ComputerScience/NewFullURISchem.jpg?raw=true)

Некоторые из соглашений по номеру портов более важны, чем другие: если вы обслуживаете [HTTP(S)](../2.3.1%20API/2.3.1.4%20HTTP_Methods.md)-сервер на чем-то отличном от 80/443, вы запутаете веб-браузеры, и никто не сможет посетить ваш сайт. Но совершенно ничто не мешает вам это сделать, потому что придется писать `http://somesite:1234/helloworld.html` если этот сервер использует порт 1234, то он будет работать. 

Но ваши [URL-адреса](../2.3.1%20API/2.3.1.3%20URI\URL\URN.md) будут выглядеть запутанными для обычных пользователей. В браузерной строке мы не пишем `:80`, потому что браузер просто заполняет для вас `:80` при добавлении протокола.

Просто среднестатистический человек с трудом может набрать `github.com`, поэтому браузеры начали делать `github.com:443` за нас.

### Популярные порты

Например, в повседневной работе мы используем порт 80 для серфинга по HTTP-веб-страницам с открытым текстом и порт 443 для шифрованных веб-сайтов на базе HTTPS.

* Порт 22 - ssh;
* Порт 25(SMTP) - письма отправляются в глобальную сеть в поисках своего адресата;
* Порт 53 - [DNS (Domain Name System)](https://aws.amazon.com/ru/route53/what-is-dns/);
* Порт 80 - [для HTTP](https://datatracker.ietf.org/doc/html/rfc1738#section-3.3);
* Порт 110(POP3) - используется для получения электронных писем;
* Порт 443 - [для HTTPS(SSL/TLS)](https://datatracker.ietf.org/doc/html/rfc2818#section-2.3);
* Порт 548 - Apple Filing Protocol проприетарный протокол Apple для файловых служб macOS;
* Порт 666 - используется в играх Doom, Doom 2 компанией [id Software](https://ru.wikipedia.org/wiki/Id_Software);
* Порты 8080 и 8000 выбирают, тк это выше 1024 (
=> вам не нужны какие-либо специальные (root) привилегии) ​​и их легко запомнить, поскольку стандартный порт HTTP — 80;

### Просмотреть открытый порт 3000

Узнать идентификатор [процесса (PID)](/2%20ComputerScience/2.0%20Linux/2.0.4%20ConcurrencyAndMultitasking/2.0.4.1%20Process.md), занимающего номер порта (например, 3000): `sudo lsof -i :3000`

---

[2.3.2.2 Internet Protocol Theme](./2.3.2.4%20IP.md) | [Back To iTWiki Contents](https://github.com/eldaroid/iTWiki) | [2.3.2.5 Web Socker Theme](./2.3.2.6%20WebSocket.md)