[네트워크] TCP 3 way handshake & 4 way handshake

2023. 7. 17. 14:25·CS 지식/[네트워크]
목차
  1. 3 way handshake - 연결 성립
  2. 4 way handshake - 연결 해제
연결을 성립하고 해제하는 과정

 

3 way handshake - 연결 성립

  • TCP는 정확한 전송을 보장해야 함
  • (SYN : 연결 요청 플래그 / ACK : 응답)

  1. 클라이언트가 서버에게 접속을 요청하는 SYN 패킷을 보냄 (sequence : x)
  2. 서버가 클라이언트 요청인 SYN(x)을 받고, 클라이언트로 받았다는 신호(요청을 수락한다는)인 ACK와 SYN이 설정된 패킷을 보냄 (sequence : y, ACK : x + 1)
  3. 클라이언트는 서버의 수락 응답인 ACK(x+1)와 SYN(y) 패킷을 받고, ACK(y+1)를 서버로 보냄 → 그러면 연결 성립

→ 이렇게 3번의 통신이 완료되면 연결이 성립된다. (3번이라 3 way handshake인 것)

 

 

4 way handshake - 연결 해제

연결 성립 후, 모든 통신이 끝났다면 해제해야 함

  1. 클라이언트는 서버에게 연결을 종료한다는 FIN 플래그를 보냄
  2. 서버는 클라이언트의 요청인 FIN을 받고, 확인했다는 ACK를 클라이언트에게 보냄 (이때 모든 데이터를 보내기 위해 CLOSE_WAIT 상태가 됨)
  3. 데이터를 모두 보내고 통신이 끝났으면, 연결이 종료되었다는 FIN 플래그를 클라이언트에게 보냄
  4. 클라이언트는 FIN을 받고, 확인했다는 ACK를 서버에게 보냄 (아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다린다.)
  • 클라이언트의 ACK 메시지를 받은 서버는 소켓을 닫음 (Closed)
  • TIME_WAIT 시간이 끝나면 클라이언트도 닫음 (Closed)

-> 이렇게 4번의 통신이 완료되면 연결이 해제됨

저작자표시 비영리 변경금지 (새창열림)

'CS 지식 > [네트워크]' 카테고리의 다른 글

[네트워크] HTTP & HTTPS  (0) 2023.07.17
[네트워크] GET & POST  (0) 2023.07.17
[네트워크] 대칭키 & 공개키  (0) 2023.07.17
[네트워크] TCP & UDP  (0) 2023.07.17
[네트워크] OSI 7계층  (0) 2023.07.17
  1. 3 way handshake - 연결 성립
  2. 4 way handshake - 연결 해제
'CS 지식/[네트워크]' 카테고리의 다른 글
  • [네트워크] GET & POST
  • [네트워크] 대칭키 & 공개키
  • [네트워크] TCP & UDP
  • [네트워크] OSI 7계층
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (794)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (410)
        • 백준[JAVA] (76)
        • 프로그래머스[JAVA] (257)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    Java
    Flutter
    리눅스마스터
    Oracle
    리눅스
    자바
    spring
    스프링 부트 쇼핑몰 프로젝트 with JPA
    Linux
    CS
    리눅스마스터 1급
    postgresql
    backjoon
    pcce 기출문제
    백준
    데이터
    데이터베이스
    Spring Security
    DB
    springboot
    스프링
    programmers
    JPA
    스프링부트
    프로그래머스
    python
    CS지식
    baekjoon
    시큐리티
    플러터
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[네트워크] TCP 3 way handshake & 4 way handshake

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.