3-way handshake
- TCP/IP 프로토콜로 통신하기 전, 정확한 정보 전송을 위해 상대방 컴퓨터와 세션을 수립하는 과정
- TCP 연결 초기화
- 서로 통신을 위해 관문(port)를 확인하고 연결하기 위해 3번의 요청(SYN), 응답(ACK) 되는 것
- TCP 과정 중(connection setup - data transfer - connection termination)
connection setup
에 해당
연결 과정
패킷 = 세그먼트 (TCP 에서)
- 클라이언트가 서버에 연결 요청을 위해 SYN 패킷 전송
- 서버에서 해당 포트는 LISTEN 상태로 SYN 패킷을 받고 SYN_RCV 상태로 변경
- 서버는 정상적으로 받았다는 ACK 패킷 + 상대방의 포트를 열어달라는 SYN 패킷을 같이 전송
- 클라이언트는 ACK + SYN 패킷을 받고 ESTABLISHED 상태 변경 후 서버에 ACK를 전송
- ACK를 받은 서버는 상태가 ESTABLISHED로 변경
- connection setup 완료
- LISTEN : 서버의 데몬이 떠서 접속 요청을 기다리는 상태
- ESTABLISHED : 3 way-handshaking 이 완료된 후 서로 연결된 상태
그 이외의 상태
- SYN-SENT : 로컬의 클라이언트 어플리케이션이 원격 호스트에 연결을 요청한 상태
- SYN_RECEIVED : 서버가 원격 클라이언트로부터 접속 요구를 받아 클라이언트에게 응답을 하였지만 아직 클라이언트에게 확인 메시지는 받지 않은 상태
- FIN-WAIT1, CLOSE-WAIT, FIN-WAIT2 : 서버에서 연결을 종료하기 위해 클라이언트에게 종결을 요청하고 회신을 받아 종료하는 과정의 상태
- TIME-WAIT : 연결은 종료되었지만 분실되었을지 모를 느린 세그먼트를 위해 당분간 소켓을 열어두고 있는 상태
- CLOSING : 흔하지 않지만 주로 확인 메시지가 전송도중 분실된 상태
- CLOSED : 완전히 종료
4-way handshake
- TCP 과정 중(connection setup - data transfer - connection termination)
connection termination
에 해당
- TCP 연결을 종료
연결 종료 과정
패킷 = 세그먼트 (TCP 에서)
- 클라이언트가 Activate Close 를 하면 클라이언트에서 서버에 FIN 세그먼트 전송 (클 : FIN-WAIT 상태)
- 서버는 FIN 세그먼트를 받았다는 응답에 대한 ACK 패킷을 전송 (서 : CLOSE_WAIT 상태)
- 서버는 Passive Close 를 받으면 서버에서 클라이언트에 FIN 세그먼트 전송(클 : LAST-ACK 상태)
- 클라이언트는 FIN 세그먼트를 받았다는 응답에 대한 ACK 패킷을 전송 (클 : TIME-WAIT 상태)
- 서버가 ACK 를 받으면 연결 종료
출처
https://velog.io/@devharrypmw/TCPUDP-TCP와-UDP의-특징과-차이
https://bangu4.tistory.com/74