Полное руководство для понимания, как сформулировать адрес IPv6 - PullRequest
12 голосов
/ 04 февраля 2011

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

Вот основы, насколько я понимаю:

  • IPv6адреса имеют длину 128 бит (записываются как 8 блоков, каждый из которых содержит 16 бит)
  • Каждый блок кодируется в виде шестнадцатеричных цифр от 0 до 0xffff.Лидирующие нули могут быть опущены.
  • Можно добавить адрес с точечным квадратом IPv4, и он будет занимать младшие 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, поэтому он не совсем идеален.

Ответы [ 3 ]

7 голосов
/ 09 февраля 2011

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

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

6 голосов
/ 04 февраля 2011

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

возможно использовать синтаксис двойных двоеточий для представления одного или нескольких блоков с нулями.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);
        }
    }
}
0 голосов
/ 22 декабря 2016

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...