TCP - 전송 제어 프로토콜
IP가 인터넷 프로토콜로서 복잡한 인터넷 망 속에서 클라이언트와 서버 간에 통신할 수 있게 IP 주소와 패킷과 같은 규칙을 통해 통신을 하게 하는 것이라면, TCP는 IP규칙으로만 통신하기에 부족하거나 불안정하던 여러 단점들(패킷 순서가 이상하거나 패킷이 유실)을 커버해, 패킷 전송을 제어하여 신뢰성을 보증하는 프로토콜로 보면 된다.
IP 규칙에 써있는대로 목적지에 다다랐으면, TCP 규칙에 써있는대로 올바르게 도착했는지 정확히 누구에게 전달되야하는지 하나하나 따진다고 생각하면 된다. 그래서 은행 업무나 메일과 같은 반드시 수신자가 정보를 받아야 하는 신뢰성 있는 통신이 필요할 때 사용된다.
전송 데이터가 포장되는 과정을 나열해보면 다음과 같다.
- 전송 데이터를 TCP 포장한다.
- 포장한 데이터를 IP 포장한다.
- 포장한 데이터를 이더넷 포장한다.
- 인터넷을 통해 상대 컴퓨터 서버에 도달하여 포장된 걸 하나씩 풀며 전송데이터를 받게 된다.
인터넷 통신을 택배 수하물로 비유하자면, IP는 단순히 배달 주소지라고 하면 TCP는 주문자 이름, 주문자 전화번호 등 여러 부가 정보들을 가미한 것이라고 보면 된다. 따라서 IP 주소지로만 물품을 배달하기엔 불안정한 부분들을 확실하게 커버하여 배달품이 안전하게 도착하도록 보증한다.
TCP의 꼼꼼한 통신 확인
통신을 시작할 때와 종료할 때 서로 준비가 되어있는지를 반드시 미리 먼저 물어보고 패킷을 전송할 순서를 정하고 나서야 본격적인 통신을 시작한다. (통신 시작할 때: 3 way handshake, 통신 마칠 때: 4way handshake)
클라이언트가 처음 서버와 통신을 하기 위해 TCP 연결을 생성할 때 SYN과 ACK이라는 패킷을 주고 받고, 통신을 종료하는 과정에서 FIN이라는 패킷을 주고받는 것을 볼 수 있다. 이것은 내가 너한테 전송하였다는 인증 도장 정도로만 생각하자. 즉, 패킷 내부에 들어있는 인증 플래그 값들을 확인하여 클라이언트와 서버가 서로 보낸 패킷의 순서와 패킷을 제대로 받았는 지 검증하는 과정이다.
SYN: 접속요청을 할 때 보내는 패킷; TCP접속시에 가장 먼저 보내는 패킷
ACK: 상대방으로부터 패킷을 받은 뒤에, 잘 받았다고 알려주는 패킷
PSH: 데이터를 즉시 목적지로 보내라는 의미
FIN: 접속종료를 위한 플래그; 이 패킷을 보내고 현재 접속하고 있는 곳과 접속을 끊고자 할 때 사용
UDP - 사용자 데이터그램 프로토콜
인터넷이 발전하면서 전송해야하는 데이터도 단순 텍스트를 넘어 동영상이나 음악과 같은 멀티미디어도 전송하게 되고, 데이터의 크기가 점점 커져가며 동시에 빠른 통신이 필요해졌다. 하지만 TCP는 신뢰성있는 통신을 위해 핸드쉐이크 과정뿐만 아니라 다양한 밑작업들도 같이 수행하기 때문에 결과적으로 속도의 한계가 존재했다.
데이터그램을 사용하는 프로토콜로 각각의 패킷 간에 순서가 존재하지 않는 독립적인 패킷을 사용한다. 패킷의 목적지만 정해져있다면 중간 경로는 어딜 거치든 신경쓰지 않기 때문에 핸드쉐이크 과정과 같은 연결 설정이 필요 없다. 즉, UDP는 신뢰성 확보를 위한 과정을 거치지 않으므로 더 빠르다.
TCP와 UDP 차이점 요약
- TCP는 연결 지향형 프로토콜, UDP는 데이터를 데이터그램 단위로 전송하는 프로토콜
- TCP는 가상 회선을 만들어 신뢰성을 보장하도록 하는 프로토콜, UDP는 신뢰성을 보장하기 위한 절차가 없는 프로토콜
- TCP는 느리고, UDP는 빠르다.