

TCP를 byte-stream protocol이라고 하고 UDP를 message-oriented protocol이라고 한다.

UDP는 message-oriented protocol이다.
UDP를 통해 다른 호스트로 데이터를 보내는 경우 UDP datagram에 담아서 전송하며 데이터 유실, 순서 보장X, 지연 등 신뢰성이 낮다.

UDP는 각각의 메시지를 구분해서 애플리케이션 레이어로 전달해준다.

UDP는 메시지를 구분해서 전송하기 때문에 받는 호스트 입장에서도 메시지를 구분하여 받을 수 있다.
보낸 메시지 단위 그대로 받을 수 있게 해주는 프로토콜
메시지 간의 경계를 구분할 수 있다.
한번에 전송 가능한 메시지의 최대 크기가 존재한다.

TCP는 byte-stream protocol이기 때문에 UDP와 다르게 메시지의 경계나 구분에 관심이 없다.
TCP 전송하고자 하는 메시지를 byte들의 흐름으로 인식하고 전송한다.

TCP는 신뢰성을 보장하기 위해 특정 크기로 구분되는 별도의 전송단위 TCP segment에 담아서 데이터를 전송한다.
TCP segment = TCP header + data
특정 크기는 MSS(Maximum Segment Size)를 넘을 수 없다.

TCP를 통해 다른 호스트로 데이터를 전송 시 TCP는 하나의 byte들의 흐름으로 인식하며, TCP sement에 담아 전송한다. (신뢰성있는 프로토콜이기 때문에 데이터 유실X)

UDP는 메시지 단위로 보내기 때문에 데이터를 받는 호스트 측에서도 메시지 단위로 사용할 수 있다. 하지만, TCP는 하나의 byte 흐름으로 보내 데이터를 받는 호스트는 하나의 TCP segment를 받고 애플리케이션 레이어로 전달한다.
데이터를 받은 애플리케이션 레이어는 하나의 byte흐름을 구분하는 책임을 가진다.

데이터 전송 호스트는 3번의 시스템 콜을 통해 데이터를 하나의 byte stream으로 생성 후 전송하지만, 데이터를 받는 호스트는 1번의 시스템 콜을 통해 하나의 byte stream 단위로 데이터를 읽는다.
메시지를 구분하는 책임을 TCP를 사용하는 쪽에서 구분해야한다.

사용하는 쪽에서 전송한 메시지를 구분하지 않음
데이터 전송을 byte들의 흐름 관점으로만 접근
메시지를 구분하는 책임은 해당 프로토콜을 사용하는 쪽에 있다.

byte-stream protocol과 신뢰성은 독립적인 개념이다. byte-stream 전부가 신뢰성있는것이 아니라, 신뢰성있는 byte-stream protocol 중 하나가 TCP이다.

UDP : 실패하고 에러
TCP : TCP가 알아서 MSS에 맞게 분리하여 전송


