노무현 전 대통령 서거 추모글 남기기

Longest Prefix

개발자가 뭐길래/Network | 2010. 1. 12. 10:31 | sweetw

라우팅 룰을 넣을 때, 프리픽스가 긴 것이 우선순위가 높다.

http://en.wikipedia.org/wiki/Longest_prefix_match

'개발자가 뭐길래 > Network' 카테고리의 다른 글

IPv4 compatible address와 IPv4 mapped address의 차이는?  (0) 2009.08.26
The name-to-address translation function  (2) 2009.06.26
PTR  (0) 2009.06.26
RR(resource records) 자원 레코드  (0) 2009.06.26
FQDN  (0) 2009.06.26

IPv4 compatible address는 IPv4 주소 (32비트) 96비트의 0을 채운 것입니다. 예를 들어, IPv4 주소가 143.248.2.5이면, “::143.248.2.5”가 되는 것입니다. IPv4 mapped address는 IPv4 주소 (32비트) 앞에 80개의 0과 16개의 1을 채우는 것입니다. 예를 들면, “::ffff:143.248.2.5”가 됩니다.

IPv4 compatible 주소는 IPv6 컴퓨터인데, IPv4 네트웍에 연결된 경우에 사용합니다. 이런 경우에, IPv6 패킷은 IPv4 패킷 위에 tunneling 되어서 다른 IPv6 컴퓨터로 전송되어야 합니다. IPv4 네트웍 속에 덮여있는 IPv6 컴퓨터인 셈이죠.

IPv6 mapped address는 IPv4 컴퓨터에 IPv6 주소를 할당하는 경우입니다. IPv6 compatible이 IPv4 cloud 안에 갇힌 컴퓨터라면, 이 경우에는 그런 것은 없지만 IPv4 컴퓨터에 패킷을 전달하기 위해서는 IPv4 컴퓨터가 IPv6에서 알 수 있는 주소를 가져야 하겠죠.

'개발자가 뭐길래 > Network' 카테고리의 다른 글

Longest Prefix  (0) 2010.01.12
The name-to-address translation function  (2) 2009.06.26
PTR  (0) 2009.06.26
RR(resource records) 자원 레코드  (0) 2009.06.26
FQDN  (0) 2009.06.26
[RFC 2133] Basic Socket Interface Extensions for IPv6)
좋은 참고가 되었다.
http://www.ietf.org/rfc/rfc2133.txt?number=2133

추천받은 사이트 (Powerd by DNS)

'개발자가 뭐길래 > Network' 카테고리의 다른 글

Longest Prefix  (0) 2010.01.12
IPv4 compatible address와 IPv4 mapped address의 차이는?  (0) 2009.08.26
PTR  (0) 2009.06.26
RR(resource records) 자원 레코드  (0) 2009.06.26
FQDN  (0) 2009.06.26

PTR

개발자가 뭐길래/Network | 2009. 6. 26. 15:25 | sweetw
DNS 서비스의 PTR 레코드를 수정하는 기능입니다.
사용자가 등록한 IP주소에 호스트이름을 지정할 수 있습니다.
예를 들어 10.168.192.in-addr.arpa를 등록한 사용자는

domain.com           A    192.168.10.1
www.domain.com   A    192.168.10.1

 의 역으로

1.10.168.192.in-addr.arpa    PTR    domain.com
1.10.168.192.in-addr.arpa    PTR    www.domain.com

식으로 등록, IP주소를 가지고 도메인을 매핑할 수 있습니다. 

출처 : http://kr.dnsever.com/help/wiki/wiki.php/EditPTRHelp
DNS 서버의 기본 동작은 클라이언트에서 질의 메시지를 받아 그 내용에 따라서 등록 정보를 회신하는 것입니다.
질의 메시지에는 다음과 같은 세 가지 정보가 포함되어 있습니다.

 문의 항목
설 명 
 이름 서버나 메일 배송처(메일 주소의 @ 이후의 주소)등의 이름 
 클래스  이름의 클래스를 나타냅니다. DNS의 구조가 고안되었을 때는 인터넷 이외의 네트워크에서의 이용도 고려되어 있었기 때문에 클래스를 두었습니다. 하지만 지금은 인터넷 이외에서는 별로 사용되지 않으므로 클래스는 인터넷을 나타내는 IN이라는 값을 취합니다.
 타입  이름의 타입을 나타냅니다. 그 타입에 따라서 클라이언트에 회답하는 정보의 내용이 달라집니다. A, AAAA, MX ... )
