많은 인터넷 애플리케이션에서 클라이언트와 서버는 클라이언트가 일련의 요구를 사고 서버가 각 요구에 대해 응답하면서 상당한 기간 동안 통신한다. 애플리케이션과 그 애플리케이션이 어떻게 이용되는지에 따라 일련의 요구가 계속해서, 일정한 간격으로 주기적으로 만들어 질 수 있다. 이 클라이언트-서버 상호 작용이 TCP상에서 발생할 때 애플리케이션 개발자는 중요한 결정을 해야한다. 각 요구/응답 쌍이 분리된 TCP 연결을 통해 보내져야 하는가? 혹은 모든 요구와 해당하는 응답들이 같은 TCP 연결상으로 보내져야 하는가? 전자 방식을 비지속 연결이라고 하고 후자 방식을 지속 연결이라고 한다. 클라이언트와 서버가 어떤것을 지원하는가에 따라서 지속이냐 비지속연결이냐를 결정할 수 있다. 요새는 비지속은 거의 없...
1. 비지속연결 HTTP란?
웹 페이지를 서버에서 클라이언트로 전송하는 단계를 살펴보자. 페이지가 기본 HTML 파일과 5개의 JPEG 이미지로 구성되고, 이 6개의 객체가 같은 서버에 있다고 자정하자. 기본 HTML 파일의 URL은 다음과 같다.
http://www.someSchool.edu/someDepartment/home.index
1. HTTP 클라이언트는 HTTP의 기본 포트 번호 80을 통해 www.someschoo.edu 서버로 TCP 연결을 시도한다.
2. HTTP 클라이언트는 1단계에서 설정된 TCP 연결 소켓을 통해 서버로 HTTP 요청 메시지를 보낸다. 이 요청 메시지는 /someDepartment/homde.index 경로 이름을 포함한다.
3. HTTP 서버는 1단계에서 설정된 연결 소켓을 통하여 요청 메시지를 받는다. 저장장치로부터 /someDepartment/home.index 객체를 추출하고 HTTP 응답 메시지에 그 객체를 캡슐화한다. 그리고 응답 메시지를 소켓을 통해 클라이언트로 보낸다.
4. HTTP 서버는 TCP에게 TCP 연결을 끊으라고 한다.(실제로는 TCP 클라이언트가 응답 메시지를 올바로 받을때 까지 연결을 끊지 않는다.)
5. HTTP 클라이언트가 응답 메시지를 받으면, TCP 연결이 중단된다. 메시지는 캡슐화된 객체가 HTML 파일인 것을 나타낸다. 클라이언트는 응답 메시지로부터 파일을 추출하고 HTML 파일을 조사하고 5개의 JPEG 객체에 대한 참조를 찾는다.
6. 그 이후에 참조되는 각 JPEG 객체에 대하여 처음 4단계를 반복한다.
위 그림을 보면 쉽게 이해 될 것이다. 우선 RTT라는 것은 패킷이 클라이언트로부터 서버까지 가고, 다시 클라이언트로 되돌아오는 데 걸리는 시간을 뜻한다. 처음에 TCP 연결을 해야 한다(3-way 핸드쉐이킹). 첫번째 RTT가 이 TCP 연결을 위한 세팅까지 걸리는 시간을 뜻한다. TCP 연결이 세팅이 되면 그때부터 파일을 요청한다. 하나의 파일에 대해서 서버가 요청을 받고 해당 요청을 처리하는데 (요청하는 파일을 전송하는데) 걸리는 시간을 TR 이라고 하자. 위의 검은색 부분이 TR을 뜻한다. (요청을 하고 요청에 대한 응답이 올때까지 아무 동작도 못한다.)
결국 하나의 파일에 대해서 1.TCP 연결 2. 파일 요청/응답 에 걸리는 총 시간을 구해보면 RTT+RTT+TR 이다.
비지속 연결이기 때문에 서버는 위 과정이 완료되면 연결을 종료한다. 현재 HTML문서 하나를 요청한 것에 대한 과정이라고 보자. 우리는 1개의 HTML 문서와 5개의 이미지를 요청하는 것이기 때문에 나머지 5개의 파일을 위 과정을 똑같이 거쳐서 요청/응답해야 한다.
첫번째 이미지 파일에 대해서도 똑같이 TCP 연결 부터 시작해야 하기 때문에 총 5개의 파일도 똑같이 (2RTT+TR)씩 걸리고
최종적으로 6개의 파일전송에 요청 해서 응답받는데 까지 걸리는 시간은 (2RTT+TR)*6=12RTT+6TR 이다.
2. 지속연결 HTTP란?
위에서 비지속 연결에 대해서 설명했는데 딱봐도 먼가 단점이 확 보이지 않는가? 매번 파일을 요청할때마다 TCP 연결을 요청해야 해야 하기 때문에 많은 부하가 걸릴것이다. 따라서 맨처음 파일 요청을 위한 TCP 연결이 세팅된 후에 부터는 또다시 TCP 연결은 하지 않고 처음에 연결된 TCP연결을 이용하여 나머지 파일에 대해서 클라이언트와 서버가 요청/응답을 하는 것이 바로 지속 연결 HTTP이다.
또한 요청에 대한 응답을 기다리지 않고 한번에 연속해서 요청을 할수가 있는데 이를 파이프라이닝 이라고 한다. 서버가 만약 연속된 요구를 수신하게 되면, 서버는 객체를 연속해서 보낸다. HTTP의 디폴트 모드는 파이프라이닝을 이용한 지속 연결을 사용한다.
1번에서의 RTT를 지속연결로 해서 계산해 보자.
처음에는 똑같이 HTML문서의 요청 및 응답까지의 수신에는 2RTT+TR이 걸린다. 하지만 그다음 5개의 이미지 파일은 TCP 연결을 하지 않고 현재 연결된 TCP를 통해 통신을 하기 때문에 RTT+TR만큼만 시간이 걸린다. 따라서 총 시간은 2RTT+TR + (RTT+TR)*5=7RTT+6TR 비지속 연결에서 걸린 시간과 비교 해 봤을 때 확실히 더 빠른 시간안에 요청정보를 수신 받을 수 있다.
'컴퓨터 관련 과목 > Network' 카테고리의 다른 글
쿠키란?(먹는거 아님) (0) | 2019.01.03 |
---|---|
HTTP 메시지 포맷 (0) | 2019.01.03 |
HTTP 개요 (0) | 2019.01.02 |
프로토콜 계층과 서비스 모델 (0) | 2019.01.01 |
컴퓨터 네트워크에서의 처리율 (0) | 2018.12.29 |