1. HTTP 리퀘스트 메시지 작성
- URL은 http://로 시작하는 것 뿐만 아니라 ftp:, file:, mailto: 등 여러가지가 존재한다.
- 이와 같이 쓰는 방법은 다양하지만 모든 URL에는 하나의 공통점이 있다.
→ URL의 맨 앞에 있는 문자열, 즉 http:, ftp:, file:, mailto:라는 부분에서 액세스하는 방법을 나타낸다는 점이다. 그러므로 여기에는 엑세스 할 때의 프로토콜 종류가 쓰여있다고 생각하면 된다. 가장 먼저 이렇게 액세스 요청 리퀘스트 메시지를 작성한다.
1-2. 브라우저의 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 프로토콜 기본 동작]
- 클라이언트에서 서버를 향해 리퀘스트 메시지를 보낸다.
- 리퀘스트 메시지의 안에는 '무엇을', '어떻게 해서' 하겠다는 내용이 쓰여있다. '무엇을'에 해당하는 것을 URI라고 한다.
- 그 다음의 '어떻게 해서'에 해당하는 것은 메서드로 GET, POST, DELETE, PUT 등이 있으며 이 메서드에 의해 웹 서버에 어떤 동작을 하고 싶은지 전달한다.
- 레퀘스트 메시지가 웹 서버에 도착하면 웹 서버는 그 속에 쓰여있는 내용을 해독하고 요구에 따라 동작한 후 응답 메시지에 결과를 저장한다.
- 응답 메시지의 맨 앞 부분에는 실행 결과가 정상 종료되었는지 또는 이상이 발생했는지를 나타내는 Status Code가 있다.
1-5. 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 주소라 한다.
[TCP/IP와 IP 주소의 기본적인 개념]
- 액세스 대상의 서버까지 메시지를 운반할 때는 이 IP 주소에 따라 액세스 대상이 어디에 있는지 판단하고 운반한다.
- 송신 측이 메시지를 보내면 서브넷 안에 있는 허브가 운반하고, 송신측에서 가장 가까운 라우터까지 도착한다.
- 그리고 라우터가 메시지를 보낸 상대를 확인하여 다음 라우터를 판단하고, 거기에 보내도록 지시하여 송신 동작을 실행한 후 다시 서브넷의 허브가 라우터까지 메시지를 보낸다.
- 이런 동작을 반복하면 최종적으로 상대의 데이터가 도착한다는 원리이다.
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 내부에 내장된 네트워크 제어용 소프트웨어
'CS > 네트워크' 카테고리의 다른 글
액세스 회선이란, 엑세스 회선 과정, 프로바이더와 프로바이더를 경유하여 흐르는 패킷 (0) | 2023.07.26 |
---|---|
허브와 스위치, 라우터의 동작 과정과 기능 (0) | 2023.07.25 |
서버에서 연결 끊고 소켓 말소, IP와 이더넷의 패킷 송·수신 동작 (0) | 2023.07.24 |
소켓을 이용한 데이터 송/수신 과정, TCP에서 오류 회복 조치가 필요 없는 이유, ACK와 윈도우 제어 (0) | 2023.07.22 |
DNS 서버 동작과 소켓을 통한 데이터 송수신 동작 개요 (0) | 2023.07.21 |