← Назад к вопросам

Что такое ip адрес?

1.0 Junior🔥 121 комментариев
#REST API и HTTP

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# IP адрес: основные концепции

Определение

IP адрес (Internet Protocol address) — это уникальный числовой идентификатор, который назначается каждому устройству в компьютерной сети для маршрутизации данных и обмена информацией между устройствами.

IP адрес позволяет:

  • Идентифицировать устройство в сети
  • Маршрутизировать пакеты данных от отправителя к получателю
  • Устанавливать соединения между компьютерами, серверами и другими устройствами

Версии IP: IPv4 и IPv6

IPv4 (Internet Protocol версия 4)

Формат: четыре октета (группы цифр от 0 до 255), разделенные точками.

192.168.1.1
8.8.8.8
172.16.0.1
  • Длина: 32 бита
  • Количество возможных адресов: 2^32 = 4,294,967,296 адресов
  • Состояние: Устаревает из-за нехватки свободных адресов

Структура IPv4:

192.168.1.1
│   │   │  └─ Host ID (часть адреса, уникальная для хоста)
│   │   └────── Network ID (часть адреса, общая для подсети)
│   └─────────── Может быть переведена в бинарный формат
└───────────────── Всего 32 бита (8+8+8+8)

IPv6 (Internet Protocol версия 6)

Формат: восемь групп шестнадцатеричных чисел, разделенные двоеточиями.

2001:0db8:85a3:0000:0000:8a2e:0370:7334
2001:db8:85a3::8a2e:370:7334  (сокращенная запись)
::1  (localhost)
  • Длина: 128 бит
  • Количество возможных адресов: 2^128 = 340 триллионов адресов
  • Состояние: Медленно вводится как замена IPv4

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

1. Публичные (Public) IP адреса

  • Видны в интернете
  • Уникальны во всемирной сети
  • Назначаются интернет-провайдерами
  • Используются для доступа к веб-сайтам, сервисам
# Примеры публичных IP:
# 8.8.8.8 - Google DNS
# 1.1.1.1 - Cloudflare DNS
# Любой адрес, назначенный вашему маршрутизатору провайдером

2. Приватные (Private) IP адреса

  • Видны только внутри локальной сети (LAN)
  • Не маршрутизируются в интернете
  • Используются для внутренних сетей компаний, домов
  • Зарезервированные диапазоны (RFC 1918):
10.0.0.0 - 10.255.255.255        (10/8 prefix, 16 777 216 адресов)
172.16.0.0 - 172.31.255.255      (172.16/12 prefix, 1 048 576 адресов)
192.168.0.0 - 192.168.255.255    (192.168/16 prefix, 65 536 адресов)

Примеры использования:

  • Домашний маршрутизатор: 192.168.1.1
  • Локальные компьютеры: 192.168.1.100, 192.168.1.101
  • Корпоративные сети: 10.x.x.x

3. Loopback IP адрес

  • Для обращения к самому себе
IPv4: 127.0.0.1
IPv6: ::1
# Пример в Python
import socket

# Проверка подключения на localhost
sock = socket.socket()
sock.bind(('127.0.0.1', 8000))
sock.listen(1)
print('Server listening on 127.0.0.1:8000')

Работа с IP адресами в Python

1. Получение IP адреса хоста

import socket

# Получить имя хоста
hostname = socket.gethostname()
print(hostname)  # computer-name

# Получить IP адрес по имени хоста
ip = socket.gethostbyname(hostname)
print(ip)  # 192.168.1.100

# Получить все адреса хоста
info = socket.gethostbyname_ex(hostname)
print(info)  # ('hostname', ['alias1', 'alias2'], ['192.168.1.100'])

2. Проверка валидности IP адреса

import ipaddress

def validate_ip(ip_string):
    try:
        ipaddress.ip_address(ip_string)
        return True
    except ValueError:
        return False

print(validate_ip('192.168.1.1'))  # True
print(validate_ip('999.999.999.999'))  # False
print(validate_ip('::1'))  # True (IPv6)

3. Работа с подсетями (Subnets)

import ipaddress

# Создание подсети
network = ipaddress.ip_network('192.168.1.0/24')
print(network)  # 192.168.1.0/24

# Получить хосты в подсети
for ip in network.hosts():
    print(ip)  # 192.168.1.1, 192.168.1.2, ... 192.168.1.254

# Проверка, принадлежит ли адрес подсети
ip = ipaddress.ip_address('192.168.1.100')
print(ip in network)  # True

# Информация о подсети
print(network.network_address)  # 192.168.1.0
print(network.broadcast_address)  # 192.168.1.255
print(network.num_addresses)  # 256

4. Различие между публичным и приватным адресом

import ipaddress

ip1 = ipaddress.ip_address('8.8.8.8')
ip2 = ipaddress.ip_address('192.168.1.1')
ip3 = ipaddress.ip_address('127.0.0.1')

print(ip1.is_global)  # True (публичный)
print(ip2.is_private)  # True (приватный)
print(ip3.is_loopback)  # True (loopback)

5. Получение публичного IP адреса

import requests

def get_public_ip():
    try:
        response = requests.get('https://api.ipify.org?format=json')
        return response.json()['ip']
    except Exception as e:
        return None

print(get_public_ip())  # 123.45.67.89

IP адреса в веб-приложениях

FastAPI пример

from fastapi import FastAPI, Request

app = FastAPI()

@app.get('/my-ip')
async def get_ip(request: Request):
    client_ip = request.client.host
    return {'client_ip': client_ip}

# request.client.host содержит IP адрес клиента, который подключился к серверу

Flask пример

from flask import Flask, request

app = Flask(__name__)

@app.route('/my-ip')
def get_ip():
    client_ip = request.remote_addr
    return {'client_ip': client_ip}

Маска подсети (Subnet Mask)

Маска подсети определяет, какая часть IP адреса относится к сети, а какая к хосту.

IP адрес:      192.168.1.100
Маска:         255.255.255.0
Network part:  192.168.1.0
Host part:     .100

В CIDR нотации: 192.168.1.100/24
(24 бита для сети, 8 бит для хостов)

Когда IP адреса важны в разработке

Сетевые приложения — получение, проверка, маршрутизация ✅ Аутентификация — ограничение доступа по IP (whitelist) ✅ Логирование — отслеживание, откуда пришел запрос ✅ Кэширование — разные кэши для разных IP ✅ Безопасность — защита от DDoS, rate limiting по IP ✅ Микросервисы — коммуникация между сервисами по IP ✅ Docker/Kubernetes — каждый контейнер имеет свой IP

Вывод

IP адрес — это уникальный идентификатор устройства в сети, позволяющий маршрутизировать данные. IPv4 использует 4 группы цифр (32 бита), IPv6 использует 8 групп шестнадцатеричных чисел (128 бит). Публичные IP видны в интернете, приватные используются только внутри сетей. В Python используй библиотеку ipaddress для работы с IP адресами, валидации и проверки принадлежности подсетям.