IP(TS) เชธเซเชŸเซเชฐเซ€เชฎเซเชธเชจเซ‡ เชฎเซ‹เชจเชฟเชŸเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ TSDuck เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹

เช†เชœเซ‡, IP(TS) เชธเซเชŸเซเชฐเซ€เชฎเชจเซเช‚ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเซˆเชฏเชพเชฐ (เชฎเชพเชฒเชฟเช•เซ€เชจเชพ) เช‰เช•เซ‡เชฒเซ‹ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ VB ะธ iQ, เชคเซ‡เชฎเชจเซ€ เชชเชพเชธเซ‡ เช•เชพเชฐเซเชฏเซ‹เชจเซ‹ เชเช•เชฆเชฎ เชธเชฎเซƒเชฆเซเชง เชธเชฎเซ‚เชน เช›เซ‡ เช…เชจเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชŸเซ€เชตเซ€ เชธเซ‡เชตเชพเช“ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชคเชพ เชฎเซ‹เชŸเชพ เช“เชชเชฐเซ‡เชŸเชฐเซ‹ เชชเชพเชธเซ‡ เช†เชตเชพ เช‰เช•เซ‡เชฒเซ‹ เชนเซ‹เชฏ เช›เซ‡. เช† เชฒเซ‡เช– เช“เชชเชจ เชธเซ‹เชฐเซเชธ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช‰เช•เซ‡เชฒเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡ TSDuck, CC(เช•เชจเซเชŸเชฟเชจเซเชฏเซเชŸเซ€ เช•เชพเช‰เชจเซเชŸเชฐ) เช•เชพเช‰เชจเซเชŸเชฐ เช…เชจเซ‡ เชฌเชฟเชŸเชฐเซ‡เชŸ เชฆเซเชตเชพเชฐเชพ IP(TS) เชธเซเชŸเซเชฐเซ€เชฎเชจเชพ เชจเซเชฏเซ‚เชจเชคเชฎ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชฎเชพเชŸเซ‡ เชฐเชšเชพเชฏเซ‡เชฒ เช›เซ‡. เชธเช‚เชญเชตเชฟเชค เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช เชฒเซ€เชเซเชก L2 เชšเซ‡เชจเชฒ (เชœเซ‡เชจเซเช‚ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช•เชฐเซ€ เชถเช•เชพเชคเซเช‚ เชจเชฅเซ€, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช•เชคเชพเชฐเซ‹เชฎเชพเช‚ เชจเซเช•เชธเชพเชจ เช•เชพเช‰เชจเซเชŸเชฐเซเชธ เชตเชพเช‚เชšเซ€เชจเซ‡) เชฆเซเชตเชพเชฐเชพ เชชเซ‡เช•เซ‡เชŸเซ‹เชจเชพ เชจเซเช•เชธเชพเชจ เช…เชฅเชตเชพ เชธเชฎเช—เซเชฐ เชชเซเชฐเชตเชพเชนเชจเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช›เซ‡.

TSDuck เชตเชฟเชถเซ‡ เช–เซ‚เชฌ เชœ เชŸเซ‚เช‚เช•เชฎเชพเช‚

TSDuck เชเช• เช“เชชเชจ เชธเซ‹เชฐเซเชธ (2-เช•เซเชฒเซ‹เช BSD เชฒเชพเชฏเชธเชจเซเชธ) เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เช›เซ‡ (เช•เชจเซเชธเซ‹เชฒ เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€เชเชจเซ‹ เชธเชฎเซ‚เชน เช…เชจเซ‡ เช•เชธเซเชŸเชฎ เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€เช เช…เชฅเชตเชพ เชชเซเชฒเช—เชˆเชจเซเชธ เชตเชฟเช•เชธเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€) TS เชธเซเชŸเซเชฐเซ€เชฎเซเชธเชฎเชพเช‚ เชนเซ‡เชฐเชซเซ‡เชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡. เช‡เชจเชชเซเชŸ เชคเชฐเซ€เช•เซ‡, เชคเซ‡ IP (เชฎเชฒเซเชŸเซ€เช•เชพเชธเซเชŸ/เชฏเซเชจเชฟเช•เชพเชธเซเชŸ), http, hls, dvb เชŸเซเชฏเซเชจเชฐเซเชธ, dektec dvb-asi เชกเชฟเชฎเซ‹เชกเซเชฏเซเชฒเซ‡เชŸเชฐ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡, เชคเซเชฏเชพเช‚ เช†เช‚เชคเชฐเชฟเช• TS-เชธเซเชŸเซเชฐเซ€เชฎ เชœเชจเชฐเซ‡เชŸเชฐ เช›เซ‡ เช…เชจเซ‡ เชซเชพเช‡เชฒเซ‹เชฎเชพเช‚เชฅเซ€ เชตเชพเช‚เชšเชจ เช›เซ‡. เช†เช‰เชŸเชชเซเชŸ เชซเชพเช‡เชฒ, IP (เชฎเชฒเซเชŸเซ€เช•เชพเชธเซเชŸ/เชฏเซเชจเชฟเช•เชพเชธเซเชŸ), hls, dektec dvb-asi เช…เชจเซ‡ HiDes เชฎเซ‹เชกเซเชฏเซเชฒเซ‡เชŸเชฐเซเชธ, เชชเซเชฒเซ‡เชฏเชฐเซเชธ (mplayer, vlc, xine) เช…เชจเซ‡ เชกเซเชฐเซ‹เชช เชชเชฐ เชฒเช–เซ€ เชถเช•เชพเชฏ เช›เซ‡. เช‡เชจเชชเซเชŸ เช…เชจเซ‡ เช†เช‰เชŸเชชเซเชŸ เชตเชšเซเชšเซ‡ เชตเชฟเชตเชฟเชง เชŸเซเชฐเชพเชซเชฟเช• เชชเซเชฐเซ‹เชธเซ‡เชธเชฐเซเชธเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชชเซ€เช†เชˆเชกเซ€ เชฐเซ€เชฎเซ‡เชชเชฟเช‚เช—, เชธเซเช•เซเชฐเซ…เชฎเซเชฌเชฒเชฟเช‚เช—/เชกเซ‡เชธเซเช•เซเชฐเซ‡เชฎเซเชฌเชฒเชฟเช‚เช—, เชธเซ€เชธเซ€ เช•เชพเช‰เชจเซเชŸเชฐ เชเชจเชพเชฒเชฟเชธเชฟเชธ, เชฌเชฟเชŸเชฐเซ‡เชŸ เช•เซ‡เชฒเซเช•เซเชฏเซเชฒเซ‡เชถเชจ เช…เชจเซ‡ เชŸเซ€เชเชธ เชธเซเชŸเซเชฐเซ€เชฎ เชฎเชพเชŸเซ‡ เช…เชจเซเชฏ เชฒเชพเช•เซเชทเชฃเชฟเช• เช•เชพเชฎเช—เซ€เชฐเซ€.

