요약
- TCP의 PDU(회선 위 전송 단위)는 segment지만, application이 받을 땐 segment로 쪼개진 게 아니라 이어진 byte stream처럼 보인다 — segment 분할을 감춘 추상화.
- 그래서 stream 안엔 메시지 경계가 없고, 경계가 필요하면 application이 구분자/length prefix로 직접 만들어야 한다 (UDP는 datagram이라 경계 보존).
본문
- TCP가 application에 제공하는 것은 순서 보장된 byte stream
PDU(Protocol Data Unit) = 각 계층의 데이터 단위
- 전송(TCP)의 PDU는 segment. TCP는 데이터를 segment로 잘라 회선에 보낸다.
- 그런데 application에는 그 잘린 흔적을 보여주지 않는다. segment 단위 전송을 감추고 연속된 바이트 흐름으로 보여주는 것이 추상화.
- 즉 application이 보는 stream은 PDU(segment)가 아니라, segment들이 합쳐진 것처럼 보이는 추상 계층.
- 시작(3-way handshake)과 끝(FIN)은 있으나, stream 내부에 메시지 경계는 없음
- 송신 측이 100byte를 2번 보내도, 수신 측은 200byte를 1번에 읽을 수 있음
- 메시지 경계가 필요하면 application이 직접 구분자나 length prefix를 구현해야 함
- 반대로 UDP는 datagram 단위로 메시지 경계가 보존됨 (send 1회 = recv 1회)
참고
- stream은 앞으로만 쌓이고 소비되면 사라지는, 버퍼에서 순서대로 꺼내는 추상화다 — TCP가 위에 구현한 stream 추상화 자체의 정의(순서·소비·버퍼)