Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
IP адрес (Internet Protocol address)
IP адрес — это уникальный цифровой идентификатор устройства в компьютерной сети. Он позволяет устройствам находить друг друга и обмениваться данными в интернете. IP адрес работает на сетевом уровне (Layer 3) модели OSI и необходим для маршрутизации пакетов.
Версии IP
IPv4 (Internet Protocol version 4)
Довольно долго это был стандарт. Формат: четыре блока чисел от 0 до 255, разделённые точками.
Примеры IPv4 адресов:
192.168.1.1 (локальный адрес в домашней сети)
8.8.8.8 (DNS сервер Google)
127.0.0.1 (localhost)
172.16.0.0 (приватный диапазон)
Размер: 32 бита = 2^32 = 4,3 миллиарда адресов (уже исчерпаны)
IPv6 (Internet Protocol version 6)
Новый стандарт, созданный чтобы решить проблему исчерпания IPv4. Формат: шестнадцатеричные блоки, разделённые двоеточиями.
Примеры IPv6 адресов:
2001:4860:4860::8888 (DNS Google в IPv6)
::1 (localhost в IPv6)
fe80::1 (локальный link-local адрес)
Размер: 128 бит = 2^128 = 340 триллионов триллионов адресов
Типы IP адресов
1. Публичный (Public) IP адрес
Видим в интернете, уникален в масштабе мира. Выделяется провайдером.
// Пример: узнать публичный IP в приложении
String publicIp = "203.0.113.45"; // ваш адрес в интернете
2. Приватный (Private) IP адрес
Используется внутри локальных сетей (дома, в офисе, в компании). Не видим в интернете.
Диапазоны приватных адресов (RFC 1918):
10.0.0.0 — 10.255.255.255 (10.0.0.0/8)
172.16.0.0 — 172.31.255.255 (172.16.0.0/12)
192.168.0.0 — 192.168.255.255 (192.168.0.0/16)
Пример сетевой топологии:
Интернет (Публичный IP: 203.0.113.45)
↓
Маршрутизатор (дома)
↓
┌─────────────────────────────────┐
│ Домашняя сеть (192.168.1.0) │
│ Ноутбук: 192.168.1.10 │
│ Смартфон: 192.168.1.20 │
│ ПК: 192.168.1.30 │
└─────────────────────────────────┘
3. Loopback (обратный) адрес
Воображаемый адрес, петля на себя же. Используется для тестирования.
IPv4: 127.0.0.1
IPv6: ::1
4. Broadcast адрес
Адрес для отправки пакета всем устройствам в сети.
В сети 192.168.1.0/24 broadcast адрес: 192.168.1.255
IP адрес и сетевая маска
Сетевая маска (Subnet Mask) определяет, какая часть IP адреса относится к сети, а какая к хосту.
IP адрес: 192.168.1.100
Маска: 255.255.255.0 (или /24 в CIDR)
^^^^^^^^^^^^^^^^ ^^^ сеть
^^^ хост
Пример с Java:
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Collections;
public class IPAddressExample {
public static void main(String[] args) throws Exception {
// Получить localhost
InetAddress localhost = InetAddress.getLocalHost();
System.out.println("Hostname: " + localhost.getHostName());
System.out.println("IP: " + localhost.getHostAddress());
// Получить все сетевые интерфейсы
NetworkInterface.networkInterfaces()
.forEach(iface -> {
System.out.println("Интерфейс: " + iface.getDisplayName());
iface.getInterfaceAddresses().forEach(addr -> {
System.out.println(" IP: " + addr.getAddress().getHostAddress());
System.out.println(" Маска: " + addr.getNetworkPrefixLength());
});
});
// Проверить доступность хоста
InetAddress google = InetAddress.getByName("8.8.8.8");
boolean isReachable = google.isReachable(5000);
System.out.println("Google доступен: " + isReachable);
}
}
Как работает маршрутизация
// Ваш приложение отправляет пакет на сервер
String serverIp = "203.0.113.100";
int port = 8080;
Socket socket = new Socket(serverIp, port);
OutputStream out = socket.getOutputStream();
out.write("Hello Server".getBytes());
// Маршрутизаторы смотрят на IP адрес и направляют пакет дальше
// Pакет проходит через интернет и достигает конечного адреса
DNS и IP адреса
DNS (Domain Name System) переводит доменные имена в IP адреса.
// java.net.InetAddress делает это за вас
InetAddress address = InetAddress.getByName("google.com");
String ip = address.getHostAddress(); // "142.250.185.46" или подобный
// Обратный DNS lookup
InetAddress reverseAddress = InetAddress.getByName("8.8.8.8");
String hostname = reverseAddress.getHostName(); // может быть или не быть
IP адреса в контексте Java приложений
Получить IP клиента в HttpServletRequest
public class UserController {
@PostMapping("/login")
public ResponseEntity<?> login(HttpServletRequest request) {
String clientIp = getClientIP(request);
System.out.println("User login from: " + clientIp);
return ResponseEntity.ok("OK");
}
private String getClientIP(HttpServletRequest request) {
String xForwardedFor = request.getHeader("X-Forwarded-For");
if (xForwardedFor != null && !xForwardedFor.isEmpty()) {
return xForwardedFor.split(",")[0]; // первый IP если за proxy
}
return request.getRemoteAddr();
}
}
Запретить доступ с определённого IP
public boolean isIpAllowed(String clientIp) {
Set<String> blacklist = Set.of("192.168.1.50", "203.0.113.77");
return !blacklist.contains(clientIp);
}
Важные концепции
- DHCP — протокол, автоматически выделяющий IP адреса
- NAT (Network Address Translation) — преобразование приватных IP в публичные
- VPN — маскирует ваш реальный IP адрес
- Proxy — промежуточный сервер, может скрывать ваш IP
Вывод: IP адрес — это фундаментальная часть сетевой коммуникации. Понимание IPv4/IPv6, приватных/публичных адресов и маршрутизации важно для разработки надежных сетевых приложений и отладки проблем с подключением.