저는 LAN선을 경유하는 음악 스트리밍 애플리케이션 문제를 해결하고 있었습니다.
사용자가 클래식 음악을 스트리밍할 때는 아무 문제 없었지만 락 음악은 계속 문제가 생겼습니다.
농담이 아니라 진짜로, 클래식은 아무 문제 없는데 락만 틀면 연결이 자꾸 끊기는 겁니다.
해당 애플리케이션은 오디오 데이터를 가져와 무손실 코덱으로 압축한 다음 각 데이터를 별도의 udp 패킷으로 전송하는 방식이었습니다.
필요하다면 IPv4를 쓸 수도 있지만 LAN환경이 더 안정적이었기 때문에 가능한한 IPv6를 사용하려 했습니다.
지루한 문제 해결 과정 끝에 마침내 답이 보이기 시작했습니다.
MTU(네트워크 최대 전송단위)가 1200바이트로 설정되어있었던 겁니다.
IPv6는 1280바이트 미만의 패킷에 대해 자동 조각화를 수행하지 않기 때문에 그보다 더 큰 패킷이 전송될 경우 작동하지 않았습니다.
스트리밍이 1200바이트보다 큰 오디오 패킷을 보내려고 한다면 당연히 오류가 발생해 접속이 끊어졌던 겁니다.
그런데 왜 락음악에서만 그런 일이 일어났을까요?
원인은 간단했습니다.
무손실 코덱은 가변 비트레이트이기 때문에 일반적으로 락음악보다 클래식 음악의 압축률이 더 좋습니다.
클래식을 스트리밍할 때는 오디오 패킷이 계속 1200바이트 이하로 압축되었지만
락음악은 가끔씩 한계값을 넘어서는 패킷을 생성했습니다.
최대 전송 단위를 다시 올려놓자 서비스는 문제없이 작동했습니다.