ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TCP 3 Way-Handshake 자세히 알아보기
    Computer Science/Network 2024. 5. 2. 16:42
    반응형

    들어가기 앞서.. 네트워크 기초: TCP/IP 모델의 기본 개념, TCP의 위치와 역할

    TCP/IP 모델의 기본 개념

    TCP/IP 모델은 인터넷 통신을 가능하게 하는 프로토콜 스택입니다. 이 모델은 1970년대 후반에 개발되었으며, 통신 규약의 모음으로서 네트워크 간의 데이터 전송을 담당합니다. TCP/IP는 Transmission Control Protocol (TCP)Internet Protocol (IP)의 두 주요 구성 요소를 기반으로 이름이 붙여졌습니다.

    모델은 크게 네 계층으로 구분됩니다:

    1. 응용 계층 (Application Layer): 사용자가 네트워크를 통해 데이터를 송수신할 수 있도록 하는 인터페이스 역할을 합니다. HTTP, FTP, SSH, SMTP, DNS 등 다양한 프로토콜이 이 계층에 포함됩니다.
    2. 전송 계층 (Transport Layer): 네트워크 통신의 신뢰성을 담당하며, 데이터의 효율적이고 정확한 전달을 보장합니다. TCP와 UDP 프로토콜이 여기에 속합니다.
    3. 인터넷 계층 (Internet Layer): 데이터 패킷의 네트워크 간 라우팅을 담당합니다. 이 계층에서 IP 주소가 사용되며, IP 프로토콜이 중심적인 역할을 합니다.
    4. 네트워크 인터페이스 계층 (Network Interface Layer): 실제 데이터 전송을 처리하는 하드웨어와 밀접하게 연관된 계층으로, 이더넷과 같은 네트워크 기술이 이에 해당됩니다.

    TCP의 위치와 역할

    TCP는 전송 계층에서 중요한 역할을 합니다. TCP의 주요 기능은 데이터를 세그먼트로 분할하고, 이를 네트워크를 통해 안전하게 전송한 뒤, 목적지에서 다시 원래의 데이터 스트림으로 재조립하는 것입니다. 이 과정은 다음과 같은 TCP의 특징에 의해 보장됩니다:

    • 신뢰성 있는 데이터 전송: TCP는 데이터가 손실, 중복, 순서 바뀜 없이 정확히 전달되도록 합니다. 데이터 패킷의 손실이 발견될 경우 재전송을 요청합니다.
    • 흐름 제어: TCP는 데이터의 전송 속도를 조절하여 수신자의 처리 속도를 초과하지 않게 합니다.
    • 혼잡 제어: 네트워크의 혼잡 수준을 감지하고 데이터 전송률을 조절하여 네트워크의 효율을 최대화합니다.
    • 연결 지향성: TCP는 데이터 전송 전에 연결을 설정하는 과정을 거치며, 이는 3-way handshake로 알려져 있습니다.

    TCP의 연결 지향성: 중요성과 역할

    연결 지향성의 정의

    TCP가 연결 지향적인 프로토콜이라는 것은 통신을 시작하기 전에 먼저 연결을 설정해야 함을 의미합니다. 이는 양쪽 통신 당사자가 서로의 존재와 준비 상태를 확인하고, 통신 준비를 완료했다는 것을 보장합니다.

    연결 지향성의 중요성

    • 데이터의 정확성과 신뢰성 보장: 연결을 통해 데이터가 올바르게 전송되고, 오류 발생 시 재전송을 요청함으로써 데이터의 정확성과 신뢰성을 보장할 수 있습니다.
    • 순서 유지: 전송된 데이터의 순서가 보장되므로, 수신자는 전송된 순서대로 데이터를 재조합할 수 있습니다.
    • 흐름 및 혼잡 제어: 데이터의 흐름을 관리하고, 네트워크의 혼잡 상태에 따라 데이터 전송률을 조절할 수 있습니다.

    TCP의 연결 지향성은 데이터 통신의 안정성과 효율성을 높이는 데 필수적인 역할을 하며, 이는 특히 대규모 및 중요 데이터를 다루는 네트워크 환경에서 중요합니다.

     

    프로토콜 세부 분석: TCP 3-Way Handshake

    3way handshake

    3-Way Handshake 상세

    3-Way Handshake는 TCP 연결을 초기화하는 과정입니다. 이 과정은 신뢰성 있는 세션을 시작하기 전에 양쪽 호스트가 서로 통신이 가능하고, 리소스가 준비되어 있음을 확인합니다. 이 과정은 세 단계로 구성됩니다:

    1. SYN: 연결을 초기화하는 호스트(클라이언트)는 SYN(Synchronize Sequence Numbers) 패킷을 전송하여 연결을 요청합니다. 이 패킷은 초기 시퀀스 번호(ISN: Initial Sequence Number)를 포함하여 세션의 시작을 알립니다. 클라이언트는 자신의 시퀀스 번호를 1 증가시킨 상태(SYN=1, SEQ=x)에서 대기합니다.
    2. SYN-ACK: 서버는 클라이언트의 SYN 요청을 받고, SYN 및 ACK(Acknowledgment) 플래그가 설정된 패킷을 클라이언트에게 보내 연결 요청을 수락합니다. 이 패킷은 서버의 초기 시퀀스 번호와, 클라이언트의 시퀀스 번호에 1을 더한 값(ACK 번호)을 포함합니다(SYN=1, ACK=x+1, SEQ=y).
    3. ACK: 클라이언트는 서버의 SYN-ACK 응답을 받고, ACK 패킷을 서버에게 보내 연결을 확립합니다. 이 ACK 패킷은 서버의 시퀀스 번호에 1을 더한 값이 ACK 번호로 설정됩니다(ACK=y+1). 이로써, 양 방향의 연결이 성공적으로 수립됩니다.

    헤더 분석: TCP 헤더 내 필드의 역할과 중요성

    TCP 헤더는 여러 필드를 포함하고 있으며, 각 필드는 데이터 전송 및 연결 관리에서 중요한 역할을 합니다:

    • Source Port와 Destination Port: 각각 송신지와 목적지의 포트 번호를 나타냅니다. 이들은 특정 서비스나 애플리케이션을 식별하는 데 사용됩니다.
    • Sequence Number: 각 세그먼트의 데이터 순서를 표시합니다. 이 번호를 통해 수신자는 데이터가 올바른 순서대로 도착했는지 확인하고, 누락된 세그먼트가 없는지 확인할 수 있습니다.
    • Acknowledgment Number: 다음에 기대하는 데이터의 시작 시퀀스 번호를 나타냅니다. 이는 이전에 수신된 데이터의 양을 송신자에게 확인시켜주는 역할을 합니다.
    • Data Offset: TCP 헤더의 크기를 32비트 단위로 표시합니다. 이 필드는 페이로드의 시작 위치를 나타내며, 옵션이 추가될 때 헤더 길이가 변동될 수 있습니다.
    • Flags: 여러 제어 플래그(SYN, ACK, FIN 등)를 포함하며, 연결 설정, 관리, 종료 등의 다양한 목적으로 사용됩니다.
    • Window Size: 수신자가 한 번에 받을 수 있는 데이터의 양(윈도우)을 지정합니다. 이는 네트워크의 혼잡 상황을 관리하고 흐름을 제어하는 데 사용됩니다.
    • Checksum: 헤더와 데이터의 오류를 검사하는 데 사용되는 값입니다. 이는 데이터의 무결성을 보장하는 데 중요합니다.
    • Urgent Pointer: 긴급 데이터의 처리를 위해 사용됩니다. URG 플래그가 설정된 경우, 이 포인터는 긴급 데이터의 끝을 가리킵니다.

    이러한 헤더 구조와 각 필드의 기능은 TCP가 신뢰성 높은 데이터 전송을 보장하고 네트워크 효율성을 유지하는 데 결정적인 역할을 합니다. 이는 모든 동작이 정확하게 수행되도록 보장하며, 네트워크 리소스의 최적화를 돕습니다.

     

    TCP 4-Way Handshake 상세 설명

    4way handshake

    TCP 4-Way Handshake는 TCP 연결을 종료하는 과정에서 사용됩니다. 연결 종료는 양방향 통신 채널을 닫는 복잡한 절차이며, 데이터 전송이 완료된 후 양쪽 호스트가 세션을 청산하고 자원을 해제하기 위해 수행됩니다. 이 과정은 다음 네 단계로 구성됩니다:

    1. FIN from Initiator (Active Close)

    첫 번째 단계에서 연결을 종료하고자 하는 호스트(흔히 "Initiator"라고 부름)는 FIN (Finish) 플래그가 설정된 TCP 세그먼트를 상대방에게 전송합니다. 이 패킷은 이 호스트가 더 이상 전송할 데이터가 없다는 것을 의미하며, 연결의 종료를 요청합니다.

    • FIN=1, SEQ=x: 여기서 SEQ=x는 현재 세그먼트의 시작 시퀀스 번호를 나타냅니다.

    2. ACK from Receiver

    두 번째 단계에서 연결의 다른 쪽 끝인 수신자(Receiver)는 FIN 패킷을 받고 이를 확인하는 ACK (Acknowledgment) 패킷을 보냅니다. 이 ACK 패킷은 첫 번째 FIN 패킷의 시퀀스 번호에 1을 더한 값을 ACK 번호로 사용합니다.

    • ACK=1, ACK=x+1: 이는 수신자가 FIN 패킷의 시퀀스 번호 다음에 오는 데이터부터 준비가 되어 있음을 나타냅니다.

    3. FIN from Receiver

    세 번째 단계에서 수신자도 연결을 종료하고자 할 때, 자신의 FIN 패킷을 보냅니다. 이는 수신자 또한 더 이상 전송할 데이터가 없다는 것을 의미합니다.

    • FIN=1, SEQ=y: 여기서 SEQ=y는 수신자가 전송하는 FIN 패킷의 시퀀스 번호를 나타냅니다.

    4. ACK from Initiator

    마지막 단계에서 처음 연결을 종료하려 했던 호스트는 수신자의 FIN 패킷을 받고 최종적으로 ACK 패킷을 보내 연결을 완전히 종료합니다.

    • ACK=1, ACK=y+1: 이 ACK는 수신자의 FIN 패킷이 정상적으로 수신되었음을 확인하고, 모든 데이터 전송이 완료되었음을 확인하는 역할을 합니다.

     4-Way Handshake는 각 단계마다 양쪽 호스트가 서로의 메시지를 확인함으로써, 데이터가 안전하게 전송되었는지와 모든 자원이 적절히 해제되었는지 확인할 수 있게 합니다. 이 과정은 TCP가 신뢰성 높은 프로토콜로 작동할 수 있도록 중요한 역할을 합니다.

    용어 정리

    • SYN(ynchronize Sequence Numbers): TCP 프로토콜에서 사용되는 중요한 제어 플래그입니다. TCP 연결 설정 과정에서 사용되며, 주로 TCP 3-way handshake라고 하는 연결 초기화 단계에서 활성화됩니다.
    • FIN (Finish) 플래그: TCP 연결을 종료하고자 할 때 사용되는 제어 플래그입니다.
    • ACK (Acknowledgment) 플래그: 데이터 수신을 확인하거나 다른 플래그들(FIN, SYN 등)의 처리를 확인하기 위해 사용됩니다.
    • ISN(Initial Sequence Number): TCP 연결을 시작할 때 각 TCP 세그먼트의 데이터 바이트들을 순서대로 번호 매기기 시작하는 데 사용되는 첫 번째 시퀀스 번호입니다. 이 번호는 각 TCP 연결의 시작점에서 무작위로 생성되며, 해당 연결을 통해 전송되는 각 데이터 패킷의 순서를 식별하고 관리하는 기준점 역할을 합니다.
    • SEQ (Sequence Number): 각 TCP 세그먼트의 데이터 순서를 관리하기 위한 번호입니다.
    • ACK Number: 다음에 예상되는 데이터의 시작 시퀀스 번호입니다.

     

    면접에서 왜 물어볼까요?

     백엔드 개발자가 TCP/IP의 3-way handshake와 같은 네트워크 프로토콜을 이해하는 것이 현업에서 직접적으로 자주 사용되지 않는 것처럼 보일 수 있지만, 이러한 지식이 개발자에게 여러 중요한 이유로 필요합니다. 다음은 이를 알아야 하는 몇 가지 주요 이유입니다:

    1. 성능 최적화: TCP/IP 프로토콜의 작동 원리를 이해하는 것은 네트워크 통신의 성능을 최적화하는 데 도움이 됩니다. 예를 들어, TCP의 흐름 제어, 혼잡 제어 메커니즘 및 연결 설정과 종료 과정을 이해하면, 네트워크 지연을 줄이고 효율적인 데이터 전송을 설계할 수 있습니다.
    2. 애플리케이션 안정성 향상: 네트워크 연결이 끊기거나 지연되는 등의 문제에 대응하는 로직을 구현할 때, TCP의 연결 지향적 특성과 신뢰성 있는 전송 방식을 활용할 수 있습니다. 연결 상태를 확인하고 오류를 적절히 처리하는 기능은 서버의 안정성과 사용자 경험을 크게 향상시킵니다.
    3. 보안 강화: TCP/IP 프로토콜에서 발생할 수 있는 보안 취약점, 예를 들어 SYN Flood 공격과 같은 DDoS 공격을 이해하고 대응하는 것은 애플리케이션의 보안을 강화하는 데 중요합니다. 네트워크 프로토콜의 세부적인 이해를 바탕으로 보안 레이어를 강화하고 취약점을 미리 방지할 수 있습니다.
    4. 문제 진단 및 트러블슈팅: 네트워크 관련 문제가 발생했을 때, TCP/IP의 원리를 알고 있으면 문제의 원인을 더 빨리 진단하고 해결할 수 있습니다. 예를 들어, 연결 지연이나 데이터 전송 실패의 원인을 파악하는 데 TCP의 상태(예: ESTABLISHED, TIME_WAIT)를 확인할 수 있습니다.
    5. 시스템 아키텍처 설계: 대규모 분산 시스템이나 마이크로서비스 아키텍처를 설계할 때, 네트워크 프로토콜의 작동 원리를 이해하는 것이 시스템 간 통신 방식을 효과적으로 설계하는 데 필수적입니다. 예를 들어, 서비스 간 통신을 위한 API 게이트웨이나 로드 밸런서를 구성할 때 네트워크 세션 관리 전략을 효율적으로 계획할 수 있습니다.
    반응형
Designed by Tistory.