TCP 3, 4 way handshake

2024. 3. 18. 10:47·여러가지/이것저것

TCP의 3-way handshake 과정은 TCP/IP 네트워크 통신에서 매우 중요한 역할을 하며, 이를 통해 두 통신 장비 간의 신뢰할 수 있는 연결을 수립합니다. 여기서 "가상 회선"이라 함은 물리적인 회선이 아닌, TCP 연결을 통해 생성되는 논리적인 경로를 의미합니다. 이 과정을 통해 데이터의 정확한 전송을 보장합니다. 단계별로 살펴보면 다음과 같습니다:

1. 연결 수립(3-way Handshake)

   - SYN: 클라이언트는 서버에게 연결을 요청하는 SYN 패킷을 보냅니다. 이때, 클라이언트는 자신의 초기 시퀀스 번호(Sequence Number)를 임의의 난수로 설정하여 전송합니다. 이 초기 시퀀스 번호는 이후 데이터 전송에서 순서와 무결성을 보장하는 데 사용됩니다.

 

   - SYN-ACK: 서버는 클라이언트의 SYN 요청을 받고, 연결을 수락한다는 의미로 SYN-ACK 패킷을 클라이언트에게 보냅니다. 여기서 ACK 값은 클라이언트의 초기 시퀀스 번호에 1을 더한 값이고, 서버 역시 자신의 초기 시퀀스 번호를 임의의 난수로 설정하여 전송합니다.


   - ACK: 클라이언트는 서버의 SYN-ACK 응답을 받고, 최종적으로 ACK 패킷을 서버에게 전송합니다. 이 ACK 패킷의 시퀀스 번호는 서버의 초기 시퀀스 번호에 1을 더한 값입니다. 이 과정이 완료되면 TCP 연결이 성공적으로 수립됩니다.

2. 왜 초기 시퀀스 번호로 임의의 난수를 사용하는가?
   - 보안: 공격자가 네트워크 패킷을 예측하거나 조작하는 것을 어렵게 하기 위해. 고정된 값이나 예측 가능한 시퀀스를 사용하면, 공격자가 이를 이용해 세션 하이재킹(Session Hijacking)과 같은 보안 공격을 시도할 수 있습니다.
   - 패킷 손실 및 중복 구분: 네트워크 상에서 이전 연결의 패킷과 현재 연결의 패킷을 명확히 구분하기 위해. 이는 패킷의 순서를 추적하고, 네트워크 지연이나 패킷 손실이 발생했을 때 올바르게 재전송을 관리하는 데 중요합니다.
   - 연결의 유일성 보장: 각 TCP 연결은 고유해야 합니다. 임의의 난수를 사용함으로써 각 연결의 고유성을 보장하고, 이전 연결과 혼동되는 것을 방지합니다.

3. 연결 종료(4-way Handshake)
   연결 종료 시에는 4-way handshake 과정이 사용되며, FIN 패킷과 ACK 패킷을 교환하여 연결을 체계적으로 종료합니다. 이 과정은 연결을 수립하는 것만큼 중요하며, 데이터 전송이 완료된 후 연결을 깨끗하게 종료하여 리소스를 해제합니다.

TCP의 이러한 메커니즘은 네트워크 통신에서 데이터의 신뢰성과 순서를 보장하며, 효율적인 데이터 전송을 가능하게 합니다.

저작자표시 (새창열림)

'여러가지 > 이것저것' 카테고리의 다른 글

GET과 POST의 차이점  (0) 2024.03.18
HTTPS 공개키 암호화로 안전한 키 교환, 비밀키 암호화로 효율적인 데이터 통신을 보장/ 두 암호화 방식 사용  (0) 2024.03.18
HTTP, HTTPS 차이점  (2) 2024.03.18
TCP와 UDP의 차이점  (0) 2024.03.18
웹 통신의 큰 흐름 : HTTP://WWW.GOOGLE.COM/ 을 접속할 때 일어나는 일  (0) 2024.03.18
'여러가지/이것저것' 카테고리의 다른 글
  • HTTPS 공개키 암호화로 안전한 키 교환, 비밀키 암호화로 효율적인 데이터 통신을 보장/ 두 암호화 방식 사용
  • HTTP, HTTPS 차이점
  • TCP와 UDP의 차이점
  • 웹 통신의 큰 흐름 : HTTP://WWW.GOOGLE.COM/ 을 접속할 때 일어나는 일
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (283)
      • 여러가지 (108)
        • 알고리즘 & 자료구조 (73)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (39)
        • 파이썬 (31)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (0)
        • 암호화폐 (0)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    OOP
    Docker-compose
    Spring WebFlux
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    항해99
    파이썬
    그리디
    RDS
    EC2
    Spring Boot
    spring
    FastAPI
    docker
    취업리부트
    reactor
    SAA
    AWS
    Redis
    mybatis
    프로그래머스
    자바
    완전탐색
    celery
    java
    Python
    시험
    백준
    ecs
    DP
    WebFlux
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
TCP 3, 4 way handshake
상단으로

티스토리툴바