TLDR;
- TCP - สตรีมเชิงต้องใช้การเชื่อมต่อเชื่อถือได้ช้า
- UDP - เชิงข้อความเชื่อมต่อไม่น่าเชื่อถือรวดเร็ว
ก่อนที่เราจะเริ่มต้นให้จำไว้ว่าข้อเสียของบางสิ่งบางอย่างที่มีความต่อเนื่องของข้อดีของมัน มีเครื่องมือที่เหมาะสมสำหรับงานเท่านั้นไม่มียาครอบจักรวาล การอยู่ร่วมกันของ TCP / UDP มานานหลายทศวรรษและด้วยเหตุผล
TCP
มันถูกออกแบบมาให้มีความน่าเชื่อถือสูงและทำงานได้ดีมาก มันซับซ้อนมากเพราะทำงานหนักให้สำเร็จ: พิสูจน์การขนส่งที่เชื่อถือได้ผ่านโปรโตคอล IP ที่ไม่น่าเชื่อถือ
เนื่องจากตรรกะที่ซับซ้อนของ TCP ทั้งหมดถูกห่อหุ้มในสแต็กเครือข่ายคุณจึงไม่ต้องทำอะไรมากมายในระดับแอพพลิเคชั่น
เมื่อคุณส่งข้อมูลผ่าน TCP คุณเขียนสตรีมไบต์ไปยังซ็อกเก็ตที่ผู้ส่งซึ่งจะถูกแบ่งเป็นแพ็คเก็ตส่งผ่านสแต็กและส่งผ่านสาย ในแพ็คเก็ตด้านผู้รับได้รับประกอบกันอีกครั้งในกระแสไบต์ต่อเนื่อง
การรักษาสิ่งที่เป็นนามธรรมที่ดีนี้มีค่าใช้จ่ายในแง่ของความซับซ้อนและประสิทธิภาพ หากแพ็คเก็ตที่ 1 จากสตรีมไบต์สูญหายผู้รับจะชะลอการประมวลผลของแพ็กเก็ตต่อมาแม้จะมาถึงแล้ว
นอกจากนี้เพื่อให้เชื่อถือได้ TCP จะดำเนินการสิ่งนี้:
- TCP ต้องการการเชื่อมต่อที่สร้างไว้แล้วซึ่งต้องใช้การปัดเศษ 3 รอบ ("handshake 3-way" "infamous")
- TCP มีคุณสมบัติที่เรียกว่า "การเริ่มต้นช้า" เมื่อค่อยๆเพิ่มอัตราการส่งข้อมูลหลังจากสร้างการเชื่อมต่อเพื่อให้ผู้รับสามารถรับข้อมูลได้ทัน
- ทุกแพ็กเก็ตที่ส่งจะต้องได้รับการยอมรับมิฉะนั้นผู้ส่งจะหยุดส่งข้อมูลเพิ่มเติม
- และในและในและใน ...
ทั้งหมดนี้ถูกทำให้รุนแรงขึ้นในเครือข่ายไร้สายที่ไม่น่าเชื่อถือช้าในขณะที่ TCP ได้รับการออกแบบสำหรับเครือข่ายแบบใช้สายที่สามารถคาดการณ์ความล่าช้าได้ นอกจากนี้หลายคนพูดถึงแล้วสำหรับบางสิ่งที่ TCP ไม่ทำงานเลย (DHCP) อย่างไรก็ตามที่เกี่ยวข้อง TCP ยังทำงานได้ดีเป็นพิเศษ
การใช้เมลที่เปรียบเทียบเซสชัน TCP นั้นคล้ายคลึงกับการเล่าเรื่องถึงเลขานุการของคุณซึ่งแบ่งเป็นอีเมลและส่งผ่านบริการอีเมลเส็งเคร็งไปยังผู้เผยแพร่ อีกด้านหนึ่งเลขานุการอีกคนรวบรวมอีเมลเป็นข้อความชิ้นเดียว จดหมายบางฉบับหายไปบางอันเกิดความเสียหายดังนั้นขั้นตอนที่ซับซ้อนมากจึงจำเป็นสำหรับการจัดส่งที่เชื่อถือได้และเรื่องราว 10 หน้าของคุณอาจใช้เวลานานในการเข้าถึงผู้เผยแพร่ของคุณ
UDP
ในทางกลับกัน UDP นั้นเป็นแบบข้อความดังนั้นผู้รับจะเขียนข้อความ (แพ็คเก็ต) ไปยังซ็อกเก็ตจากนั้นมันจะถูกส่งไปยังผู้รับตามที่เป็นโดยไม่ต้องแยก / ประกอบ
เมื่อเปรียบเทียบกับ TCP ข้อมูลจำเพาะนั้นง่ายมาก โดยพื้นฐานแล้วสิ่งที่คุณทำคือการเพิ่มการตรวจสอบแพ็คเก็ตเพื่อให้ผู้รับสามารถตรวจสอบความเสียหาย คุณเป็นผู้พัฒนาซอฟต์แวร์ ตอนนี้อ่านข้อมูลจำเพาะ TCP จำนวนมากและลองคิดถึงการนำบางส่วนมาใช้ใหม่
บางคนใช้วิธีนี้และได้ผลลัพธ์ที่ดีมากจนถึงจุดที่ HTTP / 3 ใช้ QUIC - โปรโตคอลที่ใช้ UDP อย่างไรก็ตามนี่เป็นข้อยกเว้นเพิ่มเติม แอปพลิเคชันทั่วไปของ UDP คือการสตรีมเสียง / วิดีโอและแอปพลิเคชันการประชุมเช่น Skype, Zoom หรือ Google Hangout ซึ่งแพ็กเก็ตที่สูญเสียนั้นไม่สำคัญเมื่อเทียบกับความล่าช้าที่ TCP แนะนำ