Окончательное руководство по пониманию того, как сформулировать адрес IPv6

Для удовольствия я хотел бы лучше понять строительные блоки или элементы, которые находятся в адресе IPv6.

Вот основы, из моего понимания:

  • Адреса IPv6 имеют длину 128 бит (записано как 8 блоков, каждый из которых содержит 16 бит)
  • Каждый блок кодируется как шестнадцатеричные цифры от 0 до 0xffff. Ведущие нули могут быть опущены.
  • Можно добавить IP-адрес с четырьмя адресами, и он будет занимать более низкие 32 бита адреса IPv6. 1: 2: 3: 4: 5: 6: 200.201.202.203. (Правила для IPv4 такие, как ожидалось.)
  • Представление IPv4 может появляться только в конце.
  • Можно использовать синтаксис двойных двоеточий для представления одного или нескольких блоков с нулями. 1: 2:: 7: 8 эквивалентно 1: 2: 0: 0: 0: 0: 7: 8.
  • Каждый адрес IPv6 может содержать только один двойной двоеточие, иначе он будет синтаксически неправильным.
  • Двойной двоеточие может отображаться в начале, середине или конце ip6, но не в адресе IPv4 с пунктиром.

Правильно ли все перечисленные выше пункты?

Пожалуйста, не говорите мне, чтобы прочитать RFC. В этом есть несколько вопросов, и на самом деле никто не приходит с несколькими простыми примерами для описания различных механизмов кодирования. Я уверен, что многие оценят простой список с примерами.

Инструмент онлайн-тестирования Самый близкий онлайн-инструмент, который поможет http://www.dominicsayers.com/source/beta/is_email/test/ но сообщения сбивают с толку, и на самом деле он не говорит на простом английском языке, что правильно, неправильно и почему. Он также фактически создан для электронных писем, которые, конечно, могут содержать адреса IPv6, поэтому он не совсем идеален.

Ответ 1

В общем, да, ваши баллы верны.

Вы уверены, что читаете RFC? RFC 3513, раздел 2.2 имеет именно то, о чем вы просите. Это очень хорошо написано для RFC. =) Я не могу не отметить это, так как это может быть очень полезно для будущих людей, читающих этот вопрос.

Ответ 2

Очевидно, этот бит является опечаткой:

можно использовать синтаксис двойных двоеточий для представления одного или нескольких блоков с нулями. 1: 2:: 6: 7 эквивалентно 1: 2: 3: 4: 5: 6: 7: 8.

1:2::6:7 означает 1:2:0:0:0:0:6:7.

Я раньше этого не слышал:

двойной двоеточие может [не отображаться] в IP4-адресе.

Но я сделал тестовую программу и, похоже, подтвердил ее.

$ ./testipv6 0:0:0:0:0:0:192.168.0.1
0:0:0:0:0:0:192.168.0.1: OK

$ ./testipv6 0:0:0:0:0:0:192.168::1
0:0:0:0:0:0:192.168::1: ERROR

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


testipv6.c

#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <netinet/in.h>

int convert(const char *addr)
{
    struct in6_addr dst;

    return inet_pton(AF_INET6, addr, (void *)&dst);
}

int main(int argc, char **argv)
{
    if (argc == 1) {
        fprintf(stderr, "Usage: testipv6 <addr>\n");
        exit(2);
    }

    while (argc > 1) {
        argc--, argv++;
        const char *addr = argv[0];

        if (convert(addr)) {
            printf("%s: OK\n", addr);
        } else {
            printf("%s: ERROR\n", addr);
        }
    }
}

Ответ 3

Адреса IPv6 с идентификатором зоны имеют уникальное обозначение, хотя оно не относится к самому адресу. В системе с несколькими интерфейсами, поддерживающими IPv6, локальный адрес ссылки должен быть каким-то образом устранен. Его сделано с использованием обозначения "%".

FE80:: AA% eth0 ссылается на локальный адрес ссылки, доступный через интерфейс eth0. Это может быть индекс интерфейса в некоторых формах, FE80:: AA% 10