04.커넥션 관리

커넥션 관리 #

작성자 nice7677


4.1 TCP 커넥션 #

HTTP 통신은 TCP/IP 위에서 이루어 지며 커넥션이 맺어지면 클라이언트와 서버 컴퓨터 간에 주고받는 메세지들은 손실 혹은 손상되거나 순서가 바뀌지 않고 안전하게 전달된다. (예외 HTTP3는 UDP 간단한 설명은 다음을 읽어보자 위키피디아 - HTTP/3)

TCP는 신뢰할 수 있는 데이터 전송 통로이며 HTTP에게 신뢰할 만한 통신 방식을 제공하며 TCP 스트림은 세그먼트로 나뉘어 IP 패킷을 통해 전송된다.

http-https-secure-layer

참조 - How HTTP request passes through OSI layers for communicating the web server?

그림에서 볼 수 있듯이 HTTPS는 HTTP에 TLS 나 SSL(보안 계층)을 추가한 것이다.

HTTP가 메시지를 전송하고자 할 경우 현재 연결되어 있는 TCP 커넥션을 통해서 메시지 데이터를 순서대로 보낸다. TCP는 세그먼트라는 단위로 데이터 스트림을 잘게 나누고 세그먼트를 IP 패킷이라고 불리는 봉투에 담아서 인터넷을 통해 데이터를 전달한다.

IP 패킷들 각각은 다음을 포함한다.

  • IP 패킷 헤더(보통 20바이트)
  • TCP 세그먼트 헤더(보통 20바이트)
  • TCP 데이터 조각(0 혹은 그 이상의 바이트)

IP 헤더는 발신자와 목적지 IP 주소, 크기, 기타 플래그를 가진다. TCP 세그머느 헤더는 TCP 포트 번호, TCP 제어 플래그, 그리고 데이터의 순서와 무결성을 검사하기 위해 사용되는 숫자 값을 포함한다.

IP packets carry TCP segments, which carry chunks of the TCP data stream

TCP 커넥션은 네가지 값으로 식별한다.

<발신지 IP 주소, 발신지 포트, 수신지 IP 주소, 수신지 포트>

이 네 가지 값으로 유일한 커넥션을 생성한다. 서로 다른 두 개의 TCP 커넥션은 네가지 주소 구성요소의 값이 모두 같은 수 없다.

커넥션 발신지 IP 주소 발신지 포트 발신지 포트 발신지 포트
A 209.1.32.34 2034 204.62.128.58 4133
B 209.1.32.35 3227 204.62.128.58 4140
C 209.1.32.35 3105 207.25.71.25 80
D 209.1.33.89 5100 207.25.71.25 80

Four distinct TCP connections

위의 그림에서 볼 수 있듯이 커넥션 구성요소를 모두 똑같이 가리키고 있는 커넥션은 있을 수 없다.

4.2 TCP의 성능에 대한 고려 #

HTTP는 TCP 바로 위에 있기 때문에 TCP 성능에 영향을 받는다. 그렇기 때문에 TCP에 대해 자세히 알아야 한다.

! TCP 기본 영상으로 다음 영상을 한번 보면 도움이 될거습니다.

[10분 테코톡] 👨‍🏫르윈의 TCP UDP

4.3 HTTP 커넥션 관리 #

HTTP 커넥션의 성능을 향상시킬 수 있는 여러 기술이 있다.

그중 병렬 커넥션과 지속 커넥션에 대한 장단점을 알아보자.

  • 병렬 커넥션(parallel) - 여러 개의 커넥션을 맺음으로써 여러개의 트랜잭션을 병렬로 처리할 수 있게 한다.
    • 장점
      • 각 커넥션의 지연 시간을 겹치게 하면 총 지연 시간을 줄일 수 있다.
      • 병렬로 내려받아 커넥션 지연이 겹쳐짐으로써 총 지연시간이 줄어든다.
    • 단점
      • 네트워크 대역폭이 좁을 때 느리다.
      • 다수의 커넥션은 메모리를 많이 소모하고 성능 문제를 발생시킨다.
      • 커넥션의 수에 제한이 있다.
  • 지속 커넥션(persistent) - 연결 후에도 TCP 커넥션을 유지해 앞으로 있을 요청에 재사용할 수 있다.
    • 장점
      • 커넥션을 맺기 위한 사전 작업과 지연을 줄여 준다.
      • 튜닝된 커넥션을 유지할 수 있다.
    • 단점
      • 잘못 관리할 경우 계속 연결된 상태로 있는 수많은 커넥션이 쌓이게 되어 불필요한 서버와 클라이언트 리소스에 불필요한 소모를 발생시킨다.

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

같이 보면 좋은 글

HTTP Keep Alive 알아보기