Networks/HTTP

HTTP의 TCP 연결 과정

iKay 2020. 9. 18. 00:29
반응형

network protocol 스택에서 TCP는 transport layer 반면, HTTP는 application layer이다. HTTP는 TCP 계층 상위에 존재하고, HTTP와 TCP는 인접해서 정해진 인터페이스로만 메시지를 주고 받는다. 이것은 HTTP와 TCP는 분리되어 있고, HTTP를 통해 클라이언트와 서버간에 메시지를 주고 받기 위해서는 우선 TCP가 확보되어야 함을 뜻한다. 그래서 웹 애플리케이션을 만들 때 어느 정도는 TCP를 이해하고 있어여 한다고 생각한다. 특히, TCP 연결 과정은 명확히 알고 있어야 한다고 본다. 고가용성(HA) 웹 애플리케이션을 만들기 위해서 말이다.

 

그림1. network protocol 스택

 

클라이언트와 서버간 HTTP를 통해 메시지를 주고 받기 위해 우선 TCP 연결이 확보되어야 하고, 메시지를 주고 받은 후 연결이 종료된다. 쉽게 착각할 수 있는 부분이라 다시 설명한다. 웹 브라우저가 웹 서버에 TCP 연결을 맺은 후 data(HTML 문서, json 등)를 주고 받은 후 일반적으로 TCP 연결은 종료된다. TCP 연결이 유지 되지 않는다.

 

아래는 웹 브라우저에서 www.google.com 에 접속하는 과정을 TCP 연결 관점에서 본 것이다.

 

그림2. Client와 Server TCP 연결을 맺고 HTTP를 통해 메시지를 주고 받을 후 종료하는 과정

 

 

과정을 설명하면 다음과 같다.

 

1.  서버에서 TCP 소켓을 만들고(S1), 소켓을 바인딩하고(S2), 소켓에 커넥션이 들어올 수 있도록 하고(S3), 소켓이 커넥션을 기다린다(S4).

2. 클라이언트에서 웹 브라우저에 http://www.google.com 이라고 입력한다. 그러면 DNS 에서 www.google.com  에 대한 IP를 얻게 되고 생략 되어있지만 80포트 번호를 얻는다(C1).

3. 클라이언트에 웹 브라우저는 임의의 port 번호로(보통 30000번 이상) 소켓을 만들고(C2), connect() 함수로 TCP 연결을 시도한다.

4. 서버는 클라이언트의 연결을 감지 한 후 새로운 커넥션을 생성한다(S5, C4).

5. 동시에 서버는 클라이언트로부터 요청 받을 준비를 한다. 즉, buffer를 read 할 수 있게 한다(S6).

6. 클라이언트는 명령을 수행할 HTTP 요청 메시지를 서버로 보낸다(C5). 즉, buffer를 write한다.

7. 동시에 서버로 부터 받을 응답을 기다린다(C6). 즉, buffer를 read 할 수 있게 한다.

8. 서버는 클라이언트로 부터 요청받은 HTTP 메시지를 처리한다(.

9. 처리 후 응답 HTTP 메시지를 보낸다(S8).

10. 클라이언트는 HTTP 응답을 처리한다(C7)

11. 클라이언트와 서버간 TCP 연결을 종료한다(C8, S9)

 

 

 

반응형

'Networks > HTTP' 카테고리의 다른 글

HTTP와 HTTPS의 연결 과정  (0) 2020.09.18