업데이트:

3 분 소요

TCP 연결과 SSL/TLS 핸드셰이크 과정 정리

TCP 프로토콜의 핵심 개념

시퀀스 번호(Sequence Number)

  • 정의: TCP 세그먼트 내 데이터의 첫 번째 바이트의 위치를 나타내는 값이다.
  • 역할:
    • 송신 측이 데이터의 순서를 보장하기 위해 사용한다.
    • 수신 측은 이 값을 통해 데이터가 올바른 순서로 도착했는지 확인한다.
    • 데이터의 손실이나 중복 전송을 방지한다.

확인 응답 번호(ACK Number)

  • 정의: 수신 측이 다음에 받을 것으로 예상하는 데이터의 시퀀스 번호를 나타낸다.
  • 역할:
    • 송신 측에게 이전 데이터가 성공적으로 수신되었음을 알린다.
    • 수신 측은 ACK 번호를 통해 송신 측이 다음으로 전송해야 할 데이터를 지정한다.

SYN 플래그

  • 정의: TCP 연결을 설정하기 위한 플래그로, 연결 초기화 시 동기화를 위해 사용된다.
  • 역할:
    • TCP 연결을 시작하는 단계에서 사용된다.
    • SYN 플래그가 설정된 세그먼트는 시퀀스 번호의 초기 값을 교환하는 데 사용된다.

TCP 3-Way 핸드셰이크 과정

TCP 연결을 설정하기 위해 클라이언트와 서버 간에 3단계의 핸드셰이크가 이루어진다.

1단계: 클라이언트 → 서버 (SYN)

  1. 연결 요청:
    • 클라이언트가 서버에 접속 요청을 보낸다.
    • TCP 헤더의 SYN 플래그를 설정하고 초기 시퀀스 번호(ISN, Initial Sequence Number) X를 설정하여 패킷을 전송한다.
  2. 패킷 정보:
    • 시퀀스 번호: X
    • ACK 번호: 없음
    • 플래그: SYN=1
    • 페이로드: 없음

2단계: 서버 → 클라이언트 (SYN-ACK)

  1. 연결 요청 수락:
    • 서버가 클라이언트의 요청에 응답한다.
    • 자신의 초기 시퀀스 번호 Y를 설정하고, 클라이언트의 시퀀스 번호 X에 1을 더한 값을 ACK 번호로 설정하여 응답한다.
  2. 패킷 정보:
    • 시퀀스 번호: Y
    • ACK 번호: X + 1
    • 플래그: SYN=1, ACK=1
    • 페이로드: 없음

3단계: 클라이언트 → 서버 (ACK)

  1. 응답 확인:
    • 클라이언트가 서버의 응답을 확인한다.
    • 서버의 시퀀스 번호 Y에 1을 더한 값을 ACK 번호로 설정하여 응답한다.
  2. 패킷 정보:
    • 시퀀스 번호: X + 1
    • ACK 번호: Y + 1
    • 플래그: ACK=1
    • 페이로드: 없음

3-Way 핸드셰이크가 완료되면 클라이언트와 서버 간에 TCP 연결이 성립되고, 이후 데이터 전송이 가능해진다.


SSL/TLS 핸드셰이크 과정

SSL/TLS 프로토콜은 보안 통신을 위해 TCP 위에서 동작하며, 클라이언트와 서버 간에 안전한 연결을 설정하기 위한 핸드셰이크 과정을 거친다.

전체 과정 개요

  1. TCP 연결 설정: 먼저 TCP 3-Way 핸드셰이크를 통해 연결을 설정한다.
  2. SSL/TLS 핸드셰이크: 보안 통신을 위한 세션을 설정하고, 암호화에 사용할 키와 알고리즘을 교환한다.
  3. 데이터 통신: 암호화된 채널을 통해 안전하게 데이터가 전송된다.

SSL/TLS 핸드셰이크 상세 과정

