[네트워킹] HandShake

Chloe Choi·2021년 1월 27일
0

네트워킹

목록 보기
2/11
post-custom-banner

Handshake

TCP는 연결형 서비스를 제공한다. 이 때, 종단점 사이의 논리적인 연결을 establish, termination 하는 과정을 핸드셰이크이라고 한다.

3-way handshake

TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정하는 과정으로, 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장한다.

#1. 클라이언트: 서버에 접속을 요청하는 SYN(x) 패킷을 전송. 전송한 SYN에 대한 ACK을 기다리는 상태가 됨(SYN_SEND)
#2. 서버: 원래는 클라이언트를 기다리는 LISTEN 상태였다가 클라이언트에게서 SYN 요청을 받고 수락한다는 의미로 ACK(x + 1)와 SYN(y)을 담아 패킷을 전송. 그리고 전송한 SYN에 대한 ACK을 기다리는 상태가 됨(SYN_RECEIVED)
#3. 클라이언트: 서버에 ACK(y + 1)를 보내고 ESTABLISHED 상태가 됨 + 이후 서버의 상태도 ESTABLISHED가 되어 논리적인 연결을 설정

정리하자면 다음과 같다.
#1, 2 -> one direction에 대한 connection 설정
#2, 3 -> the other direction에 대한 connection 설정
따라서, full-duplex communication is extablished !! 😆

4-way handshake

TCP의 연결을 해제하는 과정


#1. 클라이언트: 연결을 해제하겠다는 의미의 FIN 플래그 전송
#2. 서버: FIN 플래그에 대한 확인 플래그, ACK을 전송. 자신은 자신의 통신이 끝날때까지 기다리는 CLOSE-WAIT 상태가 됨 + 클라이언트는 서버의 FIN을 기다리는 FINWAIT2 상태가 됨
#3. 서버: 자신의 모든 통신이 끝나면 연결 종료 요청에 합의한다는 의미로 FIN 플래그 전송
#4. 클라이언트: 확인했다는 ACK를 전송. _TIME_WAIT
상태가 되는데, 이는 서버에서 FIN을 전송하기 전에 보낸 패킷이 어떤 문제로 인해 FIN 패킷보다 늦게 도착하는 상황에 대비해 일정시간동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정이다.

+궁금한점
#2, 3은 3-way handshake의 #2 처럼 한 단계에 진행될 수 없나?

일단, 4-way handshake는 2 * 2-way handshake이다.
#1, 2 -> terminate half-duplex
#3, 4 -> terminate the other half-duplex
이렇게 두 방향을 닫는 과정인데, 둘은 합쳐질 수 없을까?

구글링 해 본 결과, #2 때 서버가 더 이상 전송할 데이터가 없다면 합쳐질 수 있다고한다!
전송할 데이터가 더 있는 경우에는 합쳐질 수 없다고 한다. 그 이유가 TCP는 높은 신뢰성을 보장하기 위해 타임아웃 시 재전송을 하는데 이 오류제어 기능때문인거같다. 그래서 일단 클라이언트 쪽을 틀어막는 듯 ?!

profile
똑딱똑딱
post-custom-banner

0개의 댓글