www.naver.com을 치면 무슨일이 일어나는가 .. ? DNS 와 IP (2/6)

송명규·2024년 5월 14일
0

자 지난시간에는 URL과 OSI 7 Layers 에 대해서 알아보았습니다.

이제는 Local 컴퓨터를 나와서 전기적 신호로 변경되었습니다.

근데 .. 이게 어디로 가서 누구에게 무엇을 어디가서 물어보나요?

그렇죠!
반드시 그 질문이 나올 것 입니다.

여기서 DNS 등장!

DNS 란?

도메인 네임 시스템(Domain Name System, DNS)은 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발되었다. 특정 컴퓨터(또는 네트워크로 연결된 임의의 장치)의 주소를 찾기 위해, 사람이 이해하기 쉬운 도메인 이름을 숫자로 된 식별 번호(IP 주소)로 변환해 준다. 도메인 네임 시스템은 흔히 "전화번호부"에 비유된다. 인터넷 도메인 주소 체계로서 TCP/IP의 응용에서, www.example.com과 같은 주 컴퓨터의 도메인 이름을 192.168.1.0과 같은 IP 주소로 변환하고 라우팅 정보를 제공하는 분산형 데이터베이스 시스템이다. (출처 : 위키피디아)=

라고 합니다.
쉽게 말하면 공동 전화번호부 같은 것이라고 생각하시면 됩니다.

DNS 비유

예를 들어보도록 하겠습니다.

  • 이름 : Harry Song
  • 전화번호 : 010-1234-5678

일때,
공동 전화번호부에 물어보는 거죠.

Q : 송명규의 전화번호는 뭐야?
A : 010-5529-8779 입니다.

그럼 전화번호에 전화를 걸면 됩니다.

DNS 예시

이것을 www.naver.com 예시로 바꿔봅시다.

  • 이름(Domain) : www.naver.com
  • 전화번호(ip) : 125.209.222.141 입니다.

이러면 125.209.222.141에 request를 보내면 되는 것 입니다.

아니 그럼 DNS 는 도대체 어디에 있나요? 어디에 물어바야함????

맞습니다.
무작정 DNS 물어본다. 라고 하면 감이 오지 않습니다..!

DNS 계층

OSI 7 Layer 가 그러하듯, DNS에도 계층이 존재합니다.
알아보러 갑시다.

1. Local DNS Server
여기는 로컬 서버에 DNS 를 질의한 캐쉬가 남아 있는지 확인합니다.
그러니까 내 전화번호부 의 기록을 살펴보는 셈이죠!
내 전화번호부에 "www.naver.com"의 기록이 남아있는지 확인합니다.

2. Root DNS Server
Root DNS 서버는 DNS 서버의 가장 높은 계층에 존재하며, TLD(Top-Level Domain) Server 의 주소를 가지고 있습니다.(TLD는 아래서 나옵니다.)
그러니까 전화번호부의 전화번호부 입니다.

3. TLD(Top-Level Domain) Server
TLD 서버는 .com, .kr 같은 가장 오른쪽(최상위 도메인)부분을 처리합니다.
2번의 Root DNS Server 가 이 TLD Servers의 주소를 가지고 있기 때문에 전화번호부의 전화번호부라고 한 것이다.

그럼 TLD Server 는 어떤 것을 가지고 있을까요?
바로 밑에 나올 Authoritative Name Server의 주소를 가지고 있습니다.
즉, 전화번호부의 전화번호부의 전화번호부 인 셈입니다.

4. Authoritative Name Server
마지막 Authoritative Name Server 입니다.
드디어 여기서 !
해당 도메인에 대해서 등록 정보라던지, 도메인에 대한 상세 정보를 제공합니다.

체계적이어서 좋긴 한데요 .. 너무 많이 서버를 왔다갔다 하는게 아닌가요 ..? 비효율 King 입니다

맞습니다.
우리는 DNS를 맨날 물어볼 수 없으니, 캐시라는 녀석을 이용해봅시다.

캐시는 일정 시간동안만 저장하는 DB 같은 것이라고 생각하면 됩니다.

제 전화번호를 30분마다 바꾸진 않잖아요?

그러니까 한 일주일 동안은
{"송명규의 전화번호":"010-1234-5678"}
이라고 저장을 해놓는 것 입니다.

그럼 캐쉬가 어디어디 있냐!
각각의 계층별로도 존재하고, ISP(인터넷 제공 업체)에서도 캐시가 존재합니다.
하지만 여기서 어디어디에 캐시가 존재하는지 암기하는 것은 불필요하기에 과감하게 스킵해 봅니다.

DNS 질의 타이밍

DNS 에 대해서는 알겠는데.. 근데 언제 물어봄??

사실 이 수많은 과정들을 Application Layer에서 미리 물어봅니다.
OSI 7 Layer를 통과하면서 패키징 되기 전에 미리미리 Application Layer에서 물어보는 것입니다.

DNS prefetching

하 근데 이걸 매 사이트 마다 로딩을 하려니까 조금 빡센 것 같아요.
매번 링크를 클릭할때 마다 DNS 질의를 해야하잖아요?

그런 당신을 위해 "DNS Prefetching" 이라는 녀석이 있습니다!

DNS Prefetching이란?

브라우저에 도메인의 DNS 확인을 미리 수행하도록 요청합니다. 곧 해당 도메인에 연결할 예정이고 초기 연결 속도를 높이고 싶을 때 유용합니다.