เช† เชฒเซ‡เช–เชฎเชพเช‚, IP เชธเซเชŸเซเชฐเซ€เชฎเซเชธ (เชฎเชฒเซเชŸเซ€เช•เชพเชธเซเชŸ) เชจเซ‹ เช‡เชจเชชเซเชŸ เชคเชฐเซ€เช•เซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เชชเซเชฐเซ‹เชธเซ‡เชธเชฐเซเชธ bitrate_monitor (เชจเชพเชฎ เชชเชฐเชฅเซ€ เชคเซ‡ เชธเซเชชเชทเซเชŸ เช›เซ‡ เช•เซ‡ เชคเซ‡ เชถเซเช‚ เช›เซ‡) เช…เชจเซ‡ เชธเชพเชคเชคเซเชฏ (CC เช•เชพเช‰เชจเซเชŸเชฐเซเชธเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชคเชฎเซ‡ TSDuck เชฆเซเชตเชพเชฐเชพ เชธเชฎเชฐเซเชฅเชฟเชค เช…เชจเซเชฏ เช‡เชจเชชเซเชŸ เชชเซเชฐเช•เชพเชฐ เชธเชพเชฅเซ‡ เชธเชฐเชณเชคเชพเชฅเซ€ IP เชฎเชฒเซเชŸเชฟเช•เชพเชธเซเชŸเชจเซ‡ เชฌเชฆเชฒเซ€ เชถเช•เซ‹ เช›เซ‹.

เช‰เชชเชฒเชฌเซเชง เช›เซ‡ เชธเชคเซเชคเชพเชตเชพเชฐ เชฌเชฟเชฒเซเชก/เชชเซ‡เช•เซ‡เชœ เชฎเซ‹เชŸเชพ เชญเชพเช—เชจเซ€ เชตเชฐเซเชคเชฎเชพเชจ เช“เชชเชฐเซ‡เชŸเชฟเช‚เช— เชธเชฟเชธเซเชŸเชฎเซ‹ เชฎเชพเชŸเซ‡ TSDuck. เชคเซ‡เช“ เชกเซ‡เชฌเชฟเชฏเชจ เชฎเชพเชŸเซ‡ เช‰เชชเชฒเชฌเซเชง เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เชคเซ‡เชฎเชจเซ‡ เชกเซ‡เชฌเชฟเชฏเชจ 8 เช…เชจเซ‡ เชกเซ‡เชฌเชฟเชฏเชจ 10 เชนเซ‡เช เชณ เช•เซ‹เชˆเชชเชฃ เชธเชฎเชธเซเชฏเชพ เชตเชฟเชจเชพ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เชตเซเชฏเชตเชธเซเชฅเชพเชชเชฟเชค เช›เซ€เช.

เช†เช—เชณ, เชธเช‚เชธเซเช•เชฐเชฃ TSDuck 3.19-1520 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡, Linux เชจเซ‹ เช‰เชชเชฏเซ‹เช— OS เชคเชฐเซ€เช•เซ‡ เชฅเชพเชฏ เช›เซ‡ (เชกเซ‡เชฌเชฟเชฏเชจ 10 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชธเซ‹เชฒเซเชฏเซเชถเชจ เชคเซˆเชฏเชพเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹, CentOS 7 เชจเซ‹ เชตเชพเชธเซเชคเชตเชฟเช• เช‰เชชเชฏเซ‹เช— เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹)

TSDuck เช…เชจเซ‡ OS เชจเซ€ เชคเซˆเชฏเชพเชฐเซ€

เชตเชพเชธเซเชคเชตเชฟเช• เชชเซเชฐเชตเชพเชนเชจเซเช‚ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชคเชพ เชชเชนเซ‡เชฒเชพ, เชคเชฎเชพเชฐเซ‡ เช–เชพเชคเชฐเซ€ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เช•เซ‡ TSDuck เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชจเซ‡เชŸเชตเชฐเซเช• เช•เชพเชฐเซเชก เช…เชฅเชตเชพ OS (เชธเซ‹เช•เซ‡เชŸ) เชธเซเชคเชฐ เชชเชฐ เช•เซ‹เชˆ เชŸเซ€เชชเชพเช‚ เชจเชฅเซ€. เชจเซ‡เชŸเชตเชฐเซเช• เชชเชฐ เช…เชฅเชตเชพ "เชธเชฐเซเชตเชฐเชจเซ€ เช…เช‚เชฆเชฐ" - เชŸเซ€เชชเชพเช‚ เช•เซเชฏเชพเช‚ เช†เชตเซเชฏเชพ เชคเซ‡ เชชเช›เซ€เชฅเซ€ เช…เชจเซเชฎเชพเชจ เชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช† เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เชคเชฎเซ‡ ethtool -S ethX เช•เชฎเชพเชจเซเชก เชตเชกเซ‡ เชจเซ‡เชŸเชตเชฐเซเช• เช•เชพเชฐเซเชก เชฒเซ‡เชตเชฒ เชชเชฐ เชกเซเชฐเซ‹เชชเซเชธ เชšเซ‡เช• เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชŸเซเชฏเซเชจเชฟเช‚เช— เช เชœ เชเชฅเชŸเซ‚เชฒ เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เชคเชฎเชพเชฐเซ‡ RX เชฌเชซเชฐ (-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" เชจเซ‹ เช…เชฐเซเชฅ เช›เซ‡ เช•เซ‡ เชคเชฎเชพเชฐเซ‡ เชฆเชฐ เชธเซ‡เช•เชจเซเชกเซ‡ เชฌเชฟเชŸเชฐเซ‡เชŸเชจเซ€ เช—เชฃเชคเชฐเซ€ เช•เชฐเชตเชพเชจเซ€ เช…เชจเซ‡ เชฆเชฐ เชธเซ‡เช•เชจเซเชกเซ‡ เชฌเชฟเชŸเชฐเซ‡เชŸ เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.
เช…เชฎเซ‡ 10Mbps เชจเซ€ เชเชกเชช เชธเชพเชฅเซ‡ เชŸเซเชฐเชพเชซเชฟเช• เชœเชจเชฐเซ‡เชŸเชฐ เชถเชฐเซ‚ เช•เชฐเซ€เช เช›เซ€เช:

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), เชเชŸเชฒเซ‡ เช•เซ‡. IP เชชเซ‡เช•เซ‡เชŸ เชฎเซ‹เช•เชฒเชคเชพ เชชเชนเซ‡เชฒเชพ เชนเช‚เชฎเซ‡เชถเชพ เช›เซ‡เชฒเซเชฒเชพ เชชเซเชฐเซ‹เชธเซ‡เชธเชฐเชจเชพ 7 TS เชชเซ‡เช•เซ‡เชŸเชจเซ€ เชฐเชพเชน เชœเซเช“.

เชตเชฟเชถเซเชฒเซ‡เชทเช• เช…เชชเซ‡เช•เซเชทเชฟเชค เชธเช‚เชฆเซ‡เชถเชพเช“เชจเซเช‚ เช†เช‰เชŸเชชเซเชŸ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ‡ เช›เซ‡:

* 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) เช…เชจเซ‡ เชœเชจเชฐเซ‡เชŸเชฐ เชฌเชฟเชŸเชฐเซ‡เชŸเชจเซ‡ 100Mbps เชธเซเชงเซ€ เชตเชงเชพเชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ‹. เชตเชฟเชถเซเชฒเซ‡เชทเช• CC เชญเซ‚เชฒเซ‹เชจเซ‹ เชธเชฎเซ‚เชน เช…เชจเซ‡ 75 เชจเซ‡ เชฌเชฆเชฒเซ‡ เชฒเช—เชญเช— 100 Mbps เชจเซ‹ เช…เชนเซ‡เชตเชพเชฒ เช†เชชเซ‡ เช›เซ‡. เช…เชฎเซ‡ เช เชœเชพเชฃเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช เช•เซ‡ เชฆเซ‹เชท เช•เซ‹เชจเซ‹ เช›เซ‡ - เชœเชจเชฐเซ‡เชŸเชฐ เชชเชพเชธเซ‡ เชธเชฎเชฏ เชจเชฅเซ€ เช…เชฅเชตเชพ เชธเชฎเชธเซเชฏเชพ เชคเซ‡เชฎเชพเช‚ เชจเชฅเซ€, เช† เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เชจเชฟเชถเซเชšเชฟเชค เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ€เช เช›เซ€เช. เชชเซ‡เช•เซ‡เชŸเซ‹ (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). เชคเซ‹ เชšเชพเชฒเซ‹ เชœเชพเชฃเซ€เช เช•เซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเช• เชธเชพเชฅเซ‡ เชถเซเช‚ เชฅเชˆ เชฐเชนเซเชฏเซเช‚ เช›เซ‡, เช† เชฎเชพเชŸเซ‡ เช†เชชเชฃเซ‡ veth1 เชชเชฐเชจเชพ RX เช•เชพเช‰เชจเซเชŸเชฐ เชธเชพเชฅเซ‡ เชคเชชเชพเชธ เช•เชฐเซ€เช เช›เซ€เช, เชคเซ‡ veth0 เชชเชฐเชจเชพ TX เช•เชพเช‰เชจเซเชŸเชฐ เชธเชพเชฅเซ‡ เชธเช–เชค เชฐเซ€เชคเซ‡ เชฌเชฐเชพเชฌเชฐ เช›เซ‡, เชชเช›เซ€ เช†เชชเชฃเซ‡ เชธเซ‹เช•เซ‡เชŸ เชธเซเชคเชฐ เชชเชฐ เชถเซเช‚ เชฅเชพเชฏ เช›เซ‡ เชคเซ‡ เชœเซ‹เชˆเช:

