CS/네트워크

HTTP 통신과정, 리졸버를 이용한 DNS 서버에서 IP 조회하기

JWonK 2023. 7. 21. 02:22
728x90
반응형

1.  HTTP 리퀘스트 메시지 작성


  • URL은 http://로 시작하는 것 뿐만 아니라 ftp:, file:, mailto: 등 여러가지가 존재한다.
  • 이와 같이 쓰는 방법은 다양하지만 모든 URL에는 하나의 공통점이 있다.

 

 

→ URL의 맨 앞에 있는 문자열, 즉 http:, ftp:, file:, mailto:라는 부분에서 액세스하는 방법을 나타낸다는 점이다. 그러므로 여기에는 엑세스 할 때의 프로토콜 종류가 쓰여있다고 생각하면 된다. 가장 먼저 이렇게 액세스 요청 리퀘스트 메시지를 작성한다.

 

 

 

 

1-2. 브라우저의 URL 해석

  • 브라우저가 처음 하는 일은 웹 서버에 보내는 리퀘스트의 메시지를 작성하기 위해 URL을 해독하는 것이다.
  • 아래 사진과 같은 방법으로 해독한다.

 

URL 해독

 

 

 

 

1-3. 파일명을 생략한 경우

위처럼 http://www.lab.cyber.co.kr/dir1/file.html은 URL의 대표적인 예이다. 이것과는 달리 다음과 같이 /로 끝나는 URL을 볼 수 있다.

 

http://www.lab.cyber.co.kr/dir/ 

 

끝이 /로 끝난 것은 /dir/의 다음에 써야 할 파일명을 쓰지 않고 생략한다는 것을 의미한다. URL의 규칙에는 이와 같이 파일명을 생략해도 된다. 하지만 파일명을 쓰지 않으면 어느 파일에 엑세스해야 할 지 모른다.

 

그래서 파일명을 생략할 때를 대비하여 파일명을 미리 서버측에 설정해둔다. 대부분의 서버는 'index.html' 또는 'default.htm'이라는 파일명으로 설정되어있다.

 

 

 

 

1-4. HTTP 기본 개념

  • URL을 해독하면 어디에 엑세스해야 하는지 판명된다.
  • 그러고 나면 브라우저는 HTTP 프로토콜을 사용하여 웹 서버에 엑세스하므로 HTTP 프로토콜을 이해해야 한다.
  • HTTP 프로토콜은 클라이언트와 서버가 주고받는 메시지의 내용이나 순서를 정한 것이지만, 기본적인 개념은 단순하다.

 

 

[HTTP 프로토콜 기본 동작]

  1. 클라이언트에서 서버를 향해 리퀘스트 메시지를 보낸다.
  2. 리퀘스트 메시지의 안에는 '무엇을', '어떻게 해서' 하겠다는 내용이 쓰여있다. '무엇을'에 해당하는 것을 URI라고 한다.
  3. 그 다음의 '어떻게 해서'에 해당하는 것은 메서드로 GET, POST, DELETE, PUT 등이 있으며 이 메서드에 의해 웹 서버에 어떤 동작을 하고 싶은지 전달한다.
  4. 레퀘스트 메시지가 웹 서버에 도착하면 웹 서버는 그 속에 쓰여있는 내용을 해독하고 요구에 따라 동작한 후 응답 메시지에 결과를 저장한다.
  5. 응답 메시지의 맨 앞 부분에는 실행 결과가 정상 종료되었는지 또는 이상이 발생했는지를 나타내는 Status Code가 있다.

 

HTTP 기본 개념
Status Code

 

 

 

 

1-5. HTTP 리퀘스트 메시지를 만든다.

리퀘스트 메시지는 정해진 형식이 존재하며 첫 번째 행에 리퀘스트 라인을 쓴다. 이 행에서 중요한 것은 맨 앞에 있는 메소드이다.

이것을 통해 웹 브라우저는 웹 서버에 어떻게 할 것인지를 전달한다.

 

 

HTTP 메시지 포맷

 

 

두 번째 행부터는 메시지 헤더라는 행이 이어진다. 

첫 번째 행에서 리퀘스트의 내용을 대략 알 수 있지만, 부가적인 자세한 정보가 필요한 경우도 있는데, 이것을 쓰는 것이 메시지 헤더의 역할이다.

 

메시지 헤더를 쓰면 그 뒤에 아무 것도 쓰지 않는하나의 공백 행을 넣고, 그 뒤에 송신할 데이터를 쓴다. 이 부분을 메시지 본문이라 한다.

 

 

 

 

1-6. 리퀘스트 메시지를 보내면 응답이 되돌아온다.

  • 응답 메시지의 포맷도 기본적인 기념은 리퀘스트 메시지와 같지만 첫 번째 행이 다르다.
  • 응답의 경우 정상 종료했는지, 오류가 발생했는지, 리퀘스트의 실행 결과를 나타내는 Status Code와 응답 문구를 첫 번째 행에 작성해야 한다.
  • 리퀘스트 메시지에 쓰는 URI는 한 개만으로 결정되어 있으므로 파일을 한 번에 한 개씩만 읽을 수 있기 때문에 파일을 따로 따로 읽어야 한다. 
  • 예를 들어 한 문장에 3개의 영상이 포함되어 있다면 문장 파일을 읽는 리퀘스트와 영상 파일을 읽는 리퀘스트로, 총 4회(1+3) 리퀘스트 메시지를 웹 서버에 보낸다.

 

 

 

 

 

 

 

 

 

 

 

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


 

2-1. IP주소의 기본

  • HTTP의 메시지를 만들면 다음에는 이것을 OS에 의뢰하여 액세스 대상의 웹 서버에게 송신한다.
  • 브라우저는 URL을 해독하거나 HTTP 메시지를 만들지만, 메시지를 네트워크에 송신하는 기능은 없으므로 OS에 의뢰하여 송신한다.
  • 이 때 URL 안에 쓰여있는 서버의 도메인명에서 IP 주소를 조사해야한다.
  • OS에 송신을 의뢰할 때는 도메인명이 아니라 IP주소로 메시지를 받을 상대를 지정해야 하기 때문이다. 

 

→ 그러므로 HTTP 메시지를 만드는 동작의 다음은 도메인명에서 IP 주소를 조사하는 동작이 된다.

 

 

 

[TCP/IP]

  • TCP/IP는 아래 그림과 같이 서브넷이라는 작은 네트워크를 라우터로 접속하여 전체 네트워크가 만들어진다.
  • 서브넷이란, 허브에 몇 대의 PC가 접속된 것이라 생각해도 무방하다. 이것을 한 개의 단위로 생각하여 '서브넷'이라고 부르는데, 라우터에서 연결하면 네트워크 전체가 완성된다.
  • 여기에 '○○동 ○○번지'라는 형태로 네트워크의 주소를 할당한다.
  • 동에 해당하는 번호를 서브넷에 할당하고,
  • 번지에 해당하는 번호를 컴퓨터에 할당한 것이 네트워크의 주소이다.
  • 이 동에 해당하는 번호를 네트워크 번호라 하고, 번지에 해당하는 번호를 호스트 번호라 하며, 이 두 주소를 합쳐 IP 주소라 한다.

 

IP의 기본 개념

 

 

[TCP/IP와 IP 주소의 기본적인 개념]

  1. 액세스 대상의 서버까지 메시지를 운반할 때는 이 IP 주소에 따라 액세스 대상이 어디에 있는지 판단하고 운반한다.
  2. 송신 측이 메시지를 보내면 서브넷 안에 있는 허브가 운반하고, 송신측에서 가장 가까운 라우터까지 도착한다.
  3. 그리고 라우터가 메시지를 보낸 상대를 확인하여 다음 라우터를 판단하고, 거기에 보내도록 지시하여 송신 동작을 실행한 후 다시 서브넷의 허브가 라우터까지 메시지를 보낸다.
  4. 이런 동작을 반복하면 최종적으로 상대의 데이터가 도착한다는 원리이다.

 

 

 

 

2-2. 도메인명과 IP 주소를 구반하여 사용하는 이유

우선, URL 안에 서버명이 아니라 IP주소를 쓰면 기억하기 어렵다. 이름을 부여하고 통신하는 것은 문자를 취급해야하기 때문에 효율적인 측면에서 좋지 않다.

 

그래서 이름을 알면 IP주소를 알 수 있다거나 IP주소를 알면 이름을 알 수 있다는 원리를 사용하여 양쪽의 차이를 해소하면 모두 좋아지는데 이 원리가 DNS이다.

 

 

 

 

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

  • DNS 서버에 IP를 조회하는 것은 DNS 서버에 조회 메시지를 보내고, 거기에서 반송되는 응답 메시지를 받는다는 것이다.
  • 이것은 DNS 서버에 대해 클라이언트로 동작한다고도 말할 수 있다. 
  • 이 DNS 클라이언트에 해당하는 것을 [DNS] 리졸버라고 부른다.
  •  그리고 DNS의 원리를 사용하여 IP 주소를 조사하는 것을 네임 리졸류션(name resolution, 이름 확인)라고 하는데, 이 리졸루션을 실행하는 것이 리졸버(resolver)이다.

리졸버는 Socket 라이브러리에 들어있는 부품화한 프로그램이다. Socket 라이브러리는 OS에 포함되어 있는 네트워크의 기능을 애플리케이션에서 호출하기 위한 부품을 모아놓은 것이다.

 

 

 

 

2-4. 리졸버를 이용하여 DNS 서버를 조회한다.

  • 브라우저 등의 애플리케이션 프로그램을 만들 때 리졸버의 프로그램명(gethostbyname)과 웹 서버의 이름을 쓰기만 하면 리졸버를 호출할 수 있다.
  • 이렇게 해서 리졸버를 호출하면 DNS 서버에 조회 메시지를 보내고, DNS 서버에서 응답 메시지가 돌아온다.
  • 이 응답 메시지 안에 IP 주소가 포함되어 있다

 

→ 브라우저가 웹 서버에 메시지를 보낼 때는 이 메모리 영역에서 IP 주소를 추출하여 HTTP의 리퀘스트 메시지와 함께 OS에 건네주어 송신을 의뢰할 뿐이다.

 

 

 

 

2-5. 리졸버 내부의 작동

  • 네트워크 애플리케이션(=브라우저)이 리졸버를 호출하면 제어가 리졸버의 내부로 넘어간다.
  • 리졸버에 제어가 넘어가면 여기에서 DNS 서버에 문의하기 위한 메시지를 만든다. ex) 'www.wonsjung.com'이라는 서버의 IP주소가 무엇인가?'
  • 그리고 메시지를 DNS서버에 송신한다. 메시지 송신 동작은 리졸버가 스스로 실행하는 것이 아니라 OS 내부에 포함된 프로토콜 스택 호출하여 실행을 의뢰한다.
  • 리졸버가 프로토콜 스택을 호출하면 제어가 리졸버에게 넘어가고 여기에서 메시지를 보내는 동작을 실행하여 LAN 어댑터를 통해 메시지가 DNS 서버를 향해 송신한다.
  • 조회 메시지가 DNS 서버에 도착하고 DNS 서버는 메시지에 쓰여있는 조회 내용을 조사하여 답을 찾는다. 그리고 답을 발견하면 응답 메시지에 써서 클라이언트에게 반송한다.
  • 메시지는 네트워크를 통해 클라이언트측에 도착하고, 프로토콜 스택을 경유하여 리졸버에 건네져서 리졸버가 내용을 해독한 후 IP주소를 추출하여 애플리케이션에 건네준다. [실제로는 리졸버를 호출할 때 지정한 메모리 영역에 IP 주소를 저장]

 

 

※ 프로토콜 스택 ※

: OS 내부에 내장된 네트워크 제어용 소프트웨어

 

 

리졸버를 호출할 때 PC 내부 움직임

728x90
반응형