2020. 10. 30. 01:22ㆍ네트워크/HTTP
1. HTTP
우리 부모님은 식당을 운영하신다. 그리고 가끔 바쁜 날이면, 내가 서빙일을 도와주기도 한다. 식당의 비지니스는 손님이 와서 메뉴를 시키면, 식당은 요청받은 메뉴를 손님에게 제공하는 형태로 돌아간다. 그런데, 식당이 아니더라도 우리는 무언가를 요청하고 받는 메커니즘에 굉장히 익숙하다. 웹도 마찬가지다. 웹 클라이언트(손님)는 웹 서버(식당 주인)에게 웹 컨텐츠(메뉴)를 주문하면, 웹 서버(식당 주인)는 웹 클라이언트(손님)에게 요청받은 컨텐츠를 제공한다. 여기서 웹 컨텐츠는 웹 페이지, HTML, css, js가 될 수 있다. 이러한 비지니스 방식을 통신에서는 프로토콜(Protocal)이라고 하며, 웹에서는 주로 하이퍼 텍스트 전송 프로토콜(Hyper Text Transfer Protocal, HTTP)를 이용한다.
[그림 1]처럼 서버, 클라이언트는 역할이 정해져있다. 클라이언트는 필요한 컨텐츠(데이터, 웹 페이지)를 요청하고, 서버는 응답을 한다. 웹 에서 사용하는 프로토콜은 HTTP 한 개만 있는 것이 아니다. 상황에 따라 쓸 수 있는 프로토콜이 많기 때문에, 특정 프로토콜을 사용하기 위해서는 그 프로토콜이 가지고 있는 고유한 id, 즉 포트번호로 접근 해야한다. 따라서 HTTP 서버로 접근을 하기 위해서는 포트번호 80번을 사용해야한다. 클라이언트의 경우, 임시 포트 번호를 사용하면 된다. Node.js와 같은 백엔드 프레임워크를 사용해 본적이 있다면, localhost:3000, localhost:4000과 같이 포트번호를 직접 지정해줬는데, 이것을 클라이언트 포트번호라고 생각하면된다.
2. HTTP의 특징
HTTP는 TCP 서비스를 사용하는 연결 지향의 신뢰성 있는 프로토콜이다. 여기서 TCP란, OSI 모형 가운데 4계층인 전송 계층에서 사용하는 프로토콜로써 장치들 사이에 논리적인 접속 성립을 위해 신뢰성을 보장하는 연결형 서비스를 말한다. 신뢰성을 보장하기 위해 TCP는 클라이언트와 서버 사이에 정보를 주고받는 작업(트랜잭션)을 하기 전에 서로 작업할 준비가 되있는지 확인하는 작업이 필요하다. 이러한 작업을 Three-way Hanshaking이라고 한다. 즉, 데이터를 송수신 하기 위해 네트워크 연결을 설정하는 작업을 말한다. 아까의 식당 예시를 들면, 식당(서버 사이드)는 영업 시작을 해서 손님을 받을 수 있는 준비를 한다고 생각하면 되고, 손님(클라이언트 사이드)는 음식을 사먹기 위한 돈을 준비한다고 생각하면 된다. Three-way Handshaking은 다음과 같은 과정을 거친다.
먼저, 클라이언트가 동기화(연결)를 요청하는 SYN 세그먼트를 서버로 전송한다. 즉, 손님이 식당주인에게 "나 음식을 사먹을 돈이 있는데 식당 문 좀 열여주실래요?" 라고 묻는 것과 같다. [그림 2]는 클라이언트가 서버로 첫 번째 Sequence Number(10)을 생성해서 Ack 플래그가 0, SYN 플래그가 1인 SYN 세그먼트를 서버로 보내는 상황을 나타낸 것이다.
그러면 서버는 SYN-ACK 세그먼트를 클라이언트로 전송한다. 즉 식당 주인은 손님의 요구를 받고, 손님에게 "5분 뒤에 식당에 들어오시면 됩니다"라고 얘기하는 것과 같다. [그림 3]은 서버가 클라이언트로 첫 번째 Sequence Number(20)을 생성해서 Ack 플래그가 11(클라이언트의 요청을 알아들었다는 것을 알려주기 위해 클라이언트 Sequence Number에 1을 더한다), SYN 플래그가 1인 SYN-ACK 세그먼트를 보내는 상황을 나타낸 것이다.
마지막으로 클라이언트는 서버에게 알았다는 ACK 세그먼트를 보낸다. 즉, 손님이 식당 주인에게 알았다고 말을 함으로써, 둘은 거래할 모든 준비가 되었음을 알게된다. 이로써 서버-클라이언트와의 연결이 설정되면서 Three-way Handsaking 작업이 끝나게된다. [그림 4]는 클라이언트가 서버로 두 번째 Sequence Number(11)를 생성해서 Ack 플래그가 21인 ACK 세그먼트를 보내는 상황을 나타낸 것이다. SYN 플래그가 0인 이유는 이미 보낸 연결요청을 했고 서버가 받아들여 다시 요청할 필요가 없기 때문이다.
3. 참고자료
-
데이터 통신과 네트워킹 5판, MacGraw-Hill Korea
-
TCP - Three-way handshake in details, Sunny Classroom(YOUTUBE)
-
[Network] TCP 3-way handshaking과 4-way handshaking, HeeJeong Kwon
'네트워크 > HTTP' 카테고리의 다른 글
웹 캐시 (0) | 2020.11.21 |
---|---|
영속적 연결과 비 영속적 연결 (0) | 2020.10.31 |