진짜 개발자
본문 바로가기

CS(Computer Science)/Network

Network - TCP의 성능에 대한 고려

728x90
TCP 성능에 대한 고려

TCP의 성능

Application들은 네트워크를 통해 메시지를 전달하기 위해 TCP를 이용하게 됩니다. 따라서 ClientServer 간 Web 요청과 응답을 주고 받기위해 사용하는 HTTP 프로토콜 역시 TCP의 성능에 영향을 받을 수 밖에 없습니다.

 

이번 포스팅에서는 TCP 프로토콜의 성능에 영향을 미치는 요인들에 대해 정리를 해보고자 합니다.

 

 

 

고성능의 HTTP Application

사실 엄청난 고성능의 HTTP이 아니라면 TCP의 지연 요소들에 자세히 알 필요까지는 없습니다. 반대로 고성능의 어플리케이션을 만들고자 한다면 필히 숙지 해야합니다.

 

 

 

TCP 성능에 영향을 미치는 요소

TCP성능에 영향을 미치는 요소들은 아래와 같습니다.

 

  1. TCP 연결 핸드셰이크 지연(연결지향)

새로운 TCP 커넥션을 열때면 무조건 적으로 TCP 커넥션을 맺기 위해 패킷을 주고받게 되어있습니다. (연결지향) 아래는 TCP 커넥션을 맺기 위한 과정입니다.

 

  1. Client는 Server에 연결을 맺기 위해 SYN 플래그가 설정된 패킷을 전송합니다. (SYN는 커넥션 연결 생성 요청과 같습니다.)
  2. Server는 커넥션 요청에 응하기 위한 ACK 플래그와, Server에서 Client로의 연결을 위한 SYN 플래그가 설정된 패킷을 Client 에게 전송합니다.
  3. Client는 연결에 응하기 위해 ACK 플래그가 설정된 패킷을 Server에게 전송합니다.

 

Application에서 크기가 아주 작은 메시지를 주고받는 경우에는 위와 같이 TCP 연결을 맺기 위한 시간이 대부분을 차지하게 됩니다.

 

 

  1. 확인 응답 지연 (성공적인 데이터 전송을 위한)

트랜스포트 계층의 바로 하위 계층인 네트워크 계층의 인터넷 프로토콜(IP) 은 비연결, 비신뢰성 프로토콜입니다. 이 때문에, TCP는 데이터의 순서성공적인 데이터 전송을 보장하기위해서, 자체적으로 확인 체계를 가지고 있습니다.

 

  1. 올바른 데이터 전송을 위한 지연

    TCP 세그먼트는 순서를 보장하기위해 각 세그먼트에 순번을 포함하며, 데이터 무결성을 보장하기 위한 데이터 무결성 체크섬을 포함합니다. 만약 송신자가 특정 시간안에 수신자로부터 응답을 받지 못하거나 순서가 잘못된 응답이 온다면, 다시 패킷을 보내게 됩니다.

     

  2. 네트워크 효율을 위한 지연

    TCP에서는 확인응답(ACK)의 크기가 매우 작기 때문에, 같은 방향으로 전달되는 데이터에 확인응답을 편승시킴으로써 네트워크를 효율적으로 사용하려 합니다. 이 때 확인응답이 송신되는 데이터에 편승되는 확률을 높이기 위해 확인응답 지연 알고리즘을 사용합니다.

    (확인응답 지연 알고리즘은 확인응답 패킷을 일정시간 동안 버퍼에 저장해두고, 확인 응답을 편승시키기 위한 송출 데이터 패킷을 찾습니다. 일정시간 안에 찾지 못한다면 확인응답 전송을 위한 별도의 패킷을 만들어 전송합니다.)

 

 

  1. 느린시작(Slow Start)에 의한 지연(혼잡제어를 위한)

TCP는 네트워크의 대역폭 이상의 데이터가 송출됨으로써 데이터가 담긴 패킷이 손실되는것을 방지하기위해 혼잡제어를 합니다. 즉, 적정수의 패킷을 네트워크로 흘려보내기 위해 제어를 한다는 의미입니다. ( 혼잡제어를 위한 알고리즘에는 AIMD, Slow Start, Fast Retransmit, 등등이 존재합니다. )

 

Slow Start 알고리즘은 커넥션의 최대 속도를 제한하고, 데이터가 성공적으로 전송됨에 따라 점차 속도 제한을 높여 나갑니다. 이 때문에, 새롭게 연결된 커넥션의 경우, 이미 적정 수준의 속도를 갖춘 연결(튜닝된 커넥션) 보다는 당연히 느릴 수 밖에 없습니다.