FrontEnd
Javascript
Diary
ML
CS
Django
Algorithm
AWS
Co-Work
HTML
CSS
Python
React
ReactNative

IP주소와 DNS서버

♻ IP주소와 DNS서버

HTTP메세지를 만들었으면 OS에 의뢰해서 네트워크에 송신해야 하는데 이때 도메인명에서 IP주소를 조사해 지정해준다

TCP/IP의 개념

인터넷이나 사내 LAN은 TCP/IP의 개념에 기초해 만들어졌다 허브(패킷중계장치) + 몇대의 PC접속 ==> 서브넷

서브넷이라는 작은 네트워크를 라우터로 접속 하여 전체 네트워크 구성 (가정용 라우터중에는 허브를 내장한 라우터가 있다)

그럼 ‘OO동 OO번지’ 의 형태에서

동에 해당하는 것이 서브넷이고 번지에 해당하는 것이 컴퓨터

이때 동에 해당하는 것이 네트워크 번호 번지에 해당하는 것이 호스트 번호

네트워크번호 + 호스트 번호 = IP주소

IP주소에 따라 보낸 메세지가 허브로 운반이 되고 가장가까운 라우터로 보내지면 라우터가 다음 라우터를 판단하여 다시 허브가 라우터까지 보내는 과정을 반복하며 데이터가 도착한다

IP주소와 넷마스크

IP주소는 32비트의 디지털 데이터로 이루어짐 1byte( = 8bit) 씩 끊어 10진수로 표기 (따라서 각 10진수는 2^8만큼인 0~255까지를 가질 수 있다)

그런데 IP주소의 규칙에 따로 네트워크번호 부분과 호스트 번호 부분을 나누지 않아 사용자가 내역을 결정하게 되는데 이 내역을 나타내는 정보를 넷마스크 라고 한다

넷마스크는 32비트의 디지털 데이터로 왼쪽에 1이 오른쪽에 0이 나열되게 된다 이때 1인 부분은 네트워크 번호 0인 부분은 호스트 번호를 나타낸다


10진수 표기 비트 표기
IP주소 10. 1. 2. 3 00001010.00000001.00000010.00000011
넷마스크 255. 255. 255. 0 11111111.11111111.11111111.00000000
<---------네트워크번호----------> <-호스트번호->

10 . 11 . 12 . 13 / 255. 255. 255. 0
IP주소 넷마스크
네트워크 번호 : 10. 11. 12
호스트 번호 : 13
넷마스크의 한 부분 비트수를 10진수로 표기

255.255.255.0  = 8+ 8+ 8 + 0 = 24

💭 참고

호스트 번호가 나타내는 부분이 0  :  각각의 기기가 아닌 서브넷 자체

  1.   11.  12.  0 / 255.255.255.0     

호스트 번호가 나타내는 부분이 1  :  서브넷 기기 전체에 패킷을 보내는 '브로드캐스트 '

  1.   11.  12. 255/ 255.255.255.0

왜 IP를 안쓰고 도메인을 쓸까

IP주소를 외우는 것 보다 도메인 즉 서버의 이름을 외우는게 쉽다

그리고 웹서버가 가상호스트 라는 기능을 사용하고 잇으면 IP주소로 액세스 할수 없는 경우도 있다.

대신 이름을 이용해 네트워크를 구축하게 된다면 다뤄야 할 데이터가 4바이트를 넘어 훨~~씬 많아 지기때문에 라우터에 부하가 걸리게 되고 더 많은 시간이 걸리는등 네트워크의 속도 저하, 효율성저하 등의 문제점을 야기한다

따라서 이용자는 이름을 사용하고 라우터는 IP주소를 사용하고 이를 연결해 주는것이 DNS(Domain Name System 다양한 정보를 이름에 대응하여 등록하는 시스템)이다.

DNS 리졸버

가장 가까운 DNS서버에 IP주소를 조회하는데 이때 DNS서버에 대해 클라이언트로 작용하는것을 DNS리졸버(또는 리졸버) 라고 한다

그리고 IP주소 조사하는 것을 네임 리졸루션(Name resolution, 이름확인)이라 하고 리졸버가 리졸루션을 실행한다

리졸버는 Socket Library(OS에 포함되어있는 네트워크 기능관련 lib)에 들어있는 프로그램

브라우저 내 리졸버프로그램

<메모리 영역> = gethostbyname(“www.domain.com”)

리졸버가 DNS서버에 request 하여 받은 response에서 IP주소를 추출해 메모리 영역에 저장 (request response는 모두 binary로 이루어짐)

브라우저는 이 메모리영역의 IP사용

DNS 서버에서 IP주소 얻어오기(리졸버의 동작)

  • 브라우저 DNS 조회 ⇄
  • 리졸버 호출 ⇄
  • 리졸버가(브라우저같이)클라이언트로 작용 ⇄
  • OS내부 프로토콜스택(프로토콜 드라이버, TCP/IP 소프트웨어) 호출하여 메세지송수신 (이때 DNS의 IP도 필요한데 이는 TCP/IP설정 항목으로 미리 설정되어있음)⇄
  • LAN어댑터 ⇄ DNS서버