TCP | UDP | |
정의 | 연결 지향형 프로토콜 ⇒ 즉, 가상 회선을 만들어 신뢰성을 보장하도록 하는 프로토콜 |
데이터를 데이터 그램단위로 전송하는 프로토콜 |
신뢰성 | 보장 O (흐름/혼잡/오류 제어) |
신뢰성 보장 X (단, 개발자의 추가적인 정의를 통해 신뢰성을 보장 O) |
속도 | 느림 (∵ 신뢰성) | 빠름 |
우선 순위 | 신뢰성 | 연속성 |
용도 | 파일 전송 | - 스트리밍 - RTP (Real-time Transport Protocol. IP 네트워크 상에서 오디오와 비디오를 전달하기 위한 통신 프로토콜) 서비스 |
비유 | 소중한 고객의 택배 상자 | 배달러가 뿌리는 명함 |
- TCP 장치들 사이에 논리적인 접속/종료를 성립(establish) 시키기 위해 3/4 Way Handsake를 수행 과정을 거친다.
- 3 Way Handshake
- 발생 단계
가상회선을 수립하여 TCP 접속을 성립시키기 위한 단계
- 과정 정의
클라이언트는 서버에 요청을 전송할 수 있는지, 서버는 클라이언트에게 응답을 전송할 수 있는지에 대해 서로 확인하는 과정
- 방식
SYN, ACK 패킷을 주고받으며 임의의 난수로 SYN 플래그를 전송하고
ACK 플래그에는 1을 더한값을 전송 ⇒ SYN(n) -> ACK(n + 1), SYN(m) -> ACK(m + 1) 순- 왜 임의의 난수를 지정하는지?
- 기존 요청과 구분하기 위해라는 정도로만 알고 있다.
- 왜 임의의 난수를 지정하는지?
- 과정 상세
- [STEP 1]
A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보낸다.
이때 A 클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태,
B 서버는 Wait for Client 상태이다.
- [STEP 2]
B서버는 SYN요청을 받고 A클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 A가 다시 ACK으로 응답하기를 기다린다.
이때 B서버는 SYN_RECEIVED 상태가 된다.
- [STEP 3]
A 클라이언트는 B서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는것이다.
이때의 B 서버 상태가 ESTABLISHED 이다.
- [STEP 1]
- 발생 단계
- 4 Way Handshake
- 발생 단계
TCP연결을 해제하는 단계 - 과정 정의
클라이언트는 서버에게 연결해제를 통지하고 서버는 이를 확인하고 클라이언트에게 이를 받았음을 전송해준 후에야 최종적으로 연결이 해제되는 과정- TIME_WAIT
서버에서 소켓이 닫혔다고 통지해도(FIN) 혹시나 패킷이 나중에 도착할 수 있기 때문에 클라이언트 측에서는 일정시간(D. 240초) 대기하는 과정. 이후 발생하는 패킷은 DROP 되고 데이터는 유실됨.
- TIME_WAIT
- 과정 상세
- [STEP 1]
클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다.
이때 A클라이언트는 FIN-WAIT 상태가 된다. - [STEP 2]
B서버는 FIN플래그를 받은 후 일단 확인메시지 ACK 보내고 자신의 통신이 끝날때까지 기다리는데
이 상태가 B서버의 CLOSE_WAIT상태다. - [STEP 3]
연결을 종료할 준비가 되면, 연결해지를 위한 준비가 되었음을 알리기 위해
클라이언트에게 FIN플래그를 전송한다. 이때 B서버의 상태는 LAST-ACK이다. - [STEP 4]
클라이언트는 해지준비가 되었다는 ACK를 확인했다는 메시지를 보낸다.
A클라이언트의 상태가 FIN-WAIT ->TIME-WAIT 으로 변한다. - [STEP 5]
일정시간이 지나면, 세션을 만료하고 연결을 종료시키며, "CLOSE" 상태로 변한다.
- [STEP 1]
- 발생 단계