기록장

성공과 실패를 결정하는 1%의 네트워크 원리 | 웹 서버의 IP 주소를 DNS 서버에 조회한다

nolzaheo 2021. 3. 19. 14:24
728x90

02. 웹서버의 IP 주소를 DNS 서버에 조회한다 p.56-68

1. IP 주소의 기본

브라우저는 URL을 해독하고 HTTP 메시지를 만들어주지만 이 메시지를 네트워크에 송출하는 기능은 없다.

이 기능을 OS에 의뢰하여 송신한다.

 

OS에 송신을 의뢰할 때 'https://www.nolzaheo.tistory.com'와 같은 도메인명이 아니라 '10.11.12.13/255.255.255.0'과 같은 IP주소 형태로 메시지 받을 상대를 지정해야한다. 따라서 OS에 송신을 의뢰할 때 URL 안에 있는 서버의 도메인 명에서 IP 주소를 조사해야 한다.

 

IP주소는 네트워크 번호와 호스트 번호로 이루어져있다. 우리가 집 주소를 말할 때 ○○동 ○번지라고 하듯이, 여기서 네트워크 번호가 ○○동에, 호스트 번호가 ○번지에 해당한다. 여기서 네트워크는 서브넷을 가리키고, 호스트는 컴퓨터를 가리킨다.

 

서브넷: 허브에 몇 대의 PC가 접속된 것허브 : 컴퓨터와 컴퓨터를 연결하는 장치

 

IP 주소 = 네트워크(서브넷) 번호 + 호스트(컴퓨터) 번호

 

서브넷과 컴퓨터의 관계가 잘 그려지지 않는다면 아래 그림을 보자.

 

서브넷과 허브의 관계 (출처: 성공과 실패를 결정하는 1%의 네트워크 원리, Tsutomu Tone 저, 이도희 역)

 

이렇게 만들어진 IP 주소를 보고 액세스 대상의 위치를 판단하고 리퀘스트 메시지를 운반한다. 송신측에서 가장 가까운 라우터까지 도착하고, 또 거기서 다음 라우터를 판단하여 메시지를 보내는 동작을 반복하여 최종적으로 상대의 데이터가 도착하는 원리이다.

 

<IP 주소의 표기방법>

IP 주소는 32비트의 디지털 데이터이다. 이 32비트 중 어디부터 어디까지가 네트워크 번호이고, 호스트 번호인지 알 수 없으므로 IP 주소 옆에 별도로 그 기준을 표시한다. 이 때 그 기준을 '넷마스크'라고 한다. 넷마스크롤 통해 네트워크 번호와 호스트 번호 내역을 구별하는 방법으로 크게 두 가지가 있는데, IP 주소 본체와 같은 방법으로 네트워크를 표기하거나 네트워크 번호의 비트 수로 넷마스크를 표기하는 것이다.

 

(1) IP 주소의 본체와 같은 방법으로 표기

 

10.1.2.3/255.255.255.0

 

위를 비트 표현으로 바꾸면

00001010. 00000001. 00000010. 00000011 / 11111111. 11111111. 11111111. 00000000

 

여기서 넷마스크가 1인 부분은 네트워크 번호를, 0인 부분은 호스트 번호를 나타낸다. 따라서 다시 매칭해보면

00001010. 00000001. 00000010. 00000011

11111111. 11111111. 11111111. 00000000

 

네트워크 번호: 10.1.2, 호스트번호: 3

 

(2) 네트워크 번호의 비트 수로 넷마스크를 표기

 

10.1.2.3/24

 

여기서 24는 네트워크 번호의 비트 수를 나타낸다. 총 32비트중 왼쪽에서부터 24비트는 네트워크 번호, 나머지 8비트는 호스트 번호가 된다.

 

따라서 00001010. 00000001. 00000010. 00000011 이 중에서 24비트인 00001010. 00000001. 00000010.이 네트워크 번호, 나머지 00000011이 호스트 번호가 된다.

 

00001010. 00000001. 0000001000000011

 

네트워크 번호: 10.1.2, 호스트번호: 3

 

추가적인 정보

-호스트 번호 부분의 비트가 모두 0인 것은 각 컴퓨터가 아니라 서브넷 자체를 나타낸다.

ex) 10.11.12.0/24

 

-호스트 번호 부분의 비트가 모두 1인 것은 서브넷 전체에 대한 브로드캐스트를 나타낸다.

ex) 10.11.12.255/24

 

2. 도메인명과 IP 주소를 구분하여 사용하는 이유

우리가 IP 주소 대신 도메인 명을 사용하는 이유는 IP 주소는 암기하여 사용하기가 힘들기 때문이었다. 그런데도 굳이 IP 주소를 사용하여 통신하는 이유는 무엇일까? IP 주소 대신 도메인 명을 사용하면 취급해야 할 바이트가 많아지기 때문이다. IP 주소를 사용하면 32비트, 즉 4바이트 크기만 다루면 되지만 도메인 명을 사용하면 수십 바이트에서 255바이트까지의 문자를 취급해야한다.

 

이렇게 많은 양의 바이트를 처리할 경우 라우터가 부하되어 데이터를 운반하는데에 더 많은 시간이 걸려 네트워크의 속도가 느려진다.

 

