TCP (Transmission Control Protocol): "신뢰가 제일이다"
TCP는 데이터의 신뢰성을 최우선으로 설계된 프로토콜이다.
이를 위해 데이터를 보내기 전 상대방과 연결을 설정하고,
데이터가 잘 도착했는지 매번 확인한다.
왜 신뢰할 수 있는가?
연결 지향 (3-way Handshake): 데이터를 보내기 전
"준비됐니?" -> "응, 너는?" -> "나도 준비됐어"라는
3단계 과정을 거쳐 연결을 확립한다.
순서 보장: 데이터에 번호(Sequence Number)를 매겨서 보낼 때
받는 쪽에서 순서가 뒤섞여도 원래대로 조립할 수 있다.
흐름 제어 & 혼잡 제어: 받는 쪽의 처리 속도가 느리면 보내는 속도를 줄이고, 네트워크가 막히면 데이터 양을 조절한다. (데이터 폭주 방지)
재전송: 상대방이 데이터를 못 받았다고 하면(ACK를 못 받으면) 다시 보내준다.
단점
UDP (User Datagram Protocol): "빠른 게 장땡이다"
왜 빠른가?
비연결형: 3-way handshake 같은 사전 작업이 없이
그냥 목적지 주소 찍고 바로 전송한다.
확인 안 함: 데이터가 도착했는지, 순서가 맞는지 확인하지 않는다.
가벼운 헤더: TCP는 확인을 위해 헤더 정보가 많은데
UDP는 최소한의 정보만 담겨 있어서 오버헤드가 매우 적다.
단점
언제 무엇을 써야 할까?
TCP를 선택해야 하는 상황
"단 1바이트의 오차도 허용할 수 없을 때"
HTTP/HTTPS (웹 브라우징): 페이지 구성 요소 중 하나라도 빠지면
화면이 깨지거나 보안 이슈가 생길 수 있음.
파일 전송 (FTP): 파일의 끝부분이 유실되면 파일 실행이 안 됨.
이메일 (SMTP): 내용이 일부 누락되면 의미 전달이 안 됨.
UDP를 선택해야 하는 상황
"데이터가 조금 유실되어도 실시간성이 중요할 때"
실시간 스트리밍 (유튜브/치지직 라이브): 화면이 0.1초 끊기는 것보다
끊김 없이 계속 재생되는 게 중요함.
온라인 게임 (FPS/RPG): 내 캐릭터 위치 정보가 0.1초 늦게 전달되는 것보다
현재 위치를 빠르게 갱신하는 게 중요함.
보이스 톡 (VoIP): 목소리가 약간 지지직거려도
실시간 대화가 끊기지 않는 것이 우선임.
DNS: 주소를 빨리 찾는 게 우선이라 가벼운 UDP를 주로 사용함.