TCP 3-way handshake

Creator
Creator
Seonglae ChoSeonglae Cho
Created
Created
2020 Feb 3 13:21
Editor
Edited
Edited
2023 Oct 19 5:8
Refs
Refs

Connection Establishment

TCP 3 Way Handshake는 TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에
먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미
notion image
  • Client > Server : TCP SYN
  • Server > Client : TCP SYN ACK
  • Client > Server : TCP ACK
[STEP 1]
A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보낸다. 이때 A클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는SYN_SENT 상태가 되는 것이다.
[STEP 2]
B서버는 SYN요청을 받고 A클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 A가 다시 ACK으로 응답하기를 기다린다. 이때 B서버는 SYN_RECEIVED 상태가 된다.
[STEP 3]
A클라이언트는 B서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는것이다. 이때의 B서버 상태가 ESTABLISHED 이다.
위와 같은 방식으로 통신하는것이 신뢰성 있는 연결을 맺어 준다는 TCP의 3 Way handshake 방식
클라이언트에서 서버에게 존재를 알리고 패킷을 보낼 수 있다는 것을 알리듯, 서버에서도 클라이언트에게 존재를 알리고 패킷을 보낼 수 있다는 신호를 보내야 한다. 그렇기 때문에 2-way-handshake로는 부족
 
TCP는 연결 지향 소켓으로 클라이언트와 서버가 연결되었는지 확인하는 과정이 존재한다. 그 확인하는 과정중에 하나의 방법이 3-Way Handshake
소켓(Socket)이란 서로 떨어져있는 두 컴퓨터를 소프트웨서 상으로 연결해 주기위한 프로그램
소켓이 어떤 통신을 하느냐에 따라서 소켓의 종류가 다양하게 존재하고, 그 종류중의 하나가 TCP소켓
 
 
notion image
SYN(Synchronize) 연결을 요청하는 패킷
ACK(Acknowledge) 요청에 응답하는 패킷
위의 패킷은 데이터가 없이 헤더만 존재하는 패킷이다. 단지 확인을 위한 최소한의 크기의 패킷
notion image
 
1. 클라이언트가 서버에게 SYN 패킷를 보낸다. (SYN 1000)
2. 그럼 서버에서 받았을 경우 클라이언트로 부터 받은 패킷에 1을 더한 수를 ACK 패킷으로 보낸다. (ACK 1001) 그리고 서버도 클라이언트에게 SYN 패킷을 보낸다. (SYN 2000) 즉 요청에 응답하는 패킷과 연결을 요청하는 패킷을 함께 보낸다.
3. 클라이언트가 정상적으로 서버의 SYN 패킷을 받았다면 그 패킷에 1을 더한 수를 서버에게 ACK 패킷으로 보낸다. (ACK 2001)
연결이 확정된 상태를 ESTABLISHED 상태
타임아웃값은 정확히 말하면 SYN 패킷을 보내고 ACK 패킷을 받기까지의 한계 시간
이 타임아웃 값의 크기는 네트워크의 성능에 큰 영향을 미친다. 이 시간이 너무 짧으면 느린 네트워크에서 정상적으로 서버에서 클라이언트가 응답했음에도 불구하고 다시 보내라는 재전송 요청
그래서 이 값은 정적인 값으로 설정하는 것이 아니라 동적으로 유연하게 하는 것이 바람
2way 안되는 이유는 양방향이라 server to client 검증 위해
 
 
 
 
 
 

Recommendations