Сети

Содержание
Введение
Что такое протокол
IP
Portions
Двоичное представление
Subnet Mask
Классовая адресация
Типы IP адресов
Сетевой Адрес: Network Address
Broadcast Address
Host Address
CIDR: Бесклассовая адресация
Частные IP адреса
Подсети
Порты
Похожие статьи

Введение

Эта страница поможет вам с навигацией по статьям о компьютерных сетях.

Компьютерная сеть изображение с сайта www.andreyolegovich.ru
Компьютерная сеть
Изображение: rudalle.ru

Что такое Сеть

Сеть - это группа компьютеров или других устройств объединённых с помощью проводов или радиоволн.

Что такое Хост

Хост - это одно устройство в сети.

К хосту можно обратиться по сети.

Хост может посылать запросы к одному или нескольким хостам в сети.

Для обращения по сети к самому себе придуман специальный термин - обращение к localhost

Читайте также rfc1122 - Requirements for Internet Hosts -- Communication Layers

Что такое Протокол

В основе обмена данными по сети лежит передача электрических импульсов. Их можно преобразовать в числа. Например высокое напряжение принять за 1 а низкое за 0.

Можно договориться о том какие наборы из единиц и нулей нужно посылать для успешного обмена информацией.

Это будет называться протоколом. Протолов может быть много и они могут вкладываться друг в друга.

Примеры: TCP, IP, UPD, SSH , SCP , XRDP , VNC , FTP и другие.

Наивный пример протокола, который я написал для демонстрации сути того, чем является протокол вы можете изучить здесь

IP

IP это протокол третьего (сетевого) уровня в модели OSI - Network Layer.

Пример IP адреса 8.8.8.8

Делится точками на четыре части - октета по 8 бит. Каждый октет может принимать значение от 0 до 255

203.0.113.10/24

/24 - это Subnet Mask или просто netmask - маска подсети.

С помощью маски адрес делится на две части Network Portion (адрес сети) и Host Portion (адрес хоста).

Величина Network Portion равна маске.

203.0.113 - это так называемая Network Portion

.10 - это Host Portion

Разобраться как происходит это разделение можно изучив подробнее раздел Subnet Mask

Без маски IP не самодостаточен (пример)

Если вам нужно узнать ваш IP адрес, сделать это можно здесь

Двоичное представление
203 0 113 10
11001011 00000000 01110001 00001010
8 бит 8 бит 8 бит 8 бит

До 1995-го года использовалсь Classful Addressing

После 1995-го Classless Addressing

Компьютерная сеть изображение с сайта www.andreyolegovich.ru
Компьютерная сеть
Изображение: rudalle.ru

Маска Подсети - Subnet Mask

203.0.113.10/24

В этом примере маска равняется 24. То есть занимает ровно три октета по восемь бит.

Значит первые три октета отвечают за адрес сети, а последний за адрес хоста внутри сети.

Если бы маска равнялась 16, то адрес делился бы пополам. Первая половина - сеть, вторая половина - хост.

Итак, 24 бита отведено под сетевую часть адреса и 8 бит под хосты (hosts, также употребляют термин nodes).

203.0.113 - это так называемая Network Portion

.10 - это Host Portion

Уменьшив маску можно увеличить размер Host Portion за счёт Network Portion.

IP адрес и маска 255.255.255.0
IP в десятичном виде 203 0 113 10
IP в двоичном виде 11001011 00000000 01110001 00001010
Маска в двоичном виде 11111111 11111111 11111111 00000000
Маска в десятичном виде 255 255 255 0

Маска также разбита на октеты. В таблице удобно расположены бинарный IP адрес и бинарная маска.

Если бит адреса находится над 0 маски - он соответствует Host Portion.

Если бит адреса находится над 1 маске - то это Network Portion

В соответствии с RFC 1519 маска должна состоять из идущих подряд единиц без нулей между ними.

An implementation following these rules should also be generalized, so that an arbitrary network number and mask are accepted for all routing destinations. The only outstanding constraint is that the mask must be left contiguous. Note that the degenerate route 0.0.0.0 mask 0.0.0.0 is used as a default route and MUST be accepted by all implementations. Further, to protect against accidental advertisements of this route via the inter-domain protocol, this route should never be advertised unless there is specific configuration information indicating to do so.

