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

2021. 5. 10. 00:18· 그 외 공부/네트워크
목차
  1. TCP란
  2. TCP 3 way handshake
  3. SYN의 값에 무작위 수를 사용하는 이유?
  4. TCP 4 way handshake
  5. Time-Wait?
  6. Time-wait이 없다면?
728x90

TCP란

연결 지향형 프로토콜로, 연속성 있는 데이터 패킷을 주고 받을 때 사용한다.

 

TCP 특징

  • 전송되는 데이터의 신뢰성 보장 (흐름 제어, 혼잡 제어, 오류 제어)
  • 파일전송에 주로 사용
  • 가상 회선을 만들어 신뢰성을 보장

 

TCP 3 way handshake

연결하고자 하는 두 장치 간의 논리적 접속을 성립하기 위해 사용하는 연결 확인 방식으로, 3번의 확인 과정을 거친다고 해서 3 way handshake라고 부른다.

 

TCP 3 way handshake를 간단히 표현하면 다음과 같다.

  1. A -> B : 내 말 들려?
  2. B -> A : 잘 들려. 내 말은 들려?
  3. A -> B : 잘 들려!

스크린샷 2021-05-08 오후 10.49.13

 

 

SYN (synchronize sequence numbers) - 연결 확인을 위해 보내는 무작위의 숫자값 (내 말 잘 들려?)

 

ACK (acknowledgements) - Client 혹은 Server로부터 받은 SYN에 1을 더해 SYN을 잘 받았다는 ACK (잘 들려)

 

ISN (Initial sequence numbers) - Client와 Server가 각각 처음으로 생성한 SYN

 

 

SYN의 값에 무작위 수를 사용하는 이유?

Connection을 맺을 때 사용하는 포트는 유한 범위 내에서 사용하고 시간이 지남에 따라 재사용된다.

따라서 두 통신 호스트가 과거에 사용된 포트 번호 쌍을 사용할 가능성이 존재한다.

 

서버 측에서 패킷의 SYN을 보고 패킷을 구분하게 되는데 난수가 아닌 순차적인 숫자가 전송된다면 이전의 connection으로부터 오는 패킷으로 인식할 수 있어 이러한 문제 발생 가능성을 줄이기 위해 ISN을 무작위 난수로 사용하는 것이다.

 

상태 설명
CLOSED 연결 수립을 시작하기 전의 기본 상태 (연결 없음)
LISTEN 포트가 열린 상태로 연결 요청 대기 중
SYN-SENT SYN 요청을 한 상태
SYN-RECEIVED SYN 요청을 받고 상대방의 응답을 기다리는 중
ESTABLISEHD 연결의 수립이 완료된 상태, 서로 데이터를 교환할 수 있다.

 

스크린샷 2021-05-08 오후 10.59.51

 

  1. Client가 연결하고자 하는 Server에게 seq port (2915269997) 전송
  2. Server가 해당 seq port를 받고 해당 숫자에 1을 더한 ack port (2915269998) + Client의 연결을 확인하고자 하는 seq port (1458477026) 전송
  3. Client가 Server의 seq port를 받고 해당 숫자에 1을 더한 ack port (1458477027)을 Server에 전송

 

TCP 4 way handshake

3 way handshake와 반대로 가상 회선 연결을 해제할 때 주고 받는 확인작업이다. 이 역시 4번의 확인과정을 거친다고 하여 4 way handshake라고 부른다.

 

TCP 4 way handshake를 간단히 표현하면 다음과 같다.

  1. A -> B: 나는 다 보냈어. 이제 끊자!
  2. B -> A: 알겠어! 잠시만~
  3. B -> A: 나도 끊을게!
  4. A -> B: 알겠어!

스크린샷 2021-05-08 오후 11.59.24

 

FIN (Finish) - TCP 연결을 종료하겠다는 메시지

 

