터미널에서 나는 달렸다
$ nc -l -6 ::1 5000
다른 터미널에서 나는 달렸다
$ cat /proc/net/tcp6
그리고 다음 줄을 보았습니다:
0: 00000000000000000000000001000000:1388 00000000000000000000000000000000:0000 ...
::1:0:0:0
왜 내가 듣고 있다고 하지 않고 듣고 있다고 말합니까 ::1
?
답변1
당신이 보면이 파일의 내용을 생성하는 코드, 바라보다:
seq_printf(seq,
"%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
"%02X %08X:%08X %02X:%08lX %08X %5u %8d %lu %d %pK %lu %lu %u %u %d\n",
i,
src->s6_addr32[0], src->s6_addr32[1],
src->s6_addr32[2], src->s6_addr32[3], srcp,
그리고:
struct in6_addr {
union {
__u8 u6_addr8[16];
#if __UAPI_DEF_IN6_ADDR_ALT
__be16 u6_addr16[8];
__be32 u6_addr32[4];
#endif
} in6_u;
#define s6_addr in6_u.u6_addr8
#if __UAPI_DEF_IN6_ADDR_ALT
#define s6_addr16 in6_u.u6_addr16
#define s6_addr32 in6_u.u6_addr32
#endif
};
128비트 IPv6 주소는 16바이트 배열이며, 주소의 최하위 비트는 16번째 바이트의 최하위 비트입니다. 그러나 리틀 엔디안 시스템에서 4개의 32비트 숫자 배열로 u6_addr32로 참조되는 경우 최하위 비트는 네 번째이자 마지막 숫자의 25번째 비트가 됩니다. 이 0x01000000 32비트 정수의 바이트는 실제로 16진수 0x00, 0x00, 0x00, 0x01 형식으로 메모리에 저장됩니다. 따라서 IPv6 주소는 0x00 x 15, 0x01로 저장됩니다.