네트워크.보안/네트워크 일반
-
IP 주소의 잘 알려지지 않은 숨겨진 진실2009.05.13
-
오류 제어2009.04.02
-
데이터 전송 방식 분류2009.03.31
-
(4) DNS 서비스 설정하기2009.03.18
-
(3) DNS 서비스 설정하기2009.03.18
IP 주소의 잘 알려지지 않은 숨겨진 진실
IP 주소 지정
클래스 단위 주소 지정
IP 주소는 네트워크 ID와 호스트 ID를 옥텟 단위로 구분하도록 설계되어 있다. 3가지 주요한 주소 클래스인 A, B, C는 옥텟을 정해진만큼 네트워크 ID와 호스트 ID에 할당하여 구분한다. 예를 들어, A 클래스는 네트워크 ID에 8bit를 할당하고 호스트 ID에 24bit를 할당한다. 이 방법은 가장 기본적인 주소 지정 방법으로 네트워크 ID와 호스트 ID를 구분하기 위해 클래스를 사용하며 클래스 단위(classful) 주소 지정 방법이라고 부른다.
서브넷을 이용하는 클래스 단위 주소 지정
서브넷 주소 지정 방법은 네트워크 ID, 서브넷 ID, 호스트 ID의 3 부분으로 나누며 네트워크 ID는 변화없이 호스트 ID를 서브넷 ID와 호스트 ID로 분리하여 기존 클래스 단위 주소를 적절한 크기로 분할하여 사용한다. 이 방법은 기존 클래스 단위 방법을 이용하기 때문에 네트워크 ID와 전체 호스트 ID를 구분하는 방법은 클래스 단위 주소 지정 방법과 동일하다.
클래스 비사용 주소 지정
클래스를 사용하지 않고 네트워크 ID와 호스트 ID의 구분은 임의적인 지점이 된다. 네트워크 ID를 확인하기 위해 사용하는 네트워크 마스트 비슽 수의 길이(prefix length)를 뒤에 붙여서 표기한다.
클래스 단위의 IP 주소 클래스
클래스 단위 주소지정의 클래스 결정 방법
- 첫째 비트가 0이면 클래스 A 주소이다.
- 첫째 비트가 1이고 둘째 비트가 0이면 클래스 B 주소이다.
- 첫째와 둘째 비트가 1이고 셋째 비트가 0이면 클래스 C 주소이다.
- 첫째부터 셋째 비트가 1이고 넷째 비트가 0이면 클래스 D 주소이다.
- 넷째 비트마저 1이면 클래스 E 주소이다.
IP 주소 클래스 | IP 주소의 첫째 옥텟 | 첫째 옥텟의 최소값 (2진수) |
첫째 옥텟의 최대값 (2진수) |
첫째 옥텟 값의 범위 (10진수) |
이롡적 IP 주소 범위 |
---|---|---|---|---|---|
클래스 A | 0xxx xxxx | 0000 0001 | 0111 1110 | 1 ~ 126 | 1.0.0.0 ~ 126.255.255.255 |
클래스 B | 10xx xxxx | 1000 0000 | 1011 1111 | 128 ~ 191 |
128.0.0.0 |
클래스 C | 110x xxxx | 1100 0000 | 1101 1111 | 192 ~ 223 | 192.0.0.0 ~ 223.255.255.255 |
클래스 D | 1110 xxxx | 1110 0000 | 1110 1111 | 224 ~ 239 | 224.0.0.0 ~ 239.255.255.255 |
클래스 E | 1111 xxxx | 1111 0000 | 1111 1111 | 240 ~ 255 | 240.0.0.0 ~ 255.255.255.255 |
특수한 의미를 갖는 IP 주소
- 네트워크 ID나 호스트 ID 비트가 모두 0으로 채워진 주소는 현재의 네트워크나 호스트 ID 그룹을 의미한다. 네트워크 ID를 모두 0으로 지정하고 호스트 ID를 사용한다면, 해당 네트워크에서의 호스트 ID를 갖는 장비를 의마하며, 호스트 ID를 모두 0으로 지정하고 네트워크 ID를 사용한다면 네트워크 ID를 갖는 호스트 그룹을 의미한다.
- 네트워크 ID나 호스트 ID 비트가 모두 1로 채워진 주소는 네트워크에 있는 모든 호스트를 가리키는 IP 주소를 의미한다. 일반적으로 브로드캐스트 주소로 사용된다.
- 모든 비트가 0으로 채워진 주소는 전체 네트워크를 가리키는 IP 주소로 사용된다.
- 모든 비트가 1로 채워진 주소는 특정 호스트를 가리키는 넷마스크 주소로 사용되거나 전체 호스트를 가리키는 브로드캐스트 주소로 사용된다.
IP 예약, 사설, 루프백 IP 주소
예약 주소
일부 주소 블록은 특정한 용도가 정해지지 않고 단순히 예약되어 있어서 사용하지 않는다.
사설, 비등록, 라우팅 불가 주소
RFC 1918에 의해 정의된 사설(private) IP 주소는 라우팅이 불가능한 주소로 정의되어 인터넷에 존재하지 않는다. 공인(public) 주소와 달리 등록되지 않기 때문에 비등록(unregistered) 주소라고 하기도 한다. IPv4의 제한된 주소 공간을 보존하기 위한 필요에 의해 지정되었다.
루프백(loopback) 주소
호스트에서 보낸 IP 데이터그램을 데이터 링크 계층으로 전달하지 않고 출발지 장비의 네트워크 계층으로 되돌리기 위한 IP 주소이다. 이러한 루프백 범위(127.0.0.0 ~ 127.255.255.255)는 호스트의 TCP/IP 프로토콜 구현을 테스트하기 위한 용도로 사용된다. 루프백 주소로 데이터를 전송하면 하위 계층이 단락되기 때문에 하위 계층의 간섭없이 상위 계층(IP 이상 계층)을 테스트 할 수 있다. 대표적으로 127.0.0.1 주소가 많이 사용된다.
범위 시작 주소 | 범위 끝 주소 | 설명 |
---|---|---|
0.0.0.0 | 0.255.255.255 | 클래스 A 네트워크 0.x.x.x 예약됨. |
10.0.0.0 | 10.255.255.255 | 클래스 A 네트워크 10.x.x.x 사설 주소 블록. |
127.0.0.0 | 127.255.255.255 | 클래스 A 네트워크 127.x.x.x 루프백 주소 블록. |
128.0.0.0 | 128.0.255.255 | 클래스 B 네트워크 128.0.x.x 예약됨. |
169.254.0.0 | 169.254.255.255 | 클래스 B 네트워크 169.254.x.x 자동 개인 IP 주소 할당(APIPA)을 위해 예약된 사설 주소 블록. |
172.16.0.0 | 172.31.255.255 | 클래스 B 네트워크 172.16.x.x에서 172.31.x.x까지 16개의 연속된 네트워크 사설 주소 블록. |
191.255.0.0 | 191.255.255.255 | 클래스 C 네트워크 191.255.x.x 예약됨. |
192.168.0.0 | 192.168.255.255 | 클래스 C 네트워크 192.168.0.x에서 192.168.255.x까지 256개의 연속된 네트워크 사설 주소 블록. |
223.255.255.0 | 223.255.255.255 | 클래스 C 네트워크 223.255.255.x 예약됨. |
IP 멀티캐스트 주소
하나의 출발지 장비에서 여러 장비로 구성된 그룹으로 데이터를 전송하는 IP 주소이다.
범위 시작 주소 | 범위 끝 주소 | 설명 |
---|---|---|
224.0.0.0 | 224.0.0.255 | 일반적인 멀티캐스트 주소로 예약됨. |
224.0.1.0 | 238.255.255.255 | 전역 범위(인터넷 전체) 멀티캐스트 주소. |
239.0.0.0 | 239.255.255.255 | 관리용(로컬) 멀티캐스트 주소. |
224.0.0.0 | - | 예약됨. 사용되지 않음. |
224.0.0.1 | - | 서브넷의 모든 장비. |
224.0.0.2 | - | 서브넷의 모든 라우터. |
224.0.0.3 | - | 예약됨. |
224.0.0.4 | - | DVMRP를 사용하는 모든 라우터. |
224.0.0.5 | - | OSPF를 사용하는 모든 라우터. |
224.0.0.6 | - | OSPF로 지정된 라우터. |
224.0.0.9 | - | RIPv2 로 지정된 라우터. |
224.0.0.11 | - | 모바일 에이전트.(모바일 IP용) |
224.0.0.12 | - | DHCP 서버/중계 에이전트. |
오류 제어
1. 전송 오류
(1) 감쇠 현상(Attenunation) - 거리가 멀어질 수록 전송 신호의 세기가 약해지는 현상. 원거리 전송을 위해 아날로그 신호는 증폭기(Amplifier)를 사용하고, 디지털 신호는 리피터(Repeater)를 사용한다.
(2) 지연 왜곡(Delay Distortion) - 주로 유도 전송 매체에서 발생. 전송 매체를 통해 전송되는 신호의 속도가 주파수에 따라 차이가 발생하여 간섭이 일어난다.
(3) 잡음(Noise) - 데이터 전송시 원래의 전송신호에 다른 불필요한 신호가 더해져서 데이터에 손상을 주는 현상.
ⓐ 열잡음(Thermal Noise) - 전송 매체의 특성에 따른 저항으로 인해 신호 전송시 열을 발생시켜 일어나는 잡음.
ⓑ 상호 변조 잡음(Intermodulation Noise) - 하나의 동일한 전송매체를 통해 데이터가 전송/변조를 거치는 과정에서 생성되는 잡음.
ⓒ 누화 현상(Cross-talk) - 신호의 경로가 비정상적으로 결합을 하거나, 비나 습기로 인해 발생하는 현상. 전화 통화시 발생하는 혼선과 같은 현상.
ⓓ 충격 잡음(Impulse Noise) - 번개, 전송기의 결함등으로 인해 발생하는 과전압으로 인한 잡음.
(4) 에코(Echo) - 전송한 신호가 다시 돌아오는 현상.
(5) 지터(Jitter) - 데이터 전송시 전송 신호의 위상이 일시적으로 일그러지는 현상.
(6) 백색 잡음 - 전 주파수 대역에서 발생하는 잡음.
2. 에러 검출 방법
(1) 패리티 비트 체크(Parity Bit Check) - 테이터에 패리티 비트를 추가하여 오류를 검출. 짝수 패리티(Even-), 홀수 패리티(Odd-)로 구분.
(2) 순환 중복 검사(CRC; Cyclic Redundarcy Check) - 버스트 오류(에러 발생 지점의 주변에서 대부분의 오류가 발생) 검출. 오직 한 비트의 오류만 감지할 수 있다.
3. 오류 정정 방법
(1) 전진 에러 수정(FEC; Forward Error Correction)
- 해밍 코드 : 패리티 비트를 사용하여 에러 수정 및 정정 진행.
(2) 후진 에러 수정(BEC; Backward Error Correction)
- ARQ : 송신측에서 전송후 수신측에서 전송한 ACK 신호를 확인.
이 글은 스프링노트에서 작성되었습니다.
데이터 전송 방식 분류
1. 신호의 종류에 따른 분류
(1) 아날로그 전송
음성이나 전파, 전류와 같이 연속적인 데이터이다.
※ 아날로그 신호
① 진폭 (Amplitude)
전기적인 신호의 높이. 전압(volt), 전류(ampere), 전력(watt) 단위로 측정.
② 주파수 (Frequency)
1초 동안 반복되는 주기의 개수 혹은 사이클의 반복 횟수. 단위 Hz로 측정.
③ 위상 (Phase)
시간 축을 따라서 전후로 이동될 수 있는 양. 각도나 라디안을 단위로 측정.
(2) 디지털 전송
디지털 신호를 사용하여 데이터를 전송하는 방식으로 디지털 신호란 이산적인 값으로 수치값으로 표현한다.
2. 데이터의 전송 방법에 따른 분류
(1) 단방향 통신 (Simplex Communication)
데이터의 흐름이 한 쪽 방향으로만 전송되는 통신 방식. TV, 라디오 등이 해당.
(2) 반이중 통신 (Half-Duplex Communication)
데이터의 흐름은 양쪽 방향 모두 전송되나 한번에 한 방향만 전송되는 방식. 무전기를 이용한 통신이 해당.
(3) 전이중 통신 (Full-Duplex Communication)
데이터의 흐름이 동시에 양방향으로 전송되는 방식. 한 회선을 송/수신 채널로 분리하여 사용하므로 데이터의 전송과 수신이 동시에 이뤄진다. 전화, 대부분의 네트워크 통신이 해당.
3. 데이터 전송 단위에 따른 분류
(1) 직렬 통신 (Serial Transmission)
하나의 문자를 구성하는 각 비트들이 하나의 전송 회선을 통하여 차례로 전송된다. 송신측에서는 1Byte의 신호를 비트(bit)단위의 직렬 데이터로 변환하여 송신하며, 수신측에서는 비트 단위의 문자열을 원래의 데이터로 복원시키기 위해 회로의 구성이 복잡해지지만, 원거리 통신에 하나의 회선을 이용하여 전송하므로 경제적이며 저속 통신 방식이 주로 사용된다.
(2) 병렬 통신 (Parallel Transmission)
하나의 문자를 구성하는 각 비트들이 여러개의 전송 회선을 통하여 동시에 전송된다. 직렬 통신에 비하여 속도가 빠르고 인터페이스의 구성이 간단하다. 전송 거리가 길어지면 전송 선로 별로 비트가 도착하는 시간이 차이가 나서 원래의 데이터로의 복원이 어려워지는 단점이 있다. 많은 회선이 필요하여 원거리 통신에 부적합하고 비용이 비싸지는 단점이 있다.
4. 데이터 동기화
(1) 동기식 통신 (Synchronous Transmission)
송신측과 수신측이 동기 신호를 맞추어 전송하는 방식으로 미리 정해진 수만큼의 문자열 단위로 일시에 전송한다. 동기식 전송은 비동기식 전송에 비해 전송효율이 높으나 별도의 기억장치가 필요하므로 비용이 높다.
(2) 비동기식 통신 (Asynchronous Transmission)
데이터 내에 동기신호를 포함시켜 전송하는 방식으로 전송 문자의 앞에 시작 비트(start bit)를 끝에는 정지비트(stop bit)를 첨가하여 전송한다. 시작 비트와 정지 비트 사이에 가변 길이의 데이터를 두어 불규칙한 전송에 적합하고 동기식에 비해 저렴하다.
이 글은 스프링노트에서 작성되었습니다.
(4) DNS 서비스 설정하기
NSLOOKUP
DNS 클라이이언트를 리졸버(resolver)라고 하며 nslookup은 리졸버가 질의하는 것과 같은 방법으로 질의를 진행하여 네임서버의 운영을 테스트하는 용도로 사용된다. nslookup은 리졸버의 행동을 그대로 흉내지만 네임 서버의 행동을 흉내내어 네임 서버가 사용하는 것과 동일한 질의를 이용해 다른 서버에게 질의를 한다. 그리고 네임 서버처럼 영역 정보를 얻어올 수 있다. 결론적으로 nslookup은 리졸버나 네임 서버를 흉내내어 네임 서버의 테스트와 장애 처리 도구로 사용할 수 있다.
그러면 먼저 nslookup과 리졸버가 행동하는 것이 어떻게 다른 가부터 알아보도록 하겠다. 리졸버의 경우 다수의 네임 서버를 등록하여 첫 번째 네임 서버로 질의를 시도하여 다음 서버에게 질의하고 다시 처음 서버에게 질의를 하는 작업을 반복하는 반면 nslookup은 등록된 첫 번째 네임 서버로 질의를 시도해 네임 서버를 포기할 때까지 계속 재시도한다. 그런 다음 다음 서버에게 질의를 시도한다. 일단 응답을 얻으면 해당 네임 서버로 고정시키고 다른 네임 서버로는 질의를 시도하지 않는다.
nslookup은 네임 서버와도 다른 행동을 한다. 예를 들어 nslookup은 슬레이브 서버처럼 영역 전송을 하지만 일련 번호(serial)를 확인하지 않기 때문에 일련 번호의 확인 책임은 테스터에게 있다.
nslookup은 대화식과 비대화식 실행을 지원한다. 먼저 대화식으로 실행해보자.
- C:\> nslookup
- > exit
비 대화식 실행은 nslookup 명령과 질의하려는 호스트 이름을 지정한다.
- C:\> nslookup www.jeongsam.net
옵션
현재 설정된 옵션을 보기 위해서 set all 명령을 입력한다.
[no]debug
디버깅 기능 사용 여부를 지정한다. 디버깅 기능이 켜져 있으면 네임 서버는 시간 초과를 보여주고 응답 패킷을 출력한다.
[no]defname
점이 없는 호스트 이름의 뒤에 로컬 도메인 이름의 자동 추가 여부를 결정한다.
[no]search
search 옵션이 켜져 있을 경우 defname 옵션을 적용하며 search 목록의 DNS 접미사를 자동으로 추가한다.
[no]recurse
재귀적인 도메인 이름 찾기 가능 여부를 결정한다. norecurse로 설정시 다른 네임 서버에 비재귀적 질의를 전송한다.
[no]d2
레벨 2의 디버깅을 켜면 질의 메세지를 정규 디버깅 출력과 함께 보낸다.
[no]vc
nslookup은 기본적으로 TCP를 이용한 가상 회선(virtual circuit) 대신 UDP 패킷을 이용하여 질의를 만든다.
[no]ignoretc
nslookup은 기본적으로 잘려진 메시지를 무시하지 않는다. UDP 응답 데이터그램으로 데이터를 온전히 수신하지 못할 경우 TCP을 이용하여 재시도하여 온전한 메시지를 수신할 수 있도록 시도한다.
port=53
DNS 서비스의 기본 포트 지정.
querytype=A
nslookup의 질의 형식을 지정. 기본값으로 A가 설정되어 있다.
class=IN
현재 현실적으로 지원되는 클래스는 Internet밖에 없다.
timeout=5
네임 서버가 5초이내로 응답하지 않을 경우 질의를 재 전송하고 시간 초과 값을 2배 증가시킨다.
retry=4
응답 실패시 시간 초과값을 2배씩 증가시키면서 4회 재전송후 포기한다.
root=A.ROOT-SERVERS.NET.
디폴트 루트 네임 서버 지정. 재귀적 질의시 루트 도메인 서버로부터 시작하여 하위 도메인을 탐색하여 목표한 도메인 네임 서버를 찾아 질의의 응답을 요청한다.
domain=JEONGSAM.NET
기본 도메인 이름 지정.
srchlist=JEONGSAM.NET
searchlist 지정. 복수의 도메인 지정시 '/'를 이용하여 설정한다.
권한 있는 응답과 권한 없는 응답
로컬 네임 서버로부터 로컬 도메인 영역 정보를 응답받은 경우 권한 있는 응답이라고 하며 다른 도메인 네임 서버로부터 도메인 영역 정보를 응답받은 경우 권한 없는 응답으로 표시된다.
네임 서버 변경
lserver와 server 명령을 이용하여 기본 네임 서버를 변경할 수 있으며, 두 명령의 차이점은 서버의 IP 주소를 찾을 때 nslookup에서 변경된 네임 서버를 이용할 지 아니면 nslookup이 동작 중인 호스트의 기본 네임 서버를 이용할 지의 차이가 있다.
예를 들어 lserver나 server 명령을 이용하여 기본 네임 서버를 www.jeongsam.net으로 변경하였다면, www.jeongsam.net에 네임 서버가 설치되어 있지 않을 경우 server 명령을 이용한 변경 명령은 IP 주소를 찾지 못하는데 반하여 lserver 명령을 이용할 경우 원래의 기본 네임 서버를 이용하여 IP 주소를 찾아준다.
디버깅
- c:\> nslookup
- > set debug
- >
디버깅을 켰을 경우 nslookup이 수신하는 응답을 보여주며 set d2 명령으로 레벨 2 디버깅을 켰을 경우 전송하는 질의도 표시한다.
질의와 응답 메시지인 DNS 패킷을 자세히 살펴보면 헤더 부분, 질의 부분, 응답 부분, 권한 부분, 기타 부분 등 5개 부분으로 구성되어 있다.
헤더 부분(header section)
nslookup에서 opcode는 항상 query로 표시되며 네임 서버의 경우 notify, update 등 opcode를 지원한다. rcode는 no error(에러 없음), server failure(서버 장애), name error(이름이 틀렸음), not implemented(구현되지 않음), refuse(응답 거부) 중 하나의 값을 갖는다.
질의 부분(question section)
DNS 메시지는 요청할 이름과 형식, 클래스로 구성되어 있다.
응답 부분(answer section)
응답 리소스 레코드가 출력된다.
권한 부분(authority section)
네임 서버의 SOA 리소스 레코드가 출력된다.
기타 부분(additional section)
앞서 다룬 4가지 부분에 있는 정보의 추가적인 완전한 정보를 표시한다.
네임 서버 흉내 내기
set norecurse와 set nosearch 명령으로 네임 서버가 도메인 영역 정보를 검색하는 것을 흉내 낼 수 있다.
- C:\> nslookup
- > set norec
- > set nosearch
- > www.jeongsam.net
- (현재 기본 네임 서버가 www.jeongsam.net의 도메인 영역 정보를 모르기 때문에 루트 도메인 서버를 찾아 다음 질의할 준비를 한다.)
- > server a.gtld-server.net
- > www.jeongsam.net
- (루트 네임 서버에 질의를 보내 jeongsam.net 영역 정보를 가지고 있는 네임 서버를 찾는다.)
- > server ns14.dnsever.com
- > www.jeongsam.net
- (jeongsam.net 영역 정보를 이용하여 www.jeongsam.net 호스트의 IP 주소르 찾는다.)
영역 전송
슬레이브 서버를 흉내내어 주 마스터 서버(primary master server)로부터 영역 정보를 수신한다.
- C:\> nslookup
- > ls -d jeongsam.net
- (해당 도메인 영역 정보를 가지고 있는 주 마스터 네임 서버가 전송을 허락한 경우 전체 영역 정보를 수신할 수 있다.)
이 글은 스프링노트에서 작성되었습니다.
(3) DNS 서비스 설정하기
NSLOOKUP
DNS 클라이이언트를 리졸버(resolver)라고 하며 nslookup은 리졸버가 질의하는 것과 같은 방법으로 질의를 진행하여 네임서버의 운영을 테스트하는 용도로 사용된다. nslookup은 리졸버의 행동을 그대로 흉내지만 네임 서버의 행동을 흉내내어 네임 서버가 사용하는 것과 동일한 질의를 이용해 다른 서버에게 질의를 한다. 그리고 네임 서버처럼 영역 정보를 얻어올 수 있다. 결론적으로 nslookup은 리졸버나 네임 서버를 흉내내어 네임 서버의 테스트와 장애 처리 도구로 사용할 수 있다.
그러면 먼저 nslookup과 리졸버가 행동하는 것이 어떻게 다른 가부터 알아보도록 하겠다. 리졸버의 경우 다수의 네임 서버를 등록하여 첫 번째 네임 서버로 질의를 시도하여 다음 서버에게 질의하고 다시 처음 서버에게 질의를 하는 작업을 반복하는 반면 nslookup은 등록된 첫 번째 네임 서버로 질의를 시도해 네임 서버를 포기할 때까지 계속 재시도한다. 그런 다음 다음 서버에게 질의를 시도한다. 일단 응답을 얻으면 해당 네임 서버로 고정시키고 다른 네임 서버로는 질의를 시도하지 않는다.
nslookup은 네임 서버와도 다른 행동을 한다. 예를 들어 nslookup은 슬레이브 서버처럼 영역 전송을 하지만 일련 번호(serial)를 확인하지 않기 때문에 일련 번호의 확인 책임은 테스터에게 있다.
nslookup은 대화식과 비대화식 실행을 지원한다. 먼저 대화식으로 실행해보자.
- C:\> nslookup
- > exit
비 대화식 실행은 nslookup 명령과 질의하려는 호스트 이름을 지정한다.
- C:\> nslookup www.jeongsam.net
옵션
현재 설정된 옵션을 보기 위해서 set all 명령을 입력한다.
[no]debug
디버깅 기능 사용 여부를 지정한다. 디버깅 기능이 켜져 있으면 네임 서버는 시간 초과를 보여주고 응답 패킷을 출력한다.
[no]defname
점이 없는 호스트 이름의 뒤에 로컬 도메인 이름의 자동 추가 여부를 결정한다.
[no]search
search 옵션이 켜져 있을 경우 defname 옵션을 적용하며 search 목록의 DNS 접미사를 자동으로 추가한다.
[no]recurse
재귀적인 도메인 이름 찾기 가능 여부를 결정한다. norecurse로 설정시 다른 네임 서버에 비재귀적 질의를 전송한다.
[no]d2
레벨 2의 디버깅을 켜면 질의 메세지를 정규 디버깅 출력과 함께 보낸다.
[no]vc
nslookup은 기본적으로 TCP를 이용한 가상 회선(virtual circuit) 대신 UDP 패킷을 이용하여 질의를 만든다.
[no]ignoretc
nslookup은 기본적으로 잘려진 메시지를 무시하지 않는다. UDP 응답 데이터그램으로 데이터를 온전히 수신하지 못할 경우 TCP을 이용하여 재시도하여 온전한 메시지를 수신할 수 있도록 시도한다.
port=53
DNS 서비스의 기본 포트 지정.
querytype=A
nslookup의 질의 형식을 지정. 기본값으로 A가 설정되어 있다.
class=IN
현재 현실적으로 지원되는 클래스는 Internet밖에 없다.
timeout=5
네임 서버가 5초이내로 응답하지 않을 경우 질의를 재 전송하고 시간 초과 값을 2배 증가시킨다.
retry=4
응답 실패시 시간 초과값을 2배씩 증가시키면서 4회 재전송후 포기한다.
root=A.ROOT-SERVERS.NET.
디폴트 루트 네임 서버 지정. 재귀적 질의시 루트 도메인 서버로부터 시작하여 하위 도메인을 탐색하여 목표한 도메인 네임 서버를 찾아 질의의 응답을 요청한다.
domain=JEONGSAM.NET
기본 도메인 이름 지정.
srchlist=JEONGSAM.NET
searchlist 지정. 복수의 도메인 지정시 '/'를 이용하여 설정한다.
권한 있는 응답과 권한 없는 응답
로컬 네임 서버로부터 로컬 도메인 영역 정보를 응답받은 경우 권한 있는 응답이라고 하며 다른 도메인 네임 서버로부터 도메인 영역 정보를 응답받은 경우 권한 없는 응답으로 표시된다.
네임 서버 변경
lserver와 server 명령을 이용하여 기본 네임 서버를 변경할 수 있으며, 두 명령의 차이점은 서버의 IP 주소를 찾을 때 nslookup에서 변경된 네임 서버를 이용할 지 아니면 nslookup이 동작 중인 호스트의 기본 네임 서버를 이용할 지의 차이가 있다.
예를 들어 lserver나 server 명령을 이용하여 기본 네임 서버를 www.jeongsam.net으로 변경하였다면, www.jeongsam.net에 네임 서버가 설치되어 있지 않을 경우 server 명령을 이용한 변경 명령은 IP 주소를 찾지 못하는데 반하여 lserver 명령을 이용할 경우 원래의 기본 네임 서버를 이용하여 IP 주소를 찾아준다.
디버깅
- c:\> nslookup
- > set debug
- >
디버깅을 켰을 경우 nslookup이 수신하는 응답을 보여주며 set d2 명령으로 레벨 2 디버깅을 켰을 경우 전송하는 질의도 표시한다.
질의와 응답 메시지인 DNS 패킷을 자세히 살펴보면 헤더 부분, 질의 부분, 응답 부분, 권한 부분, 기타 부분 등 5개 부분으로 구성되어 있다.
헤더 부분(header section)
nslookup에서 opcode는 항상 query로 표시되며 네임 서버의 경우 notify, update 등 opcode를 지원한다. rcode는 no error(에러 없음), server failure(서버 장애), name error(이름이 틀렸음), not implemented(구현되지 않음), refuse(응답 거부) 중 하나의 값을 갖는다.
질의 부분(question section)
DNS 메시지는 요청할 이름과 형식, 클래스로 구성되어 있다.
응답 부분(answer section)
응답 리소스 레코드가 출력된다.
권한 부분(authority section)
네임 서버의 SOA 리소스 레코드가 출력된다.
기타 부분(additional section)
앞서 다룬 4가지 부분에 있는 정보의 추가적인 완전한 정보를 표시한다.
네임 서버 흉내 내기
set norecurse와 set nosearch 명령으로 네임 서버가 도메인 영역 정보를 검색하는 것을 흉내 낼 수 있다.
- C:\> nslookup
- > set norec
- > set nosearch
- > www.jeongsam.net
- (현재 기본 네임 서버가 www.jeongsam.net의 도메인 영역 정보를 모르기 때문에 루트 도메인 서버를 찾아 다음 질의할 준비를 한다.)
- > server a.gtld-server.net
- > www.jeongsam.net
- (루트 네임 서버에 질의를 보내 jeongsam.net 영역 정보를 가지고 있는 네임 서버를 찾는다.)
- > server ns14.dnsever.com
- > www.jeongsam.net
- (jeongsam.net 영역 정보를 이용하여 www.jeongsam.net 호스트의 IP 주소르 찾는다.)
영역 전송
슬레이브 서버를 흉내내어 주 마스터 서버(primary master server)로부터 영역 정보를 수신한다.
- C:\> nslookup
- > ls -d jeongsam.net
- (해당 도메인 영역 정보를 가지고 있는 주 마스터 네임 서버가 전송을 허락한 경우 전체 영역 정보를 수신할 수 있다.)
이 글은 스프링노트에서 작성되었습니다.