본문 바로가기
CS

TCP 3 way handshake & 4 way handshake

by 열정적인 이찬형 2023. 3. 21.
 TCP 3 Way HandShake

 

TCP/IP 프로토콜을 이용하여 통신을 하는 응용프로그램이 데이터를 전송하기 이전

서로가 연결이 성립되어있는지 확인하는 과정!

 

(정확한 전송을 보장하기 위해 서버와 사전에 세션을 수립하는 과정)

 


 3 Way ?

3단계로 이루어진다!!!

 

사전 학습!!

 

ISN?

더보기

TCP기반 데이터 통신에서 각각의 새 연결에 할당된 고유한 32비트 시퀀스 번호를 나타냅니다. TCP 연결을 통해 전송되는 다른 데이터 바이트와 충돌하지 않는 시퀀스 번호를 할당하는 데 도움이 됩니다.

 

고유한 32비트 시퀀스를 생성할 때에는 난수를 생성하여 설정합니다.

 

Why???

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

두 통신 호스트가 과거에 사용된 포트 번호 쌍을 사용하는 가능성이 존재합니다.

서버 측에서 패킷의 SYN을 보고 패킷을 구분하게 되는데 난수가 아닌 순차적인 number가 전송된다면 이전의 connection으로부터 오는 패킷으로 인식할 수 있다.

이러한 문제 발생 가능성을 줄이기 위해 ISN을 난수로설정!

 

SYN?

더보기

Synchronization, 연결 요청 플래그

 

ACK?

더보기

Acknowledgement, 응답 플래그

 

1단계(SYN 단계)

클라이언트는 서버에게 클라이언트의 ISN을 담아 SYN을 보냄

 

2단계(SYN + ACK 단계)

서버는 클라이언트가 전송한 SYN을 수신하고 서버 자신의 ISN을 보내며 승인번호로 클라이언트의 ISN + 1을 보냄

 

3단계(ACK 단계)

클라이언트는 서버의 ISN + 1한 값인 승인번호를 담아 ACK를 서버에 보냄

 

 

 

Sever에서는 LISTEN의 상태일 때 SYN을 받을 수 있습니다!!!

 

LISTEN?

더보기

서버가 클라이언트의 연락을 기다리는(대기하는) 상태

 

3 Way HandShake를 TCP가 쓰는 이유!

TCP와 UDP의 대표적인 차이점 : 신뢰성의 유무

 

TCP는 3 Way HandShake를 이용하여 신뢰성을 보장하고 있다고 표현한다.

 

UDP ? : 신뢰성 없어~ 그런 검사 안해~

 

정리

 

3 WayHandShake 과정이 존재하여 TCP는 신뢰성이 있다.

UDP는 이러한과정이 없기 때문에 신뢰성이 없다.라고 말합니다

 


 

TCP 4 Way HandShake

 

會者定離(회자정리)

만나는 사람은 반드시 헤어지게 된다(3 WayHandShake로 만났으니 헤어짐도 있는 법!)

 

TCP/IP 프로토콜 이용하여 통신을 하는 서버와 클라이언트가 연결을 해제하는데 하는 과정!

 

(연결되었던 서버세션 종료하는 과정)

 


4 Way ?

4단계로 이루어진다!!!

 

사전 학습!!

 

FIN?

더보기

더 이상 전송할 데이터가 없음을 표현! , 연결 종료 플래그

 

TIME_WAIT? (★★★)

더보기

지연 패킷이 발생했을 때 데이터 무결성을 해결

소켓이 바로 소멸되지 않고 일정 시간 유지되는 상태를 말하며 지연 패킷 등의 문제점을 해결

 

연결을 올바르게 닫힌상태로 만들기 위해 존재

: 서버가 CLOSED가 아닌 LAST_ACK로 되어 있으면 그 다음 연결 때 오류 나타납니다

 

두 배의 최대 세그먼트 수명(MSL) 시간을 기다린다.

Default MSL : 2분

 

특정 OS에 따라 다를 수도 있습니다.

 

1단계(FIN 단계)

클라이언트가 서버에게 클라이언트의 FIN으로 설정된 세그먼트 전송!

클라이언트는 상태를 FIN_WAIT_1로 변경 후 서버의 응답(ACK)을 기다린다.

 

2단계(ACK 단계)

서버는 클라이언트에게 FIN에 대한 ACK라는 승인 세그먼트를 전송한 뒤 CLOSE_WAIT상태로 변경

클라이언트는 ACK를 받고 FIN_WAIT_2로 변경 후 서버의 응답을 기다린다.

 

3단계(FIN단계)

서버는 연결을 종료할 준비가 끝나면 클라이언트에게 FIN으로 설정된 세그먼트 전송!

서버는 LAST_ACK(LAST_WAIT)상태가 되며 클라이언트에 응답(ACK)를 기다린다.

 

4단계(ACK 단계)

클라이언트는 서버의 FIN에 ACK를 서버에 보낸다.

서버는 클라이언트의 ACK를 받으면 CLOSE상태로 변경된다.

클라이언트는 TIME_WAIT 상태로 변경된다.


결론

 

그래서… TCP 3/4 Way HandShake를 왜 사용합니까???

 

TCP신뢰성을 보장해야하기 때문이다~

 

 


 

 

※ 잘못된 정보가 있다면 댓글을 남겨주시면 감사하겠습니다.!!!!!

'CS' 카테고리의 다른 글

DB connection Pool  (0) 2023.04.10
Blocking, Non-blocking & Synchronous, Asynchronous  (0) 2023.04.03
HTTP & HTTPS  (0) 2023.03.30
대칭키(비밀키) & 비대칭키(공개키)  (0) 2023.03.23

댓글