예를 들어, URL를 입력해서 요청을 보내는 것이라면 문제가 다르겠지만,
로드된 웹페이지 상에서 링크를 클릭해서 들어가는 것이라면 미리 DNS질의를 마쳐놓을 수 있습니다.

네이버의 웹페이지에 10개의 링크가 있다고 가정해봅시다.

그렇다면 10개의 링크의 도메인에 미리 DNS 질의를 마쳐놓고 그 결과를 캐싱을 해놓아서, End User가 클릭 할 시 바로 해당 IP 주소로 Request를 보내는 것이라고 할 수 있습니다.

자 다시 본론으로 돌아가봅시다.

OSI 7 Layer에서 DNS 에 질의 후 IP 주소를 얻었고, 이제 다시 해당 IP 주소로 Request를 보내야 합니다.

..? 근데 아직 어떻게 보내는지 잘 느낌이 안오는 것 같은 느낌같은 느낌이에요

당연합니다.
아직 라우터와 스위치 개념이 등장 하지 않았으니까 말이죠.

"어디에서".. ?

자, 다시 로컬 컴퓨터에서 랜선을 타고 나온 시점으로 되돌아 갑시다.

그렇다면 랜선을 타고 전기적 신호는 어디로 이동하죠?

잠시만.. 여기서 하나 질문이 빠진 것이 있습니다.

전기적 신호가 "이동"을 한다면,
반드시 "도착지점"이 있어야 합니다.
반대로 "도착지점"이 있다면, "출발지점"도 있기 마련입니다.

즉, 질문을 다시 해봅시다.

"어디에서" "어디로" 이동하나요?

라고 질문해야 맞는 질문이 됩니다.

그렇다면 내 아이피를 정확히 알아봅시다.

터미널 창을 열어 "ifconfig"라는 명령어를 치면 쭉 이상한 목록이 나옵니다.

저는 WiFi를 사용하기에 정확한 내 아이피 주소 하나만 알아보도록 하겠습니다.

ipconfig getifaddr en0

(마지막은 가려놓았습니다.)
172.30.1.?? 이라는 ip가 나왔습니다!

자 그럼 이 ip가 맞는지 확인해봅시다.
https://www.whatismyip.com/
사이트에 들어가면 자신의 ip가 나옵니다.

근데 .. 다른데요?

매우 혼란한 이 상황.
뭘까요?

외부 IP와 내부 IP

예를 들어 봅시다.
제가 집에 컴퓨터를 3대 두었다고 가정하면,
각각의 컴퓨터는 각기 다른 3개의 ip를 가지고 있을까요?

맞습니다!

그렇다면 각각의 컴퓨터에서 www.naver.com으로 GET 요청을 보낼때,
각각 다른 출발 ip로 요청을 보낼까요?

아닙니다 ! 당신을 틀렸어요 !

각각의 3개의 컴퓨터는 "각기 다른 내부 ip"
"하나의 외부 ip" 로 요청을 보내게 됩니다.(일반적인 가정집 기준입니다.)

NAT(Network Address Translation)

예를 들어 봅시다.

컴터 1의 ip : 172.1.1.1
컴터 2의 ip : 172.1.1.2
컴터 3의 ip : 172.1.1.3

외부 ip : 111.111.111.111

컴터1(172.1.1.1) 에서 www.naver.com로 요청을 보낼때,
시작 ip(원본 IP 주소, Source IP Address라고 합니다.)로 다시 반환을 해주기 위해서 Source IP 주소에 Response를 돌려주려 합니다.

아니 잠만요 그럼 하나의 외부 ip 주소를 쓰면 도댓체 컴터1이 보냈는지, 컴터 3이 보냈는지 어떻게 아는거죠???

이때 바로 NAT라는 기술이 등장합니다.

Network Address Translation 이란, 말 그대로 네트워크 주소를 바꿔버립니다.
어떻게 바꾸냐면,

1. 컴터 1 -> 라우터
이때는 내부 네트워크 안에 있기 때문에
Source IP Address : 172.1.1.1:123 입니다.

2. 라우터 -> 인터넷
이때는 내부 네트워크 안에 있기 때문에
Source IP Address : 22.22.22.22:321 입니다.
자세히 보시면, IP Address 뿐만이 아니라, 포트 번호도 바뀌었습니다!
NAT 변환이 일어날 때, IP Address 와 포트 번호를 바꾸어 버립니다.

포트 번호를 바꾸지 않으면
서로 다른 컴퓨터가 같은 내부 네트워크에서 같은 포트로 request할시,
문제가 발생하기 때문입니다.

따라서 내,외부 IP 와 각각의 포트 번호를 바꾸고, 그 결과를 NAT Table에 Mapping 시켜놓습니다.

3. 인터넷 -> 라우터
이때는 변환된 IP address 인,
Source IP Address : 22.22.22.22:321 입니다.

4. 라우터 -> 컴터 1
그리고 마지막으로, 다시 아까 NAT Table에 적어놓은 Mapping 정보에 따라 원본 IP 주소를 바꾸어서,
Source IP Address : 172.1.1.1 가 됩니다!

추가적으로 .. DHCP 라는 개념도 등장해야하는데 .. 너무너무너무 방대해지니 Pass 하는걸로!

자 이제 통신의 "출발지"와 "도착지"를 정확히 알았습니다.
다음 시간에는 출발지에서 시작하여, 도착지에 어떻게 도착하지는지 라우터와 스위치 개념을 덧붙혀서 알아봅시다!

profile
안녕하세요

0개의 댓글