ㅁㄴㅇㄻㄴㅇㄹ

[Network] TCP 3 Way Handshake란? 본문

Network

[Network] TCP 3 Way Handshake란?

hanbin8269 2021. 4. 2. 10:26

TCP는 UDP와 달리 정확하게 데이터가 전달되어야 하는 통신이다. 그렇기 때문에 클라이언트와 서버간의 확인 절차가 존재하는데, 그 방법 중에 3 Way Handshake가 있다.

 

동작 방식

SYN = Synchronize sequence number(요청), ACK = Acknowledgement(수락)

 

1. Client -> Server

- Client가 Server로 연결 요청 메세지 SYN(1044)를 보낸다.

2. Server -> Client

- Server가 Client로 클라이언트의 요청을 수락 ACK(1044 + 1)한다.

  -> Server는 연결이 확립된다. (Established)

- Server가 Client로 연결 요청 SYN(4812)를 보낸다.

3. Client -> Server

- Client가 Server로 서버의 요청을 수락 ACK(4812 + 1)한다.

  -> Client도 연결이 확립된다. (Established)

 

🤔 왜 SYN에 +1을 해서 보낼까?

SYN + 1 한 값이 수신자가 예상하고 있는 값이기 때문이다.

이게 무슨 의미이냐면, 1044를 보내고 1045를 기다리는 것이다.

만약 1045가 아닌 다른 값이 도착한다면 연결을 하지 않을 것이다.

링크 참고

 

Why does TCP's three-way handshake bump the sequence number when acking?

Why does the TCP three-way handshake bump the sequence number when acking during the initial handshake? How is that better than just leaving the acknowledgement number equal to the sequence number...

stackoverflow.com

 

2 Way Handshake는 왜 안 되는거지?

단순히 서버와 클라이언트가 서로의 존재를 알리기 위해서는 2번의 과정만으로 충분하다고 생각할 수도 있다. 아래 그림을 보자

TCP 통신은 양방향성을 띠고 있는 통신이다. Client와 Server가 모두 존재를 알리고 패킷을 보내고 받을 수 있다는 것을 서로에게 알려야 한다.

 

만약 위와 같이 2 way handshake를 한다면,

  1. ClientServer에게 연결 요청을 한다.

  2. Server는 그것에 대한 응답을 한다. -> Client의 연결 확립 (Established)

이런 흐름이 될 것이다.

 

이게 그냥 보기에는 문제가 없어보인다. 하지만 한가지 가정을 들어보자.

만약 1번 과정이 매우 오래전에 일어났던 일이라 Client가 비가용 상태에 돌입했다면 Server는 아무것도 모르고 세션을 확립할 것이다.

그렇기 때문에 마지막에 ClientServer에게 "나는 가용 상태이다" 라는 사실을 알려줘야 한다.

'Network' 카테고리의 다른 글

[Network] OSI 7 계층은 대충 이런거다  (0) 2021.04.19
[Network] OAuth란?  (0) 2021.04.02