Примеры правильных масок:

10000000 00000000 00000000 00000000 # /1 11000000 00000000 00000000 00000000 # /2 11100000 00000000 00000000 00000000 # /3 … 11111111 11110000 00000000 00000000 # /12 11111111 11111111 11111111 00000000 # /16 11111111 11111111 11111111 00000000 # /24 11111111 11111111 11111111 11111110 # /31

Примеры неправильных масок с разрывами

10100000 00000000 00000000 00000000 11010000 00000000 00000000 00000000 11100001 00000000 00000000 00000000 … 11111111 11110001 00000000 00000000 11111111 11111111 11111101 11110100

Исключением из этого правила можно назвать так называемые Wildcard маски или обратные маски .

Чем меньше маска - тем больше уникальных хостов может быть в сети

В большой локальной сети не хочется тратить 24 бита на сетевую части и оставлять всего 8 бит на хосты.

Напомню, что 8 бит это всего 256 уникальных вариантов из которых первый .0 зарезервирован под адрес самой сети ( Network Address ) а последний .255 зарезервирован под широковещательный адрес ( Broadcast Address ), о которых вы узнаете ниже, так что остаётся всего 254 уникальных IP для хостов ( Host Address ).

Чтобы увеличить число уникальных адресов для хостов нужна другая маска. Например

Маска 255.0.0.0
11111111 . 00000000 . 00000000 . 00000000
255 . 0 . 0 . 0

В маске 255.0.0.0 всё наоборот: 8 бит под сетевую часть и 24 бита под хост

Пример IP адреса с такой маской

IP и маска 255.0.0.0
IP в десятичном виде 10 . 0 . 0 . 10
IP в двоичном виде 00001010 . 00000000 . 00000000 . 00001010
Маска в двоичном виде 11111111 . 00000000 . 00000000 . 00000000
Маска в десятичном виде 255 . 0 . 0 . 0

Не обязательно разграничивать Host Portion и Network Portion по границе октета

IP и маска 255.255.240.0
IP в десятичном виде 10 . 0 . 0 . 10
IP в двоичном виде 00001010 . 00000000 . 00000000 . 00001010
Маска в двоичном виде 11111111 . 11111111 . 11110000 . 00000000
Маска в десятичном виде 255 . 255 . 240 . 0

IP из предыдущего примера 10.0.0.10 может быть у хоста в сети как с маской 255.0.0.0 так и с маской 255.255.240.0

Разберёмся где проявится разница.

Рассмотрим два IP адреса 10.0.15.10 и 10.0.16.10.

Если маска 255.0.0.0

IP и маска 255.0.0.0
10.0.15.10 dec 10 . 0 . 15 . 10
10.0.15.10 bin 00001010 . 00000000 . 00001111 . 00001010
10.0.16.10 dec 10 . 0 . 16 . 10
10.0.16.10 bin 00001010 . 00000000 . 00010000 . 00001010
Маска в двоичном виде 11111111 . 00000000 . 00000000 . 00000000
Маска в десятичном виде 255 . 0 . 0 . 0

Сетевая часть адреса занимает только первый октет и выделена жирным шрифтом, поэтому легко понять, что 10.0.15.10 и 10.0.16.10 это два соседних хоста в одной подсети.

Рассмотрим те же адреса но с маской 255.255.240.0

IP и маска 255.255.240.0
10.0.15.10 dec 10 . 0 . 15 . 10
10.0.15.10 bin 00001010 . 00000000 . 00001111 . 00001010
10.0.16.10 dec 10 . 0 . 16 . 10
10.0.16.10 bin 00001010 . 00000000 . 00010000 . 00001010
Маска в двоичном виде 11111111 . 11111111 . 11110000 . 00000000
Маска в десятичном виде 255 . 255 . 240 . 0

Обратите внимание на третий октет. Особенно на записи в двоичном виде.

