Каков максимальный размер пакета RTP при передачи по протоколу TCP/UDP

У меня появился вопрос, каков максимальный размер пакета RTP возможен, при передаче его по протоколу TCP или UDP, так как в стандарте RFC 3550 про это ничего не сказанно. В некоторых stackoverflow ответах было сказанно, что это - 1458 байт, но разве при передаче RTP пакета по TCP или UDP, этот размер не ~65535 (например, для TCP, это значение = MAX_TCP_PACKET_SIZE - MIN_TCP_HEADER_SIZE = 65535 - 20 = 65515).

Мне нужен этот ответ, чтобы я знал, до какого размера полученного пакета я могу получить потенциальный пакет RTP. Также было бы здорово узнать, какие + и - при отправке максимального размера пакета по TCP и UDP.


Ответы (1 шт):

Автор решения: KoVadim

65535 - это максимальный размер пакета в ipv4 (там просто два байта, больше не втулить). Такие пакеты без проблем ходят, если это localhost.

Если же выходим в локальную сеть, то максимальный размер udp пакета на самом деле такой же, но только пакет будет фрагментироваться (делится на куски). Это определяется размером MTU и обычно находится в диапазоне 1450-1500. Но каждый протокол съедает пару байт, к примеру, vpn может забрать 8 байт. Так как для UDP пакета доставка не гарантируется и он может потеряться, то для больших пакетов (больше MTU) шансы потеряться сильно выше - запросов на потерянный кусок нет и полученные куски просто будут выброшены. Если шансы потерять один кусок равны 0.9, то шансы потерять пакет с трех кусков уже 0.9^3 = 0.73. Ну и так далее.

Как только выходим в мировую сеть, все стает ещё печальнее. Пакеты упаковываются и перепаковываются, по дороге могут быть роутеры разного пошиба. и максимальный гарантированный размер пакета, который не будет фрагментироваться равен 576 байт (или 1280 байт для IPv6).

Считаем. Размер ip заголовка от 20 до 60 байт. udp заголовок - 8 байт. rtp, если правильно интерпретировал rfc, от 12 байт (самый минимум). Поэтому, минимум 40 байт на различные заголовки. Поэтому, 536 байт, как по мне - самый максимальный размер пакета, который гарантированно пролезет везде.

На практике, некоторые системы используют "примерку" - просто шлют udp пакеты разного размера и смотрят.

→ Ссылка