HTTP over UDP - เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบตเปˆเบ”เบตเบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™ QUIC

HTTP over UDP - เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบตเปˆเบ”เบตเบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™ QUIC

QUIC (เบเบฒเบ™โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹เบญเบดเบ™โ€‹เป€เบ•เบตโ€‹เป€เบ™เบฑเบ” UDP เบ”เปˆเบงเบ™โ€‹) เป€เบ›เบฑเบ™โ€‹เป‚เบ›โ€‹เบฃโ€‹เป‚เบ•โ€‹เบ„เบญเบ™โ€‹เป€เบ—เบดเบ‡โ€‹เบ‚เบญเบ‡ UDP เบ—เบตเปˆโ€‹เบชเบฐโ€‹เบซเบ™เบฑเบšโ€‹เบชเบฐโ€‹เบซเบ™เบนเบ™โ€‹เบ„เบธเบ™โ€‹เบชเบปเบกโ€‹เบšเบฑเบ”โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบ‚เบญเบ‡ TCPโ€‹, TLS เปเบฅเบฐ HTTP / 2 เปเบฅเบฐโ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบšเบฑเบ™โ€‹เบซเบฒโ€‹เบชเปˆเบงเบ™โ€‹เปƒเบซเบเปˆโ€‹เบ‚เบญเบ‡โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹. เบกเบฑเบ™เบกเบฑเบเบˆเบฐเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบžเบดเบ—เบตเบเบฒเบ™เปƒเบซเบกเปˆเบซเบผเบท "เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡", เปเบ•เปˆเบกเบฑเบ™เป„เบ”เป‰เบœเปˆเบฒเบ™เป„เบฅเบเบฐเบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบกเบฒเบ”เบปเบ™เบ™เบฒเบ™: เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป„เบ”เป‰เบ”เปเบฒเป€เบ™เบตเบ™เบกเบฒเป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบซเบผเบฒเบเบเบงเปˆเบฒ 7 เบ›เบต. เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เป€เบงเบฅเบฒเบ™เบตเป‰, เบญเบฐเบ™เบธเบชเบฑเบ™เบเบฒเบšเปเปˆเป„เบ”เป‰เบˆเบฑเบ”เบเบฒเบ™เปƒเบซเป‰เบเบฒเบเป€เบ›เบฑเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เปเบ•เปˆเบเบฑเบ‡เปเบœเปˆเบ‚เบฐเบซเบเบฒเบเบขเปˆเบฒเบ‡เบเบงเป‰เบฒเบ‡เบ‚เบงเบฒเบ‡. เบ•เบปเบงเบขเปˆเบฒเบ‡, QUIC เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป‚เบ”เบเบเบฑเบเปƒเบซเบเปˆเป€เบŠเบฑเปˆเบ™ Google เปเบฅเบฐ Facebook เป€เบžเบทเปˆเบญเป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เปเบฅเบฐเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒเปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบกเบทเบ–เบท, เปเบฅเบฐ IETF เบ›เบฐเบเบฒเบ” fork เบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™เบ‚เบญเบ‡เบ•เบปเบ™เป€เบ›เบฑเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบšเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ HTTP / 3 (เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ HTTP / 2 เปƒเบŠเป‰. เบžเบฝเบ‡โ€‹เปเบ•เปˆ 44.8โ€‹% เบžเบทเป‰เบ™โ€‹เบ—เบตเปˆ).

เปเบ™เบงเบ„เบดเบ”

QUIC เป„เบ”เป‰เบ–เบทเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบ›เบฑเบ™เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™ TCP เปเบšเบšเป€เบเบปเปˆเบฒ, เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบ–เบทเบเบญเบญเบเปเบšเบšเปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบกเบตเบชเบฒเบเบ—เบตเปˆเบกเบตเบเบฒเบ™เบชเบนเบ™เป€เบชเบเบ•เปˆเปเบฒ. TCP เบˆเบฑเบ”เบชเบปเปˆเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ–เป‰เบฒเบŠเบธเบ”เบซเบ™เบถเปˆเบ‡เบซเบฒเบเป„เบ›, เปเบ–เบงเบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฐเบ–เบทเบเบขเบธเบ” (เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบ—เบฒเบ‡เบซเบปเบง), เป€เบŠเบดเปˆเบ‡เบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบ—เบฒเบ‡เบฅเบปเบšเบ•เปเปˆเบ„เบธเบ™เบ™เบฐเบžเบฒเบšเปเบฅเบฐเบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ. เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบชเบนเบ™เป€เบชเบเบญเบฑเบ™เปƒเบซเบเปˆเบซเบผเบงเบ‡, เป€เบ„เบทเบญเบ‚เปˆเบฒเบเป‚เบ—เบฅเบฐเบชเบฑเบšเบกเบทเบ–เบทเบˆเบฐเปƒเบŠเป‰ buffers เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบŠเป‰เปเบฒเบŠเป‰เบญเบ™เปเบฅเบฐเบเบฒเบ™เบ•เบญเบšเป‚เบ•เป‰เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™ (bufferbloat). เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, TCP เปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบผเบฒเบเปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ: เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป SYN / ACK เปเบฅเบฐ TLS เป„เบ›เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบชเบฒเบกเป„เบ›เบเบฑเบšเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบซเบ™เบถเปˆเบ‡, เบ”เบฑเปˆเบ‡เบ—เบตเปˆ QUIC เป€เบฎเบฑเบ”.

