Warum ist INET6_ADDRSTRLEN in C als 46 definiert?

8

Das folgende Programm und seine Ausgabe zeigen, dass INET_ADDRSTRLEN als 16 definiert ist und INET_ADDRSTRLEN als 46 definiert ist.

Hier ist das Programm.

%Vor%

Hier ist die Ausgabe.

%Vor%

Ich kann verstehen, warum INET_ADDRSTRLEN 16 sein muss. Die größtmögliche Zeichenfolgendarstellung einer IPv4-Adresse belegt 15 Bytes, z. %Code%. Daher sind 16 Bytes erforderlich, um eine solche IP-Adresse mit ihrem abschließenden Nullzeichen zu speichern.

Aber warum muss "255.255.255.255" INET6_ADDRSTRLEN sein? Die größtmögliche Zeichenfolgendarstellung einer IPv6-Adresse verbraucht (meines Wissens nach) nur 39 Bytes, z. %Code%. Daher sind nur 40 Bytes erforderlich, um eine solche IP-Adresse mit ihrem abschließenden Nullzeichen zu speichern.

Gibt es eine String-Darstellung einer IPv6-Adresse, die 46 Bytes verbrauchen kann?

    
Lone Learner 12.09.2016, 04:34
quelle

2 Antworten

19
  

Warum ist INET6_ADDRSTRLEN in C als 46 definiert?

Weil POSIX definiert, dass es 46 ist:

  

INET6_ADDRSTRLEN
  46. ​​Länge der Zeichenfolge für IPv6.

Sie haben zwar Recht, dass die längste IPv6-Adresse 39 Byte benötigt, beim IPv4-Tunneling kann die längste Form jedoch aus 45 Byte bestehen:

%Vor%

Und das 46. Byte ist für das abschließende Null-Byte (in C ein String). Dies erklärt, wie es zu 46 wurde.

    
usr 12.09.2016, 04:52
quelle
3

Es ist wahrscheinlich für die IPv4-zugeordnete Form der Adressen des Formulars:

%Vor%

Lesen Sie mehr:

Wireshark-dev-Mailingliste

RFC 4291 Abschnitt 2.2

    
e.dan 12.09.2016 04:52
quelle

Tags und Links