기록공간

[TCP] 3-way-handshake & 4-way-handshake 본문

Network

[TCP] 3-way-handshake & 4-way-handshake

입코딩 2021. 7. 14. 09:31
반응형

TCP 프로토콜은 신뢰성 있는 연결이 가능하다는 특징을 가지고 있다.

이는 장치간 서로 잘 연결되어있는지 확인하는 과정이 포함되어있기 때문에 가능한 것이다. 

그럼 이제부터 이 과정이 어떻게 진행되는지 살펴보도록 하겠다.

 

연결 성립 (3-way-handshake)

1) 클라이언트는 서버에 접속을 요청하는 SYN(a) 패킷을 보낸다.

2) 서버는 클라이언트 요청 SYN(a)을 받고 요청을 수락한다는 ACK(a+1)SYN(b)이 설정된 패킷을 보낸다.

3) 클라이언트는 ACK(a+1)와 SYN(b)을 받고 ACK(b+1)를 서버로 보내면 연결이 성립된다.  

 

연결 해제 (4-way-handshake)

1) 클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다.

2) 서버는 FIN을 받고 확인 메시지로 ACK를 보낸다.

2-1) 서버는 이후 데이터를 모두 보낼때까지 TIME_OUT이 된다.

2-2) 데이터를 모두 보내고 통신이 끝났으면 클라이언트에게 연결이 종료되었다는 FIN플래그를 전송한다.

3) 클라이언트는 FIN을 확인했다는 ACK를 보낸다.

4) 서버는 ACK 메세지를 받고 연결된 소켓을 닫는다.

 

SYN? ACK?

두 용어는 다음의 약자이다.

SYN :: Synchronize Sequence Number

ACK :: ACKnowledgement

TCP 프로토콜 헤더에는 Code Bit(Flag Bit)라는 부분이 존재한다. 이 부분은 총 6비트로 이루어져 있으며 각각 비트들이 갖고 있는 의미가 있다. Urg-Ack-Psh-Rst-Syn-Fin 순서로 되어 있으며 해당 위치의 비트가 1인 경우 그 위치에 해당하는 내용을 담고 있는 패킷이라는 것을 나타낸다. SYN의 경우 000010이 되고 ACK의 경우 010000이 된다. 

 

왜 3-way인가? 2-way는 안되는가?

비유를 해보자. 일단 클라이언트가 자신의 목소리가 들리는지 물어본다(SYN). 서버는 클라이언트 목소리가 들린다고 말한다(SYN + 1). 그리고 자신의 목소리가 들리는지 물어본다(ACK). 클라이언트는 서버의 목소리가 들린다고 말한다(ACK + 1). 이런 과정을 거쳐야 신뢰성 있는 연결이 성립되는 것이다. 

TCP 연결은 양방향성(Full-Duplex) 연결이다. 클라이언트에서 서버에게 존재를 알리고 패킷을 보낼 수 있다는 것을 알리듯, 서버에서도 클라이언트의 존재를 알리고 패킷을 보낼 수 있다는 것을 알려야 한다. 이러한 이유로 2-way로는 부족한 것이다.


본 내용의 출처는 https://asfirstalways.tistory.com/356 입니다.

반응형

'Network' 카테고리의 다른 글

WebRTC란?  (0) 2021.09.03
[서버 가이드북] 2. 네트워크 기초 지식  (0) 2021.07.27
[서버 가이드북] 1. 서버(Server) 란?  (1) 2021.07.21
웹 애플리케이션  (0) 2020.11.21
GET vs POST  (0) 2020.11.21
Comments