HTTP over UDP - เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบตเปˆเบ”เบตเบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™ QUIC

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ QUIC เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™ TCP เปเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” TLS 1.3, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฐเบ–เบทเบเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบชเบฐเป€เบซเบกเบต, เปเบฅเบฐเบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบˆเบฒเบฅเบฐเบˆเบญเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบšเปเปˆเบ‡เปˆเบฒเบเบเบงเปˆเบฒเบ–เป‰เบฒเบกเบฑเบ™เบœเปˆเบฒเบ™ HTTPS. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, QUIC เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเบนเปˆเปƒเบ™เบฅเบฐเบ”เบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ, เบเป‰เบญเบ™เบงเปˆเบฒเบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™ TCP stack เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เบˆเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒ เบ•เบฐเบซเบผเบญเบ”เป„เบ›.

เป€เบ–เบดเบ‡เบงเปˆเบฒเบˆเบฐเบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™ multiplexing เปƒเบ™ HTTP / 2, เบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบเบฒเบ™เบชเบฐเบเบฑเบ”เบเบฑเป‰เบ™เบซเบปเบงเบซเบ™เป‰เบฒเป€เบชเบฑเป‰เบ™เบเบฑเบ‡เบ„เบปเบ‡เบขเบนเปˆเบเป‰เบญเบ™เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบˆเบฑเบ”เบชเบปเปˆเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš. QUIC เปเบกเปˆเบ™เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเบนเปˆเป€เบ—เบดเบ‡ UDP, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบฑเบ™เบšเปเปˆเบกเบตเบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™, เปเบฅเบฐเป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™เบšเปเปˆเปƒเบซเป‰เปเบžเบฑเบเป€เบเบฑเบ”เบ–เบทเบเบชเบนเบ™เป€เบชเบเบ•เบฐเบซเบผเบญเบ”เป„เบ›, เบžเบงเบเบกเบฑเบ™เบ–เบทเบเป€เบฅเบเปเบฅเบฐเบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบˆเบธเบšเบฒเบ‡เบชเปˆเบงเบ™เบ‚เบญเบ‡ "เป€เบžเบทเปˆเบญเบ™เบšเป‰เบฒเบ™", เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบŠเป‰เปเบฒเบŠเป‰เบญเบ™. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, QUIC เปเบเบเปเบ–เบง monolithic เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบผเบฒเบเบซเบปเบงเบ‚เปเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ›เบฐเป€เบžเบ”เบ•เปˆเบฒเบ‡เป†เบžเบฒเบเปƒเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ”เบฝเบง. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ–เป‰เบฒเปเบžเบฑเบเป€เบเบฑเบ”เบชเบนเบ™เป€เบชเบ, เบšเบฑเบ™เบซเบฒเบญเบฒเบ”เบˆเบฐเป€เบเบตเบ”เบ‚เบทเป‰เบ™เบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบ„เบดเบงเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™ (เบ•เบปเบงเบขเปˆเบฒเบ‡, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป‚เบญเบ™เป„เบŸเบฅเปŒเบชเบฐเป€เบžเบฒเบฐ):

HTTP over UDP - เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบตเปˆเบ”เบตเบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™ QUIC

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰

เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™, QUIC เป„เบ”เป‰เบ–เบทเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบžเบฒเบเปƒเบ™ Google เปเบฅเบฐเบ–เบทเบเบ›เบฑเบšเปเบ•เปˆเบ‡เบชเปˆเบงเบ™เปƒเบซเบเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบžเบฒเบเปƒเบ™เบšเปเบฅเบดเบชเบฑเบ”. เปƒเบ™เบ›เบต 2013, เบกเบฑเบ™เบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒ IETF เบชเปเบฒเบฅเบฑเบšเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ (เบ—เบตเปˆเบเบฑเบ‡เบ„เบปเบ‡เบขเบนเปˆ), เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เบธเบเบ„เบปเบ™เบชเบฒเบกเบฒเบ”เบกเบตเบชเปˆเบงเบ™เบฎเปˆเบงเบกเปƒเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบญเบฐเบ™เบธเบชเบฑเบ™เบเบฒเป‚เบ”เบเบเบฒเบ™เบชเบฐเป€เบซเบ™เบตเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบ‚เบฒเบ”เบซเบฒเบเป„เบ›. เบ„เบฐเบ™เบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™ IETF เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบเบญเบ‡เบ›เบฐเบŠเบธเบกเบ›เบฐเบˆเปเบฒเบ›เบตเปƒเบ™เป„เบฅเบเบฐเบ—เบตเปˆเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปƒเบซเบกเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบญเบฐเบ™เบธเบกเบฑเบ”เปเบฅเบฐเบเบฒเบ™เบ›เบฐเบ”เบดเบ”เบชเป‰เบฒเบ‡เป„เบ”เป‰เบ–เบทเบเบ›เบถเบเบชเบฒเบซเบฒเบฅเบท. เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” QUIC เบ™เบตเป‰เปเบกเปˆเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ•เบปเป‰เบ™เบ•เปเปเบฅเบฐเบกเบฑเบ™เบญเบตเบ‡เปƒเบชเปˆเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ HTTP / 3 เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบขเบฑเป‰เบ‡เบขเบทเบ™.

เบกเบฒเบฎเบญเบ”เบ›เบฐเบˆเบธ, เบšเปเปˆเบกเบตเบเบฒเบ™เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบฅเบงเบก HTTP / 3 เป€เบ›เบฑเบ™เป‚เบ›เป‚เบ•เบ„เบญเบ™เบ•เบปเป‰เบ™เบ•เป, เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เบเบฑเบ‡เบšเปเปˆเปเบฅเป‰เบงเปเบฅเบฐเป€เบเบทเบญเบšเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™:

HTTP over UDP - เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบตเปˆเบ”เบตเบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™ QUIC

เปเบ•เปˆ QUIC เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ›เบฑเบ™เบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปเบฅเบฐเป€เบŠเบตเบšเป€เบงเบต, เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เป€เบฎเบฑเบ”เบขเปˆเบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบœเบปเบ™เบขเบนเปˆ Uber:

เบ„เปเบฒเป€เบซเบฑเบ™เบ‚เบญเบ‡ Uber เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ™เปเบฒ QUIC

เป€เบžเบทเปˆเบญเบชเบณเป€เบฅเบฑเบ”เบเบฒเบ™เบเบฑเบ‡ QUIC เปเบฅเบฐเบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เบตเปˆเบšเปเปˆเบ”เบต, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ›เปˆเบฝเบ™เปเบ—เบ™ stack เป€เบเบปเปˆเบฒ (HTTP/2 over TLS/TCP) เบ”เป‰เบงเบเป‚เบ›เบฃเป‚เบ•เบ„เป QUIC. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบ Cronet เบˆเบฒเบเบ™เบฑเป‰เบ™ เป‚เบ„เบ‡เบเบฒเบ™ Chromium, เป€เบŠเบดเปˆเบ‡เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš, เบฎเบธเปˆเบ™ Google เบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™ - gQUIC . เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ™เบตเป‰เบเบฑเบ‡เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบ‚เปเป‰เบเปเบฒเบ™เบปเบ” IETF เบซเบผเป‰เบฒเบชเบธเบ”.

เบ—เปเบฒเบญเบดเบ”เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™ Cronet เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เปเบญเบฑเบšเบฏ Android เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš QUIC. เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเปƒเบ™เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบเบซเบผเบฒเบเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰. เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบ›เปˆเบฝเบ™เปเบ—เบฑเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบเป€เบเบปเปˆเบฒเบ—เบตเปˆเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™ OkHttp, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™ Cronet เบžเบฒเบเปƒเบ•เป‰เบเบญเบš OkHttp API. เป‚เบ”เบเบเบฒเบ™เป€เบฎเบฑเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบเบฒเบ™เป‚เบ—เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ (เบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป‚เบ”เบ เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ„เบทเบ™เปƒเปˆ) เปƒเบ™เบฅเบฐเบ”เบฑเบš API.

