Stream vs Datagram

TCP는 스트림, UDP는 데이터그램을 다룬다

같은 소켓 API를 써도 TCP와 UDP가 애플리케이션에 보여주는 단위는 다르다. TCP는 연속 바이트, UDP는 발신자 주소가 붙은 독립 데이터그램이다.

TCP는 메시지 경계를 애플리케이션이 직접 만든다
UDP는 데이터그램 경계를 보존하지만 유실·순서 보장은 없다
수신 버퍼가 작으면 UDP 데이터그램은 잘릴 수 있다
비교 질문
TCP
UDP
통신 단위
바이트 스트림여러 번 보낸 데이터가 한 번에 붙어 오거나, 하나의 메시지가 여러 번에 나뉘어 올 수 있다.
데이터그램sendto() 한 번이 recvfrom() 한 번의 단위로 보존된다.
상대 구분
연결 소켓accept()가 반환한 소켓이 특정 클라이언트를 기억한다.
발신자 주소서버는 하나의 소켓에서 주소와 데이터그램을 함께 읽어 클라이언트를 구분한다.
신뢰성
커널이 재전송·순서 제어애플리케이션은 안정적인 스트림처럼 읽지만 지연이 늘 수 있다.
애플리케이션이 정책 결정타임아웃, 재시도, 순서 번호, 중복 제거를 필요할 때 직접 설계한다.
Client A10.0.0.4:51001
msg
Client B10.0.0.8:51002
msg
Client C10.0.0.9:51003
msg
UDP

하나의 서버 소켓

recvfrom()이 payload와 source address를 함께 돌려준다.
경계 보존보낸 단위는 유지된다. 그래서 애플리케이션 프로토콜이 짧고 독립적이면 코드가 단순하다.
버퍼 크기수신 버퍼보다 큰 데이터그램은 일부가 잘릴 수 있다. DNS처럼 작은 질의라도 응답 크기와 truncation을 고려해야 한다.

핵심: UDP는 “빠른 TCP”가 아니라, 연결 상태를 네트워크가 관리하지 않는 별도의 통신 모델이다. 필요한 신뢰성은 애플리케이션이나 QUIC 같은 상위 프로토콜이 설계한다.