HTTP
HTTP 프로토콜은 클라이언트와 서버가 주고받는 메시지의 내용이나 순서를 정한 것이다.
클라이언트에서 서버를 향해 리퀘스트 메시지를 보내고, 서버는 클라이언트에게 응답 메시지를 보낸다.
리퀘스트 메시지 안에는 URI(Uniform Resource Identifier)와 메소드가 있고, 응답 메시지 안에는 스테이터스가 담겨 있다.
URI는 페이지 데이터를 저장한 파일의 이름 혹은 CGI 프로그램의 파일명을 URI로 쓴다.
메소드는 URI로 보내지는 파일을 '어떻게' 할지에 대한 동작 정보를 전달한다.
그 예로 GET, POST, PUT, DELETE와 같은 정보들이 있다.
리퀘스트 메시지의 첫 번째 행은 리퀘스트 라인이라 하며, 리퀘스트 내용을 대략적으로 파악이 가능하다.
필드명과 필드값이 있는 부분부터 메시지 본문 위쪽까지를 메시지 헤더라 하며, 한 행에 한 개의 헤더 필드를 쓴다.
메시지 헤더에는 데이터의 사양과 관련된 여러 내용이 담겨 있다.
메시지 본문의 내용은 클라이언트에서 서버에 송신하는 데이터이다.
다만 메소드가 GET인 경우 메소드와 URI 만을 이용해 웹 서버가 할 일을 판단할수 있기 때문에,
이 경우에는 메시지 본문이 없이 메시지 헤더가 끝난 곳에서 메시지는 끝이 난다.
메소드가 POST인 경우 메시지 본문에 사용자가 입력한 데이터 등을 저장한다.
응답 메시지의 첫 번째 행은 스테이터스 라인이라 하며, 스테이터스 코드와 응답 문구가 담겨있다.
스테이터스 코드는 흔히 아는 404를 포함한 몇 가지 응답 상태에 대한 정보가 담겨 있으며, 간략하게 다음과 같다.
코드값 | 설명 |
1XX | 처리의 경과 상황 등을 통지 |
2XX | 정상 종료 |
3XX | 무언가 다른 조치가 필요함 |
4XX | 클라이언트 측의 오류 |
5XX | 서버 측의 오류 |
응답 문구는 문장으로 적혀 있으며 사람이 실행 결과를 확인할 수 있게끔 한다.
그 다음은 리퀘스트 메시지와 동일하게 메시지 헤더 부분과 메시지 본문으로 구성되어 있다.
IP
브라우저는 URL을 해독하거나 HTTP 메시지를 만들지만, 메시지를 네트워크에 송출하는 기능은 없다.
이 작업은 OS가 수행하게 되는데, 메시지가 송신하게 되는 대상을 찾기 위해서는 IP주소가 필요하다.
TCP/IP는 허브와 PC 몇 대로 이루어진 서브넷이라는 작은 네트워크 단위가,
라우터에 접속하여 전체 네트워크를 구성하는 형태라고 할 수 있다.
이러한 형태에서 서브넷에 해당하는 번호를 네트워크 번호, PC에 해당하는 번호를 호스트 번호라 하며
이 두 주소를 합친 것이 개개인 PC의 IP 주소가 된다.
TCP/IP 네트워크에서는 이러한 IP주소를 통해 통신 상대를 지정하기 때문에 상대의 IP를 알아야 한다.
그러나 통신 상대의 서버 이름 대신 IP 주소를 모두 기억하는 것은 어렵고,
서버 이름을 통해 접근하는 방식은 IP 숫자를 통한 방식에 비해 필요한 바이트 수의 차이가 매우 크기 때문에 비효율적이다.
그렇기 때문에 IP 주소와 서버이름을 서로 매칭시켜, 서버 이름을 통해 IP 주소를 얻거나
IP 주소를 통해 서버 주소를 얻는 방식이 고안되었고, 이 방식이 바로 DNS이다.
DNS 서버
DNS 서버에 조회하는 것은 DNS 리졸버 혹은 리졸버라 불리는 클라이언트를 통해 이뤄진다.
리졸버는 Socket 라이브러리를 통해 이뤄진다.
DNS 서버에 IP 주소를 조회하는 과정을 대략적으로 설명하면 다음의 순서로 이뤄진다.
- 네트워크 어플리케이션에서 DNS 리졸버(Socket)에 IP 주소 조회를 요청한다.
- Socket에서 DNS 서버에 보낼 조회 메시지를 만든다
- OS 프로토콜 스택을 호출하여 조회 메시지를 송신한다.
- DNS 서버에서 조회된 IP 주소는 응답 메시지에 담겨 클라이언트에게 전달된다.
- 응답 메시지는 OS 프로토콜 스택을 경유하여 리졸버에 건네지고, 리졸버는 메시지를 해독하여 IP 주소를 추출한다
- 추출된 IP 주소는 네트워크 어플리케이션에 전달된다.
DNS 서버는 조회 메시지를 바탕으로 그에 맞는 응답을 진행한다.
조회 메시지에는 이름, 클래스, 타입 이 세 가지 정보가 담기게 된다.
이름에는 주소 이름이 담기게 된다. 클래스에는 네트워크 종류를 구분하기 위한 정보가 담겨 있다.
하지만 현재는 인터넷 이외의 네트워크는 존재하지 않아 클래스에는 항상 인터넷을 나타내는 'IN' 정보가 담기게 된다.
타입에는 이름에 어떤 정보가 지원되는 지를 나타낸다.
예를 들어 A의 경우 IP 주소 조회, MX(Mail eXchange)는 메일 배송 목적지를 나타낸다.
이 세 가지 정보를 통해 등록된 정보를 찾아 IP 주소를 응답 메시지로 전달한다.
이러한 형태는 사내 네트워크 환경에서 한 대의 DNS 서버를 통해 모든 웹 또는 메일 서버를 관리하는 경우 가능하다.
하지만 일반적인 경우 막대한 수의 서버가 있어 이를 전부 한 대의 DNS가 가지고 있는 것은 불가능하다.
그렇기 때문에 정보는 분산되어 다수의 DNS 서버에 저장되고, DNS 간 서로 가진 정보를 이용하는 방식이다.
DNS 서버에 등록한 정보에는 도메인이라는 계층적 구조를 가진 이름이 붙게 된다.
하위 도메인을 담당하는 DNS 서버의 IP 주소를 상위 DNS 서버에 등록하는 식으로 차례대로 등록한다.
예를 들어 aaa.bbbb.com 이라는 도메인을 담당하는 DNS 서버가 있다면,
해당 DNS 서버를 bbbb.com 이라는 도메인을 담당하는 DNS 서버에 등록하고,
해당 DNS 서버는 다시 com 이라는 도메인을 담당하는 DNS 서버에 등록되는 형태이다.
위의 예시에서 com은 최상위 도메인이 되고, 최상위 도메인 위에 루트 도메인이 존재하여 최상위 도메인이 등록된다.
이러한 형태를 통해 루트 도메인에서 하위로 내려가면서 도메인을 참조할 수 있다.
또한 루트 도메인은 모든 DNS 서버에 등록되어, 어느 DNS 서버더라도 루트 도메인에 접근이 가능한 형태가 된다.
모든 DNS 조회 과정마다 루트 도메인을 통해 탐색이 이뤄지는 것은 아니다.
DNS 서버는 한 번 탐색한 이름을 캐시에 기록하여, 해당 위치의 도메인으로 바로 이동할 수 있다.
이 경우 탐색 시간이 훨씬 단축되는 장점을 가지고 있지만,
해당 도메인이 변경될 수 있기 때문에 캐시에 저장되는 정보는 유효기간이 존재한다.
Today 확인 질문
1. 서버에서 클라이언트에 상태 값 보낼때, 서버 오류 났을때 어떤 코드 보내나요?
: 5XX(500번대) 상태 코드를 보냅니다.
2. DNS 서버에서 IP 주소 조회해서 가져오는 방식에 대해 간략하게 설명해주세요.
: 브라우저와 같은 네트워크 어플리케이션에서 DNS 리졸버에 IP 주소 조회를 요청하면,
DNS 리졸버는 DNS 조회 메시지를 만들고 해당 메시지는 OS 프로토콜을 통해 DNS 서버로 전달됩니다.
DNS 서버에서는 도메인을 통해 조회 메시지에 맞는 정보를 찾아내고, 응답 메시지를 만들어 클라이언트에게 전달합니다.
클라이언트에 저장된 메시지는 다시 OS 프로토콜을 거쳐 수신되고
DNS 리졸버에 의해 응답 메시지가 해독되어 IP 주소를 가져오게 됩니다.
References
성공과 실패를 결정하는 1%의 네트워크 원리
'Dev > CS' 카테고리의 다른 글
[네트워크] Day 3 (0) | 2023.11.14 |
---|---|
[네트워크] Day 2 (0) | 2023.11.11 |
[운영체제] 가상 메모리, 파일 시스템 (1) | 2023.10.31 |
[운영체제] 프로세스 동기화, 교착 상태 (0) | 2023.10.31 |
[운영체제] 프로세스와 스레드, CPU 스케쥴링 (0) | 2023.10.17 |
댓글