본문 바로가기

CS/네트워크

TCP의 3way handshake 과정

TCP는 웹 브라우저가 서버와 연결할 때 신뢰성 있게 연결해주는 프로토콜이다. 신뢰성을 위해 흐름제어, 혼잡제어를 수행한다. 이러한 것을 제어하는 정보는 TCP프로토콜의 Header 부분에 포함되어있다. 

또한 Header 를 제외한 TCP가 실을 수 있는 데이터 크기를 세그먼트(segment)라고 한다.

 

통신 전에 송신 측과 수신측이 잘 연결되었는지 서로 확인 후에 통신하게 되는데 3단계를 거치기 때문에 이 과정을 3way handshake라고 한다.

 

1. 먼저, 송신자가 수신자에게 SYN을 날려 통신이 가능한지 확인한다. 이 때 포트가 열려있어야 한다.

 

2. 이후 수신자가 송신자로부터 SYN을 받고 SYN/ACK를 보낸다. 여기서 ACK는 응답을 받았다는 의미이다.

 

3. 이후로 송신자가 수신자로부터 SYN/ACK를 받고 ACK를 보내 전송을 시작함을 알린다.

 

이 과정을 그림으로 표현하면 이렇다.

 

1. CLOSED

  • 아직 연결 시도 전 상태
  • TCP 포트가 닫힌 상태

 

2. LISTEN

  • TCP 포트가 열려 있고 연결 요청을 대기하는 상태

 

3. SYN-SENT

  • 송신자인 client가 수신자인 server 에게 SYN 패킷 전송
  • 임의의 값 n을 함께 전송

 

4. SYN-RECEIVED

  • 패킷을 받은 server는 요청을 수락하게 되면 SYN/ACK 패킷을 전송하여 응답
  • SYN은 server의 임의의 값 m을 전송
  • ACK는 server가 SYN를 받았다는 뜻으로 보내는데 이 때 받은 SYN에 +1를 해서 전달

 

5. ESTABLISHED(client)

  • server로부터 SYN / ACK 응답을 받아 클라이언트에서 연결 수립상태로 전환
  • 서버에게 SYN을 받았다는 뜻으로 수립 완료 패킷 전달
  • 받은 SYN에 +1을 해서 전달

 

6. ESTABLISHED(server)

  • client로부터 연결 되었다는ACK 패킷을 전달받아 서버에서도 연결 수립 상태로 전환
  • server 와 client가 모두 Estalished 모드가 되면 데이터 송수신이 이루어짐

 

'CS > 네트워크' 카테고리의 다른 글

TCP/IP의 4계층 이해하기  (0) 2024.05.31
IP주소의 구조  (0) 2024.04.23