다음은 성공과 실패를 결정하는 1%의 네트워크 원리 를 읽고 정리한 내용입니다. 본 글은 CH1. 웹 브라우저가 메시지를 만든다 입니다 🙌


💡 개요

  1. HTTP 리퀘스트 메세지를 작성한다.
    • URL을 해독하는 곳에서 브라우저의 동작이 시작된다.
    • 이 URL의 의미에 따라서 요청 메세지를 작성하고 요청 내용을 만든다.
    • 이때 HTTP 라는 프로토콜이 사용된다.
  2. 웹 서버의 IP 주소를 DNS 서버에 조회
    • OS에 의뢰해서 요청 메세지를 송신할 때 송신대상의 IP주소를 알아야한다.
    • URL의 웹 도메인명으로 DNS 서버를 조회해서 IP 주소를 조사한다.
  3. 전세계 DNS 서버 연대
    • 다수의 DNS 서버가 연대하여 IP 주소를 조사한다.
  4. 프로토콜 스택에 메시지 송신을 의뢰
    • OS에 메세지를 송신하는 동작을 의뢰한다.
    • OS에서 제공하는 규칙에 따라서 의뢰를 해야한다.
    • 해당 프로그램을 직접 구현하는 것이 아니더라도 규칙의 큰 흐름을 알는 것이 중요하다.

🛺 [STORY1] HTTP 리퀘스트 메세지를 작성한다

URL 입력

  • URL은 우리가 알고 있는 http 뿐 아니라 ftp, file, 등등 여러가지가 존재한다.
    • 브라우저에 여러 프로토콜 존재한다
      • 브라우저는 여러 클라이언트 기능을 가지고 있는 복합적인 소프트웨어이기 때문
    • 브라우저에서 http 요청 뿐 아니라 파일 다운로드/업로드 등의 기능도 있다.
    • 어느 기능을 사용하는지 url 에 명시된 프로토콜로 판단할 수 있다.
  • URL에 엑세스 대상에 따라서 여러 정보를 담는다.
    • 웹 서버 요청일 경우 파일 경로, 포트 번호 등을 담아서 보낼 수 있다.
    • 모든 URL에는 앞에 엑세스 대상에 따라서 다른 프로토콜을 명시하고 있다. (http, ftp 등등)

브라우저의 URL 해독

우선 웹 서버에 엑세스 하는 경우를 기반으로 설명한다.

  • URL에 파일 경로가 포함되어 있을 수 있다 → / 를 기준으로 디렉토리 구조와 파일명을 명시하여 url에 포함한다.
  • 마지막에 파일명을 명시하지 않는 경우
    • 기본 파일명을 서버측에 설정하여 생략된 경우 사용한다. (index.html, default.htm 등등)
  • 마지막에 디렉토리를 생략한 경우
    • 루트 디렉토리의 기본 파일을 읽는 것으로 간주한다.
  • 마지막에 경로에 /가 생략된 경우 (ex. http://www.web.com/path)
    • 이 경우 마지막 값이 파일명인지 디렉토리인지 알 수 없다.
    • 다음과 같은 경우 우선 매칭되는 파일명이 있는지 확인하고, 없다면 매칭되는 디렉토리명이 있는지 확인한다.

HTTP기본 개념

  • URL 해독 후 액세스 해야하는 위치가 판단된다. 그때부터 명시된 프로토콜 (이 경우에는 HTTP)에 따라서 액세스를 진행한다.
  • HTTP 프로토콜의 요청 메세지가 담고 있는 내용
    1. 무엇을 - URI 데이터를 저장한 경로만 쓰거나 URL을 그대로 쓸 수도 있다.
    2. 어떻게 - 메소드 (GET, POST, PUT 등등)
  • 응답 메세지가 담고 있는 내용
    1. 결과 데이터
    2. status code - 실행 결과의 상태에 대한 정보
  • PUT 이나 DELETE를 사용하면 파일 서버 대신 웹 서버를 사용할 수도 있긴 하다. (???) p. 45

HTTP 리쿼스트 메세지를 만든다

  • 우선 URL을 판단하여 웹 서버와 파일 경로 및 파일명을 해석한 후에 HTTP 요청 메세지를 만든다.
  • 첫번째 행 - Request Line
    • 메소드 - 여러 종류의 메소드 중 웹 서버에 어떻게 전달할지 메소드에 담아서 판단한다.
    • URI - 파일이나 경로명
    • HTTP 버전
  • 두번째 부터 - Headers
    • 부가적인 자세한 정보를 헤더에 추가한다.
    • 날짜, 데이터 종류, 언어, 압축 형식 등등
  • 공백 라인 이후 - Request Body
    • 송신할 데이터를 메세지 본문에 기재한다.
    • 주로 POST 요청인 경우 바디에 데이터를 담아서 요청한다.

리퀘스트 메세지를 보낸 이후 응답이 돌아온다.

  • 기본적으로 첫번째 행을 제외하고 요청 메세지와 비슷한 형태를 지닌다.
  • 첫번째 행 -
    • 요청 실행 결과 status code
    • status 코드의 응답 문구 (Not Found)
  • 응답이 오면 메세지를 추출해서 화면에 표시한다.
  • 문장만 이루어진 응답 데이터가 아닌 경우
    • 추가적으로 이미지나 영상을 담고 있는 경우 응답 문장에 tag를 추가하여 명시한다.
      • ex. <img src="{이미지경로}" />
    • tag가 존재한다면
      • 우선 공백으로 비워둔다.
      • 이후 추가 웹 서버 액세스하여 태그에 쓰여있는 경로로 URI를 만들어서 요청 메세지를 보낸다.
  • 하나의 요청 메세지에는 하나의 URI 만 쓰기 때문에 여러 파일이 필요하면 매번 요청을 보내야 한다.

🛺 [STORY2] 웹 서버의 IP주소를 DNS 서버에 조회한다.

IP 주소의 기본

  • 브라우저가 담당하는 일 → URL 해독, HTTP 메세지 만들기
  • OS가 담당하는 일 → 메세지를 네트워크로 송출
    • 따라서 브라우저가 위 업무는 OS에 위임하여 메세지를 송신한다.
  • 이때 URL에서 해석한 도메인명의 IP 주소를 조사해야 한다.

TCP/IP 기본 개념

  • 서브넷 - 여러 PC가 하나의 허브에 연결되어 있는 단위

  • 여러 서브넷을 라우터로 연결하여 네트워크 전체를 구성한다.

  • 네트워크 주소를 00동 00번지의 단위로 표현할 수 있다.

    • 00동 → 서브넷에 할당된 네트워크 번호
    • 00번지 → 호스트 번호
  • 네트워크 번호 + 호스트 번호가 IP 주소를 구성한다.

  • 라우터와 허브를 통해서 네트워크 주소를 계속 중계하면서 액세스 대상을 찾아간다.

  • 기본적인 흐름

    • 송신측이 메세지를 보냄 → 가까운 허브가 운반하여 가까운 라우터에 송신 → 라우터에서 다음 라우터를 판단 → 서브넷의 허브가 해당 라우터까지 메세지를 송신함 → 반복하여 최종 도착지에 데이터가 도착

IP의 구조

  • 32비트 디지털 데이터
  • 8비트씩 . 으로 구분하여 10진수로 표기 - 255.255.255.255
  • 네트워크 번호(서브넷 번호)와 호스트 번호를 판단하기 위해 넷마스크 정보를 IP에 더한다.
  • 넷마스크 번호도 동일하게 32비트 디지털 데이터이다.
    • 1로 표기된 비트까지가 네트워크 번호
    • 0으로 표기된 비트를 호스트 번호로 판단한다.
    • 바이트 단위로 반드시 맞아 떨어지지는 않는다.
  • 호스트 번호가 모두 0인 경우 - 서브넷 자체를 나타냄
  • 호스트 번호가 모두 1인 경우 - 서브넷 기기 전체에 대한 브로드캐스트를 나타냄

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

  • 반드시 IP 주소가 있어야지 수신 상대와 연결될 수 있는데 번호로 구성된 IP를 기억하기는 어렵기 때문에 도메인명을 쓰도록 한다.
  • 도메인명 만으로 네트워크 통신을 하게 된다면 주소에 대한 바이트가 균일하지 않고 지나치게 클 수 있다.
    • 데이터 운반 동작에 더 많은 시간이 걸려 속도가 느려진다.
  • 따라서 사용자는 도메인명만 기억하면 해당 IP 주소를 알아서 찾아주는 DNS를 사용한다.

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

  • DNS 동일하게 요청 메세지 + 응답 메세지의 구조로 데이터를 찾아내는 것이다.
  • DNS 서버에 요청 메세지를 보내어 도메인명을 의뢰하는 DNS 클라이언트는 DNS 리졸버이다.
  • DNS resolution → DNS 원리로 IP 주소를 조사하는 것 (DNS 리졸버가 수행함)
  • DBS 리졸버는 Socket 라이브러리에 내장된 프로그램이다.
    • Socket 라이브러리에는 네트워크 기능과 관련된 프로그램이 집합해 있다.

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

  • Socket 라이브러리에 리졸버 메소드에 의뢰하고자 하는 도메인 명을 명시하면 IP 주소를 조회할 수 있다.

리졸버 내부의 작동

  • 어플리케이션(브라우저)에서 리졸버를 호출하면서 어플리케이션은 잠시 대기한다. (리졸버로 제어가 넘어가 실행된다. 이때부터 실행주체는 Socket 라이브러리의 리졸버이다)
  • DNS 서버에 응답 메세지를 만들어 보낸다.
  • 메세지 송신 동작은 OS의 프로토콜 스택이 수행한다. LAN 어댑터를 경유하여 목표서버에 메세지가 전달된다.
  • DNS 서버가 해당 메세지를 해석하여 결과를 찾는다.
  • 응답이 오면 프로토콜 스택 → 리졸버가 내용을 해독하여 IP 주소 추출 → 어플리케이션에 주소전달 하는 단계를 밟는다.
  • DNS 서버 주소 정보는 ?
    • TCP/IP 설정 항목으로 컴퓨터에 미리 설정되어 있다.


[용어]

URL - Uniform Resource Locater

FTP - File Transfer Protocol

URI - Unifor Resource Identifier

CGI 프로그램 - 웹 서버 소프트웨어에서 프로그램을 호출할 때 정한 규칙(CGI)에 따라 움직이는 프로그램  

라우터 - 패킷을 중계하는 장치 

허브 - 패킷을 중계하는 장치 (리피터 허브 & 스위칭 허브) 

DNS - Domain Name System 서버명과 IP주소를 대응, 메일 주소와 메일 서버를 대응 등등 

프로토콜 스택 - OS 에 내장되어 있는 네트워크 제어 소프트웨어