TCP, UDP란?
TCP와 UDP는 전송계층에서 사용되는 데이터 전송 프로토콜입니다.
TCP
TCP는 연결형 데이터 전송 프로토콜입니다.
데이터 전송중에 손실된 데이터가 있으면 재요청을 보내서 안정성을 확보합니다.
3 handshake로 연결을 시작하고 4 handshake로 연결을 끊는다.
UDP
UDPsms 비연결형 데이터 전송 프로토콜입니다.
데이터의 안정성을 신경쓰지 않고, 보내기만 하는 프로토콜입니다.
스트리밍 서비스에서 자주 사용합니다.
3 handshake
TCP는 정확한 전송을 보장해야 한다. 따라서 통신하기에 앞서, 논리적인 접속을 성립하기 위해 3 way handshake 과정을 진행한다.
- 클라이언트가 서버에게 SYN 패킷을 보냄 (sequence : x)
SYN_SENT 상태가 되어서 서버에서 올 패킷을 기다린다.
- 서버가 SYN을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN 패킷을 보냄
이제 클라이언트에서 ACK를 기다리는 SYN_RECIVED 상태가 된다.
- 클라이언트는 서버의 응답은 ACK와 SYN 패킷을 받고, ACK를 서버로 보냄
- 연결이 성립됨
4 handshake
TCP에서 연결을 종료할 때 실행되는 과정.
- 클라이언트는 서버에게 연결을 종료한다는 FIN 플래그를 보낸다.
- 서버는 FIN을 받고, 확인했다는 ACK를 클라이언트에게 보낸다. (이때 모든 데이터를 보내기 위해 TIME OUT 상태가 된다)
- 데이터를 모두 보냈다면, 연결이 종료되었다는 FIN 플래그를 클라이언트에게 보낸다.
- 클라이언트는 FIN을 받고, 확인했다는 ACK를 서버에게 보낸다. (아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다린다.)
- 서버는 ACK를 받은 이후 소켓을 닫는다 (Closed)
- TIME_WAIT 시간이 끝나면 클라이언트도 닫는다 (Closed)