네트워크, 핸드셰이크(Handshake)란?

네트워크 통신에서 핸드셰이크(handshake)라는 용어가 자주 등장합니다. "악수를 한다"는 의미처럼, 핸드셰이크는 통신을 하기 위한 과정을 의미합니다.

Handshake

핸드셰이크는 통신에서 연결을 설정하기 위한 과정입니다. 이때 두 통신 장치 간 데이터 교환 규칙, 속도, 보안 설정 등의 파라미터를 협상합니다. 핸드셰이크의 목적은 아래와 같습니다.

  • 연결 설정 : 통신을 시작하기 전에 두 장치는 서로 연결되어 있음을 확인하고 연결을 설정합니다.
  • 파라미터 협상 : 통신에 사용되는 속도, 프로토콜, 데이터 형식 등의 파라미터를 협상하고 동기화합니다.
  • 인증 및 보안 : 필요한 경우 두 장치는 인증을 하고 보안 관련 파라미터를 설정합니다.

유형

핸드셰이크라는 명칭이 붙는 대표적인 유형들을 몇 가지 소개하겠습니다. 결론은 각 통신 프로토콜들의 통신 방식을 000 핸드셰이크라는 식으로 표현한다는 것입니다. 각 프로토콜의 통신 방식도 간략하게 적었는데 그냥 가볍게 보시면 될 거 같습니다. 

 

1. TCP 3-way Handshake

TCP(Transmission Control Protocol)에서는 3-way handshake 과정을 통해 연결을 설정합니다. 총 3단계의 과정이 있다는 점이 특징이라 3-way handshake라고 부릅니다.

  • SYN : 클라이언트가 서버에 연결 요청을 보냅니다.
  • SYN-ACK : 서버가 연결 요청을 확인하고 클라이언트에 응답합니다.
  • ACK : 클라이언트가 서버의 응답을 확인하고 연결이 설정됩니다.

 

2. SSL/TLS Handshake

클라이언트와 서버 간의 암호화된 연결을 설정하는 과정입니다. SSL(Secure Sockets Layer) 및 TLS(Transport Layer Security)에서는 보안 파라미터 및 암호화 키를 협상하는 핸드셰이크 과정을 진행합니다.

  • 클라이언트 헬로 : 클라이언트가 서버에 연결 요청을 보내고 사용 가능한 암호 스위트(암호화 알고리즘 및 키 교환 방법의 조합) 및 TLS 버전을 제안합니다.
  • 서버 헬로 : 서버가 클라이언트의 제안 중에서 선택한 암호 스위트 및 TLS 버전을 응답하고 인증서를 제공합니다.
  • 클라이언트 키 교환 : 클라이언트가 서버의 인증서를 검증하고 세션 키를 생성한 후 서버에게 전달합니다.
  • 핸드셰이크 완료 : 클라이언트와 서버가 암호화된 통신을 시작합니다.

 

3. WebSocket Handshake

WebSocket 프로토콜은 HTTP 기반의 핸드셰이크를 사용하여 초기 연결을 설정합니다.

  • 클라이언트는 웹 서버에 HTTP 요청을 보내고, Upgrade 헤더를 포함해서 WebSocket 연결로 전환하고자 함을 나타냅니다.
  • 서버는 클라이언트의 요청을 확인하고, 101 Switching Protocols 응답을 반환해서 WebSocket 연결을 수락합니다.
  • 이 과정이 완료되면 클라이언트와 서버는 WebSocket 프로토콜을 사용하여 양방향 통신을 시작할 수 있습니다.
반응형

댓글

Designed by JB FACTORY