Bibbidi Bobbidi Boo
article thumbnail

* TIL/개념: 최대한 공식 문서 & 책을 기반으로 배운 내용을 정리

* 현재 취준생으로 풋내기 개발자가 쓰는 글입니다.

* 그러니 조언과 지적 및 훈수는 언제나 환영입니다! 댓글로 많이 달아주세요!

 

성공과 실패를 결정하는 1%의 네트워크 원리

  1. 웹 브라우저가 메시지를 만든다.
    1. HTTP 리퀘스트 메시지를 작성한다.
    2. 웹 서버의 IP 주소를 DNS 서버에 조회한다.
    3. 전 세계의 DNS 서버가 연대한다.
    4. 프로토콜 스택에 메시지 송신을 의뢰
  2. TCP/IP의 데이터를 전기 신호로 만들어 보낸다.
  3. 케이블의 앞은 LAN 기기였다.
  4. 액세스 회선을 통해 인터넷의 내부로!
  5. 서버측의 LAN에는 무엇이 있는가?
  6. 웹 서버에 도착하여 응답 데이터가 웹 브라우저로 돌아간다.


URL 안의 웹 서버 도메인 주소명으로 DNS 서버에 조회하여 IP 주소를 조사한다.

이 때 브라우저는 어떻게 동작하는가?


IP 주소 기본

OS에 송신을 의뢰할 때는 도메인 이름을 그대로 사용하지 않고, IP 주소를 사용한다.


IP 주소

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

IP 주소는 쉽게 말해 네트워크 주소다.

32bit의 디지털 데이터로, 8bit 씩 점으로 구분하여 10진수로 표기한다.

 

TCP/IP 에서 네트워크는 작은 서브넷을 라우터로 연결하여 전체 네트워크를 완성하는데,

이 때 OO동 OO번지와 같이 서브넷에 네트워크 주소를 할당했다.

  • 이 때 OO동 → 서브넷 → 네트워크 번호
  • OO번지 → 컴퓨터 → 호스트 번호

그리고 이 네트워크와 호스트 번호를 합친 것이 IP 주소다.

 

 

IP 주소에서 어느 부분이 네트워크이고 호스트인지는

네트워크 구축 시에 사용자가 직접 결정하며, 내역 정보를 필요에 따라 넷마스크로 덧붙인다.

  • 넷마스크에서 255, 즉 1인 부분은 네트워크 번호, 0인 부분은 호스트 번호다.
  • 예를 들어 ip 주소가 10.1.2.3, 넷마스크가 255.255.255.0이면
    • 네트워크 번호는 10.1.2, 호스트 번호는 3이다.

 

또한 호스트 번호의 비트값이 모두 0이거나 1일 때는 다음과 같은 경우다.

  • 모두 0: 서브넷 자체를 가리킨다.
  • 모두 1: 서브넷에 있는 기기 전체에 패킷을 보내는 브로드캐스트를 나타낸다.

왜 IP 주소와 도메인명을 구분지었는가?

IF. 만약 IP만 사용하면

전화번호를 기억하기 어렵듯, 숫자를 나열했을 때 기억하기 어려우므로 서버의 이름을 쓸 수 있도록 했다.

 

IF. 만약 도메인명만 사용하면

효율적이지 못하다.

  • IP 주소는 4byte지만, 도메인명은 최대 255byte
  • 때문에 네트워크의 속도가 느려진다.

혹은 고성능의 라우터를 사용하면 되지 않냐고 하지만,

라우터의 속도에는 한계가 있고,

방대한 데이터가 인터넷의 내부에 정체되어있을 수 있으므로 불가능하다.

 

이같은 문제로 사람은 이름을, 라우터는 IP 주소를 사용하는 방법이 고안되었고 현재는 정착되었다.

IP 주소를 알면 도메인명을, 도메인명을 알면 IP 주소를 알 수 있는 DNS가 있어서 가능한 것!


