요약
- RFC 3493은
AF_INET6소켓이 IPv4 매핑 IPv6 주소로 표현된 IPv4 피어와 통신할 수 있도록 허용했다. 이 RFC의IPV6_V6ONLY옵션은 그 이중 계열 동작을 비활성화하지만, RFC는 이 옵션을 기본값으로 꺼진 상태로 규정했다. - 따라서 소켓 계열 레이블과 와일드카드 바인드의 성공만으로는 어떤 피어 계열이 해당 프로세스에 도달할 수 있는지, 별도의 IPv4 리스너가 같은 포트를 점유할 수 있는지 증명할 수 없었다. 옵션 상태, 커널 의미론, 바인드 결과는 서로 별개의 근거였다.
운영 대장은 소켓을 생성할 때 사용된 상수 기준으로 나열할 수 있다. 그러면AF_INET6이 하나의 경계처럼 보인다. 이 프로세스는 IPv6이고, 저 다른 프로세스는 IPv4라는 식이다. RFC 3493은 그런 단순한 추론을 보존하지 않았다. 그 기본 소켓 API는 IPv4 전용 애플리케이션에서 두 계열을 모두 서비스할 수 있는 시스템으로 이행하는 시기에, 모든 애플리케이션이 완전히 분리된 두 인터페이스를 이해하지 않아도 되도록 설계되었다.
호환성 장치가 바로 IPv4 매핑 IPv6 주소였다. IPv4 주소는 고정된::ffff:접두어 아래 128비트 구조의 하위 32비트 안에 나타날 수 있었다. 애플리케이션은AF_INET6소켓을 통해 이 표현을 사용하여 IPv4 노드에 접속할 수 있었다. 수신 측에서는 커널이 IPv4 피어를sockaddr_in6로 되돌려 줄 수 있었다. 이를 신경 쓰는 애플리케이션은IN6_IS_ADDR_V4MAPPED()로 주소를 검사할 수 있었다.
이것은 애플리케이션과 커널 사이 경계에서의 표현 계약이었다. 원격 호스트가 IPv6를 실행한다고 말하지 않았고, 패킷이 IPv6 전용 경로를 통과했다고 말하지 않았으며, 서비스가 네이티브 피어와 매핑된 피어에 동일한 정책을 적용했다고 말하지도 않았다. 이는 단지 하나의 API가 두 개 이상의 네트워크 계열을 전달할 수 있는 방식을 설명했을 뿐이다.
RFC 3493은IPV6_V6ONLY로 리스너 경계를 명시적으로 만들었다. 활성화하면 이 불리언 옵션은AF_INET6소켓을 IPv6 통신으로 제한한다. RFC는 이를 기본값으로 꺼진 상태로 정했다. 이 역사적 기본값 때문에 와일드카드 IPv6 바인드는 이중 계열이 될 수 있었다. 즉 프로세스는 네이티브 IPv6 피어와 매핑된 형태로 표현된 IPv4 피어를 모두 수신할 수 있었다.
RFC의 예제는 운영상 결과를 드러낸다. 옵션을 켜면 같은 서버의 두 버전이 같은 포트를 사용할 수 있었다. 하나는 IPv6용으로, 하나는 IPv4용으로 바인드된다. 따라서 이 옵션은 장식적 메타데이터가 아니었다. 어떤 소켓이 실질적인 포트 네임스페이스를 점유하는지를 결정하는 데 기여했다. 첫 번째 리스너의 바인드 의미론이 두 계열을 모두 점유하면, 배포 환경에는 올바르게 구성된 두 바이너리가 있음에도 의도한 분할이 실패할 수 있었다.
이것이 프로세스 인벤토리가 리스너 근거보다 약한 이유다. “IPv6 데몬이 실행 중이다”는 IPv6만 들어올 수 있음을 확립하지 않는다. “IPv4 데몬이 구성되어 있다”는 그것이 성공적으로 바인드했음을 확립하지 않는다. 한 디스크립터에서bind()가 성공했다고 방화벽이나 네임스페이스 바깥에서의 도달 가능성이 확립되지 않는다. 연결이 수락되었다고 인가가 확립되지 않고, 인가가 확립되었다고 서비스가 전달된 것이 확립되지 않는다.
매핑된 형태에는 한 가지 자격 조건이 더 필요하다. RFC 3493은IPV6_V6ONLY가 SIIT를 통해 유효한 IPv6 트래픽으로 들어오는 IPv4 매핑 주소에는 영향을 주지 않는다고 말한다. 이후의 변환 사양들은 알고리즘적 IPv4 내장 접두어 및 패킷 변환을 로컬 소켓 표현과 구별한다. 따라서 매핑처럼 보이는 피어를 목격하는 것만으로는 경로를 재구성할 수 없다. 수신 기록에는 매핑이 어디서 발생했고 어떤 커널 동작이 패킷을 허용했는지가 남아야 한다.
같은 규율이 이름 확인에도 적용된다.getaddrinfo()는 계열 및 매핑 플래그에 따라 선택된 후보를 반환할 수 있다. RFC 6724는 이후 기본 주소 선택을 규정하며, RFC 8305는 IPv6와 IPv4 후보를 신뢰할 약속이 아니라 경쟁시킬 경로로 다룬다. 반환된 주소는 후보일 뿐이다. 리스너가 포트를 점유한다는 증거도, 경로가 동작한다는 증거도, 애플리케이션이 트랜잭션을 완료했다는 증거도 아니다.
RFC 3493 자체는 시점이 있는 근거다. Informational 문서이고, RFC 2553을 폐기(obsolete)하며, Open Group/IEEE/ISO 사양을 공식 소켓 표준으로 지목한다.IPV6_V6ONLY의 기본값이 꺼져 있다는 진술은 2003년 저자들이 공개한 API 계약을 기록한 것이다. 이를 측정 없이 모든 현재 커널, 언어 런타임, 컨테이너 네트워크 또는 관리형 플랫폼에 투영해서는 안 된다.
지속 가능한 교훈은 더 좁고 더 강력하다. 주소 계열, 실효 옵션 값, 와일드카드 범위, 성공한 바인드, 수락된 피어 표현, 인가, 서비스 결과는 일련의 접수 영수증 사다리를 이룬다. 감사가 한 단계를 건너뛰면 “IPv6 리스너”라는 레이블이 IPv4 출입구를 숨길 수 있다. 또는 의도된 IPv4 리스너가 처음부터 포트를 점유하지 못했다는 사실 자체를 숨길 수 있다.
출처
- https://www.rfc-editor.org/rfc/rfc3493.html
- https://www.rfc-editor.org/rfc/rfc3493.txt
- https://www.rfc-editor.org/info/rfc3493
- https://datatracker.ietf.org/doc/rfc3493/
- https://datatracker.ietf.org/doc/rfc3493/history/
- https://www.rfc-editor.org/errata_search.php?rfc=3493
- https://www.rfc-editor.org/rfc/rfc2553.html
- https://www.rfc-editor.org/rfc/rfc2133.html
- https://www.rfc-editor.org/rfc/rfc4291.html
- https://www.rfc-editor.org/rfc/rfc4007.html
- https://www.rfc-editor.org/rfc/rfc4038.html
- https://www.rfc-editor.org/rfc/rfc3542.html
- https://www.rfc-editor.org/rfc/rfc6052.html
- https://www.rfc-editor.org/rfc/rfc6145.html
- https://www.rfc-editor.org/rfc/rfc6724.html
- https://www.rfc-editor.org/rfc/rfc8305.html
- https://www.iana.org/assignments/address-family-numbers/address-family-numbers.xhtml
- https://learn.microsoft.com/en-us/windows/win32/winsock/dual-stack-sockets
- https://heng.lu/minimum-initial-specification-localized-future-decision-voluntary-adoption-internet-coordination-system/
- https://heng.lu/on-reality-layers-symbolic-power-and-why-clarity-feels-so-hostile/
회원 브리핑
프로필 심층 컨텍스트
올바른 멤버십 등급으로 로그인하면 전체 브리핑과 출처 노트를 볼 수 있습니다.
Strategic Circle 전용
Strategic Circle
모든 독자에게 공개됩니다. 가입 후 로그인하면 프로필 브리핑를 열람할 수 있습니다.
Strategic Circle 가입하기Leadership Alliance 전용
Leadership Alliance
자격을 갖춘 IP 자산 소유자 및 운영진을 위한 콘텐츠입니다. 로그인하면 Leadership Alliance 브리핑을 열람할 수 있습니다.
Leadership Alliance 가입하기