# 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% เช–เซ‹เชตเชพเชฏเซ‡เชฒเชพ เชฌเชฟเชŸเชฐเซ‡เชŸ udp เชธเซ‹เช•เซ‡เชŸเชฎเชพเช‚ เชกเซเชฐเซ‹เชชเซเชธ เช›เซ‡. UDP เชธเซ‹เช•เซ‡เชŸเชฎเชพเช‚ เชŸเซ€เชชเชพเช‚ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชฌเชซเชฐเชจเซ€ เช…เช›เชคเชจเซ‡ เช•เชพเชฐเชฃเซ‡ เชฅเชพเชฏ เช›เซ‡, เชกเชฟเชซเซ‹เชฒเซเชŸ เชธเซ‹เช•เซ‡เชŸ เชฌเชซเชฐ เช•เชฆ เช…เชจเซ‡ เชฎเชนเชคเซเชคเชฎ เชธเซ‹เช•เซ‡เชŸ เชฌเชซเชฐ เช•เชฆ เชœเซเช“:

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

เช†เชฎ, เชœเซ‹ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เชธเซเชชเชทเซเชŸเชชเชฃเซ‡ เชฌเชซเชฐ เชฎเชพเชชเชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเชคเซ€ เชจเชฅเซ€, เชคเซ‹ 208 KB เชจเชพ เชฌเชซเชฐ เชธเชพเชฅเซ‡ เชธเซ‹เช•เซ‡เชŸเซเชธ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชœเซ‹ เชคเซ‡เช“ เชตเชงเซ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‡ เช›เซ‡, เชคเซ‹ เชชเชฃ เชคเซ‡เช“ เชœเซ‡ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€ เชคเซ‡ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชถเซ‡ เชจเชนเซ€เช‚. เชคเชฎเซ‡ IP เช‡เชจเชชเซเชŸ (-buffer-size) เชฎเชพเชŸเซ‡ tsp เชฎเชพเช‚ เชฌเชซเชฐเชจเซเช‚ เช•เชฆ เชธเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เชกเชฟเชซเซ‰เชฒเซเชŸ เชธเซ‰เช•เซ‡เชŸ เช•เชฆเชจเซ‡ เชธเซเชชเชฐเซเชถ เช•เชฐเซ€เชถเซเช‚ เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ เชฎเชพเชคเซเชฐ เชฎเชนเชคเซเชคเชฎ เชธเซ‰เช•เซ‡เชŸ เชฌเชซเชฐเชจเซเช‚ เช•เชฆ เชธเซ‡เชŸ เช•เชฐเซ€เชถเซเช‚ เช…เชจเซ‡ 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