리졸버는 DNS 서버를 조회하는 리졸루션을 실행한다.

결국 웹 브라우저는 의뢰하기 위해서 서버의 ip 주소를 알아야 하는데,

웹 브라우저가 직접 하지 않고, 위임의 형식을 가진다.

 

이 때 웹 브라우저로부터 제어권을 받아서,

DNS 서버에 조회하는 클라이언트DNS 리졸버, 줄여서 리졸버라고 부른다.

그리고 DNS의 원리를 사용해 IP 주소를 조사하는데, 이를 네임 리졸루션(name resoultion, 이름 확인)이라고 부른다.

 

결국 웹 브라우저는 이 리졸버를 호출하고, 리졸버는 리졸루션을 실행한다고 볼 수 있다.

 

리졸버는 또한 DNS 서버에 접근해 조회하는 역할을 OS 내부의 프로토콜 스택에게 맡기고,

프로토콜 스택이 LAN 어댑터를 통해 DNS 서버에 조회한다.

 

이 과정을 자세히 나타내면 아래와 같다.

리졸버를 호출했을 때 발생하는 일

각각을 순서대로 살펴보자.

 

1. socket 라이브러리에 있는 함수인 gethostbyname()를 호출한다.

  • 여기서 socket 라이브러리는 네트워크의 기능을 호출하기 위한 라이브러리
  • gethostbyname()은 리졸버의 함수명이라고 볼 수 있다.

 

2. gethostbyname()

  • 가장 먼저 DNS 서버에 보내는 조회 메시지를 만든다.
  • 그리고 그 조회 메시지를 DNS 서버에 보낸다.
  • DNS 서버에서 돌아온 응답 메시지를 수신한다.
  • 응답 메시지에서 IP 주소를 추출하여 <메모리 영역>에 저장하고 애플리케이션으로 돌아간다.

 

2-1. 조회 메시지를 보내고 받기

DNS 서버와의 송신 동작은 리졸버가 스스로 실행하지 않는다.

리졸버는 브라우저처럼 네트워크에 대해 데이터를 송수신하는 기능이 없기 때문에

OS 내부에 포함된 프로토콜 스택을 호출해 실행을 의뢰한다.

  • 프로토콜 스택: OS 내부에 내정된 네트워크 제어용 소프트웨어

프로토콜 스택은 메시지를 보내는 동작을 실행해서 LAN 어댑터를 통해 메시지가 DNS 서버를 향해 송신하고,

DNS 서버는 메시지에 쓰인 조회 내용을 조사해 답을 찾아 반송한다.

 

추가로, DNS 서버에 조회할 때도 IP 주소가 필요하다.

  • 단 이는 컴퓨터에 TCP/IP 설정 항목에서 미리 설정되어 있다.

요약

URL 안의 웹 서버 도메인 주소명으로 DNS 서버에 조회하여 IP 주소를 조사한다.

  • IP 주소: 네트워크 주소
    • OO동에 해당하는 네트워크 번호 + OO번지에 해당하는 호스트 번호
    • IP 주소에 따라 액세스 대상이 어디있는지 판단하고 운반
    • 넷마스크는 네트워크 번호와 호스트 번호를 표시하는 역할
  • 브라우저가 DNS 서버에 조회할 때 과정
    1. 웹 브라우저가 리졸버를 호출한다.
    2. 리졸버 내부에서 DNS 서버에 문의하기 위한 메시지를 만든다.
    3. 만든 메시지를 프로토콜 스택에 의뢰하여 DNS 서버에 보낸다.
    4. DNS 서버에서 돌아온 응답 메시지를 프로토콜 스택이 수신하고, 이를 리졸버가 받는다.
    5. 리졸버가 응답 메시지에서 IP 주소를 추출해 <메모리 영역>에 저장하고, 애플리케이션으로 돌아간다.

profile

Bibbidi Bobbidi Boo

@비비디

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!