Client와 Server 또는 P2P Socket 통신 등, 네트워크를 사용한 통신시 TCP 통신을 많이 사용한다.
TCP 통신을 위한 네트워크 연결은 3 way handshake 라는 방식으로 연결된다.
쉽게 이야기 하면, 서로의 통신을 위한 관문(port)을 확인하고 연결하기 위하여 3번의 요청/응답 후에 연결이 되는 것이다.
그림을 보면 이해가 쉬울 것이다.
먼저 Server에서 열려있는 포트는 LISTEN 상태이고 Client에서는 Closed 상태이다.
Server에서 해당 포트는 LISTEN 상태에서 SYN 데이터를 받고 SYN_RCV로 상태가 변경된다.
그리고 요청을 정상적으로 받았다는 대답(ACK)와 Client도 포트를 열어달라는 SYN 을 같이 보낸다.
Client에서는 SYN+ACK 를 받고 ESTABLISHED로 상태를 변경하고 서버에 요청을 잘 받았다는 ACK 를 전송한다.
ACK를 받은 서버는 상태가 ESTABLSHED로 변경된다.
위와 같이 3번의 통신이 정상적으로 이루어지면, 서로의 포트가 ESTABLISHED 되면서 연결이 되게 된다.
Closed : 닫힌 상태
LISTEN : 포트가 열린 상태로 연결 요청 대기 중
SYN_RCV : SYNC 요청을 받고 상대방의 응답을 기다리는 중
ESTABLISHED : 포트 연결 상태
현재의 포트 상태 확인은 netstat 명령어로 할 수 있다.
출처: https://hyeonstorage.tistory.com/286 [개발이 하고 싶어요]