Ни один из положительных битов адреса 10.0.15.10 не попал в сетевую часть. (нет жирных единиц)

Таким образом у 10.0.15.10 адрес хоста остался прежним, но заметно выросла сетевая часть IP адреса.

У 10.0.16.10 единица в третьем октете попала в сетевую часть. От адреса хоста осталось только 1010 а подсеть теперь не такая как у 10.0.15.10

Таким образом теперь 10.0.16.10 и 10.0.15.10 это не соседние хосты одной подсети а разные хосты в разных подсетях.

Компьютерная сеть изображение с сайта www.andreyolegovich.ru
Компьютерная сеть
Изображение: rudalle.ru

Classful Addressing

Если вы когда-то слышали про IP класса A, класса B, C, D или E - это относилось как раз к устаревшей классовой адресации (Classful Addressing)

Про бесклассовую адресацию вы можете прочитать здесь

Классовая адресация
Класс Диапазон IP адресов
A 0.0.0.0 127.255.255.255
B 128.0.0.0 191.255.255.255
C 192.0.0.0 223.255.255.255
D 224.0.0.0 239.255.255.255
E 240.0.0.0 255.255.255.255

A, B, C - это так называемый Unicast. Именно такие адреса сейчас используются в публичном интернете (за исключением приватных адресов . Принцип - одно устройство общается с одним устройством

D - это multicast. Одно устройство общается с несколькими устройствами. Не поддерживается в интернете, но поддерживается в больших частных сетях для трансляций совещаний и т.д.

Класс A: первые 8 бит это всегда сетевая часть

Класс B: первые 16 бит это всегда сетевая часть

Класс C: первые 24 бита это всегда сетевая часть

Класс D: все 32 бита это всегда сетевая часть

Типы IP адресов

По тому, какое значение принимает Host Portion можно разделить адреса на три типа

Network Address

Сетевой адрес (Network Address или Network Prefix) - это уникальный идентификатор группы устройств. Например, как название улицы является уникальным идентификатором всех домов на этой улице, но не является уникальным для конкретного дома (если, конечно, на улице больше одного дома)

У сетевого адреса все биты в Host Portion равны 0

Пример сетевого адреса
255.255.255.0 dec 255 . 255 . 255 . 0
255.255.255.0 bin 11111111 . 11111111 . 11111111 . 00000000

Broadcast Address

Широковещательный адрес (Broadcast Address) - идентификатор указывающий на все устройства в сети.

У широковещательного адреса все биты в Host Portion равны 1

Пример широковещательного адреса
255.255.255.255 dec 255 . 255 . 255 . 255
255.255.255.255 bin 11111111 . 11111111 . 11111111 . 11111111

В чём отличие поясню на примере: почтальону поручили отнести письмо в офис TopBicycle на улице Партнёрская и выдали инструкцию

Доставить до компании Компания;Сайт;Тип;Адрес TopBicycle;www.TopBicycle.ru;Велосипеды;Улица Партнёрская

Это аналог сетевого адреса. На улице Партнёрской может быть много офисов. Куда конкретно нести письмо сразу не понять - нужно уточнить адрес дома (в случае с сетью - адрес хоста).

На следующий день почтальону поручили отнести оповещение о ремонте на улице во все дома и офисы на улице Партнёрская.

Оповещения одинаковые для всех компаний.

Доставить до всех адресатов Компания;Сайт;Тип;Адрес URN.SU;https://www.urn.su;IT;Улица Партнёрская HeiHei.ru;https://heihei.ru;TravelУлица Партнёрская TopBicycle.ru;https://topbicycle.ru;BicyclesУлица Партнёрская Авиасейлз;https://aviasales.ru;Travel;Улица Партнёрская Booking.com;https://booking.com;Hotels;Улица Партнёрская Hotellook;https://Hotellook.com;Hotels;Улица Партнёрская Велодрайв;https://velodrive.ru;Bicycles;Улица Партнёрская Xiaomi;https://mi-shop.com;Android;Улица Партнёрская Samsung;https://www.samsungstore.ru;Android;Улица Партнёрская ;https://.ru;Books;Улица Партнёрская GeekBrains;https://gb.ru;Education;Улица Партнёрская Нетология;https://netology.ru;Education;Улица Партнёрская SkillBox;https://SkillBox.ru;Education;Улица Партнёрская Pluralsight;https://Pluralsight.com;Education;Улица Партнёрская СовКомСтрахование;https://sovcomins.ru;Insurance;Улица Партнёрская Полис 812;https://polis812.ru;Insurance;Улица Партнёрская Vivo;https://ru.vivo.com/;Android;Улица Партнёрская Beget;https://beget.com;Hosting;Улица Партнёрская Reg.ru;https://Reg.ru.ru;Hosting;Улица Партнёрская OLDI;https://oldi.ru;Laptops;Улица Партнёрская

Это аналог широковещательного адреса. Если бы на улице было два офиса, нужно нести письма в оба. Если двадцать - во все двадцать. Знать кто в каком доме необязательно поэтому если он идёт с письмами по улице то просто заходит во все дома по порядку (не по списку, а так как они расположены на улице).

Host Address

Адрес хоста (Host Address) - идентификатор указывающий на конкретное устройство в сети.

У адреса хоста может быть любая комбинация бит в Host Portion кроме двух: только нули и только единицы.

Только нули это сетевой адрес, только единицы - широковещательный. Всё остальное - это адреса хостов.

Сетевой адрес в десятичной записи может оканчиваться не на 0

Рассмотрим адрес 10.128.224.64 с маской 255.255.255.224.

Проверить являтеся ли адрес сетевым означает проверить содержит ли Host Portion только единицы или нет.

Одного IP адреса для этого недостаточно, нужно рассмотреть его вместе с маской чтобы понять чему равна Host Portion

Пример сетевого адреса
IP в десятичном виде 10 . 128 . 224 . 64
Маска в десятичном виде 255 . 255 . 255 . 224
IP в двоичном виде 00001010 . 10000000 . 11100000 . 01000000
Маска в двоичном виде 11111111 . 11111111 . 11111111 . 11100000

Сетевая часть выделена жирным, очевидно, что в части хоста остались только нули и этот адрес - сетевой

CIDR Notation

CIDR означает Classless Inter-Domain Routing то есть бесклассовая адресация.

Рассмотрим маску 255.255.255.0

Первый 24 бита это единицы. Чтобы не писать постоянно 255.255.255 можно писать

/24

Формат следующий сперва слеш, затем длина Network Portion

Например:

203.0.113.10/24

Private

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

10.0.0.0/8
172.16.0.0/12
192.168.0.0/16

Private IP Address Range
Начало Конец Маска
10.0.0.0 10.255.255.255 /8
172.16.0.0 172.31.255.255 /12
192.168.0.0 192.168.255.255 /16

Рекомендуется избегать использования адреса 169.254.0.0/16 - так называемого APIPA

Адрес 127.0.0.1 зарезервирован под Loopback Address

Это означает адрес вашего же компьютера. Можно сказать домашний адрес.

В IPv6 он выглядит как ::1

Subnetting Networks

Рассмотрим IP адрес 10.0.0.0/8

10.0.0.0
255.0.0.0

Диапазон хост-адресов (не включая концы):

10.0.0.0 - 10.255.255.255

N 00001010 00000000 00000000 00000000
B 00001010 11111111 11111111 11111111
M 11111111 00000000 00000000 00000000

RFC

INTERNET PROTOCOL RFC 791

TRANSMISSION CONTROL PROTOCOL RFC 793

HTTP RFC 2616

Requirements for Internet Hosts -- Communication Layers RFC 1122





TCP и UDP порты

Список портов по умолчанию

Сокеты

В соответсвии с RFC 793 TCP сокет - это эндпойнт состоящий из IP адреса и порта.

To allow for many processes within a single Host to use TCP communication facilities simultaneously, the TCP provides a set of addresses or ports within each host. Concatenated with the network and host addresses from the internet communication layer, this forms a socket. A pair of sockets uniquely identifies each connection. That is, a socket may be simultaneously used in multiple connections.

Про работы с сокетами в Python вы можете прочитать здесь