✊ 필오의 개발일지
Back to Posts
2019년 8월 26일

커넥션 관리 - TCP 커넥션과 성능

커넥션 관리 - TCP 커넥션과 성능
  1. HTTP는 어떻게 TCP 커넥션을 사용하는가
  2. TCP 커넥션의 지연, 병목, 막힘
  3. 병렬 커넥션, keep-alive 커넥션, 커넥션 파이프라인을 활용한 HTTP의 최적화
  4. 커넥션 관리를 위해 따라야 할 규칙들

1. TCP 커넥션

웹 브라우저가 TCP 커넥션을 통해서 웹 서버에 요청을 보낸다.

https://feel5ny.github.io/index.html
  1. 브라우저가 feel5ny.github.io 라는 호스트 명을 추출한다.
  2. 브라우저가 이 호스트 명에 대한 IP 주소를 찾는다.
  3. 브라우저가 포트 번호 80을 얻는다.
  4. 브라우저가 185.199.111.153의 80포트로 TCP 커넥션을 생성한다.
  5. 브라우저가 바로 HTTP GET 요청 메세지를 보낸다.
  6. 브라우저가 서버에서 온 HTTP 응답 메세지를 읽는다.
  7. 브라우저가 커넥션을 끊는다.

1.1 신뢰할 수 있는 데이터 전송 통로인 TCP

1.2 TCP 스트림은 세그먼트로 나뉘어 IP 패킷을 통해 전송된다.

  1. TCP는 세그먼트라는 단위로 데이터 스트림을 잘게 나누고
  2. 세그먼트를 IP 패킷이라고 불리는 봉투에 담아서
  3. 인터넷을 통해 데이터를 전달한다.

IP 패킷이 포함하는 것.

  1. IP 패킷 헤더 (20byte)
  2. TCP 세그먼트 헤더 (20byte)
  3. TCP 데이터 조각

패킷 구조는 아래와 같다.

그림출처 

IP 헤더TCP 헤더는 아래와 같다.

그림출처 

1.3 TCP 커넥션 유지하기

  1. 발신지 IP 주소
  2. 발신지 포트
  3. 수신지 IP 주소
  4. 수신지 포트

4가지 값으로 유일한 커넥션을 생성한다. 4가지 커넥션 구성요소를 똑같이 가리키고 있는 커넥션은 있을 수 없다.


2. TCP의 성능에 대한 고려

2.1 HTTP 트랜잭션 지연

  1. 클라이언트는 URI에서 웹 서버의 IP 주소와 포트 번호를 알아내야 한다.
  1. 클라는 TCP 커넥션 요청을 서버에게 보내고, 서버가 커넥션 허가 응답을 회신하기를 기다린다.
  1. 커넥션이 맺어지면 클라는 HTTP 요청을 새로 생성한 TCP 파이프를 통해 전송한다.

2.2 성능 관련 중요 요소

다음과 같은 요인과 그로 인한 성능상의 문제를 포함해 영향을 주는 일반적인 TCP 관련 지연들에 대해서 다른다.

  1. TCP 커넥션의 핸드셰이크 설정
  2. TCP 편승(piggyback) 확인 응답(acknowledgment)을 위한 확인 응답 지연 알고리즘
  3. 인터넷의 혼잡을 제어하기 위한 TCP의 느린 시작 slow-start
  4. 데이터를 한데 모아 한 번에 전송하기 위한 네이글(nagle) 알고리즘
  5. TIME_WAIT 지연과 포트 고갈

2.2.1 TCP 핸드셰이크 지연 (3 handshake)

어떤 데이터를 전송하든, 새로운 TCP 커넥션을 열 때면, TCP 소프트웨어는 커넥션을 맺기 위한 조건을 맞추기 위해 연속으로 IP 패킷을 교환한다. 다음은 TCP 커넥션이 핸드셰이크를 하는 순서다. (예전에 정리한 글 )

  1. 클라는 새로운 TCP 커넥션을 생성하기 위해 작은 TCP 패킷을 서버에게 보낸다.
  1. 서버가 그 커넥션을 받으면 몇 가지 커넥션 매개변수를 산출하고,
  1. 마지막으로 클라는 커넥션이 잘 맺어졌음을 알리기 위해서 서버에게 다시 확인 응답 신호를 보낸다. (ACK)

2.2.2 확인 응답 지연 알고리즘

데이터 보낼 때 같이 보내면 되겠다!

막상 HTTP에서는

2.2.3 TCP 느린 시작 slow start

TCP 느린 시작

혼잡 윈도를 연다. opening the congestion window

2.2.4 네이글 알고리즘과 TCP_NODELAY

그림 출처 

TCP_NODELAY 참고글 

2.2.5 TIME_WAIT의 누적과 포트 고갈

Time wait에 대한 글  카카오 블로그  toast 블로그 


3. HTTP 커넥션 관리

커넥션을 생성하고 최적화하는 HTTP 기술을 설명할 것이다.

3.1 흔히 잘못 이해하는 Connection 헤더

  1. HTTP header field name 헤더 보호하기
  1. 임시적인 토큰값: 커넥션에 대한 비표준 옵션을 의미
  2. close: 커넥션이 작업이 완료되면 종료되어야 함을 의미.
  3. keep-alive

mdn 

3.2 순차적인 트랜젝션 처리에 의한 지연

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

  1. 병렬 커넥션 parallel
  1. 지속 커넥션 persistent
  1. 파이프라인 커넥션 pipelined
  1. 다중 커넥션 multiplexed




참고자료

Previous커넥션 관리 - TCP 커넥션의 종류
NextHTTP 메세지 - 헤더

Related

© 2025 Felix