[CH4] 커넥션 관리

소포카·2022년 7월 10일
1
post-thumbnail

TCP 커넥션

전 세계 모든 HTTP 통신은 지구상의 컴퓨터와 네트워크 장비에서 널리 쓰이고 있는 패킷 교환 네트워크 프로토콜들이 계층화된 집합인 TCP/IP를 통해 이루어진다.

아래 URL을 입력받은 브라우저는 다음과 같은 단계를 수행한다.

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

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

  • HTTP 커넥션은 몇몇 사용 규칙을 제외하고는 TCP 커넥션에 불과하다.
  • TCP 커넥션의 한쪽에 있는 바이트들은 반대쪽으로 순서에 맞게 정확히 전달된다.

TCP 스트림 전송

  • TCP는 IP 패킷 (IP 데이터그램)이라고 불리는 작은 조각을 통해 데이터를 전송한다.
  • HTTP는 프로토콜 스택에서 최상위 계층이다. (애플리케이션 계층)
  • HTTPS는 TLS 혹은 SSL이라 불리며 HTTP와 TCP 사이에 있는 암호화 계층이 있다.

HTTP가 메세지를 전송할 경우,
TCP 커넥션을 통해 메세지 데이터의 내용을 순서대로 보낸다.

  1. TCP segment 단위로 데이터 스트림을 잘게 나눔
  2. segment를 IP packet에 담아서 데이터를 전달

이 모든 것은 TCP/IP에 의해 처리되며, 그 과정은 HTTP 프로그래머에게 보이지 않는다.
-> 각 계층의 interface 표준화 및 다른 계층에 영향을 주지 않는다.

TCP segment와 IP packet의 구조는 다음과 같다.

TCP 커넥션 유지하기

  • 컴퓨터는 항상 TCP 커넥션을 여러 개 가지고 있다.
  • TCP는 포트 번호를 통해서 여러 개의 커넥션을 유지한다.

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

  • 발신지 IP 주소
  • 발신지 포트
  • 수신지 IP 주소
  • 수신지 포트

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

TCP 소켓 프로그래밍

  • OS는 TCP 커넥션의 생성과 관련된 여러 기능을 제공한다.
  • 다음 표는 소켓 API의 주요 인터페이스이다.
소켓 API 호출description
s = socket(<params>)소켓 생성
bind(s, <local IP: port>소켓에 로컬 포트 번호, 인터페이스 할당
connect(s, <remote IP:port>로컬 소켓과 원격 호스트:포트 사이에 TCP 커넥션 생성
listen(s, ...)커넥션을 받아들이기 위해 로컬 소켓에 허용 표시
n = read(s, buffer, n)소켓으로부터 버퍼에 n바이트 읽기 시도
n = write(s, buffer, n)소켓으로부터 버퍼에 n바이트 쓰기기 시도
close(s)TCP 커넥션 완전히 끊음
shutdown(s, <side>TCP 커넥션의 입출력만 닫음

TCP의 성능에 대한 고려

HTTP는 TCP 바로 위에 있는 계층이기 때문에
HTTP 트랜잭션의 성능은 그 아래 계층인 TCP의 성능에 영향을 받는다.

HTTP 트랜잭션 지연

  • 트랜잭션을 처리하는 시간은
    TCP 커넥션을 설정하고, 요청 및 응답하는 시간에 비하면 상당히 짧다.
  • 대부분의 HTTP 지연은 TCP 네트워크 지연이 원인이다.
  1. DNS 찾기
    • URI에서 웹 서버의 IP 주소와 포트 번호 찾는 시간
  2. 연결
    • handshake 지연 (추후 설명)
  3. 요청
    • TCP 커넥션 생성 이후, 클라이언트가 서버로 데이터를 전송하는 시간
  4. 응답
    • 서버가 클라이언트로 응답을 보내는 시간

TCP 커넥션 handshake 지연

새로운 TCP 커넥션을 열 때면
TCP 소프트웨어는 커넥션을 맺기 위한 조건을 맞추기 위해 연속으로 IP 패킷을 교환한다.

1. SYN

  • 클라는 새로운 TCP 커넥션을 생성하기 위해 작은 TCP 패킷을 서버에게 보낸다.
  • SYN(synchronize sequence numbers)라는 특별한 flag를 가진다.
  • 커넥션 생성 요청이라는 뜻

2. SYN + ACK

  • 서버가 그 커넥션을 받으면 몇 가지 커넥션 매개변수를 산출
  • 커넥션 요청이 받아들여졌음을 의미하는 flag(SYN, ACK)를 패킷에 포함
  • TCP 패킷을 클라에게 보낸다.

3. ACK

  • 클라가 커넥션이 잘 맺어졌음을 알리기 위해서 서버에게 응답 신호(ACK)를 보낸다.
  • 오늘날 TCP는 클라가 이 확인 응답 패킷과 함께 데이터를 보낼 수 있다.

Reference

profile
https://github.com/sophoca

0개의 댓글