เชธเซ‹เช•เซ‡เชŸ เชฌเชซเชฐเชจเชพ เช† เชŸเซเชฏเซเชจเชฟเช‚เช— เชธเชพเชฅเซ‡, เชนเชตเซ‡ เช…เชนเซ‡เชตเชพเชฒ เชฅเชฏเซ‡เชฒ เชฌเชฟเชŸเชฐเซ‡เชŸ เชฒเช—เชญเช— 100Mbps เช›เซ‡, เชคเซเชฏเชพเช‚ เช•เซ‹เชˆ CC เชญเซ‚เชฒเซ‹ เชจเชฅเซ€.

tsp เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเชพ เชธเซ€เชชเซ€เชฏเซ เชตเชชเชฐเชพเชถ เชฎเซเชœเชฌ. เชเช• เช•เซ‹เชฐ i5-4260U CPU @ 1.40GHz, 10Mbps เชซเซเชฒเซ‹ เชเชจเชพเชฒเชฟเชธเชฟเชธ เชฎเชพเชŸเซ‡ 3-4% CPU, 100Mbps - 25%, 200Mbps - 46%เชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡. % เชชเซ‡เช•เซ‡เชŸ เชฒเซ‹เชธ เชธเซเชฏเซ‹เชœเชฟเชค เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, CPU เชชเชฐเชจเซ‹ เชญเชพเชฐ เชตเซเชฏเชตเชนเชพเชฐเซ€เช• เชฐเซ€เชคเซ‡ เชตเชงเชคเซ‹ เชจเชฅเซ€ (เชชเชฐเช‚เชคเซ เช˜เชŸเซ€ เชถเช•เซ‡ เช›เซ‡).

เชตเชงเซ เช‰เชคเซเชชเชพเชฆเช• เชนเชพเชฐเซเชกเชตเซ‡เชฐ เชชเชฐ, เช•เซ‹เชˆเชชเชฃ เชธเชฎเชธเซเชฏเชพ เชตเชฟเชจเชพ 1Gb/s เชฅเซ€ เชตเชงเซเชจเซ€ เชธเซเชŸเซเชฐเซ€เชฎเซเชธ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเซ€ เช…เชจเซ‡ เชคเซ‡เชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเชตเซเช‚ เชถเช•เซเชฏ เชนเชคเซเช‚.

เชตเชพเชธเซเชคเชตเชฟเช• เชจเซ‡เชŸเชตเชฐเซเช• เช•เชพเชฐเซเชกเซเชธ เชชเชฐ เชชเชฐเซ€เช•เซเชทเชฃ

เชตเซ‡เชฅ เชœเซ‹เชกเซ€ เชชเชฐ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เชคเชฎเชพเชฐเซ‡ เชเช• เชฏเชœเชฎเชพเชจเชจเชพ เชฌเซ‡ เชนเซ‹เชธเซเชŸ เช…เชฅเชตเชพ เชฌเซ‡ เชชเซ‹เชฐเซเชŸ เชฒเซ‡เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชฌเช‚เชฆเชฐเซ‹เชจเซ‡ เชเช•เชฌเซ€เชœเชพ เชธเชพเชฅเซ‡ เชœเซ‹เชกเซ‹, เชเช• เชชเชฐ เชœเชจเชฐเซ‡เชŸเชฐ เชถเชฐเซ‚ เช•เชฐเซ‹ เช…เชจเซ‡ เชฌเซ€เชœเชพ เชชเชฐ เชตเชฟเชถเซเชฒเซ‡เชทเช•. เช…เชนเซ€เช‚ เช•เซ‹เชˆ เช†เชถเซเชšเชฐเซเชฏ เชจเชนเซ‹เชคเชพ, เชชเชฐเช‚เชคเซ เชตเชพเชธเซเชคเชตเชฎเชพเช‚ เชคเซ‡ เชฌเชงเชพ เชฒเซ‹เช–เช‚เชก เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ‡ เช›เซ‡, เชจเชฌเชณเชพ, เชตเชงเซ เชฐเชธเชชเซเชฐเชฆ เชคเซ‡ เช…เชนเซ€เช‚ เชนเชถเซ‡.

