ื ื™ืฆืŸ TSDuck ืฆื• ืžืึธื ื™ื˜ืึธืจ IP (TS) ืกื˜ืจื™ืžื–

ื”ื™ื™ึทื ื˜, ืขืก ื–ืขื ืขืŸ ืคืึทืจื˜ื™ืง (ืคึผืจืึทืคึผืจื™ื™ืึทื˜ืขืจื™) ืกืึทืœื•ืฉืึทื ื– ืคึฟืึทืจ ืžืึธื ื™ื˜ืึธืจื™ื ื’ IP (TS) ืกื˜ืจื™ืžื–, ืœืžืฉืœ VB ะธ iQ, ื–ื™ื™ ื”ืึธื‘ืŸ ืึท ืคืขืจืœื™ ืจื™ื™ึทืš ื’ืึทื ื’ ืคื•ืŸ ืคืึทื ื’ืงืฉืึทื ื– ืื•ืŸ ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ื’ืจื•ื™ืก ืึธืคึผืขืจื™ื™ื˜ืขืจื– ื•ื•ืึธืก ื”ืึทื ื“ืœืขืŸ ืžื™ื˜ ื˜ืขืœืขื•ื•ื™ื–ื™ืข ื‘ืึทื“ื™ื ื•ื ื’ืก ื”ืึธื‘ืŸ ืึทื–ืึท ืกืึทืœื•ืฉืึทื ื–. ื“ืขืจ ืึทืจื˜ื™ืงืœ ื‘ืืฉืจื™ื™ื‘ื˜ ืึท ืœื™ื™ื–ื•ื ื’ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ืึทืŸ ืึธืคึฟืŸ ืžืงื•ืจ ืคึผืจื•ื™ืขืงื˜ TSDuck, ื“ื™ื–ื™ื™ื ื“ ืคึฟืึทืจ ืžื™ื ื™ืžืึทืœ ืงืึธื ื˜ืจืึธืœ ืคื•ืŸ IP (TS) ืกื˜ืจื™ืžื– ื“ื•ืจืš CC (ืงืึทื ื˜ื™ื ื™ื•ืึทื˜ื™ ื˜ืึธืžื‘ืึทื ืง) ื˜ืึธืžื‘ืึทื ืง ืื•ืŸ ื‘ื™ื˜ืจืึทื˜ืข. ื ืžืขื’ืœืขืš ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ืึธื ื•ื•ืขืจ ืคื•ืŸ ืคึผืึทืงื™ืฅ ืึธื“ืขืจ ื“ื™ ื’ืื ืฆืข ืœื•ื™ืคืŸ ื“ื•ืจืš ืึท ืœื™ืกื˜ ืœ 2 ืงืึทื ืึทืœ (ื•ื•ืึธืก ืงืขื ืขืŸ ื ื™ื˜ ื–ื™ื™ืŸ ืžืึธื ื™ื˜ืึธืจืขื“ ื ืึธืจืžืึทืœื™, ืœืžืฉืœ, ื“ื•ืจืš ืœื™ื™ืขื ืขืŸ ืึธื ื•ื•ืขืจ ืงืึธื•ื ื˜ืขืจืก ืื™ืŸ ืงื™ื•ื–).

ื–ื™ื™ืขืจ ื‘ืขืงื™ืฆืขืจ ื•ื•ืขื’ืŸ TSDuck

TSDuck ืื™ื– ืึทืŸ ืึธืคึฟืŸ ืžืงื•ืจ (2-ืงืœืึธื– BSD ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ) ื•ื•ื™ื™ื›ื•ื•ืืจื’ (ืึท ืกื›ื•ื ืคื•ืŸ ืงืึทื ืกืึธื•ืœ ื™ื•ื˜ื™ืœืึทื˜ื™ื– ืื•ืŸ ืึท ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืคึฟืึทืจ ื“ืขื•ื•ืขืœืึธืคึผื™ื ื’ ืžื ื”ื’ ื™ื•ื˜ื™ืœืึทื˜ื™ื– ืึธื“ืขืจ ืคึผืœื•ื’ื™ื ืก) ืคึฟืึทืจ ืžืึทื ื™ืคึผื™ืึทืœื™ื™ื˜ื™ื ื’ TS ืกื˜ืจื™ืžื–. ื•ื•ื™ ืึท ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘, ืขืก ืงืขื ืขืŸ ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ IP (ืžื•ืœื˜ื™ืงืึทืกื˜/ื•ื ื™ืงืึทืกื˜), ื”ื˜ื˜ืคึผ, ื”ืœืก, ื“ื•ื•ื‘ ื˜ื•ื ืขืจืก, ื“ืขืงื˜ืขืง ื“ื•ื•ื‘-ืึทืกื™ ื“ืขืžืึธื“ื•ืœืึทื˜ืึธืจ, ืขืก ืื™ื– ืึทืŸ ื™ื ืขืจืœืขืš ืฅ-ืกื˜ืจื™ื ื’ืขื ืขืจืึทื˜ืึธืจ ืื•ืŸ ืœื™ื™ืขื ืขืŸ ืคื•ืŸ ื˜ืขืงืขืก. ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืฉืจื™ื™ื‘ืŸ ืฆื• ืึท ื˜ืขืงืข, IP (ืžื•ืœื˜ื™ืงืึทืกื˜ / ื•ื ื™ืงืึทืกื˜), hls, dektec ื“ื•ื•ื‘-ืึทืกื™ ืื•ืŸ ื”ื™ื“ืขืก ืžืึธื“ื•ืœืึทื˜ืึธืจืก, ืคึผืœื™ื™ึทืขืจืก (ืžืคึผืœื™ื™ึทืขืจ, ื•ื•ืœืง, ืงืกื™ืŸ) ืื•ืŸ ืงืึทืคึผ. ืคืึทืจืฉื™ื“ืŸ ืคืึทืจืงืขืจ ืคึผืจืึทืกืขืกืขืจื– ืงืขื ืขืŸ ื–ื™ื™ืŸ ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืฆื•ื•ื™ืฉืŸ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืื•ืŸ ืจืขื–ื•ืœื˜ืึทื˜, ืœืžืฉืœ, PID ืจืขืžืึทืคึผื™ื ื’, ืกืงืจืึทืžื‘ืึทืœื™ื ื’ / ื“ืขืกืงืจืึทืžื‘ืœื™ื ื’, CC ื˜ืึธืžื‘ืึทื ืง ืึทื ืึทืœื™ืกื™ืก, ื‘ื™ื˜ืจืึทื˜ืข ื›ืขื–ืฉื‘ืŸ ืื•ืŸ ืื ื“ืขืจืข ื˜ื™ืคึผื™ืฉ ืึทืคึผืขืจื™ื™ืฉืึทื ื– ืคึฟืึทืจ TS ืกื˜ืจื™ืžื–.

ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, IP ืกื˜ืจื™ืžื– (ืžื•ืœื˜ื™ืงืึทืกื˜) ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ื•ื•ื™ ืึท ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘, ื“ื™ ืคึผืจืึทืกืขืกืขืจื– ื‘ื™ื˜ืจืึทื˜ืข_ืžืึธื ื™ื˜ืึธืจ (ืคื•ืŸ ื“ื™ ื ืึธืžืขืŸ ืขืก ืื™ื– ืงืœืึธืจ ื•ื•ืึธืก ืขืก ืื™ื–) ืื•ืŸ ืงืึทื ื˜ื™ื ื™ื•ื™ื™ืฉืึทืŸ (ืึทื ืึทืœื™ืกื™ืก ืคื•ืŸ CC ืงืึธื•ื ื˜ืขืจืก) ื–ืขื ืขืŸ ื’ืขื ื™ืฆื˜. ืื™ืจ ืงืขื ืขืŸ ืœื™ื™ื›ื˜ ืคืึทืจื‘ื™ื™ึทื˜ืŸ IP ืžื•ืœื˜ื™ืงืึทืกื˜ ืžื™ื˜ ืืŸ ืื ื“ืขืจ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื˜ื™ืคึผ ื’ืขืฉื˜ื™ืฆื˜ ื“ื•ืจืš TSDuck.

