programing

INET6_ADDRSTRLEN이 C에서 46으로 정의된 이유는 무엇입니까?

jooyons 2023. 11. 1. 22:21
반응형

INET6_ADDRSTRLEN이 C에서 46으로 정의된 이유는 무엇입니까?

다음 프로그램과 그 출력은 다음을 보여줍니다.INET_ADDRSTRLEN다음과 같이 정의됩니다.16그리고.INET6_ADDRSTRLEN다음과 같이 정의됩니다.46.

여기 프로그램이 있습니다.

#include <stdio.h>
#include <arpa/inet.h>

int main()
{
    printf("%d\n", INET_ADDRSTRLEN);
    printf("%d\n", INET6_ADDRSTRLEN);
    return 0;
}

여기 출력이 있습니다.

16
46

그 이유를 이해할 수 있습니다.INET_ADDRSTRLEN필요한16. IPv4 주소의 가능한 최대 문자열 표현은 15바이트를 소비합니다."255.255.255.255". 따라서 이러한 IP 주소를 종단 null 문자로 저장하려면 16바이트가 필요합니다.

그런데 왜?INET6_ADDRSTRLEN있어야 할46? IPv6 주소의 가능한 최대 문자열 표현은 (내가 아는 바에 따르면) 39 바이트만 소비합니다."ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff". 따라서 종료 Null 문자를 사용하여 이러한 IP 주소를 저장하는 데 필요한 바이트는 40바이트에 불과합니다.

46바이트를 소비할 수 있는 IPv6 주소의 문자열 표현이 있습니까?

INET6_ADDRSTRLEN이 C에서 46으로 정의된 이유는 무엇입니까?

POSIX는 다음과 같이 정의합니다.

INET6_ADDRSTRLEN
46. IPv6에 대한 문자열 양식의 길이입니다.

IPv4 터널링의 경우 가장 긴 IPv6 주소가 39바이트가 소요되는 것은 맞지만 가장 긴 형식은 45바이트가 될 수 있습니다.

ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255

그리고 46번째 바이트는 종결 null 바이트(Ca 문자열)를 위한 것입니다.이것이 어떻게 46세가 되었는지 설명해 줍니다.

아마도 IPv4 매핑 형식의 주소에 대한 것일 것입니다.

ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255

자세히 보기:

와이어샤크 개발 메일링 리스트

RFC 4291 섹션 2.2

언급URL : https://stackoverflow.com/questions/39443413/why-is-inet6-addrstrlen-defined-as-46-in-c

반응형