เชฎเซ‹เชจเชฟเชŸเชฐเชฟเช‚เช— เชธเชฟเชธเซเชŸเชฎ (เชเซ‡เชฌเชฟเช•เซเชธ) เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชพเชชเซเชค เชกเซ‡เชŸเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹

tsp เชชเชพเชธเซ‡ SNMP เช…เชฅเชตเชพ เชคเซ‡เชจเชพ เชœเซ‡เชตเซเช‚ เช•เซ‹เชˆ เชฎเชถเซ€เชจ เชตเชพเช‚เชšเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเซเช‚ API เชจเชฅเซ€. CC เชธเช‚เชฆเซ‡เชถเชพเช“ เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ 1 เชธเซ‡เช•เชจเซเชก เชฎเชพเชŸเซ‡ เชเช•เซ€เช•เซƒเชค เชนเซ‹เชตเชพ เชœเซ‹เชˆเช (เชชเซ…เช•เซ‡เชŸ เชจเซเช•เชถเชพเชจเชจเซ€ เชŠเช‚เชšเซ€ เชŸเช•เชพเชตเชพเชฐเซ€ เชธเชพเชฅเซ‡, เชฌเชฟเชŸเชฐเซ‡เชŸเชจเชพ เช†เชงเชพเชฐเซ‡ เชธเซ‡เช‚เช•เชกเซ‹/เชนเชœเชพเชฐเซ‹/เชฆเชธ เชนเชœเชพเชฐ เชชเซเชฐเชคเชฟ เชธเซ‡เช•เชจเซเชก เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡).

เช†เชฎ, เชฌเช‚เชจเซ‡ เชฎเชพเชนเชฟเชคเซ€ เชธเชพเชšเชตเชตเชพ เช…เชจเซ‡ CC เชญเซ‚เชฒเซ‹ เช…เชจเซ‡ เชฌเชฟเชŸเชฐเซ‡เชŸ เชฎเชพเชŸเซ‡ เช—เซเชฐเชพเชซ เชฆเซ‹เชฐเชตเชพ เช…เชจเซ‡ เช…เชฎเซเช• เชชเซเชฐเช•เชพเชฐเชจเชพ เช…เช•เชธเซเชฎเชพเชคเซ‹ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชจเซ€เชšเซ‡เชจเชพ เชตเชฟเช•เชฒเซเชชเซ‹ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡:

  1. tsp เชจเชพ เช†เช‰เชŸเชชเซเชŸเชจเซ‡ เชชเชพเชฐเซเชธ เช…เชจเซ‡ เชเช•เช‚เชฆเชฐ (CC เชฆเซเชตเชพเชฐเชพ) เช•เชฐเซ‹, เชเชŸเชฒเซ‡ เช•เซ‡. เชคเซ‡เชจเซ‡ เช‡เชšเซเช›เชฟเชค เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ‹.
  2. tsp เชชเซ‹เชคเซ‡ เช…เชจเซ‡/เช…เชฅเชตเชพ เชชเซเชฐเซ‹เชธเซ‡เชธเชฐ เชชเซเชฒเช—เชฟเชจเซเชธ bitrate_monitor เช…เชจเซ‡ เชธเชพเชคเชคเซเชฏ เชธเชฎเชพเชชเซเชค เช•เชฐเซ‹ เชœเซ‡เชฅเซ€ เชชเชฐเชฟเชฃเชพเชฎ เชฎเซ‹เชจเชฟเชŸเชฐเชฟเช‚เช— เชธเชฟเชธเซเชŸเชฎ เชฎเชพเชŸเซ‡ เชฏเซ‹เช—เซเชฏ เชฎเชถเซ€เชจ-เชตเชพเช‚เชšเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเชพ เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡.
  3. เชคเชฎเชพเชฐเซ€ เช…เชฐเชœเซ€ tsduck เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเซ€ เชŸเซ‹เชš เชชเชฐ เชฒเช–เซ‹.

เชฆเซ‡เช–เซ€เชคเซ€ เชฐเซ€เชคเซ‡, เชตเชฟเช•เชฒเซเชช 1 เช เชชเซเชฐเชฏเชพเชธเชจเซ€ เชฆเซเชฐเชทเซเชŸเชฟเช เชธเซŒเชฅเซ€ เชธเชนเซ‡เชฒเซ‹ เช›เซ‡, เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชคเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡เชตเซเช‚ เช•เซ‡ tsduck เชชเซ‹เชคเซ‡ เชจเชฟเชฎเซเชจ-เชธเซเชคเชฐเชจเซ€ (เช†เชงเซเชจเชฟเช• เชงเซ‹เชฐเชฃเซ‹ เชฆเซเชตเชพเชฐเชพ) เชญเชพเชทเชพ (C ++) เชฎเชพเช‚ เชฒเช–เชพเชฏเซ‡เชฒ เช›เซ‡.

เชเช• เชธเชฐเชณ เชฌเซ‡เชถ เชชเชพเชฐเซเชธเชฐ+เชเช—เซเชฐเซ€เช—เซ‡เชŸเชฐ เชชเซเชฐเซ‹เชŸเซ‹เชŸเชพเช‡เชช เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡ เช•เซ‡ 10Mbps เชธเซเชŸเซเชฐเซ€เชฎ เช…เชจเซ‡ 50% เชชเซ‡เช•เซ‡เชŸ เชจเซเช•เชถเชพเชจ (เชธเซŒเชฅเซ€ เช–เชฐเชพเชฌ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚), bash เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚ tsp เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชคเชพเช‚ 3-4 เช—เชฃเซ‹ เชตเชงเซ CPU เชตเชชเชฐเชพเชฏ เช›เซ‡. เช† เชฆเซƒเชถเซเชฏ เช…เชธเซเชตเซ€เช•เชพเชฐเซเชฏ เช›เซ‡. เช–เชฐเซ‡เช–เชฐ เชจเซ€เชšเซ‡ เช† เชชเซเชฐเซ‹เชŸเซ‹เชŸเชพเช‡เชชเชจเซ‹ เชเช• เชญเชพเช—