ื‘ื ื™ืžืฆื ื‘ืึทืึทืžื˜ืขืจ ื‘ื•ื™ืขืŸ / ืคึผืึทืงืึทื“ื–ืฉืึทื– TSDuck ืคึฟืึทืจ ืจื•ื‘ึฟ ืงืจืึทื ื˜ ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขืžืขืŸ. ื–ื™ื™ ื–ืขื ืขืŸ ื ื™ืฉื˜ ื‘ื ื™ืžืฆื ืคึฟืึทืจ ื“ืขื‘ื™ืึทืŸ, ืึธื‘ืขืจ ืžื™ืจ ื’ืขืจืื˜ืŸ ืฆื• ื‘ื•ื™ืขืŸ ื–ื™ื™ ืื•ื ื˜ืขืจ ื“ืขื‘ื™ืึทืŸ 8 ืื•ืŸ ื“ืขื‘ื™ืึทืŸ 10 ืึธืŸ ืงื™ื™ืŸ ืคืจืื‘ืœืขืžืขืŸ.

ื•ื•ื™ื™ึทื˜ืขืจ, ื•ื•ืขืจืกื™ืข TSDuck 3.19-1520 ืื™ื– ื’ืขื ื™ืฆื˜, ืœื™ื ื•ืงืก ืื™ื– ื’ืขื ื™ืฆื˜ ื•ื•ื™ ื“ื™ ืึทืก (ื“ืขื‘ื™ืึทืŸ 10 ืื™ื– ื’ืขื ื™ืฆื˜ ืฆื• ืฆื•ื’ืจื™ื™ื˜ืŸ ื“ื™ ืœื™ื™ื–ื•ื ื’, CentOS 7 ืื™ื– ื’ืขื ื™ืฆื˜ ืคึฟืึทืจ ืคืึทืงื˜ื™ืฉ ื ื•ืฆืŸ)

ืคึผืจื™ืคึผืขืจื™ื ื’ TSDuck ืื•ืŸ ืึทืก

ืื™ื™ื“ืขืจ ืื™ืจ ืžืึธื ื™ื˜ืึธืจ ืคืึทืงื˜ื™ืฉ ืคืœืึธื•ื–, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืžืึทื›ืŸ ื–ื™ื›ืขืจ ืึทื– TSDuck ืึทืจื‘ืขื˜ ืจื™ื›ื˜ื™ืง ืื•ืŸ ืขืก ื–ืขื ืขืŸ ืงื™ื™ืŸ ื˜ืจืืคื ืก ืื•ื™ืฃ ื“ื™ ื ืขืฅ ืงืึธืจื˜ ืึธื“ืขืจ ืึทืก (ื›ืึธืœืขืœ) ืžื“ืจื’ื”. ื“ืึธืก ืื™ื– ืคืืจืœืื ื’ื˜ ืื™ืŸ ืกื“ืจ ื ื™ืฉื˜ ืฆื• ื˜ืจืขืคืŸ ืฉืคึผืขื˜ืขืจ ื•ื•ื• ื“ื™ ื˜ืจืืคื ืก ืคืืจื’ืขืงื•ืžืขืŸ - ืื•ื™ืฃ ื“ื™ ื ืขืฅ ืึธื“ืขืจ "ื™ืŸ ื“ื™ ืกืขืจื•ื•ืขืจ". ืื™ืจ ืงืขื ืขืŸ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ื“ืจืึธืคึผืก ืื•ื™ืฃ ื“ื™ ื ืขืฅ ืงืึธืจื˜ ืžื“ืจื’ื” ืžื™ื˜ ื“ื™ ethtool -S ethX ื‘ืึทืคึฟืขืœ, ื“ื™ ื˜ื•ื ื™ื ื’ ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ื“ื•ืจืš ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืขื˜ื”ืึธืึธืœ (ื™ื•ื–ืฉืึทื•ื•ืึทืœื™, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคืึทืจื’ืจืขืกืขืจืŸ ื“ื™ ืจืงืก ื‘ืึทืคืขืจ (-G) ืื•ืŸ ืžืืœ ื“ื™ืกื™ื™ื‘ืึทืœ ืขื˜ืœืขื›ืข ืึธืคืœืึธืึทื“ืก (-K)). ื•ื•ื™ ืึท ื’ืขื ืขืจืึทืœ ืจืขืงืึธืžืขื ื“ืึทืฆื™ืข, ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืึทื“ื•ื•ื™ื™ื–ื“ ืฆื• ื ื•ืฆืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ืคึผืึธืจื˜ ืคึฟืึทืจ ืจื™ืกื™ื•ื•ื™ื ื’ ื“ื™ ืึทื ืึทืœื™ื™ื–ื“ ืคืึทืจืงืขืจ, ืื•ื™ื‘ ืžืขื’ืœืขืš, ื“ืึธืก ืžื™ื ืึทืžื™ื™ื–ืึทื– ืคืึทืœืฉ ืคึผืึทื–ืึทื˜ื™ื•ื•ื– ืคึฟืึทืจื‘ื•ื ื“ืŸ ืžื™ื˜ ื“ื™ ืคืึทืงื˜ ืึทื– ื“ื™ ืงืึทืคึผ ืื™ื– ื’ืขื•ื•ืขืŸ ืคึผื•ื ืงื˜ ืื•ื™ืฃ ื“ื™ ืึทื ืึทืœื™ื–ืขืจ ืคึผืึธืจื˜ ืจืขื›ื˜ ืฆื• ื“ืขื ื‘ื™ื™ึทื–ื™ื™ึทืŸ ืคื•ืŸ ืื ื“ืขืจืข ืคืึทืจืงืขืจ. ืื•ื™ื‘ ื“ืึธืก ืื™ื– ื ื™ื˜ ืžืขื’ืœืขืš (ืึท ืžื™ื ื™-ืงืึธืžืคึผื™ื•ื˜ืขืจ / NUC ืžื™ื˜ ืื™ื™ืŸ ืคึผืึธืจื˜ ืื™ื– ื’ืขื ื™ืฆื˜), ืขืก ืื™ื– ื”ืขื›ืกื˜ ื“ื™ื–ื™ื™ืจืึทื‘ืึทืœ ืฆื• ืฉื˜ืขืœืŸ ื“ื™ ืคึผืจื™ื™ืึธืจืึทื˜ื™ื™ื–ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ ืึทื ืึทืœื™ื™ื–ื“ ืคืึทืจืงืขืจ ืื™ืŸ ื‘ืึทืฆื™ื•ื ื’ ืฆื• ื“ื™ ืžื ื•ื—ื” ืื•ื™ืฃ ื“ื™ ืžื™ื˜ืœ ืฆื• ื•ื•ืึธืก ื“ื™ ืึทื ืึทืœื™ื–ืขืจ ืื™ื– ืงืึธื ื ืขืงื˜ืขื“. ื•ื•ืขื’ืŸ ื•ื•ื™ืจื˜ื•ืขืœ ื™ื ื•ื•ื™ื™ืจืึทื ืžืึทื ืฅ, ื“ืึธ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื–ื™ื™ืŸ ืึธืคึผื’ืขื”ื™ื˜ ืื•ืŸ ืงืขื ืขืŸ ื’ืขืคึฟื™ื ืขืŸ ืคึผืึทืงืึทื˜ ื˜ืจืืคื ืก ืกื˜ืึทืจื˜ื™ื ื’ ืคื•ืŸ ืึท ื’ืฉืžื™ื•ืช ืคึผืึธืจื˜ ืื•ืŸ ืขื ื“ื™ืงืŸ ืžื™ื˜ ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ืŸ ืึท ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ.

