HTTP
Web을 위해 만들어진 프로토콜에 해당한다.
Hypertext transfer protocol의 약자로, Client-Server 구조를 따르고 있다.
사용자가 켜 놓은 browser가 client process로 동작하며, request를 전송하고 응답을 receive하게 된다.
서버는 사용자가 브라우저를 통해 보낸 요청을 처리하고 적절하게 응답해주며 서비스를 제공한다.
HTTP는 transport service를 TCP에게 요청한다.
HTTP의 connection은 non-persistent와 persistent 두 방식이 존재할 수 있다.
Non-persistent HTTP connection
non-persistent는 서버 측에서 오브젝트를 하나 전송하고 나면 바로 connection을 close하는 방식이다.
동작 과정을 순서대로 살펴보면 다음과 같다.
Client 1. HTTP client아 TCP 연결을 시작한다.
Server 1. 이후 port 80에서 대기하던 server procesㄴ가 이를 accept하고 클라이언트에게 알린다.
Client 2. server에게 HTTP 요청을 보낸다.
Server 2. 클라이언트의 요청을 받고, 이를 처리하여 소켓으로 내려보낸다.
Server 3. TCP 연결을 중단한다.
Client 3. client는 Server의 응답 메시지를 받고 이를 이용하여 필요한 정보를 얻거나 렌더링한다.
따라서 만약 하나의 웹 페이지를 렌더링 할 때 필요한 이미지 object가 10개라면, 10번의 TCP 연결을 만들고, 위와 같은 과정을 반복해야한다.
이렇게 TCP 연결을 성사시킨다는 것은 각 end system에서 network layer와 application layer 사이에 소켓을 만드는 것을 의미한다.
TCP 데이터 전송 과정에서 Response Time을 살펴보자.
이 때 RTT라는 개념을 알아야하는데, 이는 Round Trip TIme의 준말로, 하나의 packet이 클라이언트에서 출발한 후, 다시 응답이 클라이언트에게 돌아올 때 까지 걸리는 시간을 말한다.
따라서 Response TIme은 2RTT + file transmission time이 된다.
Persistent HTTP
persistent model은 한 번 socket을 열면, 응답을 보내도 해당 connection을 닫지 않고 유지하는 방식을 의미한다.
따라서 연속되는 요청들에 대해서
non-persistent 방식에서 매번 새롭게 TCP socket을 열기 위해 소모하던 1RTT 만큼의 시간을 사용하지 않고,
효율적으로 데이터를 주고 받을 수 있게된다.
HTTP request messgae
HTTP request의 메시지는 사람이 읽을 수 있는 format인 ASCII 코드로 되어있다.
첫 줄에는 어떤 작업을 요청하는지에 대한 Method 정보와 url, HTTP version에 대한 정보가 담겨있다.
User-Agent에는 웹 브라우저에 대한 정보가 담겨 있으며,
Accept-Language는 어떤 언어로 적혀 있는지에 대한 정보를 담고 있다.
Connection에 담긴 keep-alive는 persistent로 동작해달라는 요청을 의미한다.
헤더라인 이후에는 POST 요청 등의 경우 body data가 들어올 수 있다.
HTTP response message
request message와 비슷한 format으로 되어 있으며, 헤더가 끝나고 요청 데이터가 들어 있는 것을 확인할 수 있다.
HTTP response의 대표적인 상태 메세지는 다음과 같다.
Cookie
HTTP 자체는 stateless protocol이지만, 유저에 대한 정보를 서버가 유지해야 하는 경우가 존재할 수 있다.
이런 경우 `Cookie`를 사용할 수 있다.
쿠키를 설정하는 순서는 다음과 같다.
1. 서버 측에서 HTTP response message에 cookie header line을 추가한다.
2. 클라이언트 측에서 cookie header line을 추가한 HTTP response를 받은 이후부터는, request message에도 cookie header line이 추가된다.
이를 유지하기 위해 클라이언트 측에서는 웹 브라우저에 쿠키 정보를 저장하고, 서버에서는 database에 이를 저장한다.
Web cache(proxy server)
일반적으로 클라이언트가 어떤 데이터를 request하면 서버까지 해당 요청이 이동해야한다.
하지만 서버가 너무 멀리 있거나 요청이 많아 처리에 많은 시간이 소요될 수 있다.
이러한 상황에서 사용하는 테크닉이 Web Cache이다.
클라이언트는 처음에 요청을 할 때 proxy server에 요청을 하고, 해당 데이터가 proxy server에 있는 경우 origin server까지 요청을 진행하지 않고, proxy server에서 응답을 처리하여 클라이언트에게 전송한다.
이러한 로컬 서버는 회사, 대학 등에서 따로 구입을해서 운영하게된다.
웹 캐시를 두게되면 response time을 줄일 수 있을 뿐만 아니라 access link에서 발생하는 트래픽의 양을 줄일 수 있다는 장점이 있다.
Conditional GET
web cache를 사용하면 응답 시간을 줄일 수 있고, 비용을 상당히 많이 절감할 수 있다는 장점이 있지만 동기화의 문제가 존재한다.
original server에서 변경한 데이터가 웹 캐시에 반영되어 있지 않다면, 해당 웹 캐시를 사용하는 네트워크의 유저들은 모두 옛날 데이터에 접근하고 가져오게 되기때문에 문제가 발생할 수 있다.
이를 해결하기 위한 방법이 Conditional GET이다.
HTTP 요청 헤더에 존재하는 If-modified-since 라는 정보를 확인 후,
해당 헤더라인에 적혀있는 date 이후로 웹 캐시에서 데이터를 변경한 이력이 없는 경우, 오리지널 서버에 검사를 진행한다.
SMTP
SMTP는 메일 전송 시 사용되는 프로토콜이다.
위 그림은 메일을 주고받기 위한 기본적인 구조를 나타낸 것으로,
mail server 내부의 초록색 queue는 message queue로, 다른 메일 서버로 전달될 메세지들이 순차적으로 담겨있다.
노란색 박스의 경우 mail box로, 각 유저에게 전달될 메일이 담겨있는 부분에 해당한다.
SMTP 프로토콜의 특징은 `push` 프로토콜이라는 점이다.
HTTP 프로토콜은 서버에 요청을 보낸 후 특정한 응답을 받아오기 때문에 `pull` 프로토콜이라고 하는데,
SMTP의 경우는 클라이언트에서 서버로 데이터를 전송하므로 이러한 점에서 차이점이 존재한다.
POP
위 그림은 SMTP 프로토콜에 대해 살펴볼 때 보았던 그림이다.
5번 과정 까지의 단계는 SMTP의 push 동작을 통해 진행될 수 있지만, 6번 동작의 경우는 사용자가 필요로 하는 경우에 메일이 전달되어야 한다는 차이점이 있다.
따라서 6번 동작을 위해서는 다른 종류의 프로토콜을 사용해야 하는데, POP, IMAP, HTTP등의 프로토콜이 사용될 수 있다.
POP3 프로토콜은 authorization phase와 transaction phase로 나뉘어져 있다.
authorization phase
사용자는 user과 pass라는 commmand를 사용하여 username과 password를 서버에 전달하게 된다.
이후 서버는 이를 검증하여 올바른 경우 OK, Invalid한 경우 ERR 메세지를 리턴하게 된다.
transcation phase
transaction phase에서는 list, retr, dele, quit 네 가지의 command가 사용된다..
`list`를 사용하면 모든 message의 바이트 수를 확인할 수 있고
`retr`를 사용하면 서버에서 해당하는 메세지를 받아올 수 있다.
이후 `dele`를 사용해서 서버에서 이미 가져온 메세지를 삭제하여 서버의 공간을 확보할 수 있다.
`quit`를 사용하면 POP3 서버 연결을 종료하게된다.
POP3는 download and delete 모드와 download and keep 모드로 동작할 수 있는데, 후자의 경우 retr를 통해 메세지를 가져와도 dele 작업을 수행하지 않는다.
IMAP
POP3의 경우 stateless protocol이기 때문에, 이전에 어떤 메일을 받았는지 기억하지 않는다.
따라서 받아왔던 메세지를 계속해서 받아오는 등 불편한 부분이 존재하는데, 이를 개선한 것이 IMAP 프로토콜이다.
IMAP는 모든 메세지를 서버에 그대로 keep 해둔 상태로 동작한다.
이후 유저는 message를 담은 폴더를 생성하며, 이 폴더의 이름과 message ID와의 매핑 관계를 세션을 통해 유지하는 방식으로 동작한다.
'Network' 카테고리의 다른 글
[Computer Network] Transport Layer(UDP와 TCP) (0) | 2023.11.01 |
---|---|
[Computer Network] Socket Programming (0) | 2023.11.01 |
[Computer Network] DNS (Domain Name System) (0) | 2023.10.31 |
[Computer Network] Internet Layer (0) | 2023.10.29 |
[Computer Network] Introduction (0) | 2023.10.27 |