เชŸเซ‹เชš เชชเชฐ เชจเซ‚เชกเชฒเซเชธ

#!/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 เชจเซเช‚ เชฎเซ‚เชฒเซเชฏ เชฒเช–เชตเซเช‚ เชชเชกเซเชฏเซเช‚ (เชœเซเชฏเชพเชฐเซ‡ เชฆเชฐ เชธเซ‡เช•เชจเซเชกเซ‡ เช†เชตเชคเชพ เชฌเชฟเชŸเชฐเซ‡เชŸ เชธเช‚เชฆเซ‡เชถเชพเช“ เชชเซเชฐเชพเชชเซเชค เชฅเชพเชฏ เช›เซ‡). เชชเชฐเชฟเชฃเชพเชฎเซ‡, เชฌเชพเชถ เชเช•เชฒเซ‹ เชฐเชนเซ€ เช—เชฏเซ‹ เช…เชจเซ‡ เช—เซ‹เชฒเชพเช‚เช—เชฎเชพเช‚ เชฐเซ‡เชชเชฐ (เชชเชพเชฐเซเชธเชฐ + เชเช—เซเชฐเซ€เช—เซ‡เชŸเชฐ) เชฒเช–เชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚. เชธเชฎเชพเชจ เช—เซ‹เชฒเชพเช‚เช— เช•เซ‹เชกเชจเซ‹ CPU เชตเชชเชฐเชพเชถ tsp เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชคเชพเช‚ 4-5 เช—เชฃเซ‹ เช“เช›เซ‹ เช›เซ‡. เช—เซ‹เชฒเชพเช‚เช— เชธเชพเชฅเซ‡ เชฌเซ‡เชถเชจเซ‡ เชฌเชฆเชฒเชตเชพเชจเซ‡ เช•เชพเชฐเชฃเซ‡ เชฐเซ‡เชชเชฐเชจเซ€ เชเชกเชช เชฒเช—เชญเช— 16 เช—เชฃเซ€ เชฅเชˆ เช…เชจเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชชเชฐเชฟเชฃเชพเชฎ เชธเซเชตเซ€เช•เชพเชฐเซเชฏ เช›เซ‡ (เชธเซŒเชฅเซ€ เช–เชฐเชพเชฌ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ CPU เช“เชตเชฐเชนเซ‡เชก 25% เชฆเซเชตเชพเชฐเชพ). เช—เซ‹เชฒเชพเช‚เช— เชธเซเชคเซเชฐเซ‹เชค เชซเชพเช‡เชฒ เชธเซเชฅเชฟเชค เช›เซ‡ เช…เชนเซ€เช‚.

เชฐเซ‡เชชเชฐ เชšเชฒเชพเชตเซ‹

เชฐเซ‡เชชเชฐ เชถเชฐเซ‚ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, systemd เชฎเชพเชŸเซ‡ เชธเซŒเชฅเซ€ เชธเชฐเชณ เชธเซ‡เชตเชพ เชจเชฎเซ‚เชจเซ‹ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹ (เช…เชนเซ€เช‚). เชฐเซ‡เชชเชฐ เชชเซ‹เชคเซ‡ เชœ /opt/tsduck-stat/ เชฎเชพเช‚ เชธเซเชฅเชฟเชค เชฆเซเชตเชฟเชธเช‚เช—เซ€ เชซเชพเช‡เชฒ (go build tsduck-stat.go) เชฎเชพเช‚ เช•เชฎเซเชชเชพเช‡เชฒ เชฅเชฏเซ‡เชฒ เชนเซ‹เชตเชพเชจเซเช‚ เชฎเชพเชจเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชเชตเซเช‚ เชฎเชพเชจเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช•เซ‡ เชคเชฎเซ‡ เชฎเซ‹เชจเซ‹เชŸเซ‹เชจเชฟเช• เช˜เชกเชฟเชฏเชพเชณ (>=1.9) เชฎเชพเชŸเซ‡ เชธเชชเซ‹เชฐเซเชŸ เชธเชพเชฅเซ‡ เช—เซ‹เชฒเชพเช‚เช—เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ‹.

เชธเซ‡เชตเชพเชจเซ‹ เชฆเชพเช–เชฒเซ‹ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ systemctl enable เช†เชฆเซ‡เชถ เชšเชฒเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ [เช‡เชฎเซ‡เช‡เชฒ เชธเซเชฐเช•เซเชทเชฟเชค]:1234 เชชเช›เซ€ systemctl start เชธเชพเชฅเซ‡ เชšเชฒเชพเชตเซ‹ [เช‡เชฎเซ‡เช‡เชฒ เชธเซเชฐเช•เซเชทเชฟเชค]: 1234

Zabbix เชฎเชพเช‚เชฅเซ€ เชถเซ‹เชง

zabbix เชฎเชพเชŸเซ‡ เชšเชพเชฒเซ€ เชฐเชนเซ‡เชฒ เชธเซ‡เชตเชพเช“ เชถเซ‹เชงเชตเชพเชฎเชพเช‚ เชธเช•เซเชทเชฎ เชฅเชตเชพ เชฎเชพเชŸเซ‡, เชคเซ‡ เชฅเชˆ เช—เชฏเซเช‚ เช›เซ‡ เชœเซ‚เชฅ เชธเซ‚เชšเชฟ เชœเชจเชฐเซ‡เชŸเชฐ (discovery.sh), Zabbix เชถเซ‹เชง เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚, เชเชตเซเช‚ เชฎเชพเชจเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช•เซ‡ เชคเซ‡ เชคเซ‡ เชœ เชœเช—เซเชฏเชพเช เชธเซเชฅเชฟเชค เช›เซ‡ - /opt/tsduck-stat เชฎเชพเช‚. zabbix-เชเชœเชจเซเชŸ เชฆเซเชตเชพเชฐเชพ เชถเซ‹เชง เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เช‰เชฎเซ‡เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ .conf เชซเชพเช‡เชฒ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชชเชฐเชฟเชฎเชพเชฃ เช‰เชฎเซ‡เชฐเชตเชพ เชฎเชพเชŸเซ‡ zabbix-เชเชœเชจเซเชŸ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชจเชฟเชฐเซเชฆเซ‡เชถเชฟเช•เชพเชฎเชพเช‚.