ื“ื•ืจ ืื•ืŸ ืึธืคึผื˜ืจืึธื’ ืคื•ืŸ ืึท ื˜ื™ื™ึทืš ื™ืŸ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก

ื•ื•ื™ ืึท ืขืจืฉื˜ืขืจ ืฉืจื™ื˜ ืื™ืŸ ืคึผืจื™ืคึผืขืจื™ื ื’ TSDuck, ืžื™ืจ ื•ื•ืขืœืŸ ื“ื–ืฉืขื ืขืจื™ื™ื˜ ืื•ืŸ ื‘ืึทืงื•ืžืขืŸ ืคืึทืจืงืขืจ ืื™ืŸ ืึท ืื™ื™ืŸ ื‘ืึทืœืขื‘ืึธืก ื ื™ืฆืŸ Netns.

ืคึผืจื™ืคึผืขืจื™ื ื’ ื“ื™ ืกื•ื•ื™ื•ื•ืข:

ip netns add P #ัะพะทะดะฐั‘ะผ netns P, ะฒ ะฝั‘ะผ ะฑัƒะดะตั‚ ะฟั€ะพะธัั…ะพะดะธั‚ัŒ ะฐะฝะฐะปะธะท ั‚ั€ะฐั„ะธะบะฐ
ip link add type veth #ัะพะทะดะฐั‘ะผ veth-ะฟะฐั€ัƒ - veth0 ะพัั‚ะฐะฒะปัะตะผ ะฒ netns ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ (ะฒ ัั‚ะพั‚ ะธะฝั‚ะตั€ั„ะตะนั ะฑัƒะดะตั‚ ะณะตะฝะตั€ะธั€ะพะฒะฐั‚ัŒัั ั‚ั€ะฐั„ะธะบ)
ip link set dev veth1 netns P #veth1 - ะฟะพะผะตั‰ะฐะตะผ ะฒ netns P (ะฝะฐ ัั‚ะพะผ ะธะฝั‚ะตั€ั„ะตะนัะต ะฑัƒะดะตั‚ ะฟั€ะธั‘ะผ ั‚ั€ะฐั„ะธะบะฐ)
ip netns exec P ifconfig veth1 192.0.2.1/30 up #ะฟะพะดะฝะธะผะฐะตะผ IP ะฝะฐ veth1, ะฝะต ะธะผะตะตั‚ ะทะฝะฐั‡ะตะฝะธั ะบะฐะบะพะน ะธะผะตะฝะฝะพ
ip netns exec P ip ro add default via 192.0.2.2 #ะฝะฐัั‚ั€ะฐะธะฒะฐะตะผ ะผะฐั€ัˆั€ัƒั‚ ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ ะฒะฝัƒั‚ั€ะธ nents P
sysctl net.ipv6.conf.veth0.disable_ipv6=1 #ะพั‚ะบะปัŽั‡ะฐะตะผ IPv6 ะฝะฐ veth0 - ัั‚ะพ ะดะตะปะฐะตั‚ัั ะดะปั ั‚ะพะณะพ, ั‡ั‚ะพะฑั‹ ะฒ ัั‡ั‘ั‚ั‡ะธะบ TX ะฝะต ะฟะพะฟะฐะดะฐะป ะฟะพัั‚ะพั€ะพะฝะฝะธะน ะผัƒัะพั€
ifconfig veth0 up #ะฟะพะดะฝะธะผะฐะตะผ ะธะฝั‚ะตั€ั„ะตะนั veth0
ip route add 239.0.0.1 dev veth0 #ัะพะทะดะฐั‘ะผ ะผะฐั€ัˆั€ัƒั‚, ั‡ั‚ะพะฑั‹ ะžะก ะฝะฐะฟั€ะฐะฒะปัะปะฐ ั‚ั€ะฐั„ะธะบ ะบ 239.0.0.1 ะฒ ัั‚ะพั€ะพะฝัƒ veth0

ื“ื™ ืกื‘ื™ื‘ื” ืื™ื– ื’ืจื™ื™ื˜. ืžื™ืจ ืึธื ื”ื™ื™ื‘ืŸ ื“ืขื ืคืึทืจืงืขืจ ืึทื ืึทืœื™ื–ืขืจ:

ip netns exec P tsp --realtime -t 
 -I ip 239.0.0.1:1234 
 -P continuity 
 -P bitrate_monitor -p 1 -t 1 
 -O drop

ื•ื•ื• "-p 1 -t 1" ืžื™ื˜ืœ ืึทื– ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืจืขื›ืขื ืขืŸ ื“ื™ ื‘ื™ื˜ืจืึทื˜ืข ื™ืขื“ืขืจ ืจื’ืข ืื•ืŸ ืึทืจื•ื™ืกื•ื•ื™ื™ึทื–ืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื“ื™ ื‘ื™ื˜ืจืึทื˜ืข ื™ืขื“ืขืจ ืจื’ืข
ืžื™ืจ ืึธื ื”ื™ื™ื‘ืŸ ื“ืขื ืคืึทืจืงืขืจ ื’ืขื ืขืจืึทื˜ืึธืจ ืžื™ื˜ ืึท ื’ื™ื›ืงื™ื™ึทื˜ ืคื•ืŸ 10 ืžื‘ืคึผืก:

tsp -I craft 
 -P regulate -b 10000000 
 -O ip -p 7 -e --local-port 6000 239.0.0.1:1234

ื•ื•ื• "-p 7 -e" ืžื™ื˜ืœ ืึทื– ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคึผืึทืงืŸ 7 TS ืคึผืึทืงื™ืฅ ืื™ืŸ 1 IP ืคึผืึทืงืึทื˜ ืื•ืŸ ื˜ืึธืŸ ืขืก ืฉื•ื•ืขืจ (-E), ื“.ื”. ืฉื˜ืขื ื“ื™ืง ื•ื•ืึทืจื˜ืŸ 7 TS ืคึผืึทืงื™ืฅ ืคื•ืŸ ื“ื™ ืœืขืฆื˜ืข ืคึผืจืึทืกืขืกืขืจ ืื™ื™ื“ืขืจ ืื™ืจ ืฉื™ืงืŸ ืึทืŸ IP ืคึผืึทืงืึทื˜.

ื“ืขืจ ืึทื ืึทืœื™ื–ืขืจ ืกื˜ืึทืจืฅ ืึทืจื•ื™ืกืคื™ืจืŸ ื“ื™ ื“ืขืจื•ื•ืึทืจื˜ ืึทืจื˜ื™ืงืœืขืŸ:

* 2020/01/03 14:55:44 - bitrate_monitor: 2020/01/03 14:55:44, TS bitrate: 9,970,016 bits/s
* 2020/01/03 14:55:45 - bitrate_monitor: 2020/01/03 14:55:45, TS bitrate: 10,022,656 bits/s
* 2020/01/03 14:55:46 - bitrate_monitor: 2020/01/03 14:55:46, TS bitrate: 9,980,544 bits/s

ืื™ืฆื˜ ืœื™ื™ื’ืŸ ืขื˜ืœืขื›ืข ื˜ืจืืคื ืก:

ip netns exec P iptables -I INPUT -d 239.0.0.1 -m statistic --mode random --probability 0.001 -j DROP