1단계: 클라이언트 헬로(Client Hello)

  1. 클라이언트 요청:
    • 클라이언트가 서버에 SSL/TLS 연결을 요청한다.
    • Client Hello 메시지를 보내며, 이 메시지에는 다음 정보가 포함된다:
      • SSL/TLS 버전
      • 지원하는 암호 스위트 목록
      • 난수(Random)
      • 세션 ID
  2. TCP 패킷 정보:
    • 시퀀스 번호: 이전 단계에서 사용한 시퀀스 번호 (예: X + 1)
    • ACK 번호: Y + 1
    • 플래그: ACK=1
    • 페이로드: Client Hello 메시지
  3. 시퀀스 번호 증가:
    • 페이로드의 크기만큼 시퀀스 번호가 증가한다.

2단계: 서버 헬로(Server Hello)

  1. 서버 응답:
    • 서버가 클라이언트의 요청에 응답한다.
    • Server Hello 메시지를 보내며, 이 메시지에는 다음 정보가 포함된다:
      • 선택된 SSL/TLS 버전
      • 선택된 암호 스위트
      • 난수(Random)
      • 세션 ID
    • 추가로 서버 인증서를 전송하고, 필요한 경우 서버 키 교환 메시지를 전송한다.
  2. TCP 패킷 정보:
    • 시퀀스 번호: Y + 1
    • ACK 번호: 클라이언트의 다음 시퀀스 번호
    • 플래그: ACK=1
    • 페이로드: Server Hello, 서버 인증서, 서버 키 교환 등
  3. 시퀀스 번호 증가:
    • 페이로드의 크기만큼 시퀀스 번호가 증가한다.

3단계: 키 교환 및 세션 설정

  1. 클라이언트 키 교환:
    • 클라이언트는 Client Key Exchange 메시지를 통해 서버의 공개 키로 암호화된 프리마스터 시크릿(Pre-Master Secret)을 전송한다.
  2. TCP 패킷 정보:
    • 시퀀스 번호: 이전 클라이언트 시퀀스 번호 + 페이로드 크기
    • ACK 번호: 서버의 다음 시퀀스 번호
    • 플래그: ACK=1
    • 페이로드: Client Key Exchange 메시지

4단계: Change Cipher Spec 및 핸드셰이크 완료

  1. 암호화 전환 선언:
    • 클라이언트와 서버는 Change Cipher Spec 메시지를 교환한다.
    • 이 메시지를 통해 이제부터 암호화된 통신을 시작한다는 것을 알린다.
  2. 핸드셰이크 완료 확인:
    • 양측은 암호화된 Finished 메시지를 전송하여 핸드셰이크의 완료를 확인한다.

추가로 알면 좋은 내용

TCP 시퀀스 번호와 확인 응답 번호의 중요성

  • 데이터 흐름 제어:
    • 시퀀스 번호와 ACK 번호는 데이터의 흐름을 제어하고 순서를 보장한다.
  • 오류 검출 및 재전송:
    • 패킷 손실이나 오류 발생 시, 수신 측은 ACK 번호를 통해 송신 측에 재전송 요청을 한다.

TCP 플래그의 종류와 역할

  • SYN: 연결 설정을 위한 플래그.
  • ACK: 확인 응답이 유효함을 나타내는 플래그.
  • FIN: 연결 종료를 위한 플래그.
  • RST: 연결 강제 재설정을 위한 플래그.
  • PSH: 데이터를 즉시 상위 계층으로 전달하도록 요청하는 플래그.
  • URG: 긴급 포인터 필드가 유효함을 나타내는 플래그.

SSL/TLS 주요 기능 및 요소

  • 기밀성(Confidentiality): 데이터를 암호화하여 제3자가 내용을 볼 수 없도록 한다.
  • 무결성(Integrity): 데이터가 변경되지 않았음을 보장한다.
  • 인증(Authentication): 상대방 신원을 확인한다.

TLS 버전 변화와 개선점

  • TLS 1.0~TLS 1.3까지 점진적으로 보안성과 성능 개선.

TCP와 TLS 핸드셰이크 과정의 상호 관계

  • TCP 핸드셰이크는 연결 지향적 통신을 위한 연결 설립 과정이다.
  • TLS 핸드셰이크는 보안 채널 설정 과정으로, TCP 위에서 동작하며 애플리케이션 계층에서 이루어진다.

보안 통신의 중요성

  • 데이터를 보호하고 공격(MITM, 도청 등)을 방지하며 신뢰성을 구축하기 위해 SSL/TLS는 필수적이다.