[네트워크]TCP 연결 3 way handshake (SYN, SYN/ACK, ACK)

been·2021년 2월 13일
1

개인공부

목록 보기
11/11

Client와 Server 또는 P2P Socket 통신 등, 네트워크를 사용한 통신시 TCP 통신을 많이 사용한다.

TCP 통신을 위한 네트워크 연결은 3 way handshake 라는 방식으로 연결된다.

쉽게 이야기 하면, 서로의 통신을 위한 관문(port)을 확인하고 연결하기 위하여 3번의 요청/응답 후에 연결이 되는 것이다.

그림을 보면 이해가 쉬울 것이다.

먼저 Server에서 열려있는 포트는 LISTEN 상태이고 Client에서는 Closed 상태이다.

  1. Client에서 Server에 연결 요청을 하기위해 SYN 데이터를 보낸다.
  1. Server에서 해당 포트는 LISTEN 상태에서 SYN 데이터를 받고 SYN_RCV로 상태가 변경된다.

    그리고 요청을 정상적으로 받았다는 대답(ACK)와 Client도 포트를 열어달라는 SYN 을 같이 보낸다.

  1. Client에서는 SYN+ACK 를 받고 ESTABLISHED로 상태를 변경하고 서버에 요청을 잘 받았다는 ACK 를 전송한다.

    ACK를 받은 서버는 상태가 ESTABLSHED로 변경된다.

위와 같이 3번의 통신이 정상적으로 이루어지면, 서로의 포트가 ESTABLISHED 되면서 연결이 되게 된다.

  • Status
  • Closed : 닫힌 상태

  • LISTEN : 포트가 열린 상태로 연결 요청 대기 중

  • SYN_RCV : SYNC 요청을 받고 상대방의 응답을 기다리는 중

  • ESTABLISHED : 포트 연결 상태

현재의 포트 상태 확인은 netstat 명령어로 할 수 있다.


출처: https://hyeonstorage.tistory.com/286 [개발이 하고 싶어요]

0개의 댓글