เบ„เป‰เบฒเบโ€‹เบ„เบทโ€‹เบเบฑเบ™โ€‹เบเบฑเบšโ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบญเบธโ€‹เบ›เบฐโ€‹เบเบญเบ™ Androidโ€‹, เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ” Cronet เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เบเบดเบ” Uber เปƒเบ™ iOSโ€‹, เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบˆเบฐโ€‹เบฅเบฒโ€‹เบˆเบญเบ™ HTTP เบˆเบฒเบโ€‹เป€เบ„เบทเบญโ€‹เบ‚เปˆเบฒเบโ€‹. APIเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ NSURLProtocol. เบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเบกเบตเบ•เบปเบงเบ•เบปเบ™เบ™เบตเป‰, เบชเบฐเปœเบญเบ‡เปƒเบซเป‰เป‚เบ”เบเบกเบนเบ™เบ™เบดเบ—เบด iOS, เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™ URL เบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เป‚เบ›เบฃเป‚เบ•เบ„เป เปเบฅเบฐเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Cronet เป€เบ‚เบปเป‰เบฒเปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป‚เบ”เบเบšเปเปˆเบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเปƒเบ™เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™.

เป€เบญเบปเบฒเบกเบฒเบˆเบฒเบ เบเบฒเบ™เปเบ›เบ™เบตเป‰ เบšเบปเบ”เบ„เบงเบฒเบก Uber

เปƒเบ™ backend เบžเบงเบเป€เบ‚เบปเบฒเบˆเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ QUIC เบœเปˆเบฒเบ™ Google Cloud lb, เป€เบŠเบดเปˆเบ‡ เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบญเบฐเบ™เบธเบชเบฑเบ™เบเบฒ เบ•เบฑเป‰เบ‡เปเบ•เปˆเบเบฒเบ‡เบ›เบต 2018.

เบกเบฑเบ™เบšเปเปˆเปเบ›เบเปƒเบˆเบ—เบตเปˆ Google Cloud เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบตเบเบฑเบšเป‚เบ›เป‚เบ•เบ„เบญเบ™เบ—เบตเปˆเบžเบฑเบ”เบ—เบฐเบ™เบฒเป‚เบ”เบ Google, เปเบ•เปˆเบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ”เปเบ”เปˆ?

Nginx

เบšเปเปˆเบ”เบปเบ™เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰ CloudFlare เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบžเบฐเบเบฒเบเบฒเบกเบ‚เป‰เบฒเบก nginx (เบ—เบตเปˆเบšเปเปˆเบฎเบญเบ‡เบฎเบฑเบš HTTP/3 เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™) เบ”เป‰เบงเบเป€เบ„เบทเปˆเบญเบ‡เบกเบท Quiche เบ‚เบญเบ‡เบกเบฑเบ™. เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบกเปˆเบ™เบกเบตเบขเบนเปˆเปƒเบ™เป„เบŸเบฅเปŒ .patch เบ”เบฝเบง, เป€เบŠเบดเปˆเบ‡เบกเบฒเบžเป‰เบญเบกเบเบฑเบšเบเบฒเบ™เบชเบญเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡:

curl -O https://nginx.org/download/nginx-1.16.1.tar.gz
tar xvzf nginx-1.16.1.tar.gz
git clone --recursive https://github.com/cloudflare/quiche
cd nginx-1.16.1
patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch

เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป‚เบกเบ”เบนเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™

./configure                          	
   	--prefix=$PWD                       	
   	--with-http_ssl_module              	
   	--with-http_v2_module               	
   	--with-http_v3_module               	
   	--with-openssl=../quiche/deps/boringssl 
   	--with-quiche=../quiche
 make

เบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰เบ‡เบฒเบ™เบฎเบญเบ‡เบฎเบฑเบš HTTP/3

events {
    worker_connections  1024;
}

http {
    server {
        # Enable QUIC and HTTP/3.
        listen 443 quic reuseport;

        # Enable HTTP/2 (optional).
        listen 443 ssl http2;

        ssl_certificate      cert.crt;
        ssl_certificate_key  cert.key;

        # Enable all TLS versions (TLSv1.3 is required for QUIC).
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

        # Request buffering in not currently supported for HTTP/3.
        proxy_request_buffering off;

        # Add Alt-Svc header to negotiate HTTP/3.
        add_header alt-svc 'h3-27=":443"; ma=86400';
    }
}

