4. 커넥션 관리

Geunho Hong·2020년 6월 26일
0

4. 커넥션관리

4.1 TCP 커넥션

● 전 세계 모든 HTTP 통신은, 컴퓨터와 네트워크 장비에서 널리 쓰이는 
  네트워크 프로토콜 집합인 TCP/IP를 통해 이루어진다
● TCP/IP 커넥션이 맺어지면 -> 메세지들의 손실, 손상이 없음을 보장한다

ex) http://www.joes-hardware.com:80/power-tools.html

  • TCP/IP 커넥션 순서

4.1.1~ 4.1.2 신뢰할수 있는 데이터 전송통로인 TCP , TCP 스트림

TCP는 IP패킷(IP 데이터그램) 이라고 불리는 작은 조각을 통해 데이터를 전송한다.

● HTTP는 IP,TCP,HTTP로 구성된 프로토콜 스택의 최상위 계층이다.

● HTTP에 보안기능을 더한 HTTPS는 TLS,SSL 이라고도 불리며 HTTP와 
  TCP사이에 있는 암호화 계층이다.
  
● TCP는 세그먼트 단위로 IP패킷으로 불리는 봉투에 담아 인터넷을 통해 데이터를 전달한다
  • HTTP와 HTTPS의 네트워크 프로토콜 스택

4.1.3 TCP 커넥션 유지하기

PC는 여러개의 TCP 커넥션을 항상 가지고 있음 -> TCP 는 포트번호를 통해 여러개의 커넥션을 유지한다

ex) IP 주소 -> '회사 번호' , 포트번호 -> '회사 내선 번호'

4.3 HTTP 커넥션 관리

● HTTP는 클라이언트와 서버 사이에 프락시 서버, 캐시 서버 등과 같은 
  중개 서버가 놓이는것을 허락한다

● 현재 맺고 있는 Connection 에 대한 정보 -> HTTP connection 헤더 필드

● Connection 헤더

커넥션 토큰이 HTTP 헤더 필드명을 가지고 있으면 ? -> 현재 커넥션 만을 위한 정보 -> 다음 커넥션에 전달하면 안됨

따라서, Connection 헤더에 있는 모든 헤더 필드는 메세지를 다른 곳으로 전달하는 시점에 삭제되어야 한다.

4.3.2 순차적인 트랜잭션 처리에 의한 지연

트랜잭션? -> 더이상 쪼갤수 없는 작업의 단위 , HTTP 트랜잭션은 응답과 요청으로 이루어져 있다.

  • 트랜잭션 처리의 예시

● 커넥션 관리가 제대로 이루어 지지않으면 TCP 성능이 매우 안좋아 진다.

● 3개의 이미지가 있는 웹페이지가 있다면 네개의 HTTP 트랜잭션을 만들어야 함

● 1개는 해당 HTML을 받기 위해, 나머지 세개는 첨부된 이미지를 받기위해..

● 사용자는 보통 여러개의 이미지가 동시에 로드되는것을 더 좋아한다.

4.4 병렬 커넥션

● 여러개의 커넥션을 맺어 HTTP 트랜잭션을 병렬로 처리한다

● 병렬 커넥션은 페이지를 더 빠르게 내려받는다 -> HTML 페이지를 먼저 내려받고 
  남은 세개의 트랜잭션이 각각 별도의 커넥션에서 처리

● 그렇다고 병렬 커넥션이 항상 빠른것은 아니다 -> 네트워크 대역폭이 좁을때 
  대부분 시간을 데이터 전송에만 쓰일것이다.

● 항상 빠른것은 아니지만 사용자 입장에서 더 빠르게 느껴질수는 있다.

4.5 지속 커넥션

● 병렬 커넥션은 트랜잭션마다 새로운 커넥션을 맺고 끊기 때문에 시간과 대역폭이 소모된다.

● 병렬 커넥션의 수에는 제한이 있다.

● 지속 커넥션은 처리가 완료된 이후에도 TCP 커넥션을 유지한다  
●  지속 커넥션의 장점 ?

1. 커넥션을 맺기위한 사전 작업과 지연을 줄여준다.

2. 튜닝된 커넥션을 유지하며 커넥션의 수를 줄여준다.

Best : 지속 커넥션은 병렬 커넥션과 함께 사용될때 가장 효과적이다.

4.5.2 HTTP 1.0+ 의 Keep-Alive 커넥션

● keep-alive 커넥션은 지속커넥션을 지원하기위해 사용한다

● HTTP/1.0 Keep-alive 커넥션을 구현한 클라이언트는 커넥션을 유지하기 위해 
  Connection: Keep -Alive 헤더를 포함시킨다.

따라서 Connection: Keep-Alive 헤더가 없으면 클라이언트는 Keep-alive를 지원하지 않고 서버 커넥션을 끊을거라 추정한다.

● Keep-alive는 커넥션을 유지하기를 바라는 요청일 뿐이다. 무조건, 그것을 따를 필요는 없다.

● Keep-alive는 기본으로 사용되지는 않는다. 계속 사용하기 위해 
  Connection:keep-alive 요청 헤더를 보내야 한다.

● Connection:keep-alive 헤더가 없다면 서버가 응답후에 커넥션을 끊을것이다.

4.5.6 Keep-alive의 멍청한 프락시

● 웹 클라이언트의 요청에 Connection: keep-alive가 있으면 TCP 커넥션을 끊지 않고 
  계속 유지하려고 한다.

● 다만 프락시는 Connection 헤더를 이해하지 못해 해당 헤더를 삭제하지 않고 
  요청 그대로 다음 프락시에 전달한다

이로 인해 잘못된 통신이 발생한다. 따라서 프락시는 Connection 헤더와 Connection 헤더에 명시된 헤더들은 전달하면 안된다.

4.5.8 HTTP/1.1 의 지속 커넥션

● HTTP 1.1 에서는 Keep-alive 커넥션을 지원하지 않는 대신에 더 개선된 
  지속 커넥션을 지원한다

● HTTP 1.1 클라이언트는 응답에 Connection:close 헤더가 없으면 응답 후에도 
  HTTP 1.1 커넥션을 유지하는 것으로 간주한다

클라이언트가 Connection:close 헤더를 포함해 보냈으면 그 커넥션으로 추가적인 요청이 불가능하다.

커넥션에 있는 모든 메세지가 자신의 길이 정보를 정확히 가지고 있어야 한다.

HTTP 1.1 프락시는 클라이언트와 서버 각각에 대해 별도의 커넥션 지속 커넥션을 가지고 있어야 한다

0개의 댓글