หากคุณเริ่มเข้าสู่โลกเครือข่ายคอมพิวเตอร์ หรือเคยขุดลึกการตั้งค่าเครือข่ายของแอปพลิเคชันบางตัว คุณน่าจะเคยเห็นคำว่า TCP และ UDP
TCP ย่อมาจาก Transmission Control Protocol และ UDP ย่อมาจาก User Datagram Protocol ทั้งคู่เป็นส่วนหนึ่งของ Internet Protocol Suite TCP และ UDP เป็นวิธีที่แตกต่างกันในการส่งข้อมูลข้ามอินเทอร์เน็ต
แต่แม้รู้ความย่อแล้ว ยากที่จะรู้ว่าควรใช้โปรโตคอลไหน หรือทำไมถึงเลือกอันหนึ่งแทนอีกอัน
ในบทความนี้ เราจะครอบคลุมพื้นฐานเครือข่ายคอมพิวเตอร์ ความแตกต่างระหว่าง TCP และ UDP เมื่อไหร่ควรใช้แต่ละตัว และอื่นๆ
พื้นฐานเครือข่ายคอมพิวเตอร์
ก่อนจะเจาะลึก TCP และ UDP ทำงานอย่างไร ควรรู้พื้นฐานการทำงานของอินเทอร์เน็ต
โดยทั่วไป อินเทอร์เน็ตคือเครือข่ายของอุปกรณ์ที่เชื่อมต่อกัน แต่ละอุปกรณ์ ไม่ว่าจะเป็นสมาร์ทโฟนหรือเซิร์ฟเวอร์ สื่อสารผ่าน Internet Protocol Suite
Internet Protocol Suite คือชุดของโปรโตคอลหรือวิธีการต่างๆ สำหรับอุปกรณ์สื่อสารกัน ทั้ง TCP และ UDP เป็นโปรโตคอลหลักใน Internet Protocol Suite:
อุปกรณ์แต่ละตัวที่เชื่อมต่ออินเทอร์เน็ตมี IP Address เฉพาะตัว และทุกครั้งที่อุปกรณ์สองตัวสื่อสารผ่านอินเทอร์เน็ต พวกมันน่าจะใช้ TCP หรือ UDP
นี่คือการเปรียบเทียบสั้นๆ ระหว่างสองตัว:
สำหรับภาพรวมระดับสูงกว่านี้ของการทำงานอินเทอร์เน็ต ดูวิดีโอ 5 นาทีนี้:
TCP คืออะไร?
TCP หรือ Transmission Control Protocol เป็นโปรโตคอลเครือข่ายที่ใช้กันมากที่สุดออนไลน์ TCP น่าเชื่อถือมาก ใช้สำหรับทุกอย่าง ตั้งแต่เล่นเว็บ (HTTP), ส่งอีเมล (SMTP), และถ่ายโอนไฟล์ (FTP)
TCP ใช้ในสถานการณ์ที่จำเป็นว่าข้อมูลทั้งหมดที่ส่งโดยอุปกรณ์หนึ่ง ต้องถูกรับโดยอีกอุปกรณ์หนึ่งสมบูรณ์สมบูรณ์
ตัวอย่าง: ตอนเข้าชมเว็บไซต์ TCP ใช้เพื่อรับประกันว่าทุกอย่างจากข้อความ รูปภาพ และโค้ดที่ต้องการ render หน้าเว็บ ถึงปลายทาง ถ้าไม่มี TCP รูปภาพหรือข้อความอาจหาย หรือมาถึงลำดับผิด ทำให้หน้าเว็บเสีย
TCP เป็น Connection-Oriented Protocol หมายถึง มันสร้างการเชื่อมต่อระหว่างสองอุปกรณ์ก่อนถ่ายโอนข้อมูล และรักษาการเชื่อมต่อนั้นตลอดกระบวนการถ่ายโอน
เพื่อสร้างการเชื่อมต่อระหว่างสองอุปกรณ์ TCP ใช้วิธีที่เรียกว่า Three-Way Handshake:
ตัวอย่าง: เพื่ออ่านบทความนี้บนอุปกรณ์ของคุณ อุปกรณ์ของคุณส่งข้อความไป Server freeCodeCamp News เรียกว่า SYN (Synchronize Sequence Number)
จากนั้น Server freeCodeCamp News ส่งข้อความตอบกลับ เรียกว่า SYN-ACK
เมื่ออุปกรณ์ของคุณรับ SYN-ACK จาก Server มันส่งข้อความยืนยัน ACK กลับไป ซึ่งสร้างการเชื่อมต่อ
เมื่อ TCP Connection สร้างระหว่างสองอุปกรณ์แล้ว โปรโตคอลรับประกันว่าข้อมูลทั้งหมดถูกถ่ายโอน
กลับไปที่ตัวอย่างอุปกรณ์ของคุณและ freeCodeCamp News หลัง Three-Way Handshake เสร็จ Server News เริ่มส่งข้อมูลทั้งหมดที่เบราว์เซอร์ของอุปกรณ์คุณต้องการเพื่อ render บทความนี้
อุปกรณ์ทุกตัวแยกข้อมูลเป็นแพ็กเก็ตเล็กๆ ก่อนส่งผ่านอินเทอร์เน็ต แพ็กเก็ตเหล่านั้นต้องถูกประกอบกลับ (Reassemble) ที่อีกด้านหนึ่ง
ดังนั้น เมื่อ Server freeCodeCamp News ส่ง HTML, CSS, รูปภาพ และโค้ดอื่นๆ สำหรับบทความนี้ มันแยกทุกอย่างเป็นแพ็กเก็ตข้อมูลเล็กๆ ก่อนส่งไปอุปกรณ์ของคุณ อุปกรณ์ของคุณจึงประกอบแพ็กเก็ตเหล่านั้นกลับเป็นไฟล์และรูปภาพที่ต้องการ render บทความนี้
TCP รับรองว่าแพ็กเก็ตทั้งหมดถึงอุปกรณ์ของคุณ หากแพ็กเก็ตใดสูญหายระหว่างทาง TCP ทำให้อุปกรณ์ของคุณแจ้ง Server ได้ง่ายว่าขาดข้อมูล และ Server ส่งแพ็กเก็ตเหล่านั้นใหม่
เมื่ออุปกรณ์ของคุณรับข้อมูลทั้งหมดที่ต้องการ render บทความแล้ว TCP จะยกเลิกการเชื่อมต่อระหว่างสองอุปกรณ์โดยอัตโนมัติ ด้วยวิธีคล้าย Three-Way Handshake แต่ครั้งนี้ใช้ FIN และ ACK Packets
UDP คืออะไร?
UDP หรือ User Datagram Protocol เป็นอีกโปรโตคอลหลักที่ประกอบ Internet Protocol Suite UDP น่าเชื่อถือน้อยกว่า TCP แต่เรียบง่ายกว่ามาก
UDP ใช้สำหรับสถานการณ์ที่ยอมรับการสูญเสียข้อมูลบ้างได้ เช่น Live Video/Audio หรือที่ความเร็วเป็นปัจจัยสำคัญ เช่น Online Gaming
แม้ UDP คล้าย TCP ที่ใช้ส่งและรับข้อมูลออนไลน์ แต่มีความแตกต่างสำคัญ 2 จุด:
第一 UDP เป็น Connectionless Protocol หมายถึง มันไม่สร้างการเชื่อมต่อล่วงหน้าเหมือน TCP ที่มี Three-Way Handshake
第二 UDP ไม่รับประกันว่าข้อมูลทั้งหมดถ่ายโอนสำเร็จ ด้วย UDP ข้อมูลถูกส่งไปอุปกรณ์ใดก็ตามที่กำลังฟัง (Listening) แต่ไม่สนใจหากบางส่วนสูญหายระหว่างทาง นี่คือเหตุผลหนึ่งที่ UDP เรียกอีกชื่อว่า "Fire-and-Forget" Protocol
วิธีคิดที่ดีเกี่ยวกับความแตกต่างนี้คือ TCP เหมือนการสนทนาระหว่างสองคน คน A ขอคุยกับคน B คน B บอกว่า โอเค ไปได้ คน A ตกลง และทั้งคู่เริ่มคุยกัน
UDP เหมือนผู้ชุมนุมนอกบ้านกับเมกะโฟน ทุกคนที่สนใจผู้ชุมนุมควรได้ยินส่วนใหญ่ของสิ่งที่เขาพูด แต่ไม่มีประกันว่าทุกคนในพื้นที่จะได้ยินสิ่งที่ผู้ชุมนุมพูด หรือว่าพวกเขากำลังฟังอยู่
อันไหนเร็วกว่า - TCP หรือ UDP?
โดยทั่วไป UDP เป็นโปรโตคอลที่เร็วกว่า
UDP เรียบง่ายมาก และไม่พยายามสร้างการเชื่อมต่อระหว่างอุปกรณ์ก่อนส่งข้อมูล หรือตรวจสอบว่าข้อมูลทั้งหมดถึงแล้ว มันแค่ส่งข้อมูลออกไปอุปกรณ์ใดก็ตามที่ขอ และทำต่อไปจนอุปกรณ์อีกตัวตัดการเชื่อมต่อ หรือไม่มีข้อมูลเหลือส่ง
คิดเหมือนดื่มน้ำจากท่อน้ำ (Hose) แทนการชุบจากขวด (Bottle) คุณจะได้น้ำทั้งคู่ แต่ใช้ท่อน้ำอาจทำให้เสื้อเปียก
แต่การเร็วกว่าไม่ได้หมายถึง UDP เป็นโปรโตคอลที่ดีกว่าโดยรวม แค่หมายถึงมันดีกว่าในบางสถานการณ์
เช่นกล่าวไว้ก่อนหน้า TCP จำเป็นในสถานการณ์ที่สำคัญว่าทุกแพ็กเก็ตข้อมูลส่งตามลำดับ และทุกแพ็กเก็ตถึงปลายทาง เว็บไซต์จะทำงานไม่ได้โดยไม่มี TCP
และแม้ TCP จะช้ากว่า เพราะวิธีสร้างการเชื่อมต่อ และการตรวจสอบแพ็กเก็ตที่หาย มันยังสามารถเร็วมากได้ เพราะอยู่บนเว็บและใช้ HTTP ไซต์อย่าง YouTube หรือ Netflix ทั้งคู่ใช้ TCP ส่งข้อมูลไปอุปกรณ์ของคุณ
TCP ยังอนุญาตให้ Buffering ได้ เบราว์เซอร์ขอและโหลดข้อมูลเพิ่มขณะดู ทำให้เล่นต่อเนื่องและข้ามไปส่วนอื่นของวิดีโอได้
UDP เป็นตัวเลือกที่ดีกว่าสำหรับ Live Video/Audio และ Online Games ที่ความเร็วสำคัญกว่าการสูญเสียข้อมูลที่อาจเกิดขึ้น
ตอนโทรผ่าน Google Meet หรือ Zoom วิดีโอและเสียงของคุณถูกถ่ายโอนผ่าน UDP หากแพ็กเก็ตบางส่วนสูญหาย จะแสดงเป็น Lag เล็กน้อย หรือ Video/Audio ตัดขาดบ้าง
หากคุณเล่นเกม คุณอาจคิดว่าวิธี TCP รับรองแพ็กเก็ตทั้งหมดถึงอุปกรณ์อีกตัว จะทำให้มันเป็นตัวเลือกที่เหมาะสม แต่ในความเป็นจริง การตรวจสอบและส่งข้อมูลซ้ำของ TCP เพิ่ม Latency ให้มากขึ้น
Game Developers หาวิธีฉลาดอื่นๆ ให้ Player Input และ State ถูกต้องที่สุดเท่าที่จะเป็นไปได้ หากสนใจอ่านเพิ่มว่า ทำไม UDP ถูกเลือกสำหรับ Online Gaming อ่านบทความนี้
จบ
หวังว่าบทความนี้ช่วยให้คุณเข้าใจรายละเอียดระหว่าง TCP และ UDP และถ้ามีคนถามว่าอันไหนเร็วกว่า บอกพวกเขาตามที่อ่านที่นี่: "UDP เร็วกว่า แต่..."
และหากชอบสิ่งที่อ่าน แจ้งผมได้ทาง Twitter