เดเดจเตเดฑเตผเดซเตเดธเตเดเดณเดฟเตฝ เด เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดคเดฎเดพเดฏ เดเตเดฐเดพเดซเดฟเดเต เดชเตเดฐเตเดธเดธเตเดธเดฟเดเดเต เดชเตเดฐเดพเดชเตเดคเดฎเดพเดเตเดเตเดจเตเดจ eXpress เดกเดพเดฑเตเดฑ เดชเดพเดคเตเดคเต (XDP) เดธเดพเดเตเดเตเดคเดฟเดเดตเดฟเดฆเตเดฏ. Linux เดชเดพเดเตเดเดฑเตเดฑเตเดเตพ เดเตเตผเดฃเตฝ เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเต เดธเตเดฑเตเดฑเดพเดเตเดเดฟเตฝ เดชเตเดฐเดตเตเดถเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต. XDP เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดเดณเดฟเตฝ DDoS เดธเดเดฐเดเตเดทเดฃเด (CloudFlare), เดธเดเตเดเตเตผเดฃเตเดฃเดฎเดพเดฏ เดซเดฟเตฝเดเตเดเดฑเตเดเตพ, เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเดธเตเดฑเตเดฑเดฟเดเตเดธเต เดถเตเดเดฐเดฃเด (Netflix) เดเดจเตเดจเดฟเดต เดเตพเดชเตเดชเตเดเตเดจเตเดจเต. XDP เดชเตเดฐเตเดเตเดฐเดพเดฎเตเดเตพ eBPF เดตเตเตผเดเตเดตเตฝ เดฎเตเดทเตเดจเดพเดฃเต เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตเดจเตเดจเดคเต, เด เดคเดฟเดจเดพเตฝ เดซเดฟเตฝเดเตเดเตผ เดคเดฐเด เด เดจเตเดธเดฐเดฟเดเตเดเต เด เดตเดฏเตเดเต เดเตเดกเดฟเดฒเตเด เดฒเดญเตเดฏเดฎเดพเดฏ เดเตเตผเดฃเตฝ เดซเดเดเตเดทเดจเตเดเดณเดฟเดฒเตเด เดชเดฐเดฟเดฎเดฟเดคเดฟเดเดณเตเดฃเตเดเต.
XDP-เดฏเดฟเดฒเต เดจเดฟเดฐเดตเดงเดฟ เดฎเตเดฑเตเดฑเตเดฐเดฟเดฏเดฒเตเดเดณเตเดเต เดชเตเดฐเดพเดฏเตเดฎเดเตพ เดชเดฐเดฟเดนเดฐเดฟเดเตเดเตเด เดเดจเตเดจเดคเดพเดฃเต เด เดฒเตเดเดจเดคเตเดคเดฟเดจเตเดฑเต เดฒเดเตเดทเตเดฏเด. เดเดจเตเดจเดพเดฎเดคเดพเดฏเดฟ, XDP-เดฏเตเดเต เดธเดตเดฟเดถเตเดทเดคเดเดณเต เดเดเดจเดเดฟ เดฎเดฑเดฟเดเดเดเตเดเตเดจเตเดจ เดฑเตเดกเดฟเดฎเตเดฏเตเดกเต เดเตเดกเต เด เดตเตผ เดจเตฝเดเตเดจเตเดจเต: เดเดคเต เดธเตเดฅเดฟเดฐเตเดเดฐเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ เดคเดฏเตเดฏเดพเดฑเดพเดเตเดเดฟเดฏเดคเต เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดชเตเดฐเดถเตเดจเดเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเดพเตป เดตเดณเดฐเต เดฒเดณเดฟเดคเดฎเต เดเดฃเต. เดเดฆเตเดฏเด เดฎเตเดคเตฝ เดจเดฟเดเตเดเดณเตเดเต เดธเตเดตเดจเตเดคเด เดเตเดกเต เดเดดเตเดคเดพเตป เดถเตเดฐเดฎเดฟเดเตเดเตเดฎเตเดชเตเตพ, เดธเดพเดงเดพเดฐเดฃ เดชเดฟเดถเดเตเดเตพ เดเดเตเดเดจเต เดเตเดเดพเดฐเตเดฏเด เดเตเดฏเตเดฏเดฃเดฎเตเดจเตเดจเต เดฎเดจเดธเตเดธเดฟเดฒเดพเดเตเดเดพเตป เดชเตเดฐเดฏเดพเดธเดฎเดพเดฃเต. เดฐเดฃเตเดเดพเดฎเดคเดพเดฏเดฟ, VM เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดนเดพเตผเดกเตโเดตเตเดฏเตผ เดเดฒเตเดฒเดพเดคเต XDP เดชเตเดฐเดพเดฆเตเดถเดฟเดเดฎเดพเดฏเดฟ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฐเตเดคเดฟเดเตพ เดเดคเต เดเตพเดเตเดเตเดณเตเดณเตเดจเตเดจเดฟเดฒเตเดฒ, เด เดฐเตเดคเดฟเดเตพเดเตเดเต เด เดตเดฐเตเดเตเดคเดพเดฏ เดชเตเดฐเดพเดฏเตเดฎเดเตพ เดเดฃเตเดเตเดเตเดเดฟเดฒเตเด. เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเตเดเดณเตเดฎเดพเดฏเดฟ เดชเดฐเดฟเดเดฏเดฎเตเดณเตเดณ เดชเตเดฐเตเดเตเดฐเดพเดฎเตผเดฎเดพเตผเดเตเดเตเด Linux, XDP, eBPF เดเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดณเตเดณเดตเตผ.
เด เดญเดพเดเดคเตเดคเต, XDP เดซเดฟเตฝเดเตเดเตผ เดเดเตเดเดจเต เดเตเดเตเดเดฟเดเตเดเตเตผเดเตเดเดชเตเดชเตเดเตเดจเตเดจเตเดตเตเดจเตเดจเตเด เด
เดคเต เดเดเตเดเดจเต เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเดพเดฎเตเดจเตเดจเตเด เดเดเตเดเตพ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดฎเดจเดธเตเดธเดฟเดฒเดพเดเตเดเตเด, เดคเตเดเตผเดจเตเดจเต เดชเดพเดเตเดเดฑเตเดฑเต เดชเตเดฐเตเดธเดธเตเดธเดฟเดเดเต เดคเดฒเดคเตเดคเดฟเตฝ เด
เดฑเดฟเดฏเดชเตเดชเตเดเตเดจเตเดจ SYN เดเตเดเตเดเตเดธเต โโเดฎเตเดเตเดเดพเดจเดฟเดธเดคเตเดคเดฟเตปเตเดฑเต เดเดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดชเดคเดฟเดชเตเดชเต เดเดเตเดเตพ เดเดดเตเดคเตเด. เดเดเตเดเตพ เดเดคเตเดตเดฐเต เดเดฐเต "เดตเตเดฑเตเดฑเต เดฒเดฟเดธเตเดฑเตเดฑเต" เดธเตเดทเตเดเดฟเดเตเดเดฟเดฒเตเดฒ
เดชเดฐเดฟเดถเตเดงเดฟเดเตเด เดเตเดฒเดฏเตปเตเดฑเตเดเตพ, เดเตเดฃเตเดเดฑเตเดเตพ เดธเตเดเตเดทเดฟเดเตเดเตเด, เดซเดฟเตฝเดเตเดเตผ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดเตเดเตเด - เดฎเดคเดฟเดฏเดพเดฏ เดฒเตเดเตเดเตพ.
เดเดเตเดเตพ เดธเดฟเดฏเดฟเตฝ เดเดดเตเดคเตเด - เดเดคเต เดซเดพเดทเดจเดฒเตเดฒ, เดชเดเตเดทเต เดเดคเต เดชเตเดฐเดพเดฏเตเดเดฟเดเดฎเดพเดฃเต. เดเดฒเตเดฒเดพ เดเตเดกเตเดเดณเตเด เด เดตเดธเดพเดจเดคเตเดคเต เดฒเดฟเดเตเดเต เดตเดดเดฟ GitHub-เตฝ เดฒเดญเตเดฏเดฎเดพเดฃเต, เดฒเตเดเดจเดคเตเดคเดฟเตฝ เดตเดฟเดตเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดเดเตเดเดเตเดเตพเดเตเดเดจเตเดธเดฐเดฟเดเตเดเต เดเดฎเตเดฎเดฟเดฑเตเดฑเตเดเดณเดพเดฏเดฟ เดคเดฟเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต.
เดจเดฟเดฐเดพเดเดฐเดฃเด. เด เดฒเตเดเดจเดคเตเดคเดฟเดจเดฟเดเดฏเดฟเตฝ, DDoS เดเดเตเดฐเดฎเดฃเดเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดฐเดเตเดทเดจเตเดเดพเตป เดเดพเตป เดเดฐเต เดฎเดฟเดจเดฟ-เดธเตเดฒเตเดฏเตเดทเตป เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเตเด, เดเดพเดฐเดฃเด เดเดคเต XDP-เดฏเตเดเตเดเตเด เดเตปเตเดฑเต เดตเตเดฆเดเตเดงเตเดฏเดคเตเดคเดฟเตปเตเดฑเต เดฎเตเดเดฒเดฏเตเดเตเดเตเด เดเดฐเต เดฏเดฅเดพเตผเดคเตเดฅ เดเตเดฎเดคเดฒเดฏเดพเดฃเต. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เดธเดพเดเตเดเตเดคเดฟเดเดตเดฟเดฆเตเดฏ เดฎเดจเดธเตเดธเดฟเดฒเดพเดเตเดเตเด เดเดจเตเดจเดคเดพเดฃเต เดชเตเดฐเดงเดพเดจ เดฒเดเตเดทเตเดฏเด, เดเดคเต เดฑเตเดกเดฟเดฎเตเดฏเตเดกเต เดธเดเดฐเดเตเดทเดฃเด เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฐเต เดตเดดเดฟเดเดพเดเตเดเดฟเดฏเดฒเตเดฒ. เดเตเดฏเตเดเตเดเตเดฑเดฟเดฏเตฝ เดเตเดกเต เดเดชเตเดฑเตเดฑเดฟเดฎเตเดธเต เดเตเดฏเตเดคเดฟเดเตเดเดฟเดฒเตเดฒ เดเตเดเดพเดคเต เดเดฟเดฒ เดธเตเดเตเดทเตเดฎเดคเดเตพ เดเดดเดฟเดตเดพเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต.
XDP เดธเดเดเตเดทเดฟเดชเตเดค เด เดตเดฒเตเดเดจเด
เดกเตเดเตเดฏเตเดฎเตเตปเตเดฑเตเดทเดจเตเด เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เดฒเตเดเดจเดเตเดเดณเตเด เดคเดจเดฟเดชเตเดชเดเตผเดชเตเดชเดพเดเตเดเดพเดคเดฟเดฐเดฟเดเตเดเดพเตป เดเดพเตป เดชเตเดฐเดงเดพเดจ เดชเตเดฏเดฟเตปเตเดฑเตเดเตพ เดฎเดพเดคเตเดฐเด เดฐเตเดชเดชเตเดชเตเดเตเดคเตเดคเตเด.
เด
เดคเดฟเดจเดพเตฝ, เดซเดฟเตฝเดเตเดเตผ เดเตเดกเต เดเตเตผเดฃเดฒเดฟเดฒเตเดเตเดเต เดฒเตเดกเต เดเตเดฏเตเดคเต. เดเตปเดเดฎเดฟเดเดเต เดชเดพเดเตเดเดฑเตเดฑเตเดเตพ เดซเดฟเตฝเดเตเดเดฑเดฟเดฒเตเดเตเดเต เดเตเดฎเดพเดฑเตเดจเตเดจเต. เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดซเดฟเตฝเดเตเดเตผ เดเดฐเต เดคเตเดฐเตเดฎเดพเดจเด เดเดเตเดเตเดเดฃเด: เดชเดพเดเตเดเดฑเตเดฑเต เดเตเตผเดฃเดฒเดฟเดฒเตเดเตเดเต เดเดเดคเตเดคเดฟเดตเดฟเดเตเด (XDP_PASS), เดกเตเดฐเตเดชเตเดชเต เดชเดพเดเตเดเดฑเตเดฑเต (XDP_DROP) เด
เดฒเตเดฒเตเดเตเดเดฟเตฝ เดคเดฟเดฐเดฟเดเต เด
เดฏเดฏเตเดเตเดเตเด (XDP_TX). เดซเดฟเตฝเดเตเดเดฑเดฟเดจเต เดชเดพเดเตเดเตเดเต เดฎเดพเดฑเตเดฑเดพเตป เดเดดเดฟเดฏเตเด, เดเดคเต เดชเตเดฐเดคเตเดฏเตเดเดฟเดเตเดเตเด เดธเดคเตเดฏเดฎเดพเดฃเต XDP_TX. เดจเดฟเดเตเดเตพเดเตเดเต เดชเตเดฐเตเดเตเดฐเดพเด เดจเดฟเตผเดคเตเดคเดฒเดพเดเตเดเดพเดจเตเด เดเดดเดฟเดฏเตเด (XDP_ABORTED) เดเตเดเดพเดคเต เดชเดพเดเตเดเตเดเต เดชเตเดจเดเดธเดเตเดเดฎเดพเดเตเดเตเด, เดเดจเตเดจเดพเตฝ เดเดคเต เดธเดฎเดพเดจเดฎเดพเดฃเต assert(0) - เดกเตเดฌเดเตเดเดฟเดเดเดฟเดจเต.
eBPF (เดเดเตโเดธเตเดฑเตเดฑเตเตปเดกเดกเต เดฌเตเตผเดเตเดเตโเดฒเดฟ เดชเดพเดเตเดเดฑเตเดฑเต เดซเดฟเตฝเดเตเดเตผ) เดตเตเตผเดเตเดตเตฝ เดฎเตเดทเตเตป เดฌเตเดงเดชเตเตผเดตเด เดฒเดณเดฟเดคเดฎเดพเดเตเดเดฟเดฏเดคเดฟเดจเดพเตฝ เดเตเดกเต เดฒเตเดชเตเดชเต เดเตเดฏเตเดฏเตเดจเตเดจเดฟเดฒเตเดฒเตเดจเตเดจเตเด เดฎเดฑเตเดฑเตเดณเตเดณเดตเดฐเตเดเต เดฎเตเดฎเตเดฎเดฑเดฟ เดเตเดเตเดตเดฐเตเดคเตเดคเตเดจเตเดจเดฟเดฒเตเดฒเตเดจเตเดจเตเด เดเตเตผเดฃเดฒเดฟเดจเต เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด. เดเตเดฏเตเดฎเตเดฒเตเดฑเตเดฑเตเดตเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเดเตเดเดณเตเด เดชเดฐเดฟเดถเตเดงเดจเดเดณเตเด:
- เดฒเตเดชเตเดชเตเดเตพ (เดชเดฟเดจเตเดจเดฟเดฒเตเดเตเดเต) เดจเดฟเดฐเตเดงเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต.
- เดกเดพเดฑเตเดฑเดฏเตเดเตเดเดพเดฏเดฟ เดเดฐเต เดธเตเดฑเตเดฑเดพเดเตเดเต เดเดฃเตเดเต, เดเดจเตเดจเดพเตฝ เดซเดเดเตเดทเดจเตเดเดณเตเดจเตเดจเตเดฎเดฟเดฒเตเดฒ (เดเดฒเตเดฒเดพ เดธเดฟ เดซเดเดเตเดทเดจเตเดเดณเตเด เดเตปเดฒเตเตป เดเตเดฏเตเดคเดฟเดฐเดฟเดเตเดเดฃเด).
- เดธเตเดฑเตเดฑเดพเดเตเดเดฟเดจเตเด เดชเดพเดเตเดเดฑเตเดฑเต เดฌเดซเดฑเดฟเดจเตเด เดชเตเดฑเดคเตเดคเตเดณเตเดณ เดฎเตเดฎเตเดฎเดฑเดฟ เดเดเตโเดธเดธเตเดธเต เดจเดฟเดฐเตเดงเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต.
- เดเตเดกเต เดตเดฒเตเดชเตเดชเด เดชเดฐเดฟเดฎเดฟเดคเดฎเดพเดฃเต, เดเดจเตเดจเดพเตฝ เดชเตเดฐเดพเดฏเตเดเดฟเดเดฎเดพเดฏเดฟ เดเดคเต เดตเดณเดฐเต เดชเตเดฐเดงเดพเดจเดฎเดฒเตเดฒ.
- เดชเตเดฐเดคเตเดฏเตเด เดเตเตผเดฃเตฝ เดซเดเดเตโเดทเดจเตเดเดณเดฟเดฒเตเดเตเดเตเดณเตเดณ (eBPF เดธเดนเดพเดฏเดฟเดเตพ) เดเตเดณเตเดเตพ เดฎเดพเดคเตเดฐเดฎเต เด เดจเตเดตเดฆเดฟเดเตเดเต.
เดเดฐเต เดซเดฟเตฝเดเตเดเตผ เดฐเตเดชเดเตฝเดชเตเดชเดจ เดเตเดฏเตเดฏเตเดจเตเดจเดคเตเด เดเตปเดธเตเดฑเตเดฑเดพเตพ เดเตเดฏเตเดฏเตเดจเตเดจเดคเตเด เดเดคเตเดชเตเดฒเต เดเดพเดฃเดชเตเดชเตเดเตเดจเตเดจเต:
- เดเดฑเดตเดฟเด เดเตเดกเต (เดเดฆเดพ
kernel.c) เดเดฌเตเดเดเตเดฑเตเดฑเดฟเดฒเตเดเตเดเต เดธเดฎเดพเดนเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต (kernel.o) eBPF เดตเตเตผเดเตเดตเตฝ เดฎเตเดทเตเตป เดเตผเดเตเดเดฟเดเตเดเตเดเดฑเดฟเดจเดพเดฏเดฟ. 2019 เดเดเตโเดเตเดฌเตผ เดฎเตเดคเตฝ, eBPF-เดฒเตเดเตเดเตเดณเตเดณ เดธเดฎเดพเดนเดพเดฐเด Clang เดชเดฟเดจเตเดคเตเดฃเดฏเตโเดเตเดเตเดเดฏเตเด GCC 10.1-เตฝ เดตเดพเดเตเดฆเดพเดจเด เดเตเดฏเตเดฏเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต. - เด เดเดฌเตโเดเดเตเดฑเตเดฑเต เดเตเดกเดฟเตฝ เดเตเตผเดฃเตฝ เดเดเดจเดเดณเดฟเดฒเตเดเตเดเตเดณเตเดณ เดเตเดณเตเดเตพ เด เดเดเตเดเดฟเดฏเดฟเดเตเดเตเดฃเตเดเตเดเตเดเดฟเตฝ (เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดชเดเตเดเดฟเดเดเดณเตเด เดเตเดฃเตเดเดฑเตเดเดณเตเด), เด เดตเดฏเตเดเต เดเดกเดฟเดเตพ เดชเตเดเตเดฏเดเตเดเดณเดพเตฝ เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเดเตเดเดชเตเดชเตเดเตเดจเตเดจเต, เด เดคเดพเดฏเดคเต เด เดคเตเดคเดฐเด เดเตเดกเต เดเดเตโเดธเดฟเดเตเดฏเตเดเตเดเต เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเดฟเดฒเตเดฒ. เดเตเตผเดฃเดฒเดฟเดฒเตเดเตเดเต เดฒเตเดกเตเดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต, เดเตเตผเดฃเตฝ เดเตเดณเตเดเตพ เดตเดดเดฟ เดธเตเดทเตเดเดฟเดเตเด เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดเดฌเตโเดเดเตเดฑเตเดฑเตเดเดณเตเดเต เดเดกเดฟเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เด เดชเตเดเตเดฏเดเตเดเตพ เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต (เดเตเดกเต เดฒเดฟเดเตเดเต เดเตเดฏเตเดฏเตเด). เดฌเดพเดนเตเดฏ เดฏเตเดเตเดเดฟเดฒเดฟเดฑเตเดฑเดฟเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดจเดฟเดเตเดเตพเดเตเดเต เดเดคเต เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเตเด, เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดเดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดซเดฟเตฝเดเตเดเตผ เดฒเดฟเดเตเดเต เดเตเดฏเตเดคเต เดฒเตเดกเต เดเตเดฏเตเดฏเตเดจเตเดจ เดเดฐเต เดชเตเดฐเตเดเตเดฐเดพเด เดจเดฟเดเตเดเตพเดเตเดเต เดเดดเตเดคเดพเด.
- เดเตเตผเดฃเตฝ เดฒเตเดกเต เดเตเดฏเตเดค เดชเตเดฐเตเดเตเดฐเดพเด เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเดจเตเดจเต. เดธเตเดเตเดเดฟเดณเตเดเดณเตเดเต เด เดญเดพเดตเดตเตเด เดชเดพเดเตเดเดฑเตเดฑเต, เดธเตเดฑเตเดฑเดพเดเตเดเต เดฌเตเดฃเตเดเดฑเดฟเดเตพ เดเดตเดฟเดฏเดพเดจเตเดณเตเดณ เดชเดฐเดพเดเดฏเดตเตเด เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเดจเตเดจเต. เดเตเดกเต เดถเดฐเดฟเดฏเดพเดฃเตเดจเตเดจเต เดตเตเดฐเดฟเดซเดฏเตผ เดคเตเดณเดฟเดฏเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒเตเดเตเดเดฟเตฝ, เดชเตเดฐเตเดเตเดฐเดพเด เดจเดฟเดฐเดธเดฟเดเตเดเดชเตเดชเตเดเตเดเต - เดจเดฟเดเตเดเตพเดเตเดเต เด เดตเดจเต เดชเตเดฐเดธเดพเดฆเดฟเดชเตเดชเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเดฃเด.
- เดตเดฟเดเดฏเดเดฐเดฎเดพเดฏ เดธเตเดฅเดฟเดฐเตเดเดฐเดฃเดคเตเดคเดฟเดจเต เดถเตเดทเด, เดเตเตผเดฃเตฝ eBPF เดเตผเดเตเดเดฟเดเตเดเตเดเตผ เดเดฌเตโเดเดเตเดฑเตเดฑเต เดเตเดกเต เดธเดฟเดธเตเดฑเตเดฑเด เดเตผเดเตเดเดฟเดเตเดเตเดเดฑเดฟเดจเดพเดฏเตเดณเตเดณ เดฎเตเดทเตเตป เดเตเดกเดฟเดฒเตเดเตเดเต เดธเดฎเดพเดนเดฐเดฟเดเตเดเตเดจเตเดจเต (เดเดคเต เดธเดฎเดฏเดคเตเดคเตเดคเดจเตเดจเต).
- เดชเตเดฐเตเดเตเดฐเดพเด เดเตปเตเดฑเตผเดซเตเดธเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเต เดชเดพเดเตเดเดฑเตเดฑเตเดเตพ เดชเตเดฐเตเดธเดธเตเดธเต เดเตเดฏเตเดฏเดพเตป เดคเตเดเดเตเดเตเดจเตเดจเต.
XDP เดเตเตผเดฃเดฒเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเดพเตฝ, เดเตเดฐเตเดธเต เดฒเตเดเตเดเดณเตเด เดชเตเดฐเตเดเตเดฐเดพเด เดซเดฟเตฝเดเตเดเตผ เดเตเดฏเตเดฏเตเดจเตเดจเดคเต เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเดคเต เดเดฏ เดชเดพเดเตเดเดฑเตเดฑเตเดเดณเตเด เดเดชเดฏเตเดเดฟเดเตเดเดพเดฃเต เดกเตเดฌเดเตเดเดฟเดเดเต เดจเดเดคเตเดคเตเดจเตเดจเดคเต. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเดพเดฏเดฟ เดฒเตเดกเต เดเตเดฏเตเดค เดเตเดกเดฟเดจเตเดฑเต เดธเตเดฐเดเตเดท eBPF เดเดฑเดชเตเดชเดพเดเตเดเตเดจเตเดจเต, เด เดคเดฟเดจเดพเตฝ เดจเดฟเดเตเดเตพเดเตเดเต เดจเดฟเดเตเดเดณเตเดเต เดฒเตเดเตเดเตฝ เดฎเตเดทเตเดจเดฟเตฝ เดจเตเดฐเดฟเดเตเดเต XDP เดชเดฐเตเดเตเดทเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด. Linux.
เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดเดฐเตเดเตเดเตเดจเตเดจเต
เดจเดฟเดฏเดฎเดธเดญ
eBPF เดเตผเดเตเดเดฟเดเตเดเตเดเดฑเดฟเดจเดพเดฏเดฟ Clang-เดจเต เดจเตเดฐเดฟเดเตเดเต เดเดฌเตโเดเดเตเดฑเตเดฑเต เดเตเดกเต เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเดฟเดฒเตเดฒ, เด เดคเดฟเดจเดพเตฝ เดชเตเดฐเดเตเดฐเดฟเดฏ เดฐเดฃเตเดเต เดเดเตเดเดเตเดเตพ เดเตพเดเตเดเตเดณเตเดณเตเดจเตเดจเต:
- LLVM เดฌเตเดฑเตเดฑเตเดเตเดกเดฟเดฒเตเดเตเดเต C เดเตเดกเต เดเดเดชเตเตฝ เดเตเดฏเตเดฏเตเด (
clang -emit-llvm). - เดฌเตเดฑเตเดฑเตเดเตเดกเต eBPF เดเดฌเตเดเดเตเดฑเตเดฑเต เดเตเดกเดฟเดฒเตเดเตเดเต เดชเดฐเดฟเดตเตผเดคเตเดคเดจเด เดเตเดฏเตเดฏเตเด (
llc -march=bpf -filetype=obj).
เดเดฐเต เดซเดฟเตฝเดเตเดเตผ เดเดดเตเดคเตเดฎเตเดชเตเตพ, เดเดเตเดธเดฟเดฒเดฑเดฟ เดซเดเดเตเดทเดจเตเดเดณเตเด เดฎเดพเดเตเดฐเตเดเดณเตเด เดเดณเตเดณ เดฐเดฃเตเดเต เดซเดฏเดฒเตเดเตพ เดเดชเดฏเตเดเดชเตเดฐเดฆเดฎเดพเดเตเด . เด
เดต เดเตเตผเดฃเตฝ เดชเดคเดฟเดชเตเดชเตเดฎเดพเดฏเดฟ เดชเตเดฐเตเดคเตเดคเดชเตเดชเตเดเตเดจเตเดจเดคเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต (KVER). เด
เดต เดกเตเตบเดฒเตเดกเต เดเตเดฏเตเดฏเตเด helpers/:
export KVER=v5.3.7
export BASE=https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/plain/tools/testing/selftests/bpf
wget -P helpers --content-disposition "${BASE}/bpf_helpers.h?h=${KVER}" "${BASE}/bpf_endian.h?h=${KVER}"
unset KVER BASEเดเตผเดเตเดเดฟเดจเตเดณเตเดณ เดฎเตเดเตเดเต เดซเดฏเตฝ Linux (เดเตเตผเดฃเตฝ 5.3.7):
CLANG ?= clang
LLC ?= llc
KDIR ?= /lib/modules/$(shell uname -r)/build
ARCH ?= $(subst x86_64,x86,$(shell uname -m))
CFLAGS =
-Ihelpers
-I$(KDIR)/include
-I$(KDIR)/include/uapi
-I$(KDIR)/include/generated/uapi
-I$(KDIR)/arch/$(ARCH)/include
-I$(KDIR)/arch/$(ARCH)/include/generated
-I$(KDIR)/arch/$(ARCH)/include/uapi
-I$(KDIR)/arch/$(ARCH)/include/generated/uapi
-D__KERNEL__
-fno-stack-protector -O2 -g
xdp_%.o: xdp_%.c Makefile
$(CLANG) -c -emit-llvm $(CFLAGS) $< -o - |
$(LLC) -march=bpf -filetype=obj -o $@
.PHONY: all clean
all: xdp_filter.o
clean:
rm -f ./*.oKDIR เดเตเตผเดฃเตฝ เดนเตเดกเดฑเตเดเดณเดฟเดฒเตเดเตเดเตเดณเตเดณ เดชเดพเดค เด
เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต, ARCH - เดธเดฟเดธเตเดฑเตเดฑเด เดเตผเดเตเดเดฟเดเตเดเตเดเตผ. เดตเดฟเดคเดฐเดฃเดเตเดเตพเดเตเดเดฟเดเดฏเดฟเตฝ เดชเดพเดคเดเดณเตเด เดเดชเดเดฐเดฃเดเตเดเดณเตเด เด
เดฒเตเดชเด เดตเตเดฏเดคเตเดฏเดพเดธเดชเตเดชเตเดเดพเด.
เดตเตเดฏเดคเตเดฏเดพเดธเดเตเดเดณเตเดเต เดเดฆเดพเดนเดฐเดฃเด Debian 10 (เดเตเตผเดฃเตฝ 4.19.67)
# ะดััะณะฐั ะบะพะผะฐะฝะดะฐ
CLANG ?= clang
LLC ?= llc-7
# ะดััะณะพะน ะบะฐัะฐะปะพะณ
KDIR ?= /usr/src/linux-headers-$(shell uname -r)
ARCH ?= $(subst x86_64,x86,$(shell uname -m))
# ะดะฒะฐ ะดะพะฟะพะปะฝะธัะตะปัะฝัั
ะบะฐัะฐะปะพะณะฐ -I
CFLAGS =
-Ihelpers
-I/usr/src/linux-headers-4.19.0-6-common/include
-I/usr/src/linux-headers-4.19.0-6-common/arch/$(ARCH)/include
# ะดะฐะปะตะต ะฑะตะท ะธะทะผะตะฝะตะฝะธะนCFLAGS เดธเดนเดพเดฏ เดคเดฒเดเตเดเตเดเตเดเตเดเดณเตเดณเตเดณ เดเดฐเต เดกเดฏเดฑเดเตเดเดฑเดฟเดฏเตเด เดเตเตผเดฃเตฝ เดนเตเดกเดฑเตเดเดณเตเดณเตเดณ เดจเดฟเดฐเดตเดงเดฟ เดกเดฏเดฑเดเตเดเดฑเดฟเดเดณเตเด เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเตเด. เดเดฟเดนเตเดจเด __KERNEL__ เดเตเตผเดฃเดฒเดฟเตฝ เดซเดฟเตฝเดเตเดเตผ เดเดเตเดธเดฟเดเตเดฏเตเดเตเดเต เดเตเดฏเตเดคเดฟเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเดพเตฝ เดฏเตเดเดชเดฟเด (เดฏเตเดธเตโเดชเตเดธเต เดเดชเดฟเด) เดนเตเดกเดฑเตเดเตพ เดเตเตผเดฃเตฝ เดเตเดกเดฟเดจเดพเดฏเดฟ เดจเดฟเตผเดตเดเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต เดเดจเตเดจเดพเดฃเต เด
เตผเดคเตเดฅเดฎเดพเดเตเดเตเดจเตเดจเดคเต.
เดธเตเดฑเตเดฑเดพเดเตเดเต เดธเดเดฐเดเตเดทเดฃเด เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเดเตเดเดพเด (-fno-stack-protector), เดเดพเดฐเดฃเด eBPF เดเตเดกเต เดตเตเดฐเดฟเดซเดฏเตผ เดเดชเตเดชเตเดดเตเด เดชเดฐเดฟเดงเดฟเดเตเดเต เดชเตเดฑเดคเตเดคเตเดณเตเดณ เดฒเดเดเดจเดเตเดเตพ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเดจเตเดจเต. เดเดเตป เดคเดจเตเดจเต เดเดชเตเดฑเตเดฑเดฟเดฎเตเดธเตเดทเดจเตเดเตพ เดเดฃเดพเดเตเดเตเดจเตเดจเดคเต เดฎเตเดฒเตเดฏเดตเดคเตเดคเดพเดฃเต, เดเดพเดฐเดฃเด eBPF เดฌเตเดฑเตเดฑเตเดเตเดกเดฟเตปเตเดฑเต เดตเดฒเตเดชเตเดชเด เดชเดฐเดฟเดฎเดฟเดคเดฎเดพเดฃเต.
เดเดฒเตเดฒเดพ เดชเดพเดเตเดเดฑเตเดฑเตเดเดณเตเด เดเดเดจเตเดจเตเดชเตเดเตเดเดฏเตเด เดเดจเตเดจเตเด เดเตเดฏเตเดฏเดพเดคเดฟเดฐเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจ เดเดฐเต เดซเดฟเตฝเดเตเดเดฑเดฟเตฝ เดจเดฎเตเดเตเดเต เดเดฐเดเดญเดฟเดเตเดเดพเด:
#include <uapi/linux/bpf.h>
#include <bpf_helpers.h>
SEC("prog")
int xdp_main(struct xdp_md* ctx) {
return XDP_PASS;
}
char _license[] SEC("license") = "GPL";เดเตเด make เดถเตเดเดฐเดฟเดเตเดเตเดจเตเดจเต xdp_filter.o. เดเดชเตเดชเตเตพ เดเดตเดฟเดเต เดถเตเดฐเดฎเดฟเดเตเดเดฃเด?
เดเตเดธเตเดฑเตเดฑเต เดธเตเดฑเตเดฑเดพเตปเดกเต
เดธเดเตเดเตเดเดฐเดฃเดคเตเดคเดฟเตฝ เดฐเดฃเตเดเต เดเดจเตเดฑเตผเดซเตเดธเตเดเตพ เดเดฃเตเดเดพเดฏเดฟเดฐเดฟเดเตเดเดฃเด: เดเดจเตเดจเต เดซเดฟเตฝเดเตเดเดฑเดฟเดจเตเด เดฎเดฑเตเดฑเตเดจเตเดจเต เดชเดพเดเตเดเดฑเตเดฑเตเดเตพ เด เดฏเดฏเตเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณเดคเตเดฎเดพเดฏ เดเดจเตเดฑเตผเดซเตเดธเตเดเตพ. เดเดต เดชเตเตผเดฃเตเดฃเดฎเดพเดฏเตเด เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดทเดฎเดฎเดพเดฏ เดเดชเดเดฐเดฃเดเตเดเดณเดพเดฏเดฟเดฐเดฟเดเตเดเดฃเด. Linux เดเดเตเดเดณเตเดเต เดซเดฟเตฝเดเตเดเดฑเดฟเตฝ เดธเดพเดงเดพเดฐเดฃ เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดเตพ เดเดเตเดเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเตเดตเตเดจเตเดจเต เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเดพเตป เดจเดฟเดเตเดเดณเตเดเต เดเดชเดฟ เดตเดฟเดฒเดพเดธเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต.
เดตเตเดคเตเดคเต (เดตเตเตผเดเตเดตเตฝ เดเดฅเตผเดจเตเดฑเตเดฑเต) เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดเดชเดเดฐเดฃเดเตเดเตพ เดเดเตเดเตพเดเตเดเต เด
เดจเตเดฏเตเดเตเดฏเดฎเดพเดฃเต: เดเดต เดชเดฐเดธเตเดชเดฐเด เดจเตเดฐเดฟเดเตเดเต "เดเดฃเดเตโเดฑเตเดฑเตเดเตเดฏเตโเดค" เดเดฐเต เดเตเดเดฟ เดตเตเตผเดเตเดตเตฝ เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเต เดเตปเตเดฑเตผเดซเตเดธเตเดเดณเดพเดฃเต. เดจเดฟเดเตเดเตพเดเตเดเต เด
เดต เดเดคเตเดชเตเดฒเต เดธเตเดทเตเดเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด (เด เดตเดฟเดญเดพเดเดคเตเดคเดฟเตฝ เดเดฒเตเดฒเดพ เดเดฎเดพเตปเดกเตเดเดณเตเด ip เดฎเตเดคเตฝ เดจเดเดคเตเดคเดชเตเดชเตเดเตเดจเตเดจเต root):
ip link add xdp-remote type veth peer name xdp-localเดเดคเต xdp-remote ะธ xdp-local - เดเดชเดเดฐเดฃเดคเตเดคเดฟเตปเตเดฑเต เดชเตเดฐเตเดเตพ. เดเตบ xdp-local (192.0.2.1/24) เดเดฐเต เดซเดฟเตฝเดเตเดเตผ เด
เดฑเตเดฑเดพเดเตเดเตเดเตเดฏเตเดฏเตเด xdp-remote (192.0.2.2/24) เดตเดฐเตเดจเตเดจ เดเตเดฐเดพเดซเดฟเดเต เดซเตเตผเดตเตเดกเต เดเตเดฏเตเดฏเตเด. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เดเดฐเต เดชเตเดฐเดถเตเดจเดฎเตเดฃเตเดเต: เดเดจเตเดฑเตผเดซเตเดธเตเดเตพ เดเดฐเต เดฎเตเดทเตเดจเดฟเดฒเดพเดฃเต, เดเตเดเดพเดคเต Linux เด
เดตเดฏเดฟเดฒเตเดจเตเดจเดฟเดฒเตเดเต เดฎเดฑเตเดฑเตเดจเตเดจเดฟเดฒเตเดเตเดเต เดเตเดฐเดพเดซเดฟเดเต เด
เดฏเดฏเตเดเตเดเดฟเดฒเตเดฒ. เดธเดฎเตผเดคเตเดฅเดฎเดพเดฏ เดจเดฟเดฏเดฎเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดเดคเต เดชเดฐเดฟเดนเดฐเดฟเดเตเดเดพเดจเดพเดเตเด. iptables, เดเดจเตเดจเดพเตฝ เด
เดตเตผ เดชเดพเดเตเดเตเดเตเดเตพ เดฎเดพเดฑเตเดฑเตเดฃเตเดเดฟเดตเดฐเตเด, เดเดคเต เดกเตเดฌเดเตเดเดฟเดเดเดฟเดจเต เด
เดธเตเดเดฐเตเดฏเดฎเดพเดฃเต. เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเต เดจเตเดฏเดฟเดเดธเตโเดชเตเดฏเตโเดธเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต (เดเดจเดฟ เดฎเตเดคเตฝ เดจเตเดฑเตเดฑเตโเดจเตเดเตพ).
เดเดฐเต เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเต เดจเตเดฏเดฟเดเดธเตโเดชเตเดฏเตโเดธเดฟเตฝ เดฎเดฑเตเดฑเต เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเต เดจเดพเดฎเดเตเดเดณเดฟเดฒเต เดธเดฎเดพเดจ เดเดฌเตโเดเดเตเดฑเตเดฑเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเตผเดคเดฟเดฐเดฟเดเตเดเตเดเตเดคเตเดค เดเดฐเต เดเตเดเตเดเด เดเดจเตเดฑเตผเดซเตเดธเตเดเตพ, เดฑเตเดเตเดเดฟเดเดเต เดเตเดฌเดฟเดณเตเดเตพ, เดจเตเดฑเตเดฑเตเดซเดฟเตฝเดเตเดเตผ เดจเดฟเดฏเดฎเดเตเดเตพ เดเดจเตเดจเดฟเดต เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เดเดฐเต เดชเตเดฐเดเตเดฐเดฟเดฏเดฏเตเด เดเดฐเต เดชเตเดฐเดคเตเดฏเตเด เดจเตเดฏเดฟเดเดธเตโเดชเตเดฏเตโเดธเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต, เดเตเดเดพเดคเต เด เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเต เดจเตเดฏเดฟเดเดธเตโเดชเตเดฏเตโเดธเดฟเดจเตเดณเตเดณเดฟเดฒเต เดเดฌเตโเดเดเตเดฑเตเดฑเตเดเตพเดเตเดเต เดฎเดพเดคเตเดฐเดฎเต เดเดเตโเดธเดธเต เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเต. เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ, เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเต เดเดฒเตเดฒเดพ เดเดฌเตโเดเดเตเดฑเตเดฑเตเดเตพเดเตเดเตเดฎเดพเดฏเดฟ เดเดฐเตเดฑเตเดฑ เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเต เดจเตเดฏเดฟเดเดธเตโเดชเตเดฏเตโเดธเต เดเดฃเตเดเต, เด เดคเดฟเดจเดพเตฝ เดจเดฟเดเตเดเตพเดเตเดเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด Linux เดจเตเดฑเตเดฑเตเดธเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเตเด เด เดฑเดฟเดฏเดฟเดฒเตเดฒ.
เดจเดฎเตเดเตเดเต เดเดฐเต เดชเตเดคเดฟเดฏ เดจเตเดฏเดฟเดเดธเตเดชเตเดธเต เดเดฃเตเดเดพเดเตเดเดพเด xdp-test เด
เดเตเดเตเดเตเดเต เดฎเดพเดฑเตเดฑเตเด xdp-remote.
ip netns add xdp-test
ip link set dev xdp-remote netns xdp-testเดคเตเดเตผเดจเตเดจเต เดชเตเดฐเดเตเดฐเดฟเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต xdp-test, "เดเดพเดฃเดฟเดฒเตเดฒ" xdp-local (เด
เดคเต เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ เดจเตเดฑเตเดฑเตโเดจเตเดเดณเดฟเตฝ เดจเดฟเดฒเดจเดฟเตฝเดเตเดเตเด) เดเดฐเต เดชเดพเดเตเดเดฑเตเดฑเต 192.0.2.1 เดฒเตเดเตเดเต เด
เดฏเดฏเตโเดเตเดเตเดฎเตเดชเตเตพ เด
เดคเต เด
เดคเดฟเดฒเตเดเต เดเดเดจเตเดจเตเดชเตเดเตเด. xdp-remoteเดเดพเดฐเดฃเด 192.0.2.0/24-เดฒเต เด เดชเตเดฐเดเตเดฐเดฟเดฏเดฏเตเดเตเดเต เดเดเตเดธเดธเต เดเตเดฏเตเดฏเดพเดตเตเดจเตเดจ เดเด เดเตปเตเดฑเตผเดซเตเดธเต เดเดคเดพเดฃเต. เดเดคเตเด เดตเดฟเดชเดฐเตเดค เดฆเดฟเดถเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต.
เดจเตเดฑเตเดฑเตเดจเตเดเตพเดเตเดเดฟเดเดฏเดฟเตฝ เดจเตเดเตเดเตเดฎเตเดชเตเตพ, เดเตปเตเดฑเตผเดซเตเดธเต เดคเดพเดดเตเดเตเดเต เดชเตเดเตเดเดฏเตเด เดตเดฟเดฒเดพเดธเด เดจเดทเตเดเดชเตเดชเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต. เดจเตเดฑเตเดฑเตโเดจเตเดเดณเดฟเตฝ เดเตปเตเดฑเตผเดซเตเดธเต เดเตเดฐเดฎเตเดเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเดเตเดเตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต ip ... เด เดเดฎเดพเตปเดกเต เดจเตเดฏเดฟเดเดธเตเดชเตเดธเดฟเตฝ ip netns exec:
ip netns exec xdp-test
ip address add 192.0.2.2/24 dev xdp-remote
ip netns exec xdp-test
ip link set xdp-remote upเดจเดฟเดเตเดเตพเดเตเดเต เดเดพเดฃเดพเดจเดพเดเตเดจเตเดจเดคเตเดชเตเดฒเต, เดเดคเต เดเตเดฐเดฎเตเดเดฐเดฃเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดฒเตเดฒ xdp-local เดกเดฟเดซเตเตพเดเตเดเต เดจเตเดฏเดฟเดเดธเตเดชเตเดธเดฟเตฝ:
ip address add 192.0.2.1/24 dev xdp-local
ip link set xdp-local upเดจเดฟเดเตเดเตพ เดเดเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ tcpdump -tnevi xdp-local, เดจเดฟเดจเตเดจเต เด
เดฏเดเตเด เดชเดพเดเตเดเดฑเตเดฑเตเดเตพ เดจเดฟเดเตเดเตพเดเตเดเต เดเดพเดฃเดพเด xdp-test, เด เดเตปเตเดฑเตผเดซเตเดธเดฟเดฒเตเดเตเดเต เดกเตเดฒเดฟเดตเตผ เดเตเดฏเตเดฏเตเดจเตเดจเต:
ip netns exec xdp-test ping 192.0.2.1เดเดฐเต เดทเตเตฝ เดธเดฎเดพเดฐเดเดญเดฟเดเตเดเตเดจเตเดจเดคเต เดธเตเดเดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฃเต xdp-test. เดธเตเดฑเตเดฑเดพเตปเดกเดฟเดจเตเดชเตเดชเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดคเต เดเดเตเดเตเดฎเตเดฑเตเดฑเต เดเตเดฏเตเดฏเตเดจเตเดจ เดเดฐเต เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เดฑเดฟเดชเตเดชเตเดธเดฟเดฑเตเดฑเดฑเดฟเดเตเดเต เดเดฃเตเดเต, เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดจเดฟเดเตเดเตพเดเตเดเต เดเดฎเดพเตปเดกเต เดเดชเดฏเตเดเดฟเดเตเดเต เดธเตเดฑเตเดฑเดพเตปเดกเต เดเตเดฐเดฎเตเดเดฐเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด sudo ./stand up เด
เดคเต เดเดฒเตเดฒเดพเดคเดพเดเตเดเตเด sudo ./stand down.
เดเตเดฐเดพเดเตเดเดฟเดเดเต
เดซเดฟเตฝเดเตเดเตผ เดเดคเตเดชเตเดฒเตเดฏเตเดณเตเดณ เดเดชเดเดฐเดฃเดตเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเตเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต:
ip -force link set dev xdp-local xdp object xdp_filter.o verboseเดเต -force เดฎเดฑเตเดฑเตเดจเตเดจเต เดเดคเดฟเดจเดเด เดฒเดฟเดเตเดเต เดเตเดฏเตเดคเดฟเดเตเดเตเดฃเตเดเตเดเตเดเดฟเตฝ เดเดฐเต เดชเตเดคเดฟเดฏ เดชเตเดฐเตเดเตเดฐเดพเด เดฒเดฟเดเตเดเต เดเตเดฏเตเดฏเตเดฃเตเดเดคเต เดเดตเดถเตเดฏเดฎเดพเดฃเต. โเดเดฐเต เดตเดพเตผเดคเตเดคเดฏเตเด เดจเดฒเตเดฒ เดตเดพเตผเดคเตเดคเดฏเดฒเตเดฒโ เดเดจเตเดจเดคเต เด เดเดฎเดพเตปเดกเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเดฒเตเดฒ, เดเดคเต เดธเดพเดนเดเดฐเตเดฏเดคเตเดคเดฟเดฒเตเด เดจเดฟเดเดฎเดจเด เดตเดณเดฐเต เดตเดฒเตเดคเดพเดฃเต. เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเตเด verbose เดเดชเตเดทเดฃเตฝ, เดเดจเตเดจเดพเตฝ เด
เดคเดฟเดจเตเดชเตเดชเด เดเดฐเต เด
เดธเดเดฌเตเดฒเดฟ เดฒเดฟเดธเตเดฑเตเดฑเดฟเดเดเดฟเดจเตเดชเตเดชเด เดเตเดกเต เดตเตเดฐเดฟเดซเดฏเดฑเดฟเตปเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเตเดเตเดเตเดฑเดฟเดเตเดเต เดเดฐเต เดฑเดฟเดชเตเดชเตเตผเดเตเดเต เดฆเตเดถเตเดฏเดฎเดพเดเตเด:
Verifier analysis:
0: (b7) r0 = 2
1: (95) exitเดเตปเตเดฑเตผเดซเตเดธเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดฐเตเดเตเดฐเดพเด เด เตบเดฒเดฟเดเตเดเต เดเตเดฏเตเดฏเตเด:
ip link set dev xdp-local xdp offเดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเดฟเตฝ เดเดต เดเดฎเดพเตปเดกเตเดเตพ เดเดฃเต sudo ./stand attach ะธ sudo ./stand detach.
เดเดฐเต เดซเดฟเตฝเดเตเดเตผ เด
เดฑเตเดฑเดพเดเตเดเตเดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเตเดเต, เดจเดฟเดเตเดเตพเดเตเดเต เด
เดคเต เดเดฑเดชเตเดชเดพเดเตเดเดพเตป เดเดดเดฟเดฏเตเด ping เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดคเต เดคเตเดเดฐเตเดจเตเดจเต, เดชเดเตเดทเต เดชเตเดฐเตเดเตเดฐเดพเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเตเดฃเตเดเต? เดจเดฎเตเดเตเดเต เดฒเตเดเตเดเตพ เดเตเตผเดเตเดเดพเด. เดซเดเดเตเดทเตป เดธเดฎเดพเดจเดฎเดพเดฏ printf(), เดเดจเตเดจเดพเตฝ เดชเดพเดฑเตเดฑเตเตบ เดเดดเดฟเดเตเดฏเตเดณเตเดณ เดฎเตเดจเตเดจเต เดเตผเดเตเดฏเตเดฎเตเตปเตเดฑเตเดเตพ เดตเดฐเต เดชเดฟเดจเตเดคเตเดฃเดฏเตโเดเตเดเตเดจเตเดจเต, เดเตเดเดพเดคเต เดธเตโเดชเตเดธเดฟเดซเดฏเดฑเตเดเดณเตเดเต เดชเดฐเดฟเดฎเดฟเดคเดฎเดพเดฏ เดฒเดฟเดธเตเดฑเตเดฑเตเด. เดฎเดพเดเตเดฐเต bpf_printk() เดเตเตพ เดฒเดณเดฟเดคเดฎเดพเดเตเดเตเดจเตเดจเต.
SEC("prog")
int xdp_main(struct xdp_md* ctx) {
+ bpf_printk("got packet: %pn", ctx);
return XDP_PASS;
}เดเดเตเดเตเดชเตเดเตเดเต เดเตเตผเดฃเตฝ เดเตเดฐเตเดฏเตเดธเต เดเดพเดจเดฒเดฟเดฒเตเดเตเดเต เดชเตเดเตเดจเตเดจเต, เด เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดทเดฎเดฎเดพเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต:
echo -n 1 | sudo tee /sys/kernel/debug/tracing/options/trace_printkเดธเดจเตเดฆเตเดถ เดคเตเดฐเตเดกเต เดเดพเดฃเตเด:
cat /sys/kernel/debug/tracing/trace_pipeเด เดฐเดฃเตเดเต เดเดฎเดพเตปเดกเตเดเดณเตเด เดเดฐเต เดเตเตพ เดเตเดฏเตเดฏเตเดจเตเดจเต sudo ./stand log.
เดชเดฟเดเดเต เดเดชเตเดชเตเตพ เดเดคเตเดชเตเดฒเตเดณเตเดณ เดธเดจเตเดฆเตเดถเดเตเดเตพ เดเตเดฐเดฟเดเตผ เดเตเดฏเตเดฏเดฃเด:
<...>-110930 [004] ..s1 78803.244967: 0: got packet: 00000000ac510377เดจเดฟเดเตเดเตพ เดตเตเดฐเดฟเดซเดฏเดฑเดฟเตปเตเดฑเต เดเดเตเดเตเดชเตเดเตเดเต เดธเตเดเตเดทเตเดฎเดฎเดพเดฏเดฟ เดจเตเดเตเดเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ, เดตเดฟเดเดฟเดคเตเดฐเดฎเดพเดฏ เดเดฃเดเตเดเตเดเตเดเตเดเดฒเตเดเตพ เดจเดฟเดเตเดเตพ เดถเตเดฐเดฆเตเดงเดฟเดเตเดเตเด:
0: (bf) r3 = r1
1: (18) r1 = 0xa7025203a7465
3: (7b) *(u64 *)(r10 -8) = r1
4: (18) r1 = 0x6b63617020746f67
6: (7b) *(u64 *)(r10 -16) = r1
7: (bf) r1 = r10
8: (07) r1 += -16
9: (b7) r2 = 16
10: (85) call bpf_trace_printk#6
<...>eBPF เดชเตเดฐเตเดเตเดฐเดพเดฎเตเดเตพเดเตเดเต เดเดฐเต เดกเดพเดฑเตเดฑเดพ เดตเดฟเดญเดพเดเด เดเดฒเตเดฒ เดเดจเตเดจเดคเดพเดฃเต เดตเดธเตเดคเตเดค, เด เดคเดฟเดจเดพเตฝ เดเดฐเต เดซเตเตผเดฎเดพเดฑเตเดฑเต เดธเตเดเตเดฐเดฟเดเดเต เดเตปเดเตเดกเต เดเตเดฏเตเดฏเดพเดจเตเดณเตเดณ เดเด เดฎเดพเตผเดเด VM เดเดฎเดพเตปเดกเตเดเดณเตเดเต เดเดเดจเดเดฟ เดเตผเดเตเดฏเตเดฎเตเตปเตเดฑเตเดเดณเดพเดฃเต:
$ python -c "import binascii; print(bytes(reversed(binascii.unhexlify('0a7025203a74656b63617020746f67'))))"
b'got packet: %pn'เดเดเตเดเดพเดฐเดฃเดคเตเดคเดพเตฝ, เดกเตเดฌเดเต เดเดเตเดเตเดชเตเดเตเดเต เดคเดคเตเดซเดฒเดฎเดพเดฏเตเดฃเตเดเดพเดเตเดจเตเดจ เดเตเดกเดฟเดจเต เดตเดณเดฐเตเดฏเดงเดฟเดเด เดตเตเตผเดชเตเดชเตเดฎเตเดเตเดเดฟเดเตเดเตเดจเตเดจเต.
XDP เดชเดพเดเตเดเดฑเตเดฑเตเดเตพ เด เดฏเดฏเตเดเตเดเตเดจเตเดจเต
เดจเดฎเตเดเตเดเต เดซเดฟเตฝเดเตเดเตผ เดฎเดพเดฑเตเดฑเดพเด: เดเดฒเตเดฒเดพ เดเตปเดเดฎเดฟเดเดเต เดชเดพเดเตเดเดฑเตเดฑเตเดเดณเตเด เดคเดฟเดฐเดฟเดเต เด เดฏเดเตเดเดเตเดเต. เดเดฐเต เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเต เดตเตเดเตเดทเดฃเดเตเดฃเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดคเต เดคเตเดฑเตเดฑเดพเดฃเต, เดเดพเดฐเดฃเด เดคเดฒเดเตเดเตเดเตเดเตเดเดณเดฟเดฒเต เดตเดฟเดฒเดพเดธเดเตเดเตพ เดฎเดพเดฑเตเดฑเตเดฃเตเดเดคเต เดเดตเดถเตเดฏเดฎเดพเดฃเต, เดเดจเตเดจเดพเตฝ เดเดชเตเดชเตเตพ เดคเดคเตเดตเดคเตเดคเดฟเตฝ เดเตเดฒเดฟ เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต.
bpf_printk("got packet: %pn", ctx);
- return XDP_PASS;
+ return XDP_TX;
}เดฒเตเดเตเดเต tcpdump เดเตบ xdp-remote. เดเดคเต เดเดฐเตเดชเตเดฒเตเดฏเตเดณเตเดณ เดเดเตเดเตโเดเตเดฏเดฟเดเดเต, เดเตปเดเดฎเดฟเดเดเต ICMP เดเดเตเดเต เด
เดญเตเดฏเตผเดคเตเดฅเดจ เดเดพเดฃเดฟเดเตเดเตเดเดฏเตเด ICMP เดเดเตเดเต เดฎเดฑเตเดชเดเดฟ เดเดพเดฃเดฟเดเตเดเตเดจเตเดจเดคเต เดจเดฟเตผเดคเตเดคเตเดเดฏเตเด เดตเตเดฃเด. เดชเดเตเดทเต เด
เดคเต เดเดพเดฃเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ. เดเตเดฒเดฟเดเตเดเต เดตเตเดฃเตเดเดฟเดฏเดพเดฃเตเดจเตเดจเต เดเดคเต เดฎเดพเดฑเตเดจเตเดจเต XDP_TX เดเดจเตเดจ เดชเตเดฐเตเดเตเดฐเดพเดฎเดฟเตฝ xdp-local เดเตเดกเดฟ เดเตปเตเดฑเตผเดซเตเดธเดฟเดฒเตเดเตเดเต xdp-remote เดเดฐเต เดชเตเดฐเตเดเตเดฐเดพเดฎเตเด เด
เดธเตเตป เดเตเดฏเตเดคเต, เด
เดคเต เดถเตเดจเตเดฏเดฎเดพเดฃเตเดเตเดเดฟเดฒเตเด, เด
เดตเดจเต เดตเดณเตผเดคเตเดคเดฟ.
เดเดพเตป เดเดคเตเดเตเดเดจเต เด เดฑเดฟเดเตเดเต?
เดชเตเตผเดซเต เดเดตเตปเตเดฑเต เดฎเตเดเตเดเดพเดจเดฟเดธเด, เด เดคเต เดตเตเตผเดเตเดตเตฝ เดฎเตเดทเตเตป เดเดชเดฏเตเดเดฟเดเตเดเต เด เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจเต, เด เดคเดพเดฏเดคเต, eBPF เดเดชเดฏเตเดเดฟเดเตเดเต เดกเดฟเดธเตเด เดธเดเดฌเตเดฒเดฟ เดเตเดฏเตเดฏเดพเตป eBPF เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต.
เดคเดฟเดจเตเดฎเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดจเดฟเดเตเดเตพ เดจเดจเตเดฎ เดเดฃเตเดเดพเดเตเดเดฃเด, เดเดพเดฐเดฃเด เด เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดฎเดฑเตเดฑเตเดจเตเดจเตเด เดเดฃเตเดเดพเดเดฟเดฒเตเดฒ.
$ sudo perf trace --call-graph dwarf -e 'xdp:*'
0.000 ping/123455 xdp:xdp_bulk_tx:ifindex=19 action=TX sent=0 drops=1 err=-6
veth_xdp_flush_bq ([veth])
veth_xdp_flush_bq ([veth])
veth_poll ([veth])
<...>เดเดจเตเดคเดพเดฃเต เดเตเดกเต 6?
$ errno 6
ENXIO 6 No such device or addressเดซเดเดเตเดทเตป veth_xdp_flush_bq() เดเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฐเต เดชเดฟเดถเดเต เดเตเดกเต เดธเตเดตเตเดเดฐเดฟเดเตเดเตเดจเตเดจเต veth_xdp_xmit(), เดเดตเดฟเดเต เดตเดดเดฟ เดคเดฟเดฐเดฏเตเด ENXIO เด
เดญเดฟเดชเตเดฐเดพเดฏเด เดเดฃเตเดเตเดคเตเดคเตเดเดฏเตเด เดเตเดฏเตเดฏเตเด.
เดจเดฎเตเดเตเดเต เดเดฑเตเดฑเดตเตเด เดเตเดฑเดเตเด เดซเดฟเตฝเดเตเดเตผ เดชเตเดจเดเดธเตเดฅเดพเดชเดฟเดเตเดเดพเด (XDP_PASS) เดซเดฏเดฒเดฟเตฝ xdp_dummy.c, เดเดคเต Makefile-เดฒเตเดเตเดเต เดเตเตผเดเตเดเตเด, เดฌเตเตปเดกเต เดเตเดฏเตเดฏเตเด xdp-remote:
ip netns exec remote
ip link set dev int xdp object dummy.oเดเดชเตเดชเตเตพ tcpdump เดเดจเตเดคเดพเดฃเต เดชเตเดฐเดคเตเดเตเดทเดฟเดเตเดเตเดจเตเดจเดคเตเดจเตเดจเต เดเดพเดฃเดฟเดเตเดเตเดจเตเดจเต:
62:57:8e:70:44:64 > 26:0e:25:37:8f:96, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 13762, offset 0, flags [DF], proto ICMP (1), length 84)
192.0.2.2 > 192.0.2.1: ICMP echo request, id 46966, seq 1, length 64
62:57:8e:70:44:64 > 26:0e:25:37:8f:96, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 13762, offset 0, flags [DF], proto ICMP (1), length 84)
192.0.2.2 > 192.0.2.1: ICMP echo request, id 46966, seq 1, length 64เดชเดเดฐเด ARP-เดเตพ เดฎเดพเดคเตเดฐเด เดเดพเดฃเดฟเดเตเดเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ, เดจเดฟเดเตเดเตพ เดซเดฟเตฝเดเตเดเดฑเตเดเตพ เดจเตเดเตเดเด เดเตเดฏเตเดฏเตเดฃเตเดเดคเตเดฃเตเดเต (เดเดคเต เดเตเดฏเตเดฏเตเดจเตเดจเต sudo ./stand detach), เด
เดคเต เดชเตเดพเดเดเตเดเต ping, เดคเตเดเตผเดจเตเดจเต เดซเดฟเตฝเดเตเดเดฑเตเดเตพ เดธเดเตเดเตเดเดฐเดฟเดเตเดเต เดตเตเดฃเตเดเตเด เดถเตเดฐเดฎเดฟเดเตเดเตเด. เดซเดฟเตฝเดเตเดเดฑเดพเดฃเต เดชเตเดฐเดถเตเดจเด XDP_TX ARP เดฏเดฟเดฒเตเด เดธเตเดฑเตเดฑเดพเดเตเดเดฟเดฒเตเด เดธเดพเดงเตเดคเดฏเตเดณเตเดณเดคเดพเดฃเต
เดจเดพเดฎเดฎเตเดเดฒเดเตพ xdp-test MAC เดตเดฟเดฒเดพเดธเด 192.0.2.1 "เดฎเดฑเดเตเดเดพเตป" เดเดดเดฟเดเตเดเต, เด
เดคเดฟเดจเต เด IP เดชเดฐเดฟเดนเดฐเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเดฟเดฒเตเดฒ.
เดชเตเดฐเดถเตเดจ เดชเตเดฐเดธเตเดคเดพเดตเดจ
เดจเดฎเตเดเตเดเต เดชเตเดฐเดธเตเดคเดพเดตเดฟเดเตเด เดเดพเดธเตเดเตเดเดฟเดฒเตเดเตเดเต เดชเตเดเดพเด: XDP-เดฏเดฟเตฝ เดเดฐเต SYN เดเตเดเตเดเดฟเดเตพ เดฎเตเดเตเดเดพเดจเดฟเดธเด เดเดดเตเดคเตเด.
SYN เดตเตเดณเตเดณเดชเตเดชเตเดเตเดเด เดเดฐเต เดเดจเดชเตเดฐเดฟเดฏ DDoS เดเดเตเดฐเดฎเดฃเดฎเดพเดฏเดฟ เดคเตเดเดฐเตเดจเตเดจเต, เด เดคเดฟเตปเตเดฑเต เดธเดพเดฐเดพเดเดถเด เดเดชเตเดฐเดเดพเดฐเดฎเดพเดฃเต. เดเดฐเต เดเดฃเดเตเดทเตป เดธเตเดฅเดพเดชเดฟเดเตเดเตเดฎเตเดชเตเตพ (TCP เดนเดพเตปเดกเตโเดทเตเดเตเดเต), เดธเตเตผเดตเดฑเดฟเดจเต เดเดฐเต SYN เดฒเดญเดฟเดเตเดเตเดจเตเดจเต, เดญเดพเดตเดฟ เดเดฃเดเตเดทเดจเตเดณเตเดณ เดเดฑเดตเดฟเดเดเตเดเตพ เด เดจเตเดตเดฆเดฟเดเตเดเตเดเดฏเตเด เดเดฐเต SYNACK เดชเดพเดเตเดเดฑเตเดฑเต เดเดชเดฏเตเดเดฟเดเตเดเต เดชเตเดฐเดคเดฟเดเดฐเดฟเดเตเดเตเดเดฏเตเด เดเดฐเต ACK-เดจเดพเดฏเดฟ เดเดพเดคเตเดคเดฟเดฐเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต. เดเดฐเต เดฎเตพเดเตเดเดฟ-เดเดฏเดฟเดฐเด-เดถเดเตเดคเดฎเดพเดฏ เดฌเตเดเตเดเตโเดจเตเดฑเตเดฑเดฟเตฝ เดเดฐเต เดนเตเดธเตเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเตเด เดเดฌเดณเดฟเดชเตเดชเดฟเดเตเด เดตเดฟเดฒเดพเดธเดเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดเตเดฐเดฎเดฃเดเดพเดฐเดฟ เดธเตเดเตเดเตปเดกเดฟเตฝ เดเดฏเดฟเดฐเดเตเดเดฃเดเตเดเดฟเดจเต SYN เดชเดพเดเตเดเดฑเตเดฑเตเดเตพ เด เดฏเดฏเตเดเตเดเตเดจเตเดจเต. เดชเดพเดเตเดเดฑเตเดฑเดฟเตปเตเดฑเต เดตเดฐเดตเดฟเตฝ เดเดเตป เดคเดจเตเดจเต เดตเดฟเดญเดตเดเตเดเตพ เด เดจเตเดตเดฆเดฟเดเตเดเดพเตป เดธเตเตผเดตเตผ เดจเดฟเตผเดฌเดจเตเดงเดฟเดคเดฐเดพเดเตเดจเตเดจเต, เดเดจเตเดจเดพเตฝ เดเดฐเต เดตเดฒเดฟเดฏ เดธเดฎเดฏเดชเดฐเดฟเดงเดฟเดเตเดเต เดถเตเดทเด เด เดต เดฑเดฟเดฒเตเดธเต เดเตเดฏเตเดฏเตเดจเตเดจเต, เด เดคเดฟเตปเตเดฑเต เดซเดฒเดฎเดพเดฏเดฟ เดฎเตเดฎเตเดฎเดฑเดฟ เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดชเดฐเดฟเดงเดฟเดเตพ เดคเตเตผเดจเตเดจเต, เดชเตเดคเดฟเดฏ เดเดฃเดเตเดทเดจเตเดเตพ เดธเตเดตเตเดเดฐเดฟเดเตเดเดชเตเดชเตเดเตเดจเตเดจเดฟเดฒเตเดฒ, เดธเตเดตเดจเด เดฒเดญเตเดฏเดฎเดฒเตเดฒ.
เดจเดฟเดเตเดเตพ SYN เดชเดพเดเตเดเดฑเตเดฑเดฟเดจเต เด
เดเดฟเดธเตเดฅเดพเดจเดฎเดพเดเตเดเดฟ เดฑเดฟเดธเตเดดเตโเดธเตเดเตพ เด
เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒเตเดเตเดเดฟเตฝ, เดเดฐเต SYNACK เดชเดพเดเตเดเดฑเตเดฑเต เดเดชเดฏเตเดเดฟเดเตเดเต เดฎเดพเดคเตเดฐเด เดชเตเดฐเดคเดฟเดเดฐเดฟเดเตเดเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ, เดชเดฟเดจเตเดจเตเดเต เดตเดจเตเดจ ACK เดชเดพเดเตเดเดฑเตเดฑเต เดธเตเดตเต เดเตเดฏเตเดฏเดพเดคเตเดค SYN เดชเดพเดเตเดเดฑเตเดฑเดฟเดจเตเดฏเดพเดฃเต เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเตเดจเตเดจเต เดธเตเตผเดตเดฑเดฟเดจเต เดเดเตเดเดจเต เดฎเดจเดธเตเดธเดฟเดฒเดพเดเตเดเดพเดจเดพเดเตเด? เดเดฒเตเดฒเดพเดคเตเดคเดฟเดจเตเดฎเตเดชเดฐเดฟ, เดเดฐเต เดเดเตเดฐเดฎเดฃเดเดพเดฐเดฟเดเตเดเต เดตเตเดฏเดพเด ACK-เดเตพ เดธเตเดทเตเดเดฟเดเตเดเดพเดจเตเด เดเดดเดฟเดฏเตเด. SYN เดเตเดเตเดเดฟเดฏเตเดเต เดเดพเดฐเตเดฏเด เด
เดคเต เดเตปเดเตเดกเต เดเตเดฏเตเดฏเตเด เดเดจเตเดจเดคเดพเดฃเต seqnum เดตเดฟเดฒเดพเดธเดเตเดเตพ, เดชเตเตผเดเตเดเตเดเตพ, เดเดชเตเดชเต เดฎเดพเดฑเตฝ เดเดจเตเดจเดฟเดตเดฏเตเดเต เดเดฐเต เดนเดพเดทเต เดเดฏเดฟ เดเดฃเดเตเดทเตป เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเดฑเตเดเตพ. เดเดชเตเดชเต เดฎเดพเดฑเตเดฑเตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต ACK เดเดคเตเดคเดพเตป เดเดดเดฟเดเตเดเตเดเตเดเดฟเตฝ, เดจเดฟเดเตเดเตพเดเตเดเต เดตเตเดฃเตเดเตเด เดนเดพเดทเต เดเดฃเดเตเดเดพเดเตเดเตเดเดฏเตเด เด
เดคเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเด เดเตเดฏเตเดฏเตเดเดฏเตเด เดเตเดฏเตเดฏเดพเด acknum. เดซเตเตผเดเต acknum เดเดเตเดฐเดฎเดฃเดเดพเดฐเดฟเดเตเดเต เดเดดเดฟเดฏเดฟเดฒเตเดฒ, เดเดพเดฐเดฃเด เดเดชเตเดชเดฟเตฝ เดฐเดนเดธเตเดฏเด เดเตพเดชเตเดชเตเดเตเดจเตเดจเต, เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ เดเดพเดจเดฒเดฟเตปเตเดฑเต เดชเดฐเดฟเดฎเดฟเดคเดฎเดพเดฏเดคเดฟเดจเดพเตฝ เด
เดคเต เด
เดเตเดเตเดเดพเตป เดธเดฎเดฏเดฎเดฟเดฒเตเดฒ.
SYN เดเตเดเตเดเดฟ เดตเดณเดฐเตเดเตเดเดพเดฒเดฎเดพเดฏเดฟ เดเตเตผเดฃเดฒเดฟเตฝ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเดฟเดฏเดฟเดเตเดเตเดฃเตเดเต. Linux SYN-เดเตพ เดตเดณเดฐเต เดตเตเดเดคเตเดคเดฟเดฒเตเด เดตเดฒเดฟเดฏ เดธเดเดเตเดฏเดฏเดฟเดฒเตเด เดตเดจเตเดจเดพเตฝ เดชเตเดฒเตเด เดฏเดพเดจเตเดคเตเดฐเดฟเดเดฎเดพเดฏเดฟ เดเดฃเดพเดเตเดเดพเดจเดพเดเตเด.
TCP เดนเดพเตปเดกเตโเดทเตเดเตเดเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเตเดณเตเดณ เดตเดฟเดฆเตเดฏเดพเดญเตเดฏเดพเดธ เดชเดฐเดฟเดชเดพเดเดฟ
เดฌเตเดฑเตเดฑเตเดเดณเตเดเต เดเดฐเต เดธเตเดเตเดฐเตเด เดเดฏเดฟ TCP เดกเดพเดฑเตเดฑเดพ เดเตเดฐเดพเตปเดธเตเดฎเดฟเดทเตป เดจเตฝเดเตเดจเตเดจเต, เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, HTTP เด เดญเตเดฏเตผเดคเตเดฅเดจเดเตพ TCP เดตเดดเดฟ เดเตเดฎเดพเดฑเตเดจเตเดจเต. เดธเตเดเตเดฐเตเด เดชเดพเดเตเดเดฑเตเดฑเตเดเดณเดฟเตฝ เดเดทเดฃเดเตเดเดณเดพเดฏเดฟ เดเตเดฎเดพเดฑเตเดฑเด เดเตเดฏเตเดฏเดชเตเดชเตเดเตเดจเตเดจเต. เดเดฒเตเดฒเดพ TCP เดชเดพเดเตเดเดฑเตเดฑเตเดเตพเดเตเดเตเด เดฒเตเดเดฟเดเตเดเตฝ เดซเตเดฒเดพเดเตเดเดณเตเด 32-เดฌเดฟเดฑเตเดฑเต เดธเตเดเตเดตเตปเดธเต เดจเดฎเตเดชเดฑเตเดเดณเตเด เดเดฃเตเดเต:
เดซเตเดฒเดพเดเตเดเดณเตเดเต เดธเดเดฏเตเดเดจเด เดเดฐเต เดชเตเดฐเดคเตเดฏเตเด เดชเดพเดเตเดเตเดเดฟเตปเตเดฑเต เดชเดเตเดเต เดจเดฟเตผเดฃเตเดฃเดฏเดฟเดเตเดเตเดจเตเดจเต. เดเดฃเดเตเดทเดจเดฟเดฒเต เด เดฏเดเตเดเดฏเดพเดณเตเดเต เดเดฆเตเดฏ เดชเดพเดเตเดเดฑเตเดฑเดพเดฃเดฟเดคเตเดจเตเดจเต SYN เดซเตเดฒเดพเดเต เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต. ACK เดซเตเดฒเดพเดเต เด เตผเดคเตเดฅเดฎเดพเดเตเดเตเดจเตเดจเดคเต เด เดฏเดเตเดเดฏเดพเตพเดเตเดเต เดฌเตเดฑเตเดฑเต เดตเดฐเตเดฏเตเดณเตเดณ เดเดฒเตเดฒเดพ เดเดฃเดเตเดทเตป เดกเดพเดฑเตเดฑเดฏเตเด เดฒเดญเดฟเดเตเดเต เดเดจเตเดจเดพเดฃเต
acknum. เดเดฐเต เดชเดพเดเตเดเดฑเตเดฑเดฟเดจเต เดจเดฟเดฐเดตเดงเดฟ เดซเตเดฒเดพเดเตเดเตพ เดเดฃเตเดเดพเดฏเดฟเดฐเดฟเดเตเดเดพเด, เด เดตเดฏเตเดเต เดธเดเดฏเตเดเดจเดคเตเดคเดพเตฝ เดตเดฟเดณเดฟเดเตเดเดชเตเดชเตเดเตเดจเตเดจเต, เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดเดฐเต เดธเดฟเดจเดพเดเตเดเต เดชเดพเดเตเดเดฑเตเดฑเต.เดธเตเดเตเดตเตปเดธเต เดจเดฎเตเดชเตผ (seqnum) เด เดชเดพเดเตเดเดฑเตเดฑเดฟเตฝ เดเตเดฎเดพเดฑเตเดฑเด เดเตเดฏเตเดฏเดชเตเดชเตเดเตเดจเตเดจ เดเดฆเตเดฏ เดฌเตเดฑเตเดฑเดฟเดจเตเดณเตเดณ เดกเดพเดฑเตเดฑ เดธเตเดเตเดฐเตเดฎเดฟเดฒเต เดเดซเตเดธเตเดฑเตเดฑเต เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเตเดจเตเดจเต. เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, X เดฌเตเดฑเตเดฑเต เดกเดพเดฑเตเดฑเดฏเตเดณเตเดณ เดเดฆเตเดฏ เดชเดพเดเตเดเดฑเตเดฑเดฟเตฝ เด เดจเดฎเตเดชเตผ N เดเดฏเดฟเดฐเตเดจเตเดจเตเดตเตเดเตเดเดฟเตฝ, เดชเตเดคเดฟเดฏ เดกเดพเดฑเตเดฑเดฏเตเดณเตเดณ เด เดเตเดคเตเดค เดชเดพเดเตเดเดฑเตเดฑเดฟเตฝ เดเดคเต N+X เดเดฏเดฟเดฐเดฟเดเตเดเตเด. เดเดฃเดเตเดทเตปเตเดฑเต เดคเตเดเดเตเดเดคเตเดคเดฟเตฝ, เดเดฐเต เดตเดถเดตเตเด เด เดจเดฎเตเดชเตผ เดเตเดฐเดฎเดฐเดนเดฟเดคเดฎเดพเดฏเดฟ เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเดจเตเดจเต.
เด เดเดเตเดเดพเดฐ เดจเดฎเตเดชเตผ (เด เดเตโเดจเด) - seqnum-เตปเตเดฑเต เด เดคเต เดเดซเตโเดธเตเดฑเตเดฑเต, เดเดจเตเดจเดพเตฝ เดเดคเต เดเตเดฎเดพเดฑเตเดฑเด เดเตเดฏเตเดฏเดชเตเดชเตเดเตเดจเตเดจ เดฌเตเดฑเตเดฑเดฟเตปเตเดฑเต เดเดฃเตเดฃเด เดจเดฟเตผเดฃเตเดฃเดฏเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ, เดเดจเตเดจเดพเตฝ เดธเตเดตเตเดเตผเดคเตเดคเดพเดตเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดเดฆเตเดฏ เดฌเตเดฑเตเดฑเดฟเตปเตเดฑเต เดเดฃเตเดฃเด, เด เดคเต เด เดฏเดเตเดเดฏเดพเตพ เดเดฃเตเดเดฟเดฒเตเดฒ.
เดเดฃเดเตเดทเตปเตเดฑเต เดคเตเดเดเตเดเดคเตเดคเดฟเตฝ, เดเดเตเดทเดฟเดเตพ เดธเดฎเตเดฎเดคเดฟเดเตเดเดฃเด seqnum ะธ acknum. เดเตเดฒเดฏเตปเตเดฑเต เด
เดคเดฟเตปเตเดฑเต เดเตเดเต เดเดฐเต SYN เดชเดพเดเตเดเดฑเตเดฑเต เด
เดฏเดฏเตเดเตเดเตเดจเตเดจเต seqnum = X. เดธเตเตผเดตเตผ เดเดฐเต SYNACK เดชเดพเดเตเดเดฑเตเดฑเต เดเดชเดฏเตเดเดฟเดเตเดเต เดชเตเดฐเดคเดฟเดเดฐเดฟเดเตเดเตเดจเตเดจเต, เด
เดตเดฟเดเต เด
เดคเต เดฐเตเดเดชเตเดชเตเดเตเดคเตเดคเตเดจเตเดจเต seqnum = Y เดคเตเดฑเดจเตเดจเตเดเดพเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต acknum = X + 1. เดเตเดฒเดฏเตปเตเดฑเต เดเดฐเต ACK เดชเดพเดเตเดเดฑเตเดฑเต เดเดชเดฏเตเดเดฟเดเตเดเต SYNACK-เดจเตเดเต เดชเตเดฐเดคเดฟเดเดฐเดฟเดเตเดเตเดจเตเดจเต seqnum = X + 1, acknum = Y + 1. เดเดคเดฟเดจเตเดถเตเดทเด, เดฏเดฅเดพเตผเดคเตเดฅ เดกเดพเดฑเตเดฑ เดเตเดฎเดพเดฑเตเดฑเด เดเดฐเดเดญเดฟเดเตเดเตเดจเตเดจเต.
เดชเดพเดเตเดเดฑเตเดฑเดฟเตปเตเดฑเต เดฐเดธเตเดคเต เดชเดฟเดฏเตผ เด เดเดเตเดเดฐเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒเตเดเตเดเดฟเตฝ, เดเดฐเต เดธเดฎเดฏเดชเดฐเดฟเดงเดฟเดเตเดเต เดถเตเดทเด TCP เด เดคเต เดตเตเดฃเตเดเตเด เด เดฏเดฏเตเดเตเดเตเดจเตเดจเต.
เดเดจเตเดคเตเดเตเดฃเตเดเดพเดฃเต SYN เดเตเดเตเดเดฟเดเตพ เดเดชเตเดชเตเดดเตเด เดเดชเดฏเตเดเดฟเดเตเดเดพเดคเตเดคเดคเต?
เดเดจเตเดจเดพเดฎเดคเดพเดฏเดฟ, SYNACK เด เดฒเตเดฒเตเดเตเดเดฟเตฝ ACK เดจเดทเตโเดเดชเตเดชเตเดเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ, เด เดคเต เดตเตเดฃเตเดเตเด เด เดฏเดฏเตโเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดจเดฟเดเตเดเตพ เดเดพเดคเตเดคเดฟเดฐเดฟเดเตเดเตเดฃเตเดเดฟเดตเดฐเตเด - เดเดฃเดเตเดทเตป เดธเดเตเดเตเดเดฐเดฃเด เดฎเดจเตเดฆเดเดคเดฟเดฏเดฟเดฒเดพเดเตเด. เดฐเดฃเตเดเดพเดฎเดคเดพเดฏเดฟ, SYN เดชเดพเดเตเดเตเดเดฟเตฝ - เด เดคเดฟเตฝ เดฎเดพเดคเตเดฐเด! - เดเดฃเดเตเดทเตปเตเดฑเต เดคเตเดเตผเดจเตเดจเตเดณเตเดณ เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเต เดฌเดพเดงเดฟเดเตเดเตเดจเตเดจ เดจเดฟเดฐเดตเดงเดฟ เดเดชเตเดทเดจเตเดเตพ เดเตเดฎเดพเดฑเตเดฑเด เดเตเดฏเตเดฏเดชเตเดชเตเดเตเดจเตเดจเต. เดเตปเดเดฎเดฟเดเดเต SYN เดชเดพเดเตเดเดฑเตเดฑเตเดเตพ เดเตผเดฎเตเดฎเดฟเดเตเดเดพเดคเต, เดธเตเตผเดตเตผ เด เดเดชเตเดทเดจเตเดเดณเต เด เดตเดเดฃเดฟเดเตเดเตเดจเตเดจเต; เด เดธเดพเดนเดเดฐเตเดฏเดคเตเดคเดฟเตฝ TCP เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด, เดเดจเตเดจเดพเตฝ เดเตเดฑเดเตเดเดคเต เดชเตเดฐเดพเดฐเดเดญ เดเดเตเดเดคเตเดคเดฟเตฝ เดเดฃเดเตเดทเตปเตเดฑเต เดเตเดฃเดจเดฟเดฒเดตเดพเดฐเด เดเตเดฑเดฏเตเด.
เดเดฐเต เดชเดพเดเตเดเตเดเต เดตเตเดเตเดทเดฃเดเตเดฃเดฟเตฝ, เดเดฐเต XDP เดชเตเดฐเตเดเตเดฐเดพเด เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต เดเตเดฏเตเดฏเดฃเด:
- เดเดฐเต เดเตเดเตเดเดฟ เดเดชเดฏเตเดเดฟเดเตเดเต SYNACK เดเดชเดฏเตเดเดฟเดเตเดเต SYN-เดฒเตเดเตเดเต เดชเตเดฐเดคเดฟเดเดฐเดฟเดเตเดเตเด;
- RST เดเดชเดฏเตเดเดฟเดเตเดเต ACK เดฏเตเดเต เดชเตเดฐเดคเดฟเดเดฐเดฟเดเตเดเตเด (เดตเดฟเดเตเดเตเดฆเดฟเดเตเดเตเด);
- เดฌเดพเดเตเดเดฟเดฏเตเดณเตเดณ เดชเดพเดเตเดเดฑเตเดฑเตเดเตพ เดเดชเตเดเตเดทเดฟเดเตเดเตเด.
เดชเดพเดเตเดเตเดเต เดชเดพเดดเตโเดธเดฟเดเดเต เดธเดนเดฟเดคเด เด เตฝเดเตเดฐเดฟเดคเดคเตเดคเดฟเตปเตเดฑเต เดธเตเดฏเตเดกเตเดเตเดกเต:
ะัะปะธ ััะพ ะฝะต Ethernet,
ะฟัะพะฟัััะธัั ะฟะฐะบะตั.
ะัะปะธ ััะพ ะฝะต IPv4,
ะฟัะพะฟัััะธัั ะฟะฐะบะตั.
ะัะปะธ ะฐะดัะตั ะฒ ัะฐะฑะปะธัะต ะฟัะพะฒะตัะตะฝะฝัั
, (*)
ัะผะตะฝััะธัั ััะตััะธะบ ะพััะฐะฒัะธั
ัั ะฟัะพะฒะตัะพะบ,
ะฟัะพะฟัััะธัั ะฟะฐะบะตั.
ะัะปะธ ััะพ ะฝะต TCP,
ัะฑัะพัะธัั ะฟะฐะบะตั. (**)
ะัะปะธ ััะพ SYN,
ะพัะฒะตัะธัั SYN-ACK ั cookie.
ะัะปะธ ััะพ ACK,
ะตัะปะธ ะฒ acknum ะปะตะถะธั ะฝะต cookie,
ัะฑัะพัะธัั ะฟะฐะบะตั.
ะะฐะฝะตััะธ ะฒ ัะฐะฑะปะธัั ะฐะดัะตั ั N ะพััะฐะฒัะธั
ัั ะฟัะพะฒะตัะพะบ. (*)
ะัะฒะตัะธัั RST. (**)
ะ ะพััะฐะปัะฝัั
ัะปััะฐัั
ัะฑัะพัะธัั ะฟะฐะบะตั.เดเดจเตเดจเต (*) เดจเดฟเดเตเดเตพ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเตปเตเดฑเต เด
เดตเดธเตเดฅ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดเตเดเตเดฃเตเด เดชเตเดฏเดฟเตปเตเดฑเตเดเตพ เด
เดเดฏเดพเดณเดชเตเดชเตเดเตเดคเตเดคเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต - เดเดฆเตเดฏ เดเดเตเดเดคเตเดคเดฟเตฝ, เดเดฐเต SYN เดเตเดเตเดเดฟเดฏเตเดเต เดเดฐเต เดธเตเดเตโเดจเด เดเดจเตเดจ เดจเดฟเดฒเดฏเดฟเตฝ เดเดฐเต TCP เดนเดพเตปเดกเตโเดทเตเดเตเดเต เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตเดจเตเดจเดคเดฟเดฒเตเดเต เดจเดฟเดเตเดเตพเดเตเดเต เด
เดต เดเตเดเดพเดคเต เดคเดจเตเดจเต เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเตเด.
เดธเตเดฅเดฒเดคเตเดคเตเดคเดจเตเดจเต (**), เดเดเตเดเตพเดเตเดเต เดเดฐเต เดฎเตเดถ เดเดฒเตเดฒเตเดเตเดเดฟเดฒเตเด, เดเดเตเดเตพ เดชเดพเดเตเดเดฑเตเดฑเต เดเดดเดฟเดตเดพเดเตเดเตเด.
TCP เดนเดพเตปเดกเตโเดทเตเดเตเดเต เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตเดจเตเดจเต
เดชเดพเดเตเดเตเดเต เดชเดพเดดเตโเดธเต เดเตเดฏเตเดฏเตเดเดฏเตเด เดเตเดกเต เดธเตเดฅเดฟเดฐเตเดเดฐเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต
เดเดเตเดเตพเดเตเดเต เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเต เดนเตเดกเตผ เดเดเดจเดเตพ เดเดตเดถเตเดฏเดฎเดพเดฃเต: เดเดฅเตผเดจเตเดฑเตเดฑเต (uapi/linux/if_ether.h), IPv4 (uapi/linux/ip.h) เดเตเดเดพเดคเต TCP (uapi/linux/tcp.h). เดเดคเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเตเดเตเด เดชเดฟเดถเดเตเดเตพ เดเดพเดฐเดฃเด เดเดจเดฟเดเตเดเต เดฐเดฃเตเดเดพเดฎเดคเตเดคเตเดคเต เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเดพเตป เดเดดเดฟเดเตเดเดฟเดฒเตเดฒ atomic64_t, เดเดจเดฟเดเตเดเต เดเดตเดถเตเดฏเดฎเดพเดฏ เดจเดฟเตผเดตเดเดจเดเตเดเตพ เดเตเดกเดฟเดฒเตเดเตเดเต เดชเดเตผเดคเตเดคเตเดฃเตเดเดฟ เดตเดจเตเดจเต.
เดเตเตผเดฃเดฒเดฟเดฒเต eBPF เดตเตเดฐเดฟเดซเดฏเตผ เดฌเดพเดเตเดเตโเดเตเดฐเดพเดเตเดเดฟเดเดเต เดจเดฟเดฐเตเดงเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเดพเตฝ, เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ, เดฒเตเดชเตเดชเตเดเดณเตเด เดซเดเดเตโเดทเตป เดเตเดณเตเดเดณเตเด, เดฑเตเดกเดฌเดฟเดฒเดฟเดฑเตเดฑเดฟเดเตเดเดพเดฏเดฟ C-เดฏเดฟเตฝ เดนเตเดฒเตเดฑเตเดฑเต เดเตเดฏเตโเดคเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดเดฒเตเดฒเดพ เดซเดเดเตโเดทเดจเตเดเดณเตเด เดเตเตพ เดชเตเดฏเดฟเตปเตเดฑเดฟเตฝ เดเตปเดฒเตเตป เดเตเดฏเตเดคเดฟเดฐเดฟเดเตเดเดฃเด.
#define INTERNAL static __attribute__((always_inline))เดฎเดพเดเตเดฐเต LOG() เดฑเดฟเดฒเตเดธเต เดฌเดฟเตฝเดกเดฟเดฒเต เดชเตเดฐเดฟเตปเตเดฑเดฟเดเดเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเดเตเดเตเดจเตเดจเต.
เดชเตเดฐเตเดเตเดฐเดพเด เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเดณเตเดเต เดเดฐเต เดเตบเดตเตเดฏเตผ เดเดฃเต. เดเดฐเตเดจเตเดจเดฟเดจเตเด เดเดฐเต เดชเดพเดเตเดเดฑเตเดฑเต เดฒเดญเดฟเดเตเดเตเดจเตเดจเต, เด
เดคเดฟเตฝ เด
เดจเตเดฌเดจเตเดง เดฒเตเดตเตฝ เดนเตเดกเตผ เดนเตเดฒเตเดฑเตเดฑเต เดเตเดฏเตเดฏเตเดจเตเดจเต, เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, process_ether() เด
เดคเต เดจเดฟเดฑเดฏเตเดฎเตเดจเตเดจเต เดชเตเดฐเดคเตเดเตเดทเดฟเดเตเดเตเดจเตเดจเต ether. เดซเตเตฝเดกเต เดตเดฟเดถเดเดฒเดจเดคเตเดคเดฟเตปเตเดฑเต เดซเดฒเดเตเดเดณเต เด
เดเดฟเดธเตเดฅเดพเดจเดฎเดพเดเตเดเดฟ, เดซเดเดเตเดทเดจเต เดชเดพเดเตเดเดฑเตเดฑเดฟเดจเต เดเดฏเตผเดจเตเดจ เดคเดฒเดคเตเดคเดฟเดฒเตเดเตเดเต เดเตเดฎเดพเดฑเดพเตป เดเดดเดฟเดฏเตเด. เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเตปเตเดฑเต เดซเดฒเด XDP เดชเตเดฐเดตเตผเดคเตเดคเดจเดฎเดพเดฃเต. เดเดชเตเดชเตเตพ, SYN, ACK เดนเดพเตปเดกเตโเดฒเดฑเตเดเตพ เดเดฒเตเดฒเดพ เดชเดพเดเตเดเดฑเตเดฑเตเดเดณเตเด เดเตเดฎเดพเดฑเตเดจเตเดจเต.
struct Packet {
struct xdp_md* ctx;
struct ethhdr* ether;
struct iphdr* ip;
struct tcphdr* tcp;
};
INTERNAL int process_tcp_syn(struct Packet* packet) { return XDP_PASS; }
INTERNAL int process_tcp_ack(struct Packet* packet) { return XDP_PASS; }
INTERNAL int process_tcp(struct Packet* packet) { ... }
INTERNAL int process_ip(struct Packet* packet) { ... }
INTERNAL int
process_ether(struct Packet* packet) {
struct ethhdr* ether = packet->ether;
LOG("Ether(proto=0x%x)", bpf_ntohs(ether->h_proto));
if (ether->h_proto != bpf_ntohs(ETH_P_IP)) {
return XDP_PASS;
}
// B
struct iphdr* ip = (struct iphdr*)(ether + 1);
if ((void*)(ip + 1) > (void*)packet->ctx->data_end) {
return XDP_DROP; /* malformed packet */
}
packet->ip = ip;
return process_ip(packet);
}
SEC("prog")
int xdp_main(struct xdp_md* ctx) {
struct Packet packet;
packet.ctx = ctx;
// A
struct ethhdr* ether = (struct ethhdr*)(void*)ctx->data;
if ((void*)(ether + 1) > (void*)ctx->data_end) {
return XDP_PASS;
}
packet.ether = ether;
return process_ether(&packet);
}A, B เดเดจเตเดจเต เด เดเดฏเดพเดณเดชเตเดชเตเดเตเดคเตเดคเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดเตเดเตเดเตเดเดณเดฟเดฒเตเดเตเดเต เดเดพเตป เดจเดฟเดเตเดเดณเตเดเต เดถเตเดฐเดฆเตเดง เดเตเดทเดฃเดฟเดเตเดเตเดจเตเดจเต. เดจเดฟเดเตเดเตพ A เดเดจเตเดจเต เดเดฎเตปเตเดฑเต เดเตเดฏเตเดฏเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ, เดชเตเดฐเตเดเตเดฐเดพเด เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเดชเตเดชเตเดเตเด, เดเดจเตเดจเดพเตฝ เดฒเตเดกเต เดเตเดฏเตเดฏเตเดฎเตเดชเตเตพ เดเดฐเต เดธเตเดฅเดฟเดฐเตเดเดฐเดฃ เดชเดฟเดถเดเต เดเดฃเตเดเดพเดเตเด:
Verifier analysis:
<...>
11: (7b) *(u64 *)(r10 -48) = r1
12: (71) r3 = *(u8 *)(r7 +13)
invalid access to packet, off=13 size=1, R7(id=0,off=0,r=0)
R7 offset is outside of the packet
processed 11 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
Error fetching program/map!เดเต เดธเตเดเตเดฐเดฟเดเดเต invalid access to packet, off=13 size=1, R7(id=0,off=0,r=0): เดฌเดซเดฑเดฟเตปเตเดฑเต เดคเตเดเดเตเดเดคเตเดคเดฟเดฒเต เดชเดคเดฟเดฎเตเดจเตเดจเดพเด เดฌเตเดฑเตเดฑเต เดชเดพเดเตเดเดฑเตเดฑเดฟเดจเต เดชเตเดฑเดคเตเดคเดพเดฏเดฟเดฐเดฟเดเตเดเตเดฎเตเดชเตเตพ เดเดเตเดธเดฟเดเตเดฏเตเดทเตป เดชเดพเดคเดเดณเตเดฃเตเดเต. เดเดเตเดเตพ เดเดคเต เดตเดฐเดฟเดฏเตเดเตเดเตเดฑเดฟเดเตเดเดพเดฃเต เดธเดเดธเดพเดฐเดฟเดเตเดเตเดจเตเดจเดคเตเดจเตเดจเต เดฒเดฟเดธเตเดฑเตเดฑเดฟเดเดเดฟเตฝ เดจเดฟเดจเตเดจเต เดฎเดจเดธเตเดธเดฟเดฒเดพเดเตเดเดพเตป เดชเตเดฐเดฏเดพเดธเดฎเดพเดฃเต, เดเดจเตเดจเดพเตฝ เดธเตเดดเตเดธเต เดเตเดกเดฟเตปเตเดฑเต เดตเดฐเดฟเดเตพ เดเดพเดฃเดฟเดเตเดเตเดจเตเดจ เดเดฐเต เดจเดฟเตผเดฆเตเดฆเตเดถ เดจเดฎเตเดชเดฑเตเด (12) เดเดฐเต เดกเดฟเดธเตเด
เดธเดเดฌเตเดฒเดฑเตเด เดเดฃเตเดเต:
llvm-objdump -S xdp_filter.o | lessเด เดธเดพเดนเดเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดเดคเต เดตเดฐเดฟเดฏเดฟเดฒเตเดเตเดเต เดตเดฟเดฐเตฝ เดเตเดฃเตเดเตเดจเตเดจเต
LOG("Ether(proto=0x%x)", bpf_ntohs(ether->h_proto));เดชเตเดฐเดถเตเดจเดฎเดพเดฃเตเดจเตเดจเต เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเตเดจเตเดจเต ether. เดเดชเตเดชเตเดดเตเด เดเดเตเดเดจเต เดคเดจเตเดจเตเดฏเดพเดฏเดฟเดฐเดฟเดเตเดเตเด.
SYN-เดจเตเดณเตเดณ เดฎเดฑเตเดชเดเดฟ
เด เดเดเตเดเดคเตเดคเดฟเดฒเต เดฒเดเตเดทเตเดฏเด เดซเดฟเดเตเดธเดกเต เดเดชเดฏเตเดเดฟเดเตเดเต เดถเดฐเดฟเดฏเดพเดฏ เดธเดฟเดจเดพเดเตเดเต เดชเดพเดเตเดเดฑเตเดฑเต เดธเตเดทเตเดเดฟเดเตเดเตเด เดเดจเตเดจเดคเดพเดฃเต seqnum, เดญเดพเดตเดฟเดฏเดฟเตฝ SYN เดเตเดเตเดเดฟ เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเดเตเดเตเด. เดเดฒเตเดฒเดพ เดฎเดพเดฑเตเดฑเดเตเดเดณเตเด เดธเดเดญเดตเดฟเดเตเดเตเดจเตเดจเดคเต process_tcp_syn() เดชเดฐเดฟเดธเดฐ เดชเตเดฐเดฆเตเดถเดเตเดเดณเตเด.
เดชเดพเดเตเดเตเดเต เดธเตเดฅเดฟเดฐเตเดเดฐเดฃเด
เดตเดฟเดเดฟเดคเตเดฐเดฎเตเดจเตเดจเต เดชเดฑเดฏเดเตเดเต, เดเดฑเตเดฑเดตเตเด เดถเตเดฐเดฆเตเดงเตเดฏเดฎเดพเดฏ เดตเดฐเดฟ เดเดคเดพ, เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เด เดคเดฟเดจเตเดณเตเดณ เดตเตเดฏเดพเดเตเดฏเดพเดจเด:
/* Required to verify checksum calculation */
const void* data_end = (const void*)ctx->data_end;เดเตเดกเดฟเตปเตเดฑเต เดเดฆเตเดฏ เดชเดคเดฟเดชเตเดชเต เดเดดเตเดคเตเดฎเตเดชเตเตพ, 5.1 เดเตเตผเดฃเตฝ เดเดชเดฏเตเดเดฟเดเตเดเต, เดตเตเดฐเดฟเดซเดฏเดฑเดฟเดจเต เดคเดฎเตเดฎเดฟเตฝ เดตเตเดฏเดคเตเดฏเดพเดธเดฎเตเดฃเตเดเต data_end ะธ (const void*)ctx->data_end. เดเดดเตเดคเตเดจเตเดจ เดธเดฎเดฏเดคเตเดคเต, เดเตเตผเดฃเตฝ 5.3.1 เดจเต เด เดชเตเดฐเดถเตเดจเด เดเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดฒเตเดฒ. เดเดเดชเตเดฒเตผ เดเดฐเต เดซเตเตฝเดกเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดฟ เดเดฐเต เดฒเตเดเตเดเตฝ เดตเตเดฐเดฟเดฏเดฌเดฟเดณเดฟเดฒเตเดเตเดเต เดเดเตเดธเดธเต เดเตเดฏเตเดคเดฟเดฐเดฟเดเตเดเดพเตป เดธเดพเดงเตเดฏเดคเดฏเตเดฃเตเดเต. เดเดฅเดฏเตเดเต เดงเดพเตผเดฎเตเดฎเดฟเดเดค: เดงเดพเดฐเดพเดณเด เดจเตเดธเตเดฑเตเดฑเดฟเดเดเต เดเดณเตเดณเดชเตเดชเตเตพ เดเตเดกเต เดฒเดณเดฟเดคเดฎเดพเดเตเดเตเดจเตเดจเดคเต เดธเดนเดพเดฏเดฟเดเตเดเตเด.
เด
เดเตเดคเตเดคเดคเต เดตเตเดฐเดฟเดซเดฏเดฑเดฟเตปเตเดฑเต เดฎเดนเดคเตเดตเดคเตเดคเดฟเดจเดพเดฏเตเดณเตเดณ เดชเดคเดฟเดตเต เดฆเตเตผเดเตเดฏ เดชเดฐเดฟเดถเตเดงเดจเดเดณเดพเดฃเต; เด MAX_CSUM_BYTES เดเตเดตเดเต.
const u32 ip_len = ip->ihl * 4;
if ((void*)ip + ip_len > data_end) {
return XDP_DROP; /* malformed packet */
}
if (ip_len > MAX_CSUM_BYTES) {
return XDP_ABORTED; /* implementation limitation */
}
const u32 tcp_len = tcp->doff * 4;
if ((void*)tcp + tcp_len > (void*)ctx->data_end) {
return XDP_DROP; /* malformed packet */
}
if (tcp_len > MAX_CSUM_BYTES) {
return XDP_ABORTED; /* implementation limitation */
}เดชเดพเดเตเดเตเดเต เดคเตเดฑเดเตเดเตเดจเตเดจเต
เดเดเตเดเตพ เดชเตเดฐเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต seqnum ะธ acknum, ACK เดธเดเตเดเดฎเดพเดเตเดเตเด (SYN เดเดคเดฟเดจเดเด เดธเดเตเดเตเดเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต):
const u32 cookie = 42;
tcp->ack_seq = bpf_htonl(bpf_ntohl(tcp->seq) + 1);
tcp->seq = bpf_htonl(cookie);
tcp->ack = 1;TCP เดชเตเตผเดเตเดเตเดเตพ, IP เดตเดฟเดฒเดพเดธเด, MAC เดตเดฟเดฒเดพเดธเดเตเดเตพ เดเดจเตเดจเดฟเดต เดธเตเดตเดพเดชเตเดชเต เดเตเดฏเตเดฏเตเด. XDP เดชเตเดฐเตเดเตเดฐเดพเดฎเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเตเดฑเตเดฑเดพเตปเดกเตเตผเดกเต เดฒเตเดฌเตเดฐเดฑเดฟ เดเดเตเดธเดธเต เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเดฟเดฒเตเดฒ, เด
เดคเดฟเดจเดพเตฝ memcpy() - เดเตเดฒเดพเดเต เดเตปเดเตเดฐเดฟเตปเดธเดฟเดเตโเดธเต เดฎเดฑเดฏเตเดเตเดเตเดจเตเดจ เดเดฐเต เดฎเดพเดเตเดฐเต.
const u16 temp_port = tcp->source;
tcp->source = tcp->dest;
tcp->dest = temp_port;
const u32 temp_ip = ip->saddr;
ip->saddr = ip->daddr;
ip->daddr = temp_ip;
struct ethhdr temp_ether = *ether;
memcpy(ether->h_dest, temp_ether.h_source, ETH_ALEN);
memcpy(ether->h_source, temp_ether.h_dest, ETH_ALEN);เดเตเดเตเดเตเดธเด เดตเตเดฃเตเดเตเด เดเดฃเดเตเดเตเดเตเดเตเดเตฝ
IPv4, TCP เดเตเดเตเดเตเดธเด เดเดจเตเดจเดฟเดตเดฏเตเดเตเดเต เดคเดฒเดเตเดเตเดเตเดเตเดเดณเดฟเดฒเต เดเดฒเตเดฒเดพ 16-เดฌเดฟเดฑเตเดฑเต เดตเดพเดเตเดเตเดเดณเตเด เดเตเตผเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต, เดเตเดเดพเดคเต เดคเดฒเดเตเดเตเดเตเดเตเดเดณเตเดเต เดตเดฒเตเดชเตเดชเด เด เดตเดฏเดฟเตฝ เดเดดเตเดคเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต, เด เดคเดพเดฏเดคเต, เดเดเดชเตเตฝ เดธเดฎเดฏเดคเตเดคเต เด เดฑเดฟเดฏเดฟเดฒเตเดฒ. เดเดคเต เดเดฐเต เดชเตเดฐเดถเตเดจเดฎเดพเดฃเต, เดเดพเดฐเดฃเด เดตเตเดฐเดฟเดซเดฏเตผ เดธเดพเดงเดพเดฐเดฃ เดฒเตเดชเตเดชเดฟเดจเต เดฌเตเดฃเตเดเดฑเดฟ เดตเตเดฐเดฟเดฏเดฌเดฟเดณเดฟเดฒเตเดเตเดเต เดเดดเดฟเดตเดพเดเตเดเดฟเดฒเตเดฒ. เดเดจเตเดจเดพเตฝ เดคเดฒเดเตเดเตเดเตเดเตเดเดณเตเดเต เดตเดฒเตเดชเตเดชเด เดชเดฐเดฟเดฎเดฟเดคเดฎเดพเดฃเต: เดเดฐเตเดจเตเดจเดฟเดจเตเด 64 เดฌเตเดฑเตเดฑเตเดเตพ เดตเดฐเต. เดจเดฟเดเตเดเตพเดเตเดเต เดเดฐเต เดจเดฟเดถเตเดเดฟเดค เดเดฃเตเดฃเด เดเดตเตผเดคเตเดคเดจเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดเดฐเต เดฒเตเดชเตเดชเต เดเดฃเตเดเดพเดเตเดเดพเด, เด เดคเต เดจเตเดฐเดคเตเดคเต เด เดตเดธเดพเดจเดฟเดเตเดเตเด.
เดเดฃเตเดเตเดจเตเดจเต เดเดพเตป เดถเตเดฐเดฆเตเดงเดฟเดเตเดเตเดจเตเดจเต เดชเดพเดเตเดเตเดเตเดเดณเตเดเต เดจเดฟเดถเตเดเดฟเดค เดตเดพเดเตเดเตเดเตพ เดฎเดพเดคเตเดฐเด เดฎเดพเดฑเตเดฑเดฟเดฏเดพเตฝ เดเตเดเตเดเตเดธเด เดญเดพเดเดฟเดเดฎเดพเดฏเดฟ เดเดเตเดเดจเต เดตเตเดฃเตเดเตเด เดเดฃเดเตเดเดพเดเตเดเดพเด เดเดจเตเดจเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเต. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เดฐเตเดคเดฟ เดธเดพเตผเดตเดคเตเดฐเดฟเดเดฎเดฒเตเดฒ, เดจเดเดชเตเดชเดพเดเตเดเตฝ เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเดพเตป เดเตเดเตเดคเตฝ เดฌเตเดฆเตเดงเดฟเดฎเตเดเตเดเดพเดฏเดฟเดฐเดฟเดเตเดเตเด.
เดเตเดเตเดเตเดธเด เดเดฃเดเตเดเตเดเตเดเตเดเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดจเด:
#define MAX_CSUM_WORDS 32
#define MAX_CSUM_BYTES (MAX_CSUM_WORDS * 2)
INTERNAL u32
sum16(const void* data, u32 size, const void* data_end) {
u32 s = 0;
#pragma unroll
for (u32 i = 0; i < MAX_CSUM_WORDS; i++) {
if (2*i >= size) {
return s; /* normal exit */
}
if (data + 2*i + 1 + 1 > data_end) {
return 0; /* should be unreachable */
}
s += ((const u16*)data)[i];
}
return s;
}เดเดเตเดเดฟเดฒเตเด size เดเตเดณเดฟเดเดเต เดเตเดกเต เดเดชเดฏเตเดเดฟเดเตเดเต เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเดฑเดชเตเดชเดฟเดเตเดเดพเตฝ, เดฐเดฃเตเดเดพเดฎเดคเตเดคเต เดเดเตเดธเดฟเดฑเตเดฑเต เดตเตเดฏเดตเดธเตเดฅ เดเดตเดถเตเดฏเดฎเดพเดฃเต, เด
เดคเดฟเดจเดพเตฝ เดตเตเดฐเดฟเดซเดฏเตผเดเตเดเต เดฒเตเดชเตเดชเดฟเตปเตเดฑเต เดชเตเตผเดคเตเดคเตเดเดฐเดฃเด เดคเตเดณเดฟเดฏเดฟเดเตเดเดพเดจเดพเดเตเด.
32-เดฌเดฟเดฑเตเดฑเต เดตเดพเดเตเดเตเดเตพเดเตเดเต, เดเดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดชเดคเดฟเดชเตเดชเต เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตเดจเตเดจเต:
INTERNAL u32
sum16_32(u32 v) {
return (v >> 16) + (v & 0xffff);
}เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดเตเดเตเดเตเดธเด เดตเตเดฃเตเดเตเด เดเดฃเดเตเดเดพเดเตเดเตเดเดฏเตเด เดชเดพเดเตเดเดฑเตเดฑเต เดคเดฟเดฐเดฟเดเต เด เดฏเดฏเตเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต:
ip->check = 0;
ip->check = carry(sum16(ip, ip_len, data_end));
u32 tcp_csum = 0;
tcp_csum += sum16_32(ip->saddr);
tcp_csum += sum16_32(ip->daddr);
tcp_csum += 0x0600;
tcp_csum += tcp_len << 8;
tcp->check = 0;
tcp_csum += sum16(tcp, tcp_len, data_end);
tcp->check = carry(tcp_csum);
return XDP_TX;เดซเดเดเตเดทเตป carry() RFC 32 เด
เดจเตเดธเดฐเดฟเดเตเดเต, 16-เดฌเดฟเดฑเตเดฑเต เดตเดพเดเตเดเตเดเดณเตเดเต 791-เดฌเดฟเดฑเตเดฑเต เดคเตเดเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฐเต เดเตเดเตเดเตเดธเด เดเดฃเตเดเดพเดเตเดเตเดจเตเดจเต.
TCP เดนเดพเตปเดกเตโเดทเตเดเตเดเต เดธเตเดฅเดฟเดฐเตเดเดฐเดฃเด
เดซเดฟเตฝเดเตเดเตผ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดเดฐเต เดเดฃเดเตเดทเตป เดธเตเดฅเดพเดชเดฟเดเตเดเตเดจเตเดจเต netcat, เด
เดตเดธเดพเดจ ACK เดเดดเดฟเดตเดพเดเตเดเตเดจเตเดจเต, เด
เดคเดฟเดฒเตเดเตเดเต Linux เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเต เดธเตเดฑเตเดฑเดพเดเตเดเดฟเดจเต SYN เดฒเดญเดฟเดเตเดเดพเดคเตเดคเดคเดฟเดจเดพเตฝ เดเดฐเต RST เดชเดพเดเตเดเดฑเตเดฑเต เดเดชเดฏเตเดเดฟเดเตเดเต เดชเตเดฐเดคเดฟเดเดฐเดฟเดเตเดเต - เด
เดคเต เดเดฐเต SYNACK เดเดฏเดฟ เดชเดฐเดฟเดตเตผเดคเตเดคเดจเด เดเตเดฏเตโเดคเต เดคเดฟเดฐเดฟเดเต เด
เดฏเดเตเดเต - เดเตเดเดพเดคเต OS-เดจเตเดฑเต เดตเตเดเตเดทเดฃเดเตเดฃเดฟเตฝ, เดเดชเตเดชเตบ เดเดฃเดเตเดทเดจเตเดเดณเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฎเดฟเดฒเตเดฒเดพเดคเตเดค เดเดฐเต เดชเดพเดเตเดเดฑเตเดฑเต เดเดคเตเดคเดฟ.
$ sudo ip netns exec xdp-test nc -nv 192.0.2.1 6666
192.0.2.1 6666: Connection reset by peerเดชเตเตผเดฃเตเดฃเดฎเดพเดฏ เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดเตพ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเต เดจเดฟเดฐเตเดเตเดทเดฟเดเตเดเตเดฃเตเดเดคเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต tcpdump เดเตบ xdp-remote เดเดพเดฐเดฃเด, เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, hping3 เดคเตเดฑเตเดฑเดพเดฏ เดเตเดเตเดเตเดธเดเตเดเดณเตเดเต เดชเตเดฐเดคเดฟเดเดฐเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ.
SYN เดเตเดเตเดเดฟ
เดเดฐเต XDP เดเดพเดดเตเดเดชเตเดชเดพเดเดฟเตฝ, เดธเตเดฅเดฟเดฐเตเดเดฐเดฃเด เดคเดจเตเดจเต เดจเดฟเดธเตเดธเดพเดฐเดฎเดพเดฃเต. เดเดฃเดเตเดเตเดเตเดเตเดเตฝ เด เตฝเดเตเดฐเดฟเดคเด เดชเตเดฐเดพเดเตเดคเดฎเดพเดฃเต, เดเตเดเดพเดคเต เดธเดเตเดเตเตผเดฃเตเดฃเดฎเดพเดฏ เดเดฐเต เดเดเตเดฐเดฎเดฃเดเดพเดฐเดฟเดเตเดเต เดเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดเดเตเดฐเดฎเดฟเดเตเดเดพเตป เดธเดพเดงเตเดฏเดคเดฏเตเดฃเตเดเต. เดเตเตผเดฃเตฝ Linuxเดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดเตเดฐเดฟเดชเตโเดฑเตเดฑเตเดเตเดฐเดพเดซเดฟเดเต เดธเดฟเดชเตเดนเดพเดทเต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต, เดเดจเตเดจเดพเตฝ XDP-เดฏเตโเดเตเดเตเดณเตเดณ เด เดคเดฟเดจเตเดฑเต เดจเดเดชเตเดชเดพเดเตเดเตฝ เดฒเตเดเดจเดคเตเดคเดฟเดจเตเดฑเต เดชเดฐเดฟเดงเดฟเดเตเดเดชเตเดชเตเดฑเดฎเดพเดฃเตเดจเตเดจเต เดตเตเดฏเดเตเดคเดฎเดพเดฃเต.
เดฌเดพเดนเตเดฏ เดเดถเดฏเดตเดฟเดจเดฟเดฎเดฏเดตเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเตเดเตเด เดชเตเดคเดฟเดฏ TODO-เดเตพเดเตเดเดพเดฏเดฟ เด เดตเดคเดฐเดฟเดชเตเดชเดฟเดเตเดเต:
XDP เดชเตเดฐเตเดเตเดฐเดพเดฎเดฟเดจเต เดธเดเดญเดฐเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเดฟเดฒเตเดฒ
cookie_seed(เดเดชเตเดชเดฟเตปเตเดฑเต เดฐเดนเดธเตเดฏ เดญเดพเดเด) เดเดฐเต เดเดเตเดณ เดตเตเดฐเดฟเดฏเดฌเดฟเดณเดฟเตฝ, เดจเดฟเดเตเดเตพเดเตเดเต เดเตเตผเดฃเดฒเดฟเตฝ เดธเดเดญเดฐเดฃเด เดเดตเดถเตเดฏเดฎเดพเดฃเต, เด เดคเดฟเตปเตเดฑเต เดฎเตเดฒเตเดฏเด เดตเดฟเดถเตเดตเดธเดจเตเดฏเดฎเดพเดฏ เดเดจเดฑเตเดฑเตเดฑเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดพเดฒเดพเดเดพเดฒเดเตเดเดณเดฟเตฝ เด เดชเตเดกเตเดฑเตเดฑเต เดเตเดฏเตเดฏเดชเตเดชเตเดเตเด.ACK เดชเดพเดเตเดเดฑเตเดฑเดฟเตฝ SYN เดเตเดเตเดเดฟ เดชเตเดฐเตเดคเตเดคเดชเตเดชเตเดเตเดจเตเดจเตเดเตเดเดฟเตฝ, เดจเดฟเดเตเดเตพ เดเดฐเต เดธเดจเตเดฆเตเดถเด เดชเตเดฐเดฟเตปเตเดฑเต เดเตเดฏเตเดฏเตเดฃเตเดเดคเดฟเดฒเตเดฒ, เดเดจเตเดจเดพเตฝ เด เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเดพเดเตเดเดฑเตเดฑเตเดเตพ เดเตเดฎเดพเดฑเตเดจเตเดจเดคเต เดคเตเดเดฐเตเดจเตเดจเดคเดฟเดจเต เดชเดฐเดฟเดถเตเดงเดฟเดเตเด เดเตเดฒเดฏเตปเตเดฑเดฟเตปเตเดฑเต IP เดเตผเดฎเตเดฎเดฟเดเตเดเตเด.
เดจเดฟเดฏเดฎเดพเดจเตเดธเตเดค เดเตเดฒเดฏเตปเตเดฑเต เดธเตเดฅเดฟเดฐเตเดเดฐเดฃเด:
$ sudoip netns exec xdp-test nc -nv 192.0.2.1 6666
192.0.2.1 6666: Connection reset by peerเดเตเดเตเดเต เดชเดพเดธเดพเดฏเดคเดพเดฏเดฟ เดฒเตเดเตเดเตพ เดเดพเดฃเดฟเดเตเดเตเดจเตเดจเต (flags=0x2 - เดเดคเต SYN เดเดฃเต, flags=0x10 ACK เดเดฃเต):
Ether(proto=0x800)
IP(src=0x20e6e11a dst=0x20e6e11e proto=6)
TCP(sport=50836 dport=6666 flags=0x2)
Ether(proto=0x800)
IP(src=0xfe2cb11a dst=0xfe2cb11e proto=6)
TCP(sport=50836 dport=6666 flags=0x10)
cookie matches for client 20200c0เดชเดฐเดฟเดถเตเดงเดฟเดเตเด IP-เดเดณเตเดเต เดเดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดเดฒเตเดฒเตเดเตเดเดฟเดฒเตเด, SYN เดตเตเดณเตเดณเดชเตเดชเตเดเตเดเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดคเดจเตเดจเต เดเดฐเต เดชเดฐเดฟเดฐเดเตเดทเดฏเตเด เดเดฃเตเดเดพเดเดฟเดฒเตเดฒ, เดเดจเตเดจเดพเตฝ เดคเดพเดดเต เดชเดฑเดฏเตเดจเตเดจ เดเดฎเดพเตปเดกเต เดตเดดเดฟ เดธเดฎเดพเดฐเดเดญเดฟเดเตเด เดเดฐเต ACK เดตเตเดณเตเดณเดชเตเดชเตเดเตเดเดคเตเดคเตเดเตเดณเตเดณ เดชเตเดฐเดคเดฟเดเดฐเดฃเด เดเดคเดพ:
sudo ip netns exec xdp-test hping3 --flood -A -s 1111 -p 2222 192.0.2.1เดฒเตเดเต เดเตปเดเตเดฐเดฟเดเตพ:
Ether(proto=0x800)
IP(src=0x15bd11a dst=0x15bd11e proto=6)
TCP(sport=3236 dport=2222 flags=0x10)
cookie mismatchเดคเตเดฐเตเดฎเดพเดจเด
เดเดฟเดฒเดชเตเดชเตเตพ eBPF เดชเตเดคเตเดตเดพเดฏเตเด XDP เดชเตเดฐเดคเตเดฏเตเดเดฟเดเตเดเตเด เดเดฐเต เดตเดฟเดเดธเดจ เดชเตเดฒเดพเดฑเตเดฑเตโเดซเตเด เดเดจเตเดจเดคเดฟเดฒเตเดชเดฐเดฟ เดเดฐเต เด เดกเตเดตเดพเตปเดธเตเดกเต เด เดกเตเดฎเดฟเดจเดฟเดธเตโเดเตเดฐเตเดฑเตเดฑเดฑเตเดเต เดเดชเดเดฐเดฃเดฎเดพเดฏเดฟ เด เดตเดคเดฐเดฟเดชเตเดชเดฟเดเตเดเดชเตเดชเตเดเตเดจเตเดจเต. เดคเตเตผเดเตเดเดฏเดพเดฏเตเด, XDP เดเดจเตเดจเดคเต เดเตเตผเดฃเตฝ เดตเดดเดฟ เดชเดพเดเตเดเดฑเตเดฑเตเดเดณเตเดเต เดชเตเดฐเตเดธเดธเตเดธเดฟเดเดเต เดคเดเดธเตเดธเดชเตเดชเตเดเตเดคเตเดคเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฐเต เดเดชเดเดฐเดฃเดฎเดพเดฃเต, DPDK, เดฎเดฑเตเดฑเต เดเตเตผเดฃเตฝ เดฌเตเดชเดพเดธเต เดเดชเตเดทเดจเตเดเตพ เดชเตเดฒเตเดฏเตเดณเตเดณ เดเตเตผเดฃเตฝ เดธเตเดฑเตเดฑเดพเดเตเดเดฟเดจเต เดฌเดฆเดฒเดฒเตเดฒ. เดฎเดฑเตเดตเดถเดคเตเดคเต, เดตเดณเดฐเต เดธเดเตเดเตเตผเดฃเตเดฃเดฎเดพเดฏ เดฏเตเดเตเดคเดฟ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเดพเตป XDP เดจเดฟเดเตเดเดณเต เด เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจเต, เดเตเดเดพเดคเต, เดเตเดฐเดพเดซเดฟเดเต เดชเตเดฐเตเดธเดธเตเดธเดฟเดเดเดฟเตฝ เดคเดเดธเตเดธเดฎเดฟเดฒเตเดฒเดพเดคเต เด เดชเตเดกเตเดฑเตเดฑเต เดเตเดฏเตเดฏเดพเตป เดเดณเตเดชเตเดชเดฎเดพเดฃเต. เดตเตเดฐเดฟเดซเดฏเตผ เดตเตเดฏเดเตเดคเดฟเดชเดฐเดฎเดพเดฏเดฟ เดตเดฒเดฟเดฏ เดชเตเดฐเดถเตโเดจเดเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ, เดฏเตเดธเตผเดธเตโเดชเตเดธเต เดเตเดกเดฟเตปเตเดฑเต เดญเดพเดเดเตเดเตพเดเตเดเดพเดฏเดฟ เดเดพเตป เดเดคเต เดจเดฟเดฐเดธเดฟเดเตเดเดฟเดฒเตเดฒ.
เดฐเดฃเตเดเดพเด เดญเดพเดเดคเตเดคเต, เดตเดฟเดทเดฏเด เดฐเดธเดเดฐเดฎเดพเดฃเตเดเตเดเดฟเตฝ, เดเดเตเดเตพ เดชเดฐเดฟเดถเตเดงเดฟเดเตเด เดเตเดฒเดฏเตปเตเดฑเตเดเดณเตเดเตเดฏเตเด เดกเดฟเดธเตเดเดฃเดเตเดทเดจเตเดเดณเตเดเตเดฏเตเด เดชเดเตเดเดฟเด เดชเตเตผเดคเตเดคเดฟเดฏเดพเดเตเดเตเดเดฏเตเด เดเตเดฃเตเดเดฑเตเดเตพ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตเดเดฏเตเด เดซเดฟเตฝเดเตเดเตผ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดเดฐเต เดฏเตเดธเตผเดธเตเดชเตเดธเต เดฏเตเดเตเดเดฟเดฒเดฟเดฑเตเดฑเดฟ เดเดดเตเดคเตเดเดฏเตเด เดเตเดฏเตเดฏเตเด.
เดฑเตเดซเดฑเตปเดธเตเดเตพ:
เด เดตเดฒเดเดฌเด: www.habr.com