Zabbix เชจเชฎเซ‚เชจเซ‹

เชจเชฎเซ‚เชจเซ‹ เชฌเชจเชพเชตเซเชฏเซ‹ (tsduck_stat_template.xml) เช‘เชŸเซ‹เชกเชฟเชธเซเช•เชตเชฐ เชจเชฟเชฏเชฎ, เช†เช‡เชŸเชฎ เชชเซเชฐเซ‹เชŸเซ‹เชŸเชพเช‡เชช, เช—เซเชฐเชพเชซ เช…เชจเซ‡ เชŸเซเชฐเชฟเช—เชฐเซเชธ เชงเชฐเชพเชตเซ‡ เช›เซ‡.

เชธเช‚เช•เซเชทเชฟเชชเซเชค เชšเซ‡เช•เชฒเชฟเชธเซเชŸ (เชธเชพเชฐเซเช‚, เชœเซ‹ เช•เซ‹เชˆ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซ‡ เชคเซ‹ เชถเซเช‚)

  1. เช–เชพเชคเชฐเซ€ เช•เชฐเซ‹ เช•เซ‡ tsp "เช†เชฆเชฐเซเชถ" เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“เชฎเชพเช‚ เชชเซ‡เช•เซ‡เชŸเซ‹ เช›เซ‹เชกเชคเซเช‚ เชจเชฅเซ€ (เชœเชจเชฐเซ‡เชŸเชฐ เช…เชจเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเช• เชธเซ€เชงเชพ เชœ เชœเซ‹เชกเชพเชฏเซ‡เชฒเชพ เช›เซ‡), เชœเซ‹ เชคเซเชฏเชพเช‚ เชŸเซ€เชชเชพเช‚ เชนเซ‹เชฏ, เชคเซ‹ เชซเช•เชฐเซ‹ 2 เช…เชฅเชตเชพ เช† เชฌเชพเชฌเชคเซ‡ เชฒเซ‡เช–เชจเซ‹ เชŸเซ‡เช•เซเชธเซเชŸ เชœเซเช“.
  2. เชฎเชนเชคเซเชคเชฎ เชธเซ‹เช•เซ‡เชŸ เชฌเชซเชฐ เชŸเซเชฏเซเชจเชฟเช‚เช— เช•เชฐเซ‹ (net.core.rmem_max=8388608).
  3. tsduck-stat.go เช•เชฎเซเชชเชพเช‡เชฒ เช•เชฐเซ‹ (เช—เซ‹ เชฌเชฟเชฒเซเชก tsduck-stat.go).
  4. เชธเซ‡เชตเชพ เชจเชฎเซ‚เชจเชพเชจเซ‡ /lib/systemd/system เชฎเชพเช‚ เชฎเซ‚เช•เซ‹.
  5. systemctl เชธเชพเชฅเซ‡ เชธเซ‡เชตเชพเช“ เชถเชฐเซ‚ เช•เชฐเซ‹, เชคเชชเชพเชธเซ‹ เช•เซ‡ เช•เชพเช‰เชจเซเชŸเชฐเซเชธ เชฆเซ‡เช–เชพเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เชฅเชฏเซเช‚ เช›เซ‡ (grep "" /dev/shm/tsduck-stat/*). เชฎเชฒเซเชŸเชฟเช•เชพเชธเซเชŸ เชธเซเชŸเซเชฐเซ€เชฎเซเชธเชจเซ€ เชธเช‚เช–เซเชฏเชพ เชฆเซเชตเชพเชฐเชพ เชธเซ‡เชตเชพเช“เชจเซ€ เชธเช‚เช–เซเชฏเชพ. เช…เชนเซ€เช‚ เชคเชฎเชพเชฐเซ‡ เชฎเชฒเซเชŸเซ€เช•เชพเชธเซเชŸ เชœเซ‚เชฅ เชฎเชพเชŸเซ‡ เชฎเชพเชฐเซเช— เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเซ€ เชถเช•เซ‡ เช›เซ‡, เช•เชฆเชพเชš rp_filter เชจเซ‡ เช…เช•เซเชทเชฎ เช•เชฐเซ‹ เช…เชฅเชตเชพ เชธเซเชคเซเชฐเซ‹เชค ip เชฎเชพเชŸเซ‡ เชฎเชพเชฐเซเช— เชฌเชจเชพเชตเซ‹.
  6. Discovery.sh เชšเชฒเชพเชตเซ‹, เช–เชพเชคเชฐเซ€ เช•เชฐเซ‹ เช•เซ‡ เชคเซ‡ json เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡ เช›เซ‡.
  7. zabbix เชเชœเชจเซเชŸ เชฐเซ‚เชชเชฐเซ‡เช–เชพ เช‰เชฎเซ‡เชฐเซ‹, zabbix เชเชœเชจเซเชŸ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ‹.
  8. zabbix เชชเชฐ เชŸเซ‡เชฎเซเชชเชฒเซ‡เชŸ เช…เชชเชฒเซ‹เชก เช•เชฐเซ‹, เชคเซ‡เชจเซ‡ เชฎเซ‹เชจเชฟเชŸเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชฐเชนเซ‡เชฒเชพ เชนเซ‹เชธเซเชŸ เชชเชฐ เชฒเชพเช—เซ เช•เชฐเซ‹ เช…เชจเซ‡ zabbix-เชเชœเชจเซเชŸ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡เชฒเซเช‚ เช›เซ‡, เชฒเช—เชญเช— 5 เชฎเชฟเชจเชฟเชŸ เชฐเชพเชน เชœเซเช“, เชœเซเช“ เช•เซ‡ เชคเซเชฏเชพเช‚ เชจเชตเซ€ เชตเชธเซเชคเซเช“, เช—เซเชฐเชพเชซ เช…เชจเซ‡ เชŸเซเชฐเชฟเช—เชฐเซเชธ เช›เซ‡ เช•เซ‡ เชจเชนเซ€เช‚.

เชชเชฐเชฟเชฃเชพเชฎ

IP(TS) เชธเซเชŸเซเชฐเซ€เชฎเซเชธเชจเซ‡ เชฎเซ‹เชจเชฟเชŸเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ TSDuck เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹

เชชเซ‡เช•เซ‡เชŸ เชจเซเช•เชถเชพเชจ เชถเซ‹เชงเชตเชพเชจเชพ เช•เชพเชฐเซเชฏ เชฎเชพเชŸเซ‡, เชคเซ‡ เชฒเช—เชญเช— เชชเซ‚เชฐเชคเซเช‚ เช›เซ‡, เช“เช›เชพเชฎเชพเช‚ เช“เช›เซเช‚ เชคเซ‡ เช•เซ‹เชˆ เชฆเซ‡เช–เชฐเซ‡เช– เช•เชฐเชคเชพเช‚ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡.

เช–เชฐเซ‡เช–เชฐ, CC "เชจเซเช•เชธเชพเชจ" เชœเซเชฏเชพเชฐเซ‡ เชตเชฟเชกเชฟเช“ เชŸเซเช•เชกเชพเช“เชจเซ‡ เชฎเชฐเซเชœ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡ (เชœเซเชฏเชพเช‚ เชธเซเชงเซ€ เชนเซเช‚ เชœเชพเชฃเซเช‚ เช›เซเช‚, เช† เชฐเซ€เชคเซ‡ เชฐเชถเชฟเชฏเชจ เชซเซ‡เชกเชฐเซ‡เชถเชจเชฎเชพเช‚ เชธเซเชฅเชพเชจเชฟเช• เชŸเซ€เชตเซ€ เช•เซ‡เชจเซเชฆเซเชฐเซ‹ เชชเชฐ เชฆเชพเช–เชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡ CC เช•เชพเช‰เชจเซเชŸเชฐเชจเซ€ เชชเซเชจ: เช—เชฃเชคเชฐเซ€ เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ), เช† เชฏเชพเชฆ เชฐเชพเช–เชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡. เชฎเชพเชฒเชฟเช•เซ€เชจเชพ เช‰เช•เซ‡เชฒเซ‹ SCTE-35 เชฒเซ‡เชฌเชฒเซเชธ (เชœเซ‹ เชธเซเชŸเซเชฐเซ€เชฎ เชœเชจเชฐเซ‡เชŸเชฐ เชฆเซเชตเชพเชฐเชพ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซ‹) เชถเซ‹เชงเซ€เชจเซ‡ เช† เชธเชฎเชธเซเชฏเชพเชจเซ‡ เช†เช‚เชถเชฟเช• เชฐเซ€เชคเซ‡ เช…เชŸเช•เชพเชตเซ‡ เช›เซ‡.

เชŸเซเชฐเชพเชจเซเชธเชชเซ‹เชฐเซเชŸ เช•เซเชตเซ‹เชฒเชฟเชŸเซ€ เชฎเซ‹เชจเชฟเชŸเชฐเชฟเช‚เช—เชจเชพ เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚, เชœเชฟเชŸเชฐ เชฎเซ‹เชจเชฟเชŸเชฐเชฟเช‚เช— (IAT)เชจเซ‹ เช…เชญเชพเชต เช›เซ‡. เชŸเซ€เชตเซ€ เชธเชพเชงเชจเซ‹ (เชคเซ‡ เชฎเซ‹เชกเซเชฏเซเชฒเซ‡เชŸเชฐ เชนเซ‹เชฏ เช•เซ‡ เช…เช‚เชคเชฟเชฎ เช‰เชชเช•เชฐเชฃเซ‹ เชนเซ‹เชฏ) เชจเซ‡ เช† เชชเชฐเชฟเชฎเชพเชฃ เชฎเชพเชŸเซ‡เชจเซ€ เช†เชตเชถเซเชฏเช•เชคเชพเช“ เชนเซ‹เชฏ เช›เซ‡ เช…เชจเซ‡ เชœเชฟเชŸเชฌเชซเชฐเชจเซ‡ เช…เชจเช‚เชค เชธเซเชงเซ€ เชตเชงเชพเชฐเชตเซเช‚ เชนเช‚เชฎเซ‡เชถเชพ เชถเช•เซเชฏ เชจเชฅเซ€. เช…เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชฎเซ‹เชŸเชพ เชฌเชซเชฐเซเชธเชตเชพเชณเชพ เชธเชพเชงเชจเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชŸเซเชฐเชพเชจเซเชเชฟเชŸเชฎเชพเช‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช…เชจเซ‡ QoS เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เชจ เชนเซ‹เชฏ เช…เชฅเชตเชพ เช†เชตเชพ เชฐเซ€เชฏเชฒเชŸเชพเช‡เชฎ เชŸเซเชฐเชพเชซเชฟเช•เชจเซ‡ เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเซ‚เชฐเชคเซเช‚ เช—เซ‹เช เชตเซ‡เชฒเซเช‚ เชจ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เชœเชฟเชŸเชฐ เชคเชฐเชคเชพ เชนเซ‹เชฏ เช›เซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