2010-06-28 1 views
2

영역 색인은 sockaddr_in6 구조의 scope_id와 어떤 관련이 있습니까?IPv6 영역 색인 및 scope_id

기능은 플랫폼에 따라 다르며 관련성을 알고 싶습니다. Windows의 경우 예를 들어 SCOPE_ID structure (32 비트 값)이 있습니다. Mac OSX는 32 비트 값만 있습니다. 분명히 32 비트 값은 갈 길이지만 정확히 어떻게 배치됩니까? 여전히 상위 4 비트가 "레벨"입니까? 네트워크 바이트 순서가 어떻게 영향을 줍니까?

또한 아래에서 IP 주소 (예 : FF80 :: 1 % 1)에 지정된 영역 색인이 앞서 설명한 구조의 아래쪽 28 비트로 직접 변환됩니다. 숫자가 아닌 이름을 사용하는 Mac OSX에서는 어떻게 작동합니까 (예 : FF80 :: 1 % en0). 4 CC로 인코딩합니까? 똑같이 나는 리눅스가 28 비트에 적합하지 않을 수있는 4 문자를 사용한다는 것을 기억하는 것 같다.

누군가가이 혼란을 설명 할 수 있습니까? 인터넷에서 ipv6에 대한 소중한 정보가 거의 있기 때문에 필자는이 모든 작업에 대한 자습서를 작성해야 할 것입니다.

편집 : scope_id가 네트워크 바이트 순서입니까? 난 그냥 recvfrom에서 반환 된 scope_id 찾고 있어요 그리고 그것은 리틀 엔디안 순서에있을 것으로 보인다 ... 그게 옳을 수 없어?

답변

1

영역 및 범위의 색인은 동일하고 자주 상호 교환되지만 용어 자체는 다릅니다.

범위는 "전역 범위", "로컬 범위", "범용 범위"와 같이 사용되며 특정 IPv6 주소가 얼마나 고유한지를 나타냅니다. 모든 인터페이스에는 즉각적인 LAN 세그먼트에 고유 한 로컬 범위가 있습니다. 이는 로컬 장치의 자동 구성 및 검색, 예를 들어 방금 네트워크에 연결된 프린터를 말하는 데 유용합니다. 전역 범위 IPv6 주소는 DHCP 서버에서 제공 할 수 있습니다.

영역은 로컬 범위 내에서 특별한 효과적인 인터페이스를 지정하는 것입니다.

범위 지수는 다음과 같이 나는 구조를 사용하는 인터페이스를 지정하도록 인터페이스 색인 다른 :

struct interface_req_t { 
     uint32_t        ir_interface; 
     uint32_t        ir_scope_id; 
}; 

각 플랫폼은 Windows가 여러 재 해석을 갖는 값을 해석하는 방법에 고유 도메인에 따른 인터페이스 열거 Windows 구현의 단점은 핫 스왑 어댑터를 사용할 때 인덱스가 변경 될 수 있다는 것입니다. 유닉스에서는 인터페이스 이름이 %qe0, %eth0 등으로 보이는 경향이있다. 필요하다면 숫자 형태로 해석 될 수있다. if_nametoindex(). Windows Vista는 호환되는 API를 추가합니다.

로컬 범위 만 주소 접두사 fe80 ::/10으로 식별 할 수 있습니다.

Windows SCOPE_ID는 IPv4 멀티 캐스트에도 존재하는 디자인 즉, 주소의 관리 도메인을 분리하여 보여줍니다. 모두 선택 사항이며 흔히 무시됩니다.

+0

건배 ... 좋은 대답이지만 한 가지를 잃어 버렸습니다. 귀하의 interface_req_t는 scope_id 필드에 넣기에는 너무 큽니다 ... – Goz

+0

저는 해당 인터페이스를 사용하여 getifaddrs()/GetAdapterAddresses()를 호출하여 일치하는 인터페이스를 찾을 수 있습니다. #/scope # . –