เบกเบฑเบ™เบเบฑเบ‡เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบœเปˆเบฒเบ™ HTTP/3 เปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบ›เบปเบเบเบฐเบ•เบด, เปเบ•เปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป„เบ”เป‰ Chromium Canary เปเบฅเบฐเปเบฅเปˆเบ™เบกเบฑเบ™เบ”เป‰เบงเบเบ—เบธเบ‡ --enable-quic, เป„เบ›เบ—เบตเปˆเป€เบŠเบตเบšเป€เบงเบตเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบซเบผเบท, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบงเบฑเบšเป„เบŠเบ—เปŒ quic.rocks เปเบฅเบฐเป€เบšเบดเปˆเบ‡เบ›เบฐเป€เบžเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปƒเบ™ Developer Tools:
HTTP over UDP - เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบตเปˆเบ”เบตเบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™ QUIC
เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ HTTP / 3 เบกเบฑเบ™เบ–เบทเบเบ‚เบฝเบ™ http2+quic/99, เปเบ•เปˆเบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™.

เป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบŠเบตเบญเบทเปˆเบ™เป†

  • QUIC เบเบฑเบ‡เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ LiteSpeed (เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš Facebook เบœเปˆเบฒเบ™ HTTP/3 เบ—เบตเปˆเบกเบต fanfare เบ—เบตเปˆเบเบดเปˆเบ‡เปƒเบซเบเปˆ) เปเบฅเบฐเบเป‰เบฒเบงเบซเบ™เป‰เบฒ Caddy. Apache เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบกเบฑเบ™เป„เบ”เป‰เป€เบ—เบทเปˆเบญ, เปเบ•เปˆเบงเบฝเบเบ‡เบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบขเบนเปˆ swing เป€เบ•เบฑเบก.
  • 21 เบกเบฑเบ‡เบเบญเบ™เบ›เบฑเบšเบ›เบธเบ‡ เบฎเปˆเบฒเบ‡เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบš WebRTC
  • เบžเบฝเบ‡เปเบ•เปˆเบกเบทเป‰เบญเบทเปˆเบ™ Microsoft เป€เบ›เบตเบ” เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” msquic, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเปเบกเปˆเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฒเบเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ IETF เปเบกเปˆเบ™เบกเบตเบขเบนเปˆ, เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบเป‰เบฒเบงเบซเบ™เป‰เบฒเบญเบฑเบ™เปƒเบซเบเปˆเบซเบผเบงเบ‡เปเบฅเป‰เบง.

เบชเบฐเบซเบฅเบธเบš

HTTP over UDP - เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบตเปˆเบ”เบตเบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™ QUIC

เบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเปƒเบ™ QUIC เปเบกเปˆเบ™เบšเปเปˆเบ„เบปเบ‡เบ—เบตเปˆ, เปเบ•เปˆเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ•เบปเบง, เปเบฅเบฐเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบกเปˆเบ™เบเปเบฒเบฅเบฑเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เบกเบฑเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™. เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบซเบกเปˆเบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™เบˆเบฐเบ›เบฒเบเบปเบ”เบ‚เบถเป‰เบ™เป€เบเบทเบญเบšเบ—เบธเบเป†เป€เบ”เบทเบญเบ™, เปเบฅเบฐเบ—เบธเบเป†เบ›เบตเบกเบตเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบซเบผเบฒเบเบ‚เบถเป‰เบ™เบซเบกเบฑเป‰เบ™เปƒเบˆเบงเปˆเบฒ QUIC เปเบกเปˆเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”. เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบฅเบงเบกเป€เบญเบปเบฒเป‚เบ›เป‚เบ•เบ„เบญเบ™เปƒเบ™ TCP stack เบฎเบธเปˆเบ™เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบšเปเปˆเบŠเป‰เบฒเบซเบผเบทเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฐเบเป‰เบฒเบเป„เบ›เบ—เบตเปˆเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เบตเปˆเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡เปเบฅเบฐเป„เบงเบเบงเปˆเบฒ.

เปเบฅเป‰เบงเบ•เบญเบ™เบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš QUIC เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบซเบผเบทเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เปƒเบซเป‰เบกเบฑเบ™เบเบฑเบšเบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš - เบžเบงเบเป€เบ‚เบปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบเปเบฒเบฅเบฑเบ‡เบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเป‚เบ›เป‚เบ•เบ„เบญเบ™, เปเบฅเบฐเบชเบฐเบ–เบดเบ•เบดเบ—เบตเปˆเบซเบ™เป‰เบฒเป€เบชเบปเป‰เบฒเปƒเบˆเบเบฑเบš caniuse เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบชเบธเบเบซเบผเบฒเบ.

HTTP over UDP - เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบตเปˆเบ”เบตเบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™ QUIC

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™