# Адреса

Все устройства, подключенные к сети, имеют два адреса: 

* **MAC-адрес** (Media Access Control, адрес управления доступом к среде передачи данных) - аналог из жизни это **отпечаток пальца**. MAC-адрес назначается производителем платы
* **IP** (Internet Protocol) - агалог из жизни это **почтовый адрес**. При перемещении устройства из одной сети в другую - ip на нем меняется.

# IP (internet protocol)

![IP](/pictures/ComputerScience/IP.jpeg?raw=true)

Файл `etc/hosts` предназначен для ручного управления связями между доменными именами и IP-адресами.

```bash
# IPv4 format
127.0.0.1       localhost
# IPv6 format
::1             localhost
```

**Приоритет:** Записи в файле `etc/hosts` имеют приоритет над информацией, получаемой через систему доменных имен (`DNS`), поэтому изменения в этом файле вступают в силу немедленно и могут переопределить DNS-запросы.

## Стандарты IP

Поскольку количество ip адресов (IPv4) ограничено (примерно 4.3 миллиарда), управление ими осуществляется централизованно через региональные интернет-регистраторы (RIR). В мире их пять, и каждый отвечает за распределение IP адресов в определенном географическом регионе:

![IPv4](/pictures/ComputerScience/IPv4.png?raw=true)

Резервы свободных IPv4 адресов, доступных для нового распределения на глобальном уровне через региональные интернет-регистраторы, исчерпаны - организации уже выделили все адреса, которые у них были в наличии. Они больше не имеют свободных адресов для распределения новым пользователям или организациям, которые нуждаются в них. 

Технология NAT (Network Address Translation, или трансляция сетевых адресов) стала ключевым инструментом, который позволил продлить "жизнь" IPv4 после исчерпания доступных адресов.

### NAT (Network Address Translation, или трансляция сетевых адресов)

NAT используется для того, чтобы множество устройств внутри одной локальной сети могли делиться одним или несколькими внешними публичными IP-адресами. Вот как это работает:

1) **Частные IP-адреса**: Внутри локальной сети устройства используют частные IP-адреса, которые не уникальны в глобальном масштабе и могут повторяться в разных локальных сетях по всему миру. Эти адреса не могут быть использованы для прямого подключения к интернету.

2) **Публичные IP-адреса**: Для доступа к интернету локальная сеть использует один или несколько публичных IP-адресов, которые уникальны на глобальном уровне. Эти адреса присваиваются интернет-провайдером и могут использоваться для идентификации сети в интернете.

3) **Процесс NAT**: Когда устройство в локальной сети отправляет данные в интернет, его **частный IP-адрес** транслируется в **публичный IP-адрес** на границе сети (обычно на маршрутизаторе). Маршрутизатор запоминает, какой внутренний адрес соответствует какому внешнему запросу, и когда данные возвращаются из интернета, он направляет их обратно к соответствующему устройству внутри локальной сети.

> Так одно предприятия, состоящее из сотен компьютеров, будет иметь всего 1 адрес для глобальное сети.

Благодаря **NAT** множество устройств может использовать ограниченное количество публичных IP-адресов для доступа к интернету, что значительно сокращает необходимость в большом количестве уникальных публичных адресов. Это стало одним из способов справиться с ограниченностью числа доступных **IPv4** адресов и задержать переход к **IPv6**.


### Default IPv4-адреса

`0.0.0.0` все доступные интерфейсы и локальные/частные ip-адреса, включая глобальные сетевые настройки и локальные операции, где требуется обозначение "любого" или "неопределённого" адреса. Это специальная маска, которая указывает операционной системе прослушивать все сетевые интерфейсы на хосте для входящих соединений.

`255.255.255.255` (все доступные **частные** интерфейсы) строго ограничен локальными сетями для широковещательных передач и не используется для глобальной маршрутизации или передачи данных между сетями.

**Частные IP-адрес**: присваиваются домашним компьютерам, устройствам в офисах и другим устройствам в локальных (внутренних, собственных) сетях. Они не могут использоваться для связи через Интернет и часто имеют форматы: 
* `192.168.0.0 /16` или от `192.168.0.0` до `192.168.255.255`
* `10.0.0.0 /8` или от `10.0.0.0` до `10.255.255.255`
* `172.16.0.0 /12` или от `172.16.0.0` до `172.31.255.255`

> Трафик, отправленный на частные адреса, может покидать устройство, с которого он отправлен

**Loopback/локальные адреса (пятля на самого себя)**:
* `127.0.0.0 /8` или от `127.0.0.0` до `127.255.255.255`

> Трафик, отправленный на адреса loopback, никогда не покидает устройство

### Команды сетевого администрирования

`ifconfig -a или ip addr show` ## все ip адреса `lo0: inet 127.0.0.1` и `en0: inet 192.168.1.4`

`netstat -nr` ## вывод таблицы маршрутизации в вашей ОС. Таблица содержит инфу какие сетевые пути (маршруты) доступны для отправки пакетов данных.

> `ifconfig` сосредоточена на сетевых интерфейсах, а `netstat` предоставляет общую информацию о сетевой активности и маршрутизации

### Разница `lo0` и `en0` ip адресов

Оба эти адреса (`127.0.0.1` и `192.168.1.4`) указывают на ваш компьютер, но используются в разных контекстах:

* `127.0.0.1` используется для обращения к самому себе, когда вы хотите, чтобы запросы направлялись непосредственно к вашему компьютеру.
* `192.168.1.4` используется для обращения к вашему компьютеру в вашей локальной сети, когда вы хотите, чтобы запросы отправлялись к вашему компьютеру из других устройств в сети.

    > `ifconfig en0 | grep inet | awk '$1=="inet" {print $2}'` - самый удобный способ получить свой ip (может меняться в зависимости от вашего текущего месторасположения)

---

[2.3.2.2 Protocols Theme](./2.3.2.3%20Protocols.md) | [Back To iTWiki Contents](https://github.com/eldaroid/iTWiki) | [2.3.2.4 Ports Theme](./2.3.2.5%20Ports.md)