본문 바로가기
공부이야기/CS공부

[Network] TCP 3-way Handshake, 그리고 4-way Handshake

by coderoom 2021. 5. 2.

 

 

알아보기 전에...

포트 상태 정보

포트 상태 정보
CLOSED 포트가 닫힌 상태
LISTEN 포트가 열린 상태로 연결 요청 대기
SYN_RCV SYNC 요청을 받고 상대방의 응답을 기다리는 중
SYN_SENT SYNC 요청을 한 상태
ESTABLISHED 포트 연결 상태

 

TCP Header 안의 플래그 정보

TCP Header에는 CONTROL BIT(플래그 비트, 6bit)가 존재하며, 각각의 bit는 "URG-ACK-PSH-RST-SYN-FIN"의 의미를 가진다.

TCP Header 연결 설정 설명
SYN 000010 Sequence Number를 랜덤으로 설정하여 세션을 연결하는 데 사용하며, 초기에 Sequence Number를 전송한다.
ACK 010000 패킷을 받음을 의미. Acknowledgement Number 필드가 유효한지를 나타낸다.
 - 양단 프로세스가 쉬지 않고 데이터를 전송한다고 가정하면... 최초 연결 설정 과정에서 첫 번째 세크먼트를 제외한 모든 세그먼트의 ACK 비트는 1로 지정된다고 생각할 수 있다.
FIN 000001 세션 연결을 종료시킬 때 사용되며, 더 이상 전송할 데이터가 없음을 의미한다.

 

 


 

 

3-way Handshake

 

TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정하는 과정.

TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정.

 

 

Example.   A 프로세스 (Client)가 B 프로세스(Server)에 연결을 요청

https://sleepyeyes.tistory.com/4

 

 

Step 1. A -> B 

A가 연결 요청 메시지 전송 (SYN)

  • A(송신자)가 최초로 데이터를 전송할 때 Sequence Number를 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트 전송.

 

Step 2. B -> A

요청을 받은 B가 요청을 수락하고, A도 열어 달라고 메시지 전송 (SYN + ACK)

  • B(수신자)는  Acknowledgement Number 필드를 Sequence Number + 1로 지정하고, SYN과 ACK 플래그 비트를 1로 설정한 세그먼트 전송.

 

Step 3. A -> B

마지막으로 A가 수락 확인을 보내 연결을 맺음 (ACK)

  • 이 때, 전송할 데이터가 있으면 이 단계에서 전송할 수 있다.

 

 

 


 

 

 

 

4-way Handshake

TCP의 연결을 해제(Connection Termination)하는 과정

 

 

 

Example.   A 프로세스 (Client)가 B 프로세스(Server)에 연결 해체를 요청

https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-22%ED%8E%B8-TCP-3-WayHandshake-4-WayHandshake

 

 

Step 1. A -> B 

A가 연결 종료 FIN 플래그 전송 (FIN)

  • B가 FIN플래그로 응답하기 전까지 연결 유지

 

Step 2. B -> A

B는 일단 확인 메시지를 보내고 자신의 통신이 끝날 때까지 기다린다. (ACK, TIME_WAIT)

  • B(수신자)는  Acknowledgement Number 필드를 Sequence Number + 1로 지정하고, SYN과 ACK 플래그 비트를 1로 설정한 세그먼트 전송.
  • 자신이 전송할 데이터가 남아 있다면 이어서 전송

 

Step 3. B -> A

B가 통신이 끝났으면 연결 종료 요청에 합의한다는 의미로 A에게 FIN 플래그 전송

 

 

Step 4. A -> B

A는 확인했다는 메시지 전송

 

 

 

 

 

 

 

참고 링크

 

 

 

 


 

 

'공부이야기 > CS공부' 카테고리의 다른 글

[DB] Transaction (트랜잭션)이란?  (0) 2021.05.13
[DB] Isolation Level (트랜잭션 격리 수준)  (0) 2021.05.13
[OS] Process vs Thread  (0) 2021.05.02
[DB] Entity와 DTO (그리고 VO)  (0) 2021.05.01

댓글