Http Study - Chapter 4

TCP connection management

TCP 성능

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

  1. TCP connection handshake
  2. slow start of TCP
  3. nagle algorithm
  4. TCP piggyback acknowledgment
  5. TIME_WAIT delay

TCP connection handshake

3 way handshake 를 사용하기 때문에 3번의 패킷 송신이 필요함

확인응답 지연

HTTP 를 위해 TCP 연결을 생성할 때 ACK 를 piggyback 할 패킷이 마땅히 없어 이것을 기다리다가 지연될 수 있다.

TCP slow start

혼잡 제어를 통해 속도를 높여 나가는데 이 때문에 새롭게 열린 TCP connection 은 상대적으로 느린 속도를 보인다.

Opening the congestion window, Tuning

Nagle algorithm

크기가 작은 데이터의 경우 TCP 전송을 위해 사용하는 flag 와 header 가 더 많은 영역을 차지해서 실질적인 데이터가 차지하는 비중이 작아서 성능 저하가 일어날 수 있어서, 데이터를 모아서 전송하도록(세그먼트가 최대 크기가 될때 까지 기다림) 하는것이 Nagle algorithm 인데, 문제는 HTTP 메세지는 세그먼트 최대 크기를 채우지 못하는 문제가 있음.

또한, 확인 응답 지연 알고리즘과 복합적으로 작용할 경우 piggyback 할 패킷을 기다리면서 확인 응답을 지연 시키고, Nagle algorithm 은 확인 응답이 올때 까지 데이터 전송을 기다린다.

TCP_NODELAY flag 를 비활성화 하기도 한다.

TIME_WAIT 포트 고갈

Connection 이 종료되면, Connection 의 IP 와 Port 를 저장 해두고, 2분간 새롭게 생성을 하지 않는데, 이러한 식으로 종료된 Connection 들이 쌓이게 되면 포트가 고갈 되어 새롭게 Connection 을 맺는게 힘들어진다.

TIME_WAIT 가 지나치게 많이 증가하면, 한쪽에서 Connection 을 과도하게 매번 끊는 것은 아닌지 확인해야 한다.

TCP Connection Management

Misunderstand about Connection header

  • Hop by Hop 특정 두 서버 사이에서만 사용되고, 그 이외에는 영향을 미치지 않음을 의미함 이 원칙이 어긋날 경우에 다양한 server error 가 발생함. e.g.) proxy server 로 전달된 connection close parameter 가 다른 서버로 전달될 경우 - 불필요한 connection close 로 인해 위에 설명된 포트 고갈이 발생할 수 있음. 반대로 connection close 가 전달이 안될 경우 proxy server 에서 connection 를 무한정 기다리는 경우가 있을 수 있음