HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📖
공부한 책
/
1%의 네트워크 원리
1%의 네트워크 원리
/1장 웹 브라우저가 메시지를 만든다/
웹 서버의 IP 주소를 DNS 서버에 조회한다(IP 주소, 리솔버)

웹 서버의 IP 주소를 DNS 서버에 조회한다(IP 주소, 리솔버)

HTTP 의 메시지를 만들면 다음에는 이것을 OS에 의뢰하여 액세스 대상의 웹 서버에게 송신함. 이때 URL안에 쓰여 있는 서버의 도메인명에서 IP 주소를 조사해야 함
IP 주소의 기본IP 주소 표기법넷마스크도메인 명과 IP 주소를 구분하여 사용하는 이유Socket 라이브러리가 IP 주소를 찾는 기능을 제공리솔버를 이용하여 DNS 서버를 조회

IP 주소의 기본

notion image
  • TCP/IP는 그림과 같이 서브넷이라는 작은 네트워크를 라우터로 접속하여 전체 네트워크가 만들어진다고 생각할 수 있음
  • 여기에서 말하는 서브넷이란, 허브에 몇 대의 PC가 접속된 것이라고 생각해도 좋음
  • 여기에 ‘00 동 00 번지' 라는 형태로 네트워크의 주소를 할당함
    • 동에 해당하는 번호를 서브넷에 할당(네트워크 번호)하고, 번지에 해당하는 번호(호스트 번호)를 컴퓨터에 할당한 것이 네트워크의 주소
    • 네트워크 번호 + 호스트 번호 = IP 주소
  • 액세스 대상의 서버까지 메시지를 운반할 때는 IP 주소에 따라 액세스 대상이 어디에 있는지 판단하고 운반. 송신측이 메시지를 보내면 서브넷 안에 있는 허브가 운반하고

IP 주소 표기법

  • IP 주소 본체의 표기 방법
    • 10.11.12.13
  • IP 주소 본체와 같은 방법으로 네트워크를 표기하는 방법
    • 10.11.12.13/255.255.255.0
    • IP 주소 본체 / 넷마스크
  • 네트워크 번호의 비트 수로 넷마스크를 표기하는 방법
    • 10.11.12.13/24
    • IP 주소 본체 / 넷마스크
  • 서브넷을 나타내는 주소 : 호스트 번호 부분의 비트가 모두 0인 것은 각 컴퓨터가 아니라 서브넷 자체를 나타냄
    • 10.11.12.0/24
  • 서브넷의 브로드캐스트를 나타내는 주소 : 호스트 번호 부분의 비트가 모두 1인 것은 서브넷 전체에 대한 브로드캐스트를 나타냄
    • 10.11.12.255/24
💡
IP 주소의 호스트 번호 모두 0 : 서브넷 자체 모두 1: 서브넷에 있는 기기 전체에 패킷을 보내는 ‘브로드캐스트'를 나타냄

넷마스크

notion image
IP 주소 규칙에는 네트워크 번호와 호스트 번호의 두 가지를 합쳐서 32비트로 한다는 것만 결정되어 있을 뿐 어디까지가 네트워크 번호가 어디부터가 호스트 번호인지를 알 수 없음
이를 결정하는 것이 넷마스크

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

  • 도메인 명이 IP 주소보다 길어서 도메인 명 그대로 보내면 더 많은 데이터를 보내야함
  • 그래서 사람은 이름 사용하고 라우터는 IP 주소 사용

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

  • DNS 서버에 조회한다는 것은 DNS 서버에 조회 메시지를 보내고, 거기에서 반송되는 응답 메시지를 받는 것. 이 DNS 클라이언트에 해당하는 것을 DNS 리졸버 or 리솔버
  • 리솔버의 실체는 Socket 라이브러리
    • OS에 포함되어 있는 네트워크의 기능을 애플리케이션에서 호출하기 위한 부품을 모아놓은 라이브러리

리솔버를 이용하여 DNS 서버를 조회

  1. 네트워크 어플리케이션(브라우저)가 리졸버 호출
  1. DNS 서버에 문의하기 위한 메시지 만듦
  1. 프로토콜 스택을 호출하여 해당 메시지를 DNS 서버에 보냄
  1. IP주소 반환 받으면 지정한 메모리 영역에 저장
  • DNS 서버에 메시지 송신할 때도 당연히 DNS 서버의 IP 주소가 필요한데, 이는 TCP/IP 설정 항목의 하나로 컴퓨터에 미리 설정되어 있음
<애플리케이션 프로그램의 이름> (<매개변수>) { <메모리 영역> = gethostbyname("www.lab.cyber.co.kr"); ... <HTTP 메시지 송신> }
C 언어로 작성한 네트워크 애플리케이션의 소스 코드 예