Stream Framing

TCP는 메시지 경계를 보존하지 않으므로 프레이밍이 필요하다

두 번 보낸 메시지가 한 번에 읽히거나, 한 메시지가 여러 번의 recv로 나뉘어 들어올 수 있다. 애플리케이션이 메시지 규칙을 직접 정해야 한다.

send 횟수와 recv 횟수는 1:1로 대응하지 않는다.
length prefix는 먼저 길이를 읽고 그만큼 payload를 읽는다.
recv_exact는 정확한 바이트 수가 모일 때까지 반복한다.
잘못된 기대 send("HELLO") + send("BYE") 수신자가 recv를 두 번 하면 정확히 나뉘어 온다고 가정한다.
HELLO BYE
실제 TCP 스트림 바이트 순서만 보장 커널 버퍼와 네트워크 상황에 따라 합쳐지거나 잘릴 수 있다.
HE LLO BY E
해결 4-byte length + payload 먼저 길이를 읽고, 그 길이만큼 다시 읽으면 메시지를 복원할 수 있다.
0005 HELLO 0003 BYE
구분자 방식 줄바꿈이나 null byte까지 누적해서 파싱한다.
고정 헤더 방식 type, length, flags를 먼저 읽은 뒤 payload를 읽는다.
주의 최대 길이 제한을 두지 않으면 메모리 공격에 취약하다.