Ответ
Октет в контексте IP-адресации — это группа из 8 битов (1 байт). IPv4-адрес, имеющий длину 32 бита, традиционно представляется в виде четырёх десятичных октетов, разделённых точками (dot-decimal notation), например, 192.168.1.1.
Детали:
- Каждый октет может принимать значения от 0 до 255 (поскольку 2⁸ = 256).
- Такое представление было выбрано для удобства чтения и запоминания человеком, в отличие от работы с одним 32-битным числом.
- В сетевом программировании на C/C++ IP-адрес часто хранится в бинарном виде (например, в структуре
in_addr), но для конфигурации и вывода преобразуется в строку с октетами.
Пример работы с октетами в C++:
#include <iostream>
#include <arpa/inet.h> // для inet_pton, inet_ntop
int main() {
// IPv4-адрес как 32-битное целое число в сетевом порядке байт (big-endian)
in_addr_t ip_binary;
// Преобразование строки с октетами в бинарный формат
inet_pton(AF_INET, "10.20.30.40", &ip_binary);
// Доступ к отдельным октетам через побитовые операции
unsigned char *octets = (unsigned char*)&ip_binary;
// Порядок октетов в памяти зависит от endianness.
// После inet_pton октеты в сетевом порядке (big-endian):
// octets[0] = 10, octets[1] = 20, octets[2] = 30, octets[3] = 40
std::cout << "Октеты адреса: ";
for(int i = 0; i < 4; ++i) {
std::cout << (int)octets[i]; // Приведение к int для вывода числа, а не символа
if(i < 3) std::cout << '.';
}
std::cout << std::endl;
// Манипуляции с октетами (например, изменение третьего октета)
octets[2] = 100; // Меняем 30 на 100
// Обратное преобразование в строку
char ip_str[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &ip_binary, ip_str, INET_ADDRSTRLEN);
std::cout << "Новый адрес: " << ip_str << std::endl; // Выведет: 10.20.100.40
return 0;
}
Октеты являются фундаментальным понятием для работы с IP-адресами, масками подсетей (которые также состоят из 4 октетов) и для понимания принципов разбиения сети на подсети (subnetting).