ืื•ืŸ ืึทืจื˜ื™ืงืœืขืŸ ื•ื•ื™ ื“ืึธืก ื“ืขืจืฉื™ื™ึทื ืขืŸ:

* 2020/01/03 14:57:11 - continuity: packet index: 80,745, PID: 0x0000, missing 7 packets
* 2020/01/03 14:57:11 - continuity: packet index: 83,342, PID: 0x0000, missing 7 packets 

ื•ื•ืึธืก ืื™ื– ื’ืขืจื™ื›ื˜. ื“ื™ืกื™ื™ื‘ืึทืœ ืคึผืึทืงืึทื˜ ืึธื ื•ื•ืขืจ (ip netns exec P iptables -F) ืื•ืŸ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืคืึทืจื’ืจืขืกืขืจืŸ ื“ื™ ื‘ื™ื˜ืจืึทื˜ืข ื’ืขื ืขืจืึทื˜ืึธืจ ืฆื• 100 ืžื‘ืคึผืก. ื“ืขืจ ืึทื ืึทืœื™ื–ืขืจ ืจืขืคึผืึธืจืฅ ืึท ื‘ื™ื ื˜ืœ ืคื•ืŸ CC ืขืจืจืึธืจืก ืื•ืŸ ื•ื•ืขื’ืŸ 75 ืžื‘ืคึผืก ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ 100. ืžื™ืจ ื–ืขื ืขืŸ ื˜ืจื™ื™ื ื’ ืฆื• ืจืขื›ืขื ืขืŸ ื•ื•ืขืจ ืื™ื– ืฉื•ืœื“ื™ืง - ื“ืขืจ ื’ืขื ืขืจืึทื˜ืึธืจ ื”ืื˜ ื ื™ืฉื˜ ืฆื™ื™ื˜ ืึธื“ืขืจ ื“ื™ ืคึผืจืึธื‘ืœืขื ืื™ื– ื ื™ืฉื˜ ืื™ืŸ ืขืก, ืคึฟืึทืจ ื“ืขื ืžื™ืจ ืึธื ื”ื™ื™ื‘ืŸ ื“ื–ืฉืขื ืขืจื™ื™ื˜ื™ื ื’ ืึท ืคืึทืจืคืขืกื˜ื™ืงื˜ ื ื•ืžืขืจ ืคื•ืŸ ืคึผืึทืงื™ืฅ (700000 TS ืคึผืึทืงื™ืฅ = 100000 IP ืคึผืึทืงื™ืฅ):