상태 설명
CLOSE 연결 수립을 시작하기 전의 기본 상태 (연결 없음)
ESTABLISHED 연결의 수립이 완료된 상태, 서로 데이터를 교환할 수 있다.
CLOSE-WAIT 상대방의 FIN(종료 요청)을 받은 상태. 상대방 FIN에 대한 ACK를 보내고 애플리케이션에 종료를 알린다.
LAST-ACK CLOSE-WAIT 상태를 처리 후 자신의 FIN요청을 보낸 후 FIN에 대한 ACK를 기다리는 상태.
FIN-WAIT-1 자신이 보낸 FIN에 대한 ACK를 기다리거나 상대방의 FIN을 기다린다.
FIN-WAIT-2 자신이 보낸 FIN에 대한 ACK를 받았고 상대방의 FIN을 기다린다.
CLOSING 상대방의 FIN에 ACK를 보냈지만 자신의 FIN에 대한 ACK를 못받은 상태
TIME-WAIT 모든 FIN에 대한 ACK를 받고 연결 종료가 완료된 상태. 새 연결과 겹치지 않도록 일정 시간 동안 기다린 후 CLOSED로 전이한다.

 

Time-Wait?

먼저 연결을 끊는 (active closer) 쪽에 생성되는 소켓으로, 혹시 모를 패킷 전송 실패에 대비하기 위하여 존재하는 소켓이다.

 

Time-wait이 없다면?

패킷의 손실이 발생하거나 통신자 간 연결 해제가 제대로 이루어지지 않을 수 있다!

 

EX) Passive closer에서 보낸 FIN 메시지에 대해 Active closer가 보낸 ACK를 Passive closer가 받지 못한 경우

  1. Passive Closer의 FIN 메시지 전송
  2. Active Closer가 수신 후 ACK 메시지 전송 후, 통신 끊음 (Time-wait X)
  3. Passive Closer가 ACK를 수신하지 못함
  4. 일정 시간 후, ACK를 수신하지 못한 Passive Closer가 다시 FIN 메시지 전송.
  5. Active Closer는 이미 Closed 상태이기 때문에 FIN 메시지 수신 불가
  6. TCP 통신이 제대로 끊기지 않음
저작자표시 (새창열림)

'그 외 공부 > 네트워크' 카테고리의 다른 글

PATCH 메서드는 HTTP 표준 메서드가 아니었다? (feat. HTTP 메서드 히스토리 알아보기)  (0) 2024.04.26
교차 출처 리소스 공유, CORS(Cross-Origin Resource Sharing)에 대하여  (4) 2021.10.26
[네트워크] HTTPS, SSL HandShake란?  (0) 2021.05.22
[네트워크] HTTP란?  (0) 2021.05.16
  1. TCP란
  2. TCP 3 way handshake
  3. SYN의 값에 무작위 수를 사용하는 이유?
  4. TCP 4 way handshake
  5. Time-Wait?
  6. Time-wait이 없다면?
'그 외 공부/네트워크' 카테고리의 다른 글
  • PATCH 메서드는 HTTP 표준 메서드가 아니었다? (feat. HTTP 메서드 히스토리 알아보기)
  • 교차 출처 리소스 공유, CORS(Cross-Origin Resource Sharing)에 대하여
  • [네트워크] HTTPS, SSL HandShake란?
  • [네트워크] HTTP란?
SeongOnion
SeongOnion
서버는 꺼지지 않아요
SeongOnion
조무래기 코딩
SeongOnion
전체
오늘
어제
  • 분류 전체보기 (167)
    • 알고리즘 (81)
      • 이론 (8)
      • 문제풀이 (73)
    • 언어 (15)
      • Python (9)
      • JavaScript (1)
      • JAVA (5)
    • 데이터베이스 (5)
    • 프레임워크 (15)
      • Django (7)
      • Spring (8)
    • 그 외 공부 (38)
      • 운영체제 (1)
      • 자료구조 (14)
      • 네트워크 (5)
      • CS (2)
      • 기타 (7)
      • 트러블 슈팅 (9)
    • 프로젝트 (0)
    • 개발자취 (8)
    • 회고 (3)
    • 주저리주저리 (1)
    • 기타 (비개발) (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 웹
  • 프로그래머스
  • 알고리즘
  • 정렬 알고리즘
  • 데이터베이스
  • 장고
  • 소수
  • 개발자
  • DRF
  • 투 포인터 알고리즘
  • 컨트리뷰트
  • 트러블 슈팅
  • 자바
  • 브루트포스
  • 백준
  • BFS
  • spring
  • BFS/DFS
  • Django
  • 큐
  • 코딩
  • 회고
  • 파이썬
  • DP
  • 코딩테스트
  • 스택
  • 이진탐색
  • 에라토스테네스의 체
  • 그리디알고리즘
  • 오픈소스

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
SeongOnion
[네트워크] TCP 3-way & 4-way handshake란?
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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