HTTP 완벽가이드 <4>

김태완·2021년 9월 26일
0

TCP 커넥션

HTTP 통신은 대부분 TCP 커넥션을 통해 이루어 진다.
응용 계층에서 만들어진 HTTP 메세지는 전송 계층에서 일정 길이의 TCP 세그먼트로 나뉘어 인터넷 계층으로 보내진다.
인터넷 계층에서는 TCP 세그먼트를 IP 데이터그램에 담는다.
TCP 커넥션은 <발신지 IP, 발신지 포트, 수신지 IP, 수신지 포트> 네가지로 식별한다.

TCP 성능 고려

HTTP 요청 처리 과정은 위 사진과 같다.
1. DNS를 이용해 해당 서버의 IP 주소를 찾는다.
2. 해당 서버 TCP 연결을 맺는다.(3-way handshake)
3. 맺어진 TCP 연결을 통해 HTTP 요청을 한다.
4. 요청을 받은 서버는 요청을 처리하고 맺어진 TCP 연결을 통해 응답한다.
5. TCP 연결을 끊는다.(4-way handshake)

3-way handshake

  1. 클라이언트는 TCP 헤더의 SYN에 0이 아닌 랜덤한 수 'a' 를 담아 보낸다.
  2. 서버는 TCP 헤더의 ACK에 'a+1' 값과 SYN에 랜덤한 수 'b' 를 담아 응답한다.
  3. 클라이언트는 ACK에 'b+1' 값을 담아 다시 보낸다.

2-way handshake가 아니라 3-way handshake인 이유!!!
TCP/IP 통신은 양방향성이기 때문에 클라이언트가 서버에게 존재를 알리고 패킷을 받을수있다는 것을 증명하듯이, 클라이언트도 패킷을 잘 받았다는 것을 증명해야 한다.

4-way handshake

  1. 클라이언트는 TCP 헤더의 FIN을 1을 담아 보낸다.
  2. 서버는 FIN에 해당하는 ACK을 보낸다.
  3. 서버에 남은 응답이 있으면 모든 응답을 다 보내고 서버도 FIN을 보낸다.
  4. 클라이언트도 FIN에 해당하는 ACK를 보낸다.

TCP 연결을 맺을 때의 지연

  1. TCP handshake 지연
  2. 확인응답 지연
    • TCP 전송이 정상적으로 이루어 졌는지 확인 과정에서 걸린는 시간
  3. TCP 느린 시작
    • 처음 TCP 연결을 했을때는 전송 속도가 느지만 데이터가 성공적으로 전속됨에 따라 속도를 늘려간다.
  4. 네이글 알고리즘과 TCP-NODELAY
  5. TIME_WAIT의 누적과 포트 고갈

HTTP 커넥션 방식

순차적인 방식은 매 트랜잭션마다 새로운 TCP 커넥셕을 만들고 요청을 보내고 응답을 받고 연결을 끊고 다시 새로운 TCP 연결을 맺기 때문에 시간 낭비가 크다.

병렬 방식은 커넥션을 한번에 여러개 만들어 커넥션을 수립하는 지연 시간을 줄일 수 있다.
하지만 이 방식은 네트워크 대역폭이 작을 때는 성능 상의 장점은 거의 없고 다수의 커넥션은 메모리를 많이 소모하므로 다른 문제를 일으킬 수 있다.

지속 방식은 각 트랜잭션 마다 새로운 커넥션을 만들지 않고 만들어져있던 커넥션에 지속적으로 요청과 응답을 하기 때문에 커넥션 지연 시간을 줄이고 TCP 느린 시작에서도 자유롭다.

파이프라인을 사용한 지속 방식은 기존의 지속 방식 처럼 응답이 올때까지 다음 요청을 멈추는 것이 아니라 요청을 응답과 상관없이 차례대로 보낸다.

0개의 댓글