표1

DNS 서버는 본질적으로 데이터베이스 서버의 한 유형입니다.
다음 1건분의 데이터베이스 항목을 자원레코드(RR)라 합니다.

 이름 클래스
타입 
클라이언트에 회답하는 항목 
 www.lab.cyber.co.kr IN 

192.0.2.226 
 cyber.co.kr IN 
MX  10 mail.cyber.co.kr
 mail.cyber.co.kr IN 

192.0.2.227 
표2

IP 주소를 문의할 때는 A라는 타입을 쓰지만 메일 보낼 곳을 질의할 때는 MX(Mail eXchange)라는 타입을 씁니다. 표2에서 예를 들면, webmaster@cyber.co.kr이라는 메일 주소가 있고, 보낼 곳을 알아야 할 경우는 @ 뒤에 있는 이름이 메일을 보낼 곳이 되므로 그 이름을 문의해야 합니다. 문의 내용은 다음과 같습니다.

(a) 이름 = cyber.co.kr
(b) 클래스 = IN
(c) 타입 = MX 

그러면 DNS 서버는 10 mail.cyber.co.kr 이라는 내용을 클라이언트로 회신합니다. 타입이 MX인 경우 회신할 항목은 2가지로, 우선순위(10) 와 메일 서버이름(mail.cyber.co.kr)입니다. 또 MX인 경우는 mail.cyber.co.kr 이라는 메일 서버의 IP 주소도 함께 회신해야 합니다. 표1의 3행에서 IP 주소를 등록한 행이 있으므로 mail.cyber.co.kr이라는 이름에서 그 행을 찾아내어 함께 회신하게 됩니다.

타입에는 A 와 MX 이외에도 다음과 같은 여러가지가 있습니다. (모두보기)

 RR유형값 RR 문자 코드 
RR 유형 
설명 
 1  A 
 주소 
32비트 IP 주소를 포함합니다. 이 유형은 네임 변환을 위한 노트의 주소가 지정되는 곳이기 때문에 DNS의 "본질"이라고 할 수 있습니다. 
 2  NS 
 네임 서버
 DNS 구역을 위한 권한 DNS 네임 서버의 네임을 나타냅니다. 각 구역은 1차 네임 서버를 가리키는 NS 레코드를 하나 이상 가지고 있어야 하며 네임은 유효한 주소 레코드(A)를 가지고 있어야 합니다.
 5  CNAME  정규 네임
 노드의 실제 네임을 가리키도록 정의한 별칭(alias)을 위해 사용합니다. CNAME 레코드는 이 별칭과 노드의 정규 네임 사이의 매핑을 제공합니다. CNAME은 기관의 필요에 따라 내부 네임은 수정하면서도 사용자는 변하지 않는 별칭을 사용하게 함으로써 사용자에게 DNS 구조의 내부 변경을 숨기는데 주로 이용합니다.
 6  SOA  권한 개시 정보
 DNS 구역의 시작을 표시하는 데 사용하며 DNS 구역에 대한 중요한 정보를 제공합니다. 모든 구역은 정확히 하나의 SOA 레코드를 가져야 합니다. 이 레코드는 구역의 네임, 1차(마스터)권한 서버의 네임뿐만 아니라 관리자의 이메일 주소, 슬레이브(2차)네임 서버를 갱신하는 대기 시간등과 같은 기술적 세부 사항까지 포함합니다.
 12  PTR  포인터  네임 공간의 다른 위치를 가리키는 포인터를 제공합니다. 이 레코드는 IN-ADDR.ARPA 도메인을 통한 역방향 전환에 주로 이용합니다.
 15  MX  메일 교환
 도메인으로 오는 이메일을 처리하는 위치를 명시합니다.
 16  TXT  문자열  도메인과 관련해 저장해야 할 임의의 문자를 나타냅니다.
표3 일반적인 DNS RR 유형 요약

함께 보기 : http://www.dns.net/dnsrd/rr.html

FQDN

개발자가 뭐길래/Network | 2009. 6. 26. 15:13 | sweetw
전체 주소 도메인 네임 (FQDN, Fully qualified domain name)
 기술적으로 최상위 도메인 A가 하위 도메인 B를 포함하고 B는 다시 C라는 하위 도메인을 포함한다면 C의 전체 도메인 네임은 "C.B.A"다 .이 네임을 해당 노드의 전체 주소 도메인 네임 (FQDN, Fully qualified domain name)이라고 한다. C.B.A라는 도메인 네임은 특정 도메인의 위치를 정확히 알려주기 때문에 완전한 도메인 네임이다. 전체 주소 도메인 네임은 전체 DNS 네임 공간에서 생성한 네임이다.


부분 주소 도메인 네임 (PQDN, Partially qualified domain name)
 때로는 불완전한 네임으로 장비를 찾아낼 수도 있다. 이를 PQDN이라고 한다. PQDN은 장비의 위치를 부분적으로 지정하여 이것만 가지고는 도메인의 전체 경로를 알수 없기 때문에 모호하다. 그러므로 PQDN은 절대 도메인 네임을 알고 있는 특정 부모 도메인 안에서만 사용할 수 있다. 부모 도메인의 절대 네임을 부분 네임에 붙이면 그 부분 주소 도메인의 FQDN을 알 수 있다. 예를 들어 FQDN "Y.X" 안에 Z라는 PQDN이 있다면 Z의 FQDN은 "Z.Y.X"이다.

 예를 들어, boriya.tistory.com 이 FQDN이라면, boriya 는 PQDN 이 되는 것이다.

 PQDN을 사용하는 이유는 바로 편리함이다. 도메인 관리자는 매번 전체 주소 네임을 반복할 필요 없이 PQDN을 이용해 장비나 하위 도메인을 알아낼 수 있다. 예를 들어 "cs.widgetopia.edu."라는 도메인 네임을 가지는 Widgetopia 대학 컴퓨터 공학부의 관리자가 있다고 하자. 그는 개개의 호스트를 과일 네임을 따서 명명했따. 이 경우 관리자는 기본적으로 자신이 관리하는 DNS 파일에서 "apple.cs.widgetopia.edu." 나 "banana.cs.widgetopia.edu."와 같은 FQDN으로 각 장비를 찾아낼 수 있다. 그러나 "부분 주소 네임이면 cs.widgetopia.edu 도메인 안의 것으로 간주하라"와 같은 명령을 미리 소프트웨어에 입력해 둠으로써 apple, banana만으로도 각각에 해당하는 장비를 찾을 수 있다. 즉 DNS 소프트웨어는 kiwi와 같은 PQDN을 "kiwi.cs.widgetopia.edu."로 인식한다.

<도메인 마지막에 오늘 점(.)에 대해서..>
  일반적으로 널 루트 도메인의 마지막에 오는 점(.)은 주로 생략한다. 실제로 사용자가 애플리케이션에서 도메인 네임을 입력할 때와 같은 일반적인 상황에서는 주로 마지막의 점을 생략한다. 예를 들어 웹 브라우저에 도메인 네임을 입력할 때 마지막 점을 입력하는 경우는 거의 없다. 그러나 DNS 마스터 파일에서는 FQDN과 PQDN을 명확히 구분하기 위해서 마지막에 오는 점을 사용한다. 앞선 예에서 apple은 "apple.cs.widgetopia.edu."를 가리키지만 "apple.com."은 Apple Computer, Inc.의 FQDN을 가리킨다. 여기서 "apple.com."의 마지막에 오는 점은 중요하다. 마지막에 점이 없는 apple.com은 PQDN으로 애플컴퓨터의 도메인이 아니라 "apple.com.cs.widgetopia.edu."을 가리키기 때문이다.
도메인네임이 IPv4 주소(A RR)와 IPv6 주소(AAAA RR)를 모두 갖고 있는 경우 
IPv4 인터넷에서는 도메인 네임이 갖는 IP 주소는 IPv4 주소 한 종류 뿐이었습니다.

그러나 이제 IPv6 인터넷이 도입되면서, 하나의 도메인네임이 IPv4 주소와 IPv6 주소 모두를 갖는 경우가 발생하게 됩니다.

예를 들어 아래와 같은 경우,
"examp.co.kr" 도메인 설정 내용
ftp.examp.co.kr.  1800  IN  A    192.0.2.200
ftp.examp.co.kr.  1800  IN  AAAA 2001:dc5:f::200

단말 호스트의 IPv6 어플리케이션은 getaddrinfo() 함수 호출의 결과로 ftp.examp.co.kr.  도메인네임에 대해 "192.0.2.200" IPv4 주소와 "2001:dc5:f::200"의 2개 주소를 얻게 됩니다.

이 경우, 어플리케이션은 "이 2개의 주소 중 어느 주소를 선택하여 접속을 시도해야 하는가?" 하는 문제가 발생하게 됩니다.

물론 이것은 원칙적으로 어플리케이션을 작성하는 개발자의 선택에 따라 결정될 것입니다.
어플리케이션이 getaddrinfo() 함수로부터 얻은 IP 주소 중 하나를 다시 Socket API에 인자로 전달함으로써 통신이 개시될 수 있기 때문입니다. 
이 동작은 프로그래머가 정하여 프로그램 코드를 작성할 수 있습니다.


디폴트 IP 주소 선택 알고리듬 (Default Address Selection)

IETF RFC3484 문서는 이 문제를 다루고 있습니다.

Ref Docs : RFC3484 "Default Address Selection for Internet Protocol version 6 (IPv6)"

일반적으로 어플리케이션은 도메인네임의 IP 주소 변환 함수 gethostbyname() 이나 getaddrinfo()가 리턴하는 IP 주소 목록에서 첫 번째 IP 주소를 선택하여 이 IP 주소로 Socket을 열고 통신을 개시합니다.

이러한 일반 사항을 기반으로 RFC3484는 getaddrinfo() 함수가 도메인네임의 IPv4 주소와 IPv6 주소를 함께 파악한 경우, 일정한 디폴트 알고리듬을 적용하여 어플리케이션으로 리턴하는 IP 주소 목록을 정렬(sort)하여 반환하는 동작을 정의합니다.

getaddrinfo() 함수는 일정한 규칙으로 IP 주소 목록을 반환하여 어플리케이션이 접속 시도하는 IP 주소를 일정하게 제어하는 역할을 하게 됩니다.

접속대상 주소 선택 알고리듬에 사용되는 디폴트 정책 테이블(default poliy table)은 아래와 같습니다.

    Prefix        Precedence     Label      비고
----------       -------------------  ----------  --------------------
::1/128                            50             0     IPv6 LoopBack 주소
::/0                                   40              1    이외의 모든 IPv6 주소
2002::/16                        30             2     6to4 IPv6 주소
::/96                                20             3     IPv4-compatible IPv6 주소
::ffff:0:0/96                      10             4     IPv4-mapped IPv6 주소, IPv4 주소를 의미


Source : RFC3484 "Default Address Selection for Internet Protocol version 6 (IPv6)"
                2.1. Policy Table


이 주소 선택 알고리듬의 개략적인 내용은 아래와 같이 정리할 수 있습니다.

1. IPv4 주소와 IPv6 주소가 함께 리스트에 있는 경우, IPv6 주소가 디폴트로 리스트 중 첫 번째 IP 주소로 리턴됩니다.

IPv4 주소(::ffff:0:0/96) 보다 IPv6 주소(::1/128, ::/0, 2002::/16, ::/96)들이  Precedence에서 모두 우선순위가 높습니다.
이에 따라 IPv6 어플리케이션이 getaddrinfo() 함수로부터 반환받는 IP 주소 리스트에 IPv4와 IPv6가 혼재하는 경우, 디폴트 동작으로 그 첫 번째 IP 주소는 IPv6 주소가 됩니다.

결과적으로 IPv6 어플리케이션은 IPv4와 IPv6 주소 모두 가진 도메인네임에 대해서는 IPv6를 먼저 접속 시도 주소로 선택하는 동작을 하게 됩니다.

2. IPv6 주소가 다수 존재하는 경우, IPv6 루프백(loopback) 주소, 일반적인 IPv6 주소, 6to4 IPv6 주소, IPv4-compatible IPv6 주소의 순으로 정렬(sort)하여 리턴합니다.

IPv6 주소 "2001:dc5:f::200"와 IPv6 주소 "2002:c000:02c8::c000:02c8"가 도메인네임에 함께 지정되어 있는 경우, APNIC을 통해 할당된 native IPv6 주소 "2001:dc5:f::200"가 6to4 tunnelling 방식의 자동생성된 6to4 IPv6 주소 "2002:c000:02c8::c000:02c8"보다 우선하게 됩니다.

곧 어플리케이션은 native IPv6 주소와 6to4 IPv6 주소가 있는 경우, native IPv6 주소로 먼저 접속시도하게 됩니다.


NOTE!: DNS의 IPv6 주소 설정오류가 야기하는 어플리케이션의 접속 시간 지연 문제
일반적으로 어플리케이션은 getaddrinfo() 등의 함수로부터 리턴받은 IP 주소 목록 중 첫 번째 IP 주소로 접속을 시도한 후 접속에 실패하면 다음의 IP 주소를 사용하여 접속을 시도합니다.
따라서 IPv4와 IPv6 주소가 하나씩 있는 경우, IPv6 주소로 먼저 접속을 시도하고, 이에 실패하게 되면, IPv4 주소로 접속을 시도합니다.
만일 DNS의 특정 도메인네임에 존재하지 않는 IPv6 주소가 설정되어 있는 경우, 어플리케이션에서는 접속시도와 그 timeout에 따르는 시간지연이 발생한 후 IPv4 주소로 접속이 성공함으로써, 사용자는 접속이 느린 현상을 경험하게 됩니다.


위에서 정리된 디폴트 주소 선택 알고리듬 내용은 개략적인 것으로 이외에 시스템 환경조건에 의한 주소 선택 및 정렬 알고리듬을 RFC3484 문서에서 정의하고 있습니다.

주의할 점은 RFC3484에서 정의한 주소선택 알고리듬은 디폴트 알고리듬일 뿐이며 어플리케이션에서 별도의 선택 알고리듬을 사용하여 특정한 주소 선택을 하거나, 디폴트 주소 선택 정책 테이블의 내용을 변경하는 경우, 선택 방식이 변경될 수 있다는 
사실입니다.

Windows 2003 서버의 경우, 아래와 같이 default policy table 내용을 볼 수 있으며, 이 테이블에서 각 필드 값을 변경하여 getaddrinfo() 함수의 정렬 순서를 변경할 수 있습니다.

C:>netsh interface ipv6 show prefixpolicy
Querying active state...
Precedence  Label  Prefix
----------------  ---------  --------------------------------
                  10         4  ::ffff:0:0/96
                  20         3  ::/96
                  30         2  2002::/16
                  40         1  ::/0
                  50         0  ::1/128

출처 : http://dstein.egloos.com/2324104#

'개발자가 뭐길래 > Network' 카테고리의 다른 글

PTR  (0) 2009.06.26
RR(resource records) 자원 레코드  (0) 2009.06.26
FQDN  (0) 2009.06.26
IPv6 멀티캐스트 범위  (2) 2009.06.26
ND (Neighbor Discovery)  (0) 2009.06.25

 멀티캐스트를 사용하면 한 데이터그램을 그룹 수신자 모두에게 한꺼번에 전송할 수 있다.  콜론 16진 표기법으로 썼을 때 FF(숫자로 1111 1111)  로 시작하는 주소는 모두 IPv6 멀티캐스트 주소이다.

멀티캐스트 범위

 멀티캐스트 주소의 범위에 대한 정확한 이해가 매우 중요하다. 전 범위 멀티캐스트 주소는 모든 인터넷을 통틀어 고유한 주소를 가져야 하지만 로컬 범위 멀티캐스트 주소라면 해당 기관에서만 고유하면 된다. 따라서 주소 할당이 매우 유연하다. 모든 유형의 멀티캐스트 주소가 다양한 형태로 나타날 수 있다. 어떤 멀티캐스트 주소는 한 노드에만 속할 수도 있고 어떤 주소는 한 로컬 링크 (로컬 네트워크)에만 멀티캐스팅하고 다른 것은 로컬 사이트에 멀티캐스팅하는 등이다. 범위를 지정하면 라우터가 멀티캐스트 데이터그램의 주소를 보고 데이터그램을 얼마나 멀리까지 전달해야 하는지 곧바로 결정할 수 있으므로 좀더 효율적이며, 원했던 범위 이상으로 트래픽이 전달되지 않도록 할 수 있다.

'개발자가 뭐길래 > Network' 카테고리의 다른 글

PTR  (0) 2009.06.26
RR(resource records) 자원 레코드  (0) 2009.06.26
FQDN  (0) 2009.06.26
IPv6 어플리케이션은 IPv4와 IPv6 주소 중에서 어느 것으로 접속을 하나요?  (0) 2009.06.26
ND (Neighbor Discovery)  (0) 2009.06.25

ND (Neighbor Discovery)

특징

  •  ND의 Neighbor라는 용어는 단순히 로컬 네트워크에 있는 장비(호스트와 라우터 둘 다)를 가리킨다. 물론 네트워크에서 호스트와 라우터가 하는 일이 다르기 때문에 ND도 그에 따라 달라진다.

  • ND는 ICMPv6 메시지를 사용하여 자신의 기능을 구현한다.

    ND의 기능중 호스트간 통신 기능 (Neighbor discovery) 의 "주소 결정" 기능이 IPv4의 ARP와 같은 기능이다.

구분

  • Router discovery (RD) -호스트 라우터 발견기능
    • Router soliticate : 당장 라우터가 궁금한 호스트가 요청 메시지 전송

    • Router advertise : 정기적으로 호스트에게 자신의 존재를 알림(멀티캐스트), 요청에 따른 RA는 유니캐스트

  • Neighbor discovery (ND)- 호스트간 통신 기능

    router discovery 와 여러 측면에서 유사하지만 neighbor discovery는 라우터와 호스트간의 통신에서 사용하는 파라미터가 아닌 물리 네트워크에 있는 호스트간의 다양한 통신을 위해 파라미터를 주고 받는데 사용된다. 특히 주소 결정, 다음 홉 결정, 주변 노드 도착 불가능 검사에 neighbor solitication/advertise 메시지를 사용한다.

    • Neighbor soliticate :

      • 유니캐스트, 멀티캐스트 가능

    • Neighbor advertise :

      • neighbor solitication에 대한 응답 (보통 유니캐스트, 출발지 주소를 명시하지 않은 경우 멀티캐스트)

      • 요청이 없는데도 주변에 알릴 때 (장비 mac이 변경되었을때 등): 모든 노드에 멀티캐스트 전송

    • <기능>
      • 주소 결정 : 로컬 네트워크에 있는 다른 장비의 Mac 주소를 해당장비의 IP 주소를 통해 알아내려 할때 사용한다. IPv4는 ARP를 통해 같은 기능을 구현한다.

      • 다음 홉 결정 : IP 데이터 그램의 목적지를 보고 어디로 보내야 할지 결정한다.

      • 주변 노드 접근 불가능 검사 : 주변 노트에 직접 접근할 수 있는지 결정

      • 중복 주소 검사 : 자신이 사용하려는 주소가 네트워크에서 사용하고 있는지 확인

  • 리다이렉트 메시지

    라우터가 특정 네트워크로 향하는 데이터그램을 받았을때 출발지 호스트가 다른 라우터에게 보내는 편이 더 효율적이라는 것을 알게 되었을 경우, 라우터는 출발지 장비에게 icmpv6 리다이렉트 메시지를 보낸다.(항상 유니캐스트)

 

ARP(v4)와 비교

  •  IPv6에서는 ARP 요청 메시지를 보내는 대신, 출발지 장비는 ND solitication 메시지를 생성한다. 

  • 하위 데이터 링크 계층 프로토콜이 멀티캐스팅을 지원한다면(예: 이더넷) ND solitication 메시지는 브로드캐스트되지 않는다. 대신 ipv6 주소를 결정하고자 하는 대상 장비의 요청 노드 주소로 멀티캐스트한다. 요청 멀티캐스트 주소는 멀티캐스트가 가능한 네트워크에 있는 각장비가 유니캐스트 주소로 부터 특수한 매핑을 통해 만드는 주소다.

  • ND solitication 요청을 받은 목적지 장비는 출발지 장비에게 ND advertise로 응답한다. 이것은 ARP의 reply와 유사하며 장비 A에게 알리기 위한 장비 B의 물리 주소를 담고 있다. 여기서 ARP의 reply는 출발지장비에게만 유니캐스트되며, ND의 advertise도 유니캐스트된다.

이 글은 스프링노트에서 작성되었습니다.



정리가 잘 안되네-_-;;

도움이 될 수도 있는 파일 첨부