소개

1장 웹 브라우저가 메시지를 만든다

Date
2022/04/14

HTTP 리퀘스트 메시지를 작성한다

Request Message

<메소드><공백><URI><공백><HTTP 버전> <헤더 필드명>:<헤더 필드값> ... ... <공백 행> <메시지 본문>
Plain Text
복사

Response Message

<HTTP 버전><공백><스테이터스 코드><공백><응답 문구> <헤더 필드명>:<헤더 필드값> ... ... <공백 행> <메시지 본문>
Plain Text
복사

웹 서버의 IP 주소를 DNS 서버에 조회한다

HTTP의 메시지를 만든 이후에는 이것을 OS를 통해 액세스 대상의 웹 서버에게 전송합니다. 브라우저는 URL을 해독하거나 HTTP 메시지를 만들 수는 있지만, 네트워크를 이용해 메시지를 전송하는 기능은 없으므로 OS를 통하는 것입니다.
이때 URL 안에 쓰여있는 서버의 도메인명에서 IP 주소를 조사해야 합니다. OS를 통해 전송을 할 때에는 도메인명이 아니라 IP 주소로 메시지를 전달 받은 상대를 지정해야하기 때문입니다. 그러므로 HTTP 메시지를 만드는 동작의 다음은 도메인명에서 IP 주소를 조사하는 동작이 됩니다.

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

IP 주소를 조사하는 방법은 간단합니다. 가장 가까운 DNS 서버에 ‘www.google.com’이라는 서버의 IP 주소를 가르쳐 주세요.라고 묻는 것입니다. 그러면 DNS 서버는 그 서버의 IP주소를 가르쳐줍니다.
DNS 서버에 조회한다는 것은 DNS 서버에 조회 메시지를 보내고, 거기에서 반송되는 응답 메시지를 받는다는 것입니다. 이것은 DNS 서버에 대해 클라이언트로 동작한다고 말할 수 있습니다. 이 DNS 클라이언트에 해당하는 것을 DNS 리졸버 또는 단순히 리졸버라고 부릅니다. 그리고 DNS의 원리를 사용하여 IP 주소를 조사하는 것을 네임 리졸루션(name resolution, 이름 확인)이라고 하는데, 이 리졸루션을 실행하는 것이 리졸버(resolver)입니다.
리졸버의 실체는 Socket 라이브러리에 들어있는 함수입니다. gethostbyname

리졸버 내부의 작동

애플리케이션에서 Socket 라이브러리의 리졸버를 호출하면 리졸버는 애플리케이션에 요청한 작업을 실행합니다.
우선 DNS 서버에 문의하기 위한 메시지를 만들고, 그 후 OS 내부에 포함된 프로토콜 스택을 호출하여 메시지를 DNS 서버에 보냅니다. (리졸버도 브라우저와 같이 네트워크에 대해 데이터를 송/수신할 수 있는 기능이 없음)

전 세계의 DNS 서버가 연대한다

DNS 서버는 기본적으로 클라이언트의 조회 요청을 받고, 그에 응답하는 형식으로 동작합니다. 그리고 클라이언트의 조회 요청 메시지는 다음의 세 가지 정보가 포함되어 있습니다.
명칭
설명
이름
서버나 메일 배송 목적지(메일 주소에서 @ 뒷부분의 이름)와 같은 이름
클래스
DNS의 구조를 고안했을 때 인터넷 이외에도 네트워크에서의 이용까지 검토하여 이것ㅇㄹ 식별하기 위해 클래스라는 정보를 준비했다. 그러나 지금은 인터넷 이외의 네트워크는 소멸되었으므로 클래스는 항상 인터넷을 나타내는 ‘IN’이라는 값이 된다.
타입
이름에 어떤 타입(종류)의 정보가 지원되는지를 나타낸다. 예를 들어 타입이 A이면 이름에 IP 주소가 지원되는 것을 나타내며, MX이면 이름에 메일 배송 목적지가 지원된다는 것을 나타낸다. 또한 이 타입에 따라 클라이언트에 회답하는 정보의 내용이 달라진다.

프로토콜 스택의 메시지 송수신 동작 개요

1.
소켓 작성
2.
파이프 연결 (접속)
3.
메시지 송・수신
4.
연결 해제