본문 바로가기
Computer Science/Network

3-way-handshake와 4-way-handshake

by Ray 2021. 4. 27.

1. 3 way Handshake란?

TCP/IP 프로토콜을 이용하여 통신을 진행할 때, 두 종단 간 정확한 데이터 전송을 보장하기 위해 연결을 설정하는 과정이다.

연결 과정 : 

- 클라이언트가 서버에게 접속을 요청하는 SYN(a)패킷을 보냄
- 서버는 요청 수락 응답으로 ACK(a+1)패킷과 클라이언트도 포트를 열어달라는 SYN(b)패킷을 보냄
- 클라이언트는 ACK(a+1) 패킷과 SYN(b)패킷을 받고 응답으로 ACK(b+1)패킷을 보내여 연결 성립

⇒ 양 쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 데이터를 전송하기 전에 한쪽이 다른쪽의 준비를 확인하는 과정이다.

2. 4 way Handshake란?

3 way Handshake와는 반대로 통신연결을 해제하는 과정이다.

해제 과정 : 

- 클라이언트는 서버에게 연결을 종료하겠다는 FIN 패킷을 보냄
- 서버는 FIN 패킷에 대한 응답으로 ACK 패킷을 보냄
- 서버는 처리해야 할 통신이 끝나면 연결을 종료하겠다는 FIN 패킷을 보냄
- 클라이언트는 FIN 패킷에 대한 응답으로 ACK 패킷을 보냄
- 클라이언트의 응답을 받은 서버는 소캣 연결을 닫음.
- 클라이언트는 아직 서버로부터 받지 못한 데이터가 있을것을 대비해 기다리는 과정을 거치고 (TIME_WAIT) 연결을 닫음.

3. 왜 사용하는가?

TCP/IP 통신 연결에서 정확한 데이터 통신을 위해 사용한다.

즉, 신호(데이터)를 보내면 잘 받았는지 응답, 확인하면서 통신의 신뢰도를 확실히 하기위해 사용한다.

4. 왜 2 way가 아닌 3 way인가?

TCP는 양방향성 통신이다.

따라서 클라이언트만 서버에 신호를 보내 존재를 알리고 통신하는 것이 아니라,

서버도 클라이언트에 존재를 알리고 통신이 가능함을 알려야 한다.

그래서 양방향통신확인 3 way handshake를 사용한다.

5. 왜 ISN으로 난수를 사용하는가?

통신 연결을 할 때, 포트는 유효 범위 내에서 사용되고 시간이 지나면 재사용된다.

서버는 패킷의 SYN을 보고 패킷을 구분하는데, 난수가 아니라 순차적인 번호를 이용한다면 이전의 연결에서 오는 패킷으로 오인할 수 있다.

이러한 인식 문제를 해결하기 위해 난수를 사용한다.

Q1. 3 way Handshake 과정에서 일어나는 타임아웃을 무엇이라고 하는가?

3 way Handshake 과정에서 타임아웃이 발생할 수 있는데, 이 때 발생한 타임아웃을 Connection TimeOut이라고 한다.
3 way Handshake 에서 연결이 이루어지는 총 시간을 Connection Time이라고 한다.
그러나 이 Connection Time을 무한으로 설정하여, 연결이 이루어질 때까지 무한정 기다리게 할 수는 없으므로 제한된 시간을 설정한다.
그리고 설정된 Connection Time이 되어도 연결이 맺어지지 않을 경우 Connection TimeOut이 발생한다.
즉, 3 way Handshake에서 연결을 맺는 총 시간의 임계치인 Connection Time을 설정하고, 이를 초과하게 되었을 때 발생하는 Timeout을 Connection TimeOut이라고 한다.

+ Socket TimeOut 
    - 서버와 클라이언트가 서로 연결을 맺고 서로 데이터를 주고 받는다. 
    데이터는 패킷으로 나뉘어서 전송이 되는데, 도착하는 패킷간의 시간이 다를 수 있다.
    즉, 각 패킷간의 시간 차이가 정해둔 임계치를 넘어가면 발생하는 TimeOut을 Socket TimeOut이라고 한다.

+ Read TimeOut
    - 서버와 클라이언트의 연결이 이루어지면, 클라이언트는 서버에 요청을 보내고 서버는 그 응답을 보낸다.
    이때, 클라이언트는 요청에 대한 응답을 즉각 받을 수도, 시간이 지난 이후에 받을 수도 있다.
    그러나 클라이언트가 서버의 응답을 무한정 기다릴 수는 없으므로, 일정 시간이 지나도 응답이 없으면 더 이상 기다리지 못하고 연결을 끊게 된다.
    이렇게 요청에 대한 응답이 일정 시간 동안 오지 않아 발생하는 TimeOut을 Read TimeOut이라고 한다.

Q2. 서버와 클라이언트가 서로의 통신 응답을 어떻게 하고 확인하는가?

HandShake과정에서 요청은 SYN(a)패킷으로 보내지고, 이에 대한 응답은 ACK(a+1) 패킷으로 받아진다.
즉, 클라이언트가 요청을 SYN(1100)패킷으로 보내면, 서버는 요청에 대한 응답을 ACK(1101)패킷으로 답한다.
ACK(1100+1)패킷은 SYN(1100)에 대한 응답을 의미하며, 클라이언트는 자신의 보낸 요청에 SYN number+1에 해당하는 ACK패킷을 받아 서버의 응답을 확인할 수 있다.
ACK(1101)은 "SYN(1100) 요청을 잘 받았고, 이에 대한 응답이야"라고 말하는 것과 같다고 할 수 있다.
그리고 클라이언트(요청을 보낸 쪽)이 ACK(1101)을 받음으로써, 서버(응답하는 쪽)가"SYN(1100) 요청을 잘 받았고, 이에 대한 응답이야"라고 말한것을 듣는 것과 같다.

'Computer Science > Network' 카테고리의 다른 글

HTTP와 HTTPS 란?  (0) 2021.12.16
API란?? Http API, REST API  (0) 2021.04.27
04. Network Layer: Data Plane  (0) 2021.04.13
03 Transport Layer  (0) 2021.04.13
02 Application Layer  (0) 2021.01.24