# ifconfig veth0 | grep TX
       TX packets 151825460  bytes 205725459268 (191.5 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
# tsp -I craft -c 700000 -P regulate -b 100000000 -P count -O ip -p 7 -e --local-port 6000 239.0.0.1:1234
* count: PID    0 (0x0000):    700,000 packets
# ifconfig veth0 | grep TX
        TX packets 151925460  bytes 205861259268 (191.7 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ื•ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ, ืคึผื•ื ืงื˜ 100000 IP ืคึผืึทืงื™ืฅ ื–ืขื ืขืŸ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ (151925460-151825460). ืึทื–ื•ื™ ืœืึธื–ืŸ ืก ืจืขื›ืขื ืขืŸ ื•ื•ืึธืก ืื™ื– ื’ืขืฉืขืขื ื™ืฉ ืžื™ื˜ ื“ื™ ืึทื ืึทืœื™ื–ืขืจ, ืคึฟืึทืจ ื“ืขื ืžื™ืจ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืžื™ื˜ ื“ื™ RX ื˜ืึธืžื‘ืึทื ืง ืื•ื™ืฃ veth1, ืขืก ืื™ื– ืฉื˜ืจืขื ื’ ื’ืœื™ื™ึทืš ืฆื• ื“ื™ TX ื˜ืึธืžื‘ืึทื ืง ืื•ื™ืฃ veth0, ืื•ืŸ ืžื™ืจ ืงื•ืงืŸ ืื™ืŸ ื•ื•ืึธืก ื›ืึทืคึผืึทื ื– ืื•ื™ืฃ ื“ื™ ื›ืึธืœืขืœ ืžื“ืจื’ื”:

# ip netns exec P cat /proc/net/udp                                                                                                           
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops             
  133: 010000EF:04D2 00000000:0000 07 00000000:00000000 00:00000000 00000000     0        0 72338 2 00000000e0a441df 24355 

ื“ืึธ ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ื˜ืจืืคื ืก = 24355. ืื™ืŸ TS ืคึผืึทืงื™ืฅ, ื“ืึธืก ืื™ื– 170485 ืึธื“ืขืจ 24.36% ืคื•ืŸ 700000, ืึทื–ื•ื™ ืžื™ืจ ื–ืขืŸ ืึทื– ื“ื™ ื–ืขืœื‘ืข 25% ืคื•ืŸ ื“ื™ ืคืึทืจืคืึทืœืŸ ื‘ื™ื˜ืจืึทื˜ืข ื–ืขื ืขืŸ ื˜ืจืืคื ืก ืื™ืŸ ื“ื™ ื•ื“ืคึผ ื›ืึธืœืขืœ. ื˜ืจืืคื ืก ืื™ืŸ ืึท ื•ื“ืคึผ ื›ืึธืœืขืœ ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ืคืึทืœืŸ ืจืขื›ื˜ ืฆื• ืึท ืคืขืœืŸ ืคื•ืŸ ื‘ืึทืคืขืจ, ืงื•ืง ืื™ืŸ ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ื›ืึธืœืขืœ ื‘ืึทืคืขืจ ื’ืจื™ื™ืก ืื•ืŸ ื“ื™ ืžืึทืงืกื™ืžื•ื ื›ืึธืœืขืœ ื‘ืึทืคืขืจ ื’ืจื™ื™ืก:

# sysctl net.core.rmem_default
net.core.rmem_default = 212992
# sysctl net.core.rmem_max
net.core.rmem_max = 212992

ืื–ื•ื™, ืื•ื™ื‘ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ื˜ืึธืŸ ื ื™ื˜ ื‘ืคื™ืจื•ืฉ ื‘ืขื˜ืŸ ืึท ื‘ืึทืคืขืจ ื’ืจื™ื™ืก, ืกืึทืงืึทืฅ ื–ืขื ืขืŸ ื‘ืืฉืืคืŸ ืžื™ื˜ ืึท ื‘ืึทืคืขืจ ืคื•ืŸ 208 ืงื‘, ืึธื‘ืขืจ ืื•ื™ื‘ ื–ื™ื™ ื‘ืขื˜ืŸ ืžืขืจ, ื–ื™ื™ ื ืึธืš ื•ื•ืขืœืŸ ื ื™ืฉื˜ ื‘ืึทืงื•ืžืขืŸ ื•ื•ืึธืก ืื™ื– ื’ืขื‘ืขื˜ืŸ. ื–ื™ื ื˜ ืื™ืจ ืงืขื ืขืŸ ืฉื˜ืขืœืŸ ื“ื™ ื‘ืึทืคืขืจ ื’ืจื™ื™ืก ืื™ืŸ tsp ืคึฟืึทืจ ื“ื™ IP ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ (-ื‘ืึทืคืขืจ-ื’ืจื™ื™ืก), ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ืึธื ืจื™ืจืŸ ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ื›ืึธืœืขืœ ื’ืจื™ื™ืก, ืึธื‘ืขืจ ื ืึธืจ ืฉื˜ืขืœืŸ ื“ื™ ืžืึทืงืกื™ืžื•ื ื›ืึธืœืขืœ ื‘ืึทืคืขืจ ื’ืจื™ื™ืก ืื•ืŸ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ื‘ืึทืคืขืจ ื’ืจื™ื™ืก ื‘ืคื™ืจื•ืฉ ื“ื•ืจืš ื“ื™ tsp ืึทืจื’ื•ืžืขื ื˜ืŸ:

sysctl net.core.rmem_max=8388608
ip netns exec P tsp --realtime -t -I ip 239.0.0.1:1234 -b 8388608 -P continuity -P bitrate_monitor -p 1 -t 1 -O drop

ืžื™ื˜ ื“ืขื ื˜ื•ื ื™ื ื’ ืคื•ืŸ ื“ื™ ื›ืึธืœืขืœ ื‘ืึทืคืขืจ, ืื™ืฆื˜ ื“ื™ ื’ืขืžืืœื“ืŸ ื‘ื™ื˜ืจืึทื˜ืข ืื™ื– ื•ื•ืขื’ืŸ 100 ืžื‘ืคึผืก, ืขืก ื–ืขื ืขืŸ ืงื™ื™ืŸ CC ืขืจืจืึธืจืก.

ืœื•ื™ื˜ ื“ื™ ืงืคึผื• ืงืึทื ืกืึทืžืฉืึทืŸ ืคื•ืŸ ื“ื™ ืฆืคึผ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื–ื™ืš. ืงืึธืจืขื•ื• ืฆื• ืื™ื™ืŸ ื”ืึทืจืฅ i5-4260U ืงืคึผื• @ 1.40 ื’ื”ื–, 10 ืžื‘ืคึผืก ืœื•ื™ืคืŸ ืึทื ืึทืœื™ืกื™ืก ื•ื•ืขื˜ ื“ืึทืจืคืŸ 3-4% ืงืคึผื•, 100 ืžื‘ืคึผืก - 25%, 200 ืžื‘ืคึผืก - 46%. ื•ื•ืขืŸ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื“ื™% ืคึผืึทืงืึทื˜ ืœืึธืก, ื“ื™ ืžืึทืกืข ืื•ื™ืฃ ื“ื™ ืงืคึผื• ืคึผืจืึทืงื˜ืึทืงืœื™ ื˜ื•ื˜ ื ื™ืฉื˜ ืคืึทืจื’ืจืขืกืขืจืŸ (ืึธื‘ืขืจ ืงืขืŸ ืคืึทืจืžื™ื ืขืจืŸ).

ืื•ื™ืฃ ืžืขืจ ืคึผืจืึธื“ื•ืงื˜ื™ื•ื• ื™ื™ึทื–ื ื•ื•ืึทืจื’, ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืžืขื’ืœืขืš ืฆื• ื“ื–ืฉืขื ืขืจื™ื™ื˜ ืื•ืŸ ืึทื ืึทืœื™ื™ื– ืกื˜ืจื™ืžื– ืคื•ืŸ ืžืขืจ ื•ื•ื™ 1 ื’ื‘ / s ืึธืŸ ืงื™ื™ืŸ ืคืจืื‘ืœืขืžืขืŸ.

ื˜ืขืกื˜ื™ื ื’ ืื•ื™ืฃ ืคืึทืงื˜ื™ืฉ ื ืขืฅ ืงืึทืจื“ืก

ื ืึธืš ื˜ืขืกื˜ื™ื ื’ ืื•ื™ืฃ ืึท ื•ื•ืขื˜ื” ืคึผืึธืจ, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื ืขืžืขืŸ ืฆื•ื•ื™ื™ ืžื—ื ื•ืช ืึธื“ืขืจ ืฆื•ื•ื™ื™ ืคึผืึธืจืฅ ืคื•ืŸ ืื™ื™ืŸ ื‘ืึทืœืขื‘ืึธืก, ืคืึทืจื‘ื™ื ื“ืŸ ื“ื™ ืคึผืึธืจืฅ ืฆื• ื™ืขื“ืขืจ ืื ื“ืขืจืขืจ, โ€‹โ€‹ืึธื ื”ื™ื™ื‘ ื“ื™ ื’ืขื ืขืจืึทื˜ืึธืจ ืื•ื™ืฃ ืื™ื™ืŸ, ืื•ืŸ ื“ื™ ืึทื ืึทืœื™ื–ืขืจ ืื•ื™ืฃ ื“ื™ ืจื’ืข. ืก'ื–ืขื ืขืŸ ื“ื ื ื™ืฉื˜ ื’ืขื•ื•ืขืŸ ืงื™ื™ืŸ ื—ื™ื“ื•ืฉื™ื, ืื‘ืขืจ ืœืžืขืฉื” ืื™ื– ื“ืืก ืืœืขืก ืืคื”ืขื ื’ื™ืง ืคื•ืŸ ื“ืขื ืื™ื™ื–ืŸ, ื•ื•ืืก ืฉื•ื•ืื›ืขืจ, ืืœืฅ ืื™ื ื˜ืขืจืขืกืื ื˜ืขืจ ื•ื•ืขื˜ ื“ื ื–ื™ื™ืŸ.

ื ื™ืฆืŸ ื“ื™ ื‘ืืงื•ืžืขืŸ ื“ืึทื˜ืŸ ื“ื•ืจืš ื“ื™ ืžืึธื ื™ื˜ืึธืจื™ื ื’ ืกื™ืกื˜ืขื (Zabbix)

tsp ื”ืื˜ ื ื™ืฉื˜ ืงื™ื™ืŸ ืžืึทืฉื™ืŸ ืœื™ื™ื ืขื•ื•ื“ื™ืง ืึทืคึผื™ ื•ื•ื™ SNMP ืึธื“ืขืจ ืขื ืœืขืš. CC ืึทืจื˜ื™ืงืœืขืŸ ืžื•ื–ืŸ ื–ื™ื™ืŸ ื’ืขื–ืืžืœื˜ ืคึฟืึทืจ ื‘ื™ื™ึท ืžื™ื ื“ืกื˜ืขืจ 1 ืกืขืงื•ื ื“ืข (ืžื™ื˜ ืึท ื”ื•ื™ืš ืคึผืจืึธืฆืขื ื˜ ืคื•ืŸ ืคึผืึทืงืึทื˜ ืึธื ื•ื•ืขืจ, ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื”ื•ื ื“ืขืจื˜ืขืจ / ื˜ื•ื™ื–ื ื˜ืขืจ / ื˜ืขื ืก ืคื•ืŸ ื˜ื•ื™ื–ื ื˜ืขืจ ืคึผืขืจ ืกืขืงื•ื ื“ืข, ื“ื™ืคึผืขื ื“ื™ื ื’ ืื•ื™ืฃ ื“ื™ ื‘ื™ื˜ืจืึทื˜ืข).

ืื–ื•ื™, ืื™ืŸ ืกื“ืจ ืฆื• ืจืึทื˜ืขื•ื•ืขืŸ ื‘ื™ื™ื“ืข ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืื•ืŸ ืฆื™ืขืŸ ื’ืจืึทืคืก ืคึฟืึทืจ CC ืขืจืจืึธืจืก ืื•ืŸ ื‘ื™ื˜ืจืึทื˜ืข ืื•ืŸ ืžืึทื›ืŸ ืขื˜ืœืขื›ืข ืึทืงืกืึทื“ืึทื ืฅ, ืขืก ืงืขืŸ ื–ื™ื™ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืึธืคึผืฆื™ืขืก:

  1. ืคึผืึทืจืก ืื•ืŸ ื’ืขืžื™ื™ื ื–ืึทื (ื“ื•ืจืš CC) ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ืฆืคึผ, ื“.ื”. ื’ืขืจ ืขืก ืฆื• ื“ืขืจ ื’ืขื•ื•ืืœื˜ ืคืึธืจืขื.
  2. ืขื ื“ื™ืงืŸ ืฆืคึผ ื–ื™ืš ืื•ืŸ / ืึธื“ืขืจ ืคึผืจืึทืกืขืกืขืจ ืคึผืœื•ื’ื™ื ืก ื‘ื™ื˜ืจืึทื˜ืข_ืžืึธื ื™ื˜ืึธืจ ืื•ืŸ ืงืึทื ื˜ื™ื ื™ื•ื™ื™ืฉืึทืŸ ืึทื–ื•ื™ ืึทื– ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ื– ื’ืขื’ืขื‘ืŸ ืื™ืŸ ืึท ืžืึทืฉื™ืŸ-ืœื™ื™ื ืขื•ื•ื“ื™ืง ืคืึธืจืขื ืคึผืึทืกื™ืง ืคึฟืึทืจ ื“ื™ ืžืึธื ื™ื˜ืึธืจื™ื ื’ ืกื™ืกื˜ืขื.
  3. ืฉืจื™ื™ื‘ ื“ื™ื™ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ื™ืฃ ืฉืคึผื™ืฅ ืคื•ืŸ ื“ื™ tsduck ื‘ื™ื‘ืœื™ืึธื˜ืขืง.

ื“ืึธืš, ืึธืคึผืฆื™ืข 1 ืื™ื– ื“ื™ ื™ื–ื™ืึทืกื˜ ืื™ืŸ ื˜ืขืจืžื™ื ืขืŸ ืคื•ืŸ ืžื™, ืกืคึผืขืฆื™ืขืœ ืงืึทื ืกื™ื“ืขืจื™ื ื’ ืึทื– tsduck ื–ื™ืš ืื™ื– ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ ืึท ื ื™ื“ืขืจื™ืง-ืžื“ืจื’ื” (ื“ื•ืจืš ืžืึธื“ืขืจืŸ ืกื˜ืึทื ื“ืึทืจื“ืก) ืฉืคึผืจืึทืš (C ++)

ื ืคึผืฉื•ื˜ ื‘ืึทืฉ ืคึผืึทืจืกืขืจ + ืึทื’ื’ืจืขื’ืึทื˜ืึธืจ ืคึผืจืึธื•ื˜ืึทื˜ื™ื™ืคึผ ื’ืขื•ื•ื™ื–ืŸ ืึทื– ืื•ื™ืฃ ืึท 10 ืžื‘ืคึผืก ื˜ื™ื™ึทืš ืื•ืŸ 50% ืคึผืึทืงืึทื˜ ืึธื ื•ื•ืขืจ (ืขืจื’ืกื˜ ืคืึทืœ), ื“ื™ ื‘ืึทืฉ ืคึผืจืึธืฆืขืก ืงืึทื ืกื•ืžื“ 3-4 ืžืืœ ืžืขืจ ืงืคึผื• ื•ื•ื™ ื“ื™ ืฆืคึผ ืคึผืจืึธืฆืขืก ื–ื™ืš. ื“ืขื ืกืฆืขื ืึทืจ ืื™ื– ืึทื ืึทืงืกืขืคึผื˜ืึทื‘ืึทืœ. ืึทืงื˜ื•ืึทืœืœื™ ืึท ืฉื˜ื™ืง ืคื•ืŸ ื“ืขื ืคึผืจืึธื•ื˜ืึทื˜ื™ื™ืคึผ ืื•ื ื˜ืŸ

ื ืึธืึธื“ืœืขืก ืื•ื™ืฃ ื“ื™ ืฉืคึผื™ืฅ

#!/usr/bin/env bash

missingPackets=0
ccErrorSeconds=0
regexMissPackets='^* (.+) - continuity:.*missing ([0-9]+) packets$'
missingPacketsTime=""

ip netns exec P tsp --realtime -t -I ip -b 8388608 "239.0.0.1:1234" -O drop -P bitrate_monitor -p 1 -t 1  -P continuity 2>&1 | 
while read i
do
    #line example:* 2019/12/28 23:41:14 - continuity: packet index: 6,078, PID: 0x0100, missing 5 packets
    #line example 2: * 2019/12/28 23:55:11 - bitrate_monitor: 2019/12/28 23:55:11, TS bitrate: 4,272,864 bits/s
    if [[ "$i" == *continuity:* ]] 
    then
        if [[ "$i" =~ $regexMissPackets ]]
        then
            missingPacketsTimeNew="${BASH_REMATCH[1]}" #timestamp (seconds)
            if [[ "$missingPacketsTime" != "$missingPacketsTimeNew" ]] #new second with CC error
            then
                ((ccErrorSeconds += 1))
            fi
            missingPacketsTime=$missingPacketsTimeNew
            packets=${BASH_REMATCH[2]} #TS missing packets
            ((missingPackets += packets))
        fi
    elif [[ "$i" == *bitrate_monitor:* ]]
    then
        : #...
    fi
done

ืื™ืŸ ืึทื“ื™ืฉืึทืŸ ืฆื• ื–ื™ื™ืŸ ืึทื ืึทืงืกืขืคึผื˜ืึทื‘ืึทืœ ืคึผืึทืžืขืœืขืš, ืขืก ื–ืขื ืขืŸ ืงื™ื™ืŸ ื ืึธืจืžืึทืœ ืคึฟืขื“ืขื ืื™ืŸ ื‘ืึทืฉ, ื‘ืึทืฉ ื“ื–ืฉืึธื‘ืก ื–ืขื ืขืŸ ื‘ืึทื–ื•ื ื“ืขืจ ืคึผืจืึทืกืขืกืึทื–, ืื•ืŸ ืื™ืš ื”ืึธื‘ืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ื“ื™ ื•ื•ืขืจื˜ ืคื•ืŸ missingPackets ืึทืžืึธืœ ืึท ืจื’ืข ืื•ื™ืฃ ื“ื™ ื–ื™ื™ึทื˜ ื•ื•ื™ืจืงื•ื ื’ (ื•ื•ืขืŸ ืื™ืš ื‘ืึทืงื•ืžืขืŸ ื‘ื™ื˜ืจืึทื˜ืข ืึทืจื˜ื™ืงืœืขืŸ ื•ื•ืึธืก ืงื•ืžืขืŸ ื™ืขื“ืขืจ ืจื’ืข). ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ื‘ืึทืฉ ืื™ื– ืœื™ื ืงืก ืึทืœื™ื™ืŸ ืื•ืŸ ืขืก ืื™ื– ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืึท ืจืึทืคึผืขืจ (ืคึผืึทืจืกืขืจ + ืึทื’ื’ืจืขื’ืึทื˜ืึธืจ) ืื™ืŸ ื’ืึธืœืึทื ื’. ื“ื™ ืงืคึผื• ืงืึทื ืกืึทืžืฉืึทืŸ ืคื•ืŸ ืขื ืœืขืš ื’ืึธืœืึทื ื’ ืงืึธื“ ืื™ื– 4-5 ืžืืœ ื•ื•ื™ื™ื ื™ืงืขืจ ื•ื•ื™ ื“ื™ ืฆืคึผ ืคึผืจืึธืฆืขืก ื–ื™ืš. ื“ื™ ื’ื™ื›ืงื™ื™ึทื˜ ืคื•ืŸ ื“ื™ ืจืึทืคึผืขืจ ืจืขื›ื˜ ืฆื• ื“ืขืจ ืคืึทืจื‘ื™ื™ึทื˜ ืคื•ืŸ ื‘ืึทืฉ ืžื™ื˜ ื’ืึธืœืึทื ื’ ืื™ื– ื’ืขื•ื•ืขืŸ ื•ื•ืขื’ืŸ 16 ืžืืœ ืื•ืŸ ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ื– ืคึผืึทืกื™ืง (ืงืคึผื• ืึธื•ื•ื•ืขืจื›ืขื“ ื“ื•ืจืš 25% ืื™ืŸ ื“ื™ ืขืจื’ืกื˜ ืคืึทืœ). ื“ื™ ื’ืึธืœืึทื ื’ ืžืงื•ืจ ื˜ืขืงืข ืื™ื– ืœื™ื’ืŸ ื“ืึธ.

ืœื•ื™ืคืŸ ืจืึทืคึผืขืจ

ืฆื• ืึธื ื”ื™ื™ื‘ืŸ ื“ืขื ืจืึทืคึผืขืจ, ื“ื™ ืกื™ืžืคึผืœืึทืกื˜ ื“ื™ื ืกื˜ ืžื•ืกื˜ืขืจ ืคึฟืึทืจ ืกื™ืกื˜ืขืž ืื™ื– ื’ืขืžืื›ื˜ (ื“ืึธ). ื“ื™ ืจืึทืคึผืขืจ ื–ื™ืš ืื™ื– ื’ืขืžื™ื™ื ื˜ ืฆื• ื–ื™ื™ืŸ ืงืึทืžืคึผื™ื™ืœื“ ืื™ืŸ ืึท ื‘ื™ื™ื ืขืจื™ ื˜ืขืงืข (ื’ื•ื˜ ื‘ื•ื™ืขืŸ tsduck-stat.go) ืœื™ื’ืŸ ืื™ืŸ /opt/tsduck-stat/. ืขืก ืื™ื– ืื ื’ืขื ื•ืžืขืŸ ืึทื– ืื™ืจ ื ื•ืฆืŸ ื’ืึธืœืึทื ื’ ืžื™ื˜ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ืžืึทื ืึทื˜ืึทื ื™ืง ื–ื™ื™ื’ืขืจ (>=1.9).

ืฆื• ืฉืึทืคึฟืŸ ืึท ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ื“ื™ ื“ื™ื ืกื˜, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืœื•ื™ืคืŸ ื“ื™ systemctl enable ื‘ืึทืคึฟืขืœ [ืื™ืžืขื™ืœ ื‘ืืฉื™ืฆื˜]:1234 ืื•ืŸ ืœื•ื™ืคืŸ ืžื™ื˜ systemctl ืึธื ื”ื™ื™ื‘ [ืื™ืžืขื™ืœ ื‘ืืฉื™ืฆื˜]: ืงืกื ื•ืžืงืก.

ืื ื˜ื“ืขืงื•ื ื’ ืคื•ืŸ Zabbix

ืื™ืŸ ืกื“ืจ ืคึฟืึทืจ zabbix ืฆื• ืงืขื ืขืŸ ืฆื• ืึทื ื˜ื“ืขืงืŸ ืคืœื™ืกื ื“ื™ืง ื‘ืึทื“ื™ื ื•ื ื’ืก, ืขืก ืื™ื– ื’ืขื˜ืืŸ ื’ืขื ืขืจืึทื˜ืึธืจ ืคื•ืŸ ื’ืจื•ืคึผืข ืจืฉื™ืžื” (discovery.sh), ืื™ืŸ ื“ืขื ืคึฟืึธืจืžืึทื˜ ืคืืจืœืื ื’ื˜ ืคึฟืึทืจ ื–ืึทื‘ื‘ื™ืงืก ืื ื˜ื“ืขืงื•ื ื’, ืขืก ืื™ื– ืื ื’ืขื ื•ืžืขืŸ ืึทื– ืขืก ืื™ื– ืœื™ื’ืŸ ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืึธืจื˜ - ืื™ืŸ /opt/tsduck-stat. ืฆื• ืœื•ื™ืคืŸ ื•ืคื“ืขืงื•ื ื’ ื“ื•ืจืš zabbix-agent, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืœื™ื™ื’ืŸ .conf ื˜ืขืงืข ืฆื• ื“ื™ zabbix-agent ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืฆื• ืœื™ื™ื’ืŸ ื“ืขื ื‘ืึทื ื™ืฆืขืจ ืคึผืึทืจืึทืžืขื˜ืขืจ.

ื–ืึทื‘ื‘ื™ืงืก ืžื•ืกื˜ืขืจ

ื‘ืืฉืืคืŸ ืžื•ืกื˜ืขืจ (tsduck_stat_template.xml) ื›ึผื•ืœืœ ื“ื™ ืึทื•ื˜ืึธื“ื™ืกืงืึทื•ื•ืขืจ ื”ืขืจืฉืŸ, ื ื•ืžืขืจ ืคึผืจืึธื•ื˜ืึทื˜ื™ื™ืคึผืก, ื’ืจืึทืคืก ืื•ืŸ ื˜ืจื™ื’ืขืจื–.

ืงื•ืจืฅ ื˜ืฉืขืงืœื™ืกื˜ (ื ื•, ื•ื•ืึธืก ืื•ื™ื‘ ืขืžืขืฆืขืจ ื“ื™ืกื™ื™ื“ื– ืฆื• ื ื•ืฆืŸ ืขืก)

  1. ืžืึทื›ืŸ ื–ื™ื›ืขืจ ืึทื– ืฆืคึผ ื˜ื•ื˜ ื ื™ืฉื˜ ืคืึทืœืŸ ืคึผืึทืงื™ืฅ ืื•ื ื˜ืขืจ "ื™ื“ืขืึทืœ" ื˜ื ืึธื™ื (ื’ืขื ืขืจืึทื˜ืึธืจ ืื•ืŸ ืึทื ืึทืœื™ื–ืขืจ ื–ืขื ืขืŸ ืงืึธื ื ืขืงื˜ืขื“ ื’ืœื™ื™ึทืš), ืื•ื™ื‘ ืขืก ื–ืขื ืขืŸ ื˜ืจืืคื ืก, ื–ืขืŸ ืคึผืึทืจืึทื’ืจืึทืฃ 2 ืึธื“ืขืจ ื“ื™ ื˜ืขืงืกื˜ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ื•ื•ืขื’ืŸ ื“ืขื ืขื ื™ืŸ.
  2. ืžืึทื›ืŸ ื˜ื•ื ื™ื ื’ ื“ื™ ืžืึทืงืกื™ืžื•ื ื›ืึธืœืขืœ ื‘ืึทืคืขืจ (net.core.rmem_max=8388608).
  3. ืงืึธืžืคึผื™ืœื™ืจืŸ tsduck-stat.go (ื’ื™ื™ืŸ ื‘ื•ื™ืขืŸ tsduck-stat.go).
  4. ืฉื˜ืขืœืŸ ื“ื™ ืกืขืจื•ื•ื™ืก ืžื•ืกื˜ืขืจ ืื™ืŸ /lib/systemd/system.
  5. ืึธื ื”ื™ื™ื‘ ืกืขืจื•ื•ื™ืกืขืก ืžื™ื˜ ืกื™ืกื˜ืขืžืงื˜ืœ, ื˜ืฉืขืง ืึทื– ืงืึธื•ื ื˜ืขืจืก ื”ืึธื‘ืŸ ืกื˜ืึทืจื˜ืขื“ ืฆื• ื“ืขืจืฉื™ื™ึทื ืขืŸ (grep "" /dev/shm/tsduck-stat/*). ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืกืขืจื•ื•ื™ืกืขืก ืœื•ื™ื˜ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืžื•ืœื˜ื™ืงืึทืกื˜ ืกื˜ืจื™ืžื–. ื“ืึธ ืื™ืจ ืงืขืŸ ื“ืึทืจืคึฟืŸ ืฆื• ืฉืึทืคึฟืŸ ืึท ืžืึทืจืฉืจื•ื˜ ืฆื• ื“ื™ ืžื•ืœื˜ื™ืงืึทืกื˜ ื’ืจื•ืคึผืข, ื˜ืึธืžืขืจ ื“ื™ืกื™ื™ื‘ืึทืœ rp_filter ืึธื“ืขืจ ืฉืึทืคึฟืŸ ืึท ืžืึทืจืฉืจื•ื˜ ืฆื• ื“ื™ ืžืงื•ืจ ื™ืคึผ.
  6. ืœื•ื™ืคืŸ discovery.sh, ืžืึทื›ืŸ ื–ื™ื›ืขืจ ืึทื– ืขืก ื“ื–ืฉืขื ืขืจื™ื™ืฅ json.
  7. ืœื™ื™ื’ zabbix agent config, ืจื™ืกื˜ืึทืจื˜ zabbix agent.
  8. ืฆื•ืคึฟืขืœื™ืงืขืจ ื“ืขื ืžื•ืกื˜ืขืจ ืฆื• ื–ืึทื‘ื‘ื™ืงืก, ืฆื•ืœื™ื™ื’ืŸ ืขืก ืฆื• ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ื•ื•ืึธืก ืื™ื– ืžืึธื ื™ื˜ืึธืจืขื“ ืื•ืŸ ื“ื™ ื–ืึทื‘ื‘ื™ืงืก-ืึทื’ืขื ื˜ ืื™ื– ืื™ื ืกื˜ืึทืœื™ืจืŸ, ื•ื•ืึทืจื˜ืŸ ื•ื•ืขื’ืŸ 5 ืžื™ื ื•ื˜, ื–ืขืŸ ืื•ื™ื‘ ืขืก ื–ืขื ืขืŸ ื ื™ื™ึท ื–ืื›ืŸ, ื’ืจืึทืคืก ืื•ืŸ ื˜ืจื™ื’ืขืจื–.

ื˜ืึทื›ืœืขืก

ื ื™ืฆืŸ TSDuck ืฆื• ืžืึธื ื™ื˜ืึธืจ IP (TS) ืกื˜ืจื™ืžื–

ืคึฟืึทืจ ื“ื™ ืึทืจื‘ืขื˜ ืคื•ืŸ ื“ื™ื˜ืขืงื˜ื™ื ื’ ืคึผืึทืงืึทื˜ ืึธื ื•ื•ืขืจ, ืขืก ืื™ื– ื›ึผืžืขื˜ ื’ืขื ื•ื’, ืื™ืŸ ืžื™ื ื“ืกื˜ืขืจ ืขืก ืื™ื– ื‘ืขืกืขืจ ื•ื•ื™ ืงื™ื™ืŸ ืžืึธื ื™ื˜ืึธืจื™ื ื’.

ื˜ืืงืข, CC "ืœืึธืกืกืขืก" ืงืขื ืขืŸ ืคึผืึทืกื™ืจืŸ ื•ื•ืขืŸ ืžืขืจื“ื–ืฉื™ื ื’ ื•ื•ื™ื“ืขื ืคืจืึทื’ืžืึทื ืฅ (ื•ื•ื™ ื•ื•ื™ื™ึทื˜ ื•ื•ื™ ืื™ืš ื•ื•ื™ืกืŸ, ื“ืึธืก ืื™ื– ื•ื•ื™ ื™ื ืกืขืจืฅ ื–ืขื ืขืŸ ื’ืขืžืื›ื˜ ืื™ืŸ ื”ื™ื’ืข ื˜ืขืœืขื•ื•ื™ื–ื™ืข ืกืขื ื˜ืขืจืก ืื™ืŸ ื“ื™ ืจื•ืกื™ืฉืข ืคืขื“ืขืจื™ื™ืฉืึทืŸ, ื“"ื” ืึธืŸ ืจื™ืงืึทืœืงื™ืึทืœื™ื™ื˜ื™ื ื’ ื“ื™ CC ื˜ืึธืžื‘ืึทื ืง), ื“ืึธืก ืžื•ื–ืŸ ื–ื™ื™ืŸ ื“ืขืจืžืื ื˜. ืคึผืจืึทืคึผืจื™ื™ืึทื˜ืขืจื™ ืกืึทืœื•ืฉืึทื ื– ื˜ื™ื™ืœื•ื•ื™ื™ื– ืกืขืจืงืึทืžื•ื•ืขื ื˜ ื“ืขื ืคึผืจืึธื‘ืœืขื ื“ื•ืจืš ื“ื™ื˜ืขืงื˜ื™ื ื’ SCTE-35 ืœืึทื‘ืขืœืก (ืื•ื™ื‘ ืฆื•ื’ืขื’ืขื‘ืŸ ื“ื•ืจืš ื“ื™ ื˜ื™ื™ึทืš ื’ืขื ืขืจืึทื˜ืึธืจ).

ืื™ืŸ ื˜ืขืจืžื™ื ืขืŸ ืคื•ืŸ ืžืึธื ื™ื˜ืึธืจื™ื ื’ ืคื•ืŸ ืึทืจื™ื‘ืขืจืคื™ืจืŸ ืงื•ื•ืึทืœื™ื˜ืขื˜, ืขืก ืื™ื– ืึท ืคืขืœืŸ ืคื•ืŸ ื“ื–ืฉื™ื˜ื˜ืขืจ ืžืึธื ื™ื˜ืึธืจื™ื ื’ (IAT). ื˜ืขืœืขื•ื•ื™ื–ื™ืข ื•ื™ืกืจื™ื›ื˜ (ื–ื™ื™ืŸ ืขืก ืžืึธื“ื•ืœืึทื˜ืึธืจืก ืึธื“ืขืจ ืกื•ืฃ ื“ืขื•ื•ื™ืกืขืก) ื”ืื˜ ืจืขืงื•ื•ื™ืจืขืžืขื ืฅ ืคึฟืึทืจ ื“ืขื ืคึผืึทืจืึทืžืขื˜ืขืจ ืื•ืŸ ืขืก ืื™ื– ื ื™ื˜ ืฉื˜ืขื ื“ื™ืง ืžืขื’ืœืขืš ืฆื• ื™ื ืคืœื™ื™ื˜ ื“ื™ ื“ื–ืฉื™ื˜ื‘ื•ืคืขืจ ืฆื• ื•ืžืขื ื“ื™ืงื™ื™ึทื˜. ืื•ืŸ ื“ื–ืฉื™ื˜ืขืจ ืงืขื ืขืŸ ืœืึธื–ื  ืฉื•ื•ื™ืžืขืŸ ื•ื•ืขืŸ ื•ื™ืกืจื™ื›ื˜ ืžื™ื˜ ื’ืจื•ื™ืก ื‘ืึทืคืขืจื– ืื™ื– ื’ืขื ื™ืฆื˜ ืื™ืŸ ื“ื•ืจื›ืคืึธืจ ืื•ืŸ QoS ืื™ื– ื ื™ืฉื˜ ืงืึทื ืคื™ื’ื™ืขืจื“ ืึธื“ืขืจ ื ื™ืฉื˜ ื’ืขื–ื•ื ื˜ ืงืึทื ืคื™ื’ื™ืขืจื“ ื’ืขื ื•ื’ ืฆื• ื™ื‘ืขืจืฉื™ืงืŸ ืึทื–ืึท ืคืึทืงื˜ื™ืฉ-ื˜ื™ื™ื ืคืึทืจืงืขืจ.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’