3. Socket 라이브러리가 IP 주소를 찾는 기능을 제공한다.

위에서 IP 주소가 무엇인지에 대해 알아보았다. 브라우저는 DNS 서버에 'www.nolzaheo.tistory.com'이라는 서버의 IP 주소를 알려달라고 요청하고, 서버로부터 응답을 받는다. 즉, 브라우저가 DNS 서버에 대해 클라이언트가 되는 것이다. 이 때 이 DNS 클라이언트를 DNS 리졸버라고 한다. 그리고 앞서 말한 서버를 보내고 IP 주소를 받아오는 것을 네임 리졸루션이라고 한다. 다시말해 DNS 리졸버가 네임 리졸루션을 한다.

 

이렇게만 들으면 리졸버에 대한 감이 제대로 오지 않는다. 리졸버는 Socket 라이브러리에 들어있는 부품화한 프로그램이다. Socket 라이브러리는 OS 에 포함되어 있는 네트워크의 기능을 애플리케이션에서 호출하기 위한 부품을 모아놓은 것이다. 리졸버는 그 속에 들어있는 프로그램 부품의 하나이다.

 

Socket 라이브러리 속에는 데이터를 송·수신할 때 사용하는 부품을 비롯하여 다수의 프로그램 부품이 들어있는데, 그 중 하나가 리졸버이다. 리졸버는 네임리졸루션을 한다.

 

4. 리졸버를 이용하여 DNS 서버를 조회한다.

Socket 라이브러리를 사용해 리졸버를 호출하는 방법은 간단하다. 리졸버의 프로그램명과 웹 서버의 이름을 쓰기만 하면 리졸버를 호출할 수 있다.

 

<애플리케이션 프로그램의 이름>(<매개변수>)
{
        .
        .
        .
    <메모리 영역> = gethostbyname("www.lab.cyber.co.kr"); //메모리 영역 안에 서버의 IP주소가 기입 됨
    	.
        .
        .
    <HTTP 메시지 송신>
    	.
        .
        .
}

 

위 코드처럼 리졸버를 호출하면 리졸버가 DNS 서버에 조회 메시지를 보내고 DNS 서버에서 응답 메시지가 돌아온다. 이 때 이 응답 메시지 안에 IP 주소가 포함되어있고, 리졸버는 여기서 이 IP 주소를 추출하여 브라우저에서 지정한 메모리 영역에 써넣는다.

 

브라우저가 웹 서버에 메시지를 보낼 때 이 메모리 영역에서 IP 주소를 추출하여 HTTP의 리퀘스트 메시지와 함께 OS에 건네주어 송신을 의뢰한다. 

 

5. 리졸버 내부의 작동

브라우저가 웹 서버에 HTTP 리퀘스트 메시지를 보내듯이, 리졸버도 제어를 넘겨받으면 DNS 서버에 보내기 위한 메시지를 만든다. 내용은 대충 '○○○ 서버의 IP 주소를 가르쳐줘라' 라는 내용이다. 이 메시지를 만들고 나면 이것을 DNS 서버에 보내는데, 이 때 이 송신 동작은 리졸버가 스스로 실행하는 것이 아니라 OS 내부에 포함된 프로토콜 스택을 호출하여 실행을 의뢰한다. 그 후 LAN 어댑터를 통해 메시지가 DNS 서버로 송신된다.

 

이 조회 메시지가 DNS 서버에 도착하면 DNS 서버는 메세지에 쓰여있는 조회 내용을 조사하여 답을 찾는다. 이 답을 응답 메시지에 써서 클라이언트에게 반송한다. 이 메시지는 네트워크를 통해 클라이언트측에 도착하고 프로토콜 스택을 경유하여 리졸버에게 건네져서 리졸버가 내용을 해독한다. 앞서 말했듯 브라우저가 지정한 메모리 영역에 IP 주소를 저장한다. 

 

DNS 서버에 메시지를 송신할 때에도 DNS 서버의 IP 주소가 필요하다. 이 DNS 서버의 IP 주소는 컴퓨터에 미리 설정되어있다.

cmd 창에 ipconfig/all 을 입력하면 DNS 서버 상태를 확인할 수 있다.

 

 

현재 기본 DNS 서버의 IP 주소는 168.126.63.1 이고, 이는 KT olleh의 DNS 서버라고 한다.

이 곳( www.codns.com/b/B05-175)에서 DNS 서버 목록을 확인할 수 있다. KT가 국내에서 가장 많이 사용되는 DNS 서버라고 한다. 어떤 기준으로 DNS 서버가 설정되는건지 다음에 알아봐야겠다. (아래 링크 걸어둠!)

 

 

위의 사진처럼 cmd 창에 nslookup 명령어를 입력하고 도메인명을 입력하면 그에 대응하는 IP주소를 알 수 있다. naver의 기본 IP 주소는 125.209.222.142 임을 확인할 수 있다.

 

 

20210319 기본 DNS 서버 할당 기준

보통은 본인이 사용하는 통신사 혹은 ISP(인터넷 서비스 제공자)의 DNS 주소로 되어 있다고한다. 따라서 만약 내가 구글에 관련된 서비스를 많이 이용하는 경우, 구글 DNS 서버로 변경을 해주면, 해

nolzaheo.tistory.com

 

728x90