티스토리 뷰

이 포스팅은 성공과 실패를 결정하는 1%의 네트워크 원리를 읽고 정리한 포스팅이다.

 

 

개요

브라우저의 동작을 처음 추적합니다.

OS에 내장된 네트워크 제어용 소프트웨어에 전송 의뢰하기

 

동작 순서

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

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

 

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

 

4. 프로토콜 스택에 메시지 송신을 의뢰한다.

 

1. 탐험 여행은 URL 입력부터 시작한다

 

탐험 여행의 출발점은 브라우저에서 URL을 입력하는 곳이다.

 

URL이란? http: , file: , ftp: mailto: 로 시작하는 여러 종류가 있다.

 

왜 URL은 여러 종류가 있는 걸까?

브라우저는 몇 개의 클라이언트 기능을 겸비한 복합적인 클라이언트 소프트웨어이다.

ex) file down/up load , mail

 

이 기능 중에 어느 것을 사용하여 데이터에 액세스 하면 좋은 것인지를 판단하는 재료가 필요하다.

그래서 여러 URL이 존재하는 것이다.

 

URL을 쓰는 방법은 액세스의 대상에 다라 다르다.

ex) 웹 서버 - 도메인 명 , FTP 서버 - 파일의 경로명 , 메일 서버 - 상대의 메일 주소

필요에 따라 사용자 명과 패스워드, 서버 측 포트 번호 등도 쓸 수 있다.

 

모든 URL의 공통점

 - URL 맨 앞 문자열 : http: ftp: file: mailto: 이 부분이 액세스 하는 방법인 것이 공통점이다.

 

2. 브라우저는 먼저 URL을 해독한다

브라우저가 처음 하는 일

- 웹 서버에 리퀘스트 메시지를 작성하기 위해 URL을 해독하는 것

 

웹 서버에 액세스 하는 경우 어떻게 액세스를 할까?

- URL의 요소를 따로따로 분해한다. 분해한 요소를 나열하면 URL의 의미를 알 수 있다.

 아래의 URL은 www.lab.cyber.co.kr이라는 웹 서버에 있는 /dir1/file1.html이라는 경로의 파일에

 액세스 한다는 말이다.

3. 파일명을 생략한 경우

URL의 규칙에는 이와 같이 파일명을 생략해도 괜찮다.

이런 경우를 위해 서버 측에서 미리 설정을 해둔다. 대부분의 서버가 index.html 또는 default.htm 파일명을 설정한다.

그래서 파일명을 생략하면 '/dir/index.html'또는 '/dir/default.htm'이라는 파일에 액세스를 하게 된다.

/라는 디렉토리가 지정되고 파일명은 생략된 것이다.

따라서 /index.html 또는 /default.html에 액세스를 한다.

끝의 /까지 생략된 경우. 너무 지나친 생략이지만 인정되는 방법이다.

루트 디렉토리 아래에 있는 미리 설정된 파일명의 파일. 즉, /index.html 또는 /deafult.htm 에 액세스 하면 혼란은 없다

웹 서버에 whatisthis라는 파일이 있으면 파일명으로 보고, 디렉토리가 있으면 디렉토리명으로 본다.

똑같은 이름을 가진 파일과 디렉토리가 존재할 경우는 없다.

 

4. HTTP의 기본 개념

URL을 해독하면 어디에 액세스해야 하는지가 판명된다.

그러고 나면 브라우저는 HTTP 프로토콜을 사용해 웹 서버에 액세스한다.

그러기 전에 HTTP 프로토콜이 어떤건지 살펴보자.

 

HTTP 프로토콜은 클라이언트와 서버가 주고받는 메시지의 내용이나 순서를 정한 것이지만 기본적인 개념은 단순하다.

먼저 클라이언트에서 서버를 향해 리퀘스트 메시지를 보낸다.

리퀘스트 메시지 안에는 '무엇을' '어떻게 해서' 라는 내용이 쓰여있다.

 

'무엇을'은 URI(Uniform Resource Identifier)라고 한다.

보통 페이지 데이터를 저장한 파일의 이름이나 CGI 프로그램의 파일명을 URI로 사용한다.

예를 들면 '/dir1/file1.html' 이나 '/dir1/program1.cgi'와 같은 식이다.

그러나 URI는 그것만이 아니라 여기에 http:로 시작하는 URL을 그대로 쓸 수 있다.

즉 다양한 액세스 대상을 쓸 수 있으며 이러한 액세스 대상을 통칭하는 말이 URI이다.

그림 1-4

'어떻게 해서'에 해당하는 것이 메소드이다. 이 메소드에 의해 웹 서버에 어떤 동작을 하고 싶은지를 전달한다.

대표적인 동작은 URI로 나타낸 데이터를 읽고 싶다거나 클라이언트 측에서 입력한 데이터를 URI로 나타낸 프로그램에

전달하고 싶다는 식의 동작이 대표적이다. 

 

다음 표에 주요 메소드들이 어떤 동작을 요구할 수 있는지 알 수 있다.

표 1-1

리퀘스트 메시지가 웹 서버에 도착하면 웹 서버는 그 속에 쓰여있는 내용을 해독한다.

'무엇을' '어떻게 하는지' 판단한 후 요구에 따라 동작하고, 결과 데이터를 응답 메시지에 저장한다.

 

응답 메시지의 맨 앞부분에는 실행 결과를 나타내는 스테이터스 코드가 있다.

ex) 404 Not Found

 

그 다음 헤더 파일과 페이지의 데이터가 이어지고 이 응답 메시지를 클라이언트에 반송한다.

그러면 이것이 클라이언트에 도착하여 브라우저가 메시지의 안에서 데이터를 추출하여 화면에 표시하면서

HTTP의 동작은 끝이 나게 된다.

 

 

GET 메소드 : 웹 서버에 액세스하여 페이지의 데이터를 읽을 때 사용하는 것

POST 메소드 : 폼에 데이터를 사용해서 웹 서버에 송신하는 경우에 사용한다.

 

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

URL을 해독하고 웹 서버와 파일명을 판단하면 브라우저는 이것을 바탕으로 HTTP의 리퀘스트 메시지를 만든다.

HTTP 메시지의 포맷이 결정되어 있으므로 브라우저는 이 포맷에 맞게 리퀘스트 메시지를 만듭니다.

 

리퀘스트 라인

 - 메소드가 중요, 이 한 행으로 리퀘스트의 내용을 대략 알 수 있다.

 

메시지 헤더

 - 공백 행까지 메시지 헤더이다.

 - 한 행에 한개의 헤더 필드를 쓴다. 이를 통해 리퀘스트의 부가적인 정보를 나타낸다

 

메시지 본문

 - 클라이언트에서 서버에 송신하는 데이터. POST 메소드로 웹 서버에 데이터를 보낼때 여기로 들어간다.

스테이터스 라인

 - 스테이터스 코드는 숫자로 쓴 것이며, 프로그램 등에 실행 결과를 알려주는 것이 목적

 - 응답 문구는 문장으로 쓰여있으며 사람에게 실행 결과를 알리는 것이 목적이다.

 

메시지 본문

 - 서버에서 클라에 송신하는 데이터. 파일에서 읽은 데이터나 CGI 애플리케이션이 출력한 데이터가 들어간다.

  바이너리 데이터로 취급

 

더 자세한 내용은 책을 참조하면 된다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함