TCP จับมือ 3 ทาง (SYN, SYN-ACK, ACK)
⚡ สรุปอย่างชาญฉลาด
การจับมือสามทางของ TCP (TCP 3-Way Handshake) คือขั้นตอนการตั้งค่าการเชื่อมต่อที่ทุกเซสชัน TCP เริ่มต้นด้วย ไคลเอนต์และเซิร์ฟเวอร์จะแลกเปลี่ยนแพ็กเก็ต SYN, SYN-ACK และ ACK เพื่อซิงโครไนซ์หมายเลขลำดับและยืนยันว่าทั้งสองฝ่ายพร้อมก่อนที่จะส่งข้อมูลแอปพลิเคชันแม้แต่ไบต์เดียว

TCP Three-Way Handshake คืออะไร?
การขอ TCP จับมือสามทาง คือขั้นตอนที่ไคลเอนต์และเซิร์ฟเวอร์ใช้ร่วมกัน เครือข่ายทีซีพี/ไอพี เพื่อสร้างการเชื่อมต่อที่เชื่อถือได้ก่อนที่จะมีการแลกเปลี่ยนข้อมูลแอปพลิเคชันใดๆ ตามชื่อที่บ่งบอก กระบวนการนี้ประกอบด้วยสามขั้นตอน ซึ่งทั้งสองฝ่ายจะแลกเปลี่ยนแพ็กเก็ตการซิงโครไนซ์ (SYN) และแพ็กเก็ตการรับทราบ (ACK) และตกลงเกี่ยวกับหมายเลขลำดับเริ่มต้นที่จะใช้
กระบวนการจับมือ (handshake) ถูกออกแบบมาเพื่อให้ทั้งสองฝั่งสามารถเริ่มต้น เจรจา และยกเลิกการเชื่อมต่อ TCP ได้อย่างสมมาตร เมื่อการจับมือเสร็จสมบูรณ์ การเชื่อมต่อจะเป็นแบบฟูลดูเพล็กซ์ กล่าวคือ ทั้งสองฝ่ายสามารถส่งและรับข้อมูลพร้อมกันได้จนกว่าฝ่ายใดฝ่ายหนึ่งจะส่งสัญญาณ FIN เพื่อปิดเซสชัน
ประเภทข้อความ TCP
ธงควบคุมทั้งสี่จะปรากฏขึ้นซ้ำๆ ในระหว่างการเชื่อมต่อและการยกเลิกการเชื่อมต่อ
| ระบุความประสงค์หรือข้อมูลเพิ่มเติม | Descriptไอออน |
|---|---|
| SYN | เริ่มต้นการเชื่อมต่อและซิงโครไนซ์หมายเลขลำดับระหว่างอุปกรณ์ต่างๆ |
| ACK | ยืนยันกับอีกฝ่ายว่าได้รับส่วนข้อมูลก่อนหน้าแล้ว |
| ซิน-อัค | ข้อความรวม — ข้อความ SYN จากอุปกรณ์ในพื้นที่บวกกับข้อความ ACK ที่ส่งมาจากอุปกรณ์ปลายทางก่อนหน้านี้ |
| ครีบ | ใช้เพื่อยุติการเชื่อมต่ออย่างนุ่มนวล |
กระบวนการจับมือสามทาง TCP
การรับส่งข้อมูล TCP เริ่มต้นด้วยการจับมือสามขั้นตอนเสมอ โดยไคลเอ็นต์จะเป็นฝ่ายเริ่มต้นการสนทนาด้วยการร้องขอเซสชันจากเซิร์ฟเวอร์
แผนภาพการจับมือสามทาง
- ขั้นตอนที่ 1 — SYN: ไคลเอนต์ส่งเซ็กเมนต์ที่มีแฟล็ก SYN ตั้งค่าไว้ ซึ่งเป็นการบอกเซิร์ฟเวอร์ว่า “ฉันต้องการเริ่มการสื่อสาร” และเสนอหมายเลขลำดับเริ่มต้น
- ขั้นตอนที่ 2 — การตอบรับ (SYN-ACK): เซิร์ฟเวอร์จะตอบกลับด้วยเซ็กเมนต์ที่มีการตั้งค่าแฟล็ก SYN และ ACK ไว้ทั้งคู่ ACK เป็นการยืนยันการรับ SYN จากไคลเอ็นต์ และ SYN เป็นการเสนอหมายเลขลำดับเริ่มต้นของเซิร์ฟเวอร์เอง
- ขั้นตอนที่ 3 — ยืนยัน: ไคลเอนต์ตอบรับ SYN-ACK จากเซิร์ฟเวอร์ด้วย ACK สุดท้าย การเชื่อมต่อจึงถูกสร้างขึ้นแล้ว และทั้งสองฝ่ายสามารถเริ่มต้นได้ transmitข้อมูลแอปพลิเคชัน ting
ตัวอย่างในโลกแห่งความเป็นจริง
ต่อไปนี้เป็นตัวอย่างการใช้งานพร้อมหมายเลขลำดับที่ชัดเจน
- โฮสต์ X เริ่มการเชื่อมต่อโดยการส่งแพ็กเก็ต TCP SYN ไปยังเซิร์ฟเวอร์ แพ็กเก็ตนี้บรรจุหมายเลขลำดับเริ่มต้นแบบสุ่ม — ตัวอย่างเช่น
4321— ซึ่งเป็นจุดเริ่มต้นของกระแสข้อมูลไบต์ที่โฮสต์ X จะส่ง - เซิร์ฟเวอร์ได้รับ SYN และตอบกลับด้วย SYN-ACK หมายเลข ACK คือหมายเลขลำดับของโฮสต์ X เพิ่มขึ้นทีละ 1 (
4322และ SYN จะเสนอหมายเลขลำดับเริ่มต้นของเซิร์ฟเวอร์เอง - โฮสต์ X ตอบกลับด้วย ACK สุดท้าย ซึ่งหมายเลข ACK คือหมายเลขลำดับของเซิร์ฟเวอร์ที่เพิ่มขึ้นทีละ 1
เมื่อการแลกเปลี่ยนข้อมูลเสร็จสมบูรณ์ TCP จะตัดการเชื่อมต่อด้วยลำดับ FIN/ACK สี่ขั้นตอน เพื่อให้ปลายทางทั้งสองสามารถปล่อยซ็อกเก็ตได้อย่างราบรื่น
เหตุใด TCP จึงต้องการการจับมือสามขั้นตอน
การจับมือทักทายไม่ใช่แค่พิธีการเท่านั้น แต่ยังช่วยแก้ปัญหาสำคัญสามประการที่มาพร้อมกับการส่งข้อมูลแบบไบต์สตรีมที่เชื่อถือได้:
- การซิงโครไนซ์หมายเลขลำดับ: ทั้งสองฝ่ายจะเรียนรู้หมายเลขลำดับเริ่มต้นของอีกฝ่าย ซึ่งเป็นสิ่งที่ TCP ใช้ในการตรวจจับเซ็กเมนต์ที่สูญหายหรือผิดลำดับ
- ข้อตกลงสถานะการเชื่อมต่อ: ACK ตัวที่สามยืนยันว่าได้รับ SYN-ACK จากเซิร์ฟเวอร์แล้ว ดังนั้นทั้งสองฝ่ายจึงจะไม่ส่งข้อมูลจนกว่าทั้งสองฝ่ายจะอยู่ในสถานะ SYN-ACK พร้อมกัน ที่จัดตั้งขึ้น รัฐ
- การป้องกันแพ็กเก็ตซ้ำ: หมายเลขลำดับเริ่มต้นแบบสุ่มและสถานะการจับมือที่กำหนดเวลาไว้จะช่วยป้องกันไม่ให้เซ็กเมนต์ที่ล้าสมัยจากเซสชันก่อนหน้าถูกยอมรับโดยไม่ได้ตั้งใจ
ปัญหาทั่วไปที่เกิดขึ้นกับการเชื่อมต่อ TCP (TCP Handshake)
การเชื่อมต่อแบบแฮนด์เชคมีความเสถียร แต่ก็อาจล้มเหลวได้ในรูปแบบที่สังเกตได้ โดยปกติแล้ววิศวกรเครือข่ายมักพบเห็นสิ่งต่อไปนี้:
- การโจมตีแบบ SYN flood: ไคลเอนต์ที่เป็นอันตรายส่ง SYN นับพันรายการโดยไม่ตอบกลับ SYN-ACK ทำให้ตารางการเชื่อมต่อของเซิร์ฟเวอร์เต็ม SYN cookies คือวิธีการป้องกันมาตรฐาน
- การเชื่อมต่อแบบกึ่งเปิด: เมื่อการยืนยัน (ACK) ครั้งที่สามหายไป การเชื่อมต่อจะยังคงอยู่ในสถานะเปิดครึ่งหนึ่ง และในที่สุดก็จะถูกตัดการเชื่อมต่อเนื่องจากการหมดเวลา
- ไฟร์วอลล์หรือ NAT อาจทำให้เที่ยวบินถูกบล็อกกลางคัน: อุปกรณ์มิดเดิลบ็อกซ์ที่มีสถานะ หากสูญเสียสถานะไป อาจทำให้แพ็กเก็ต SYN-ACK หายไป และทำให้ไคลเอนต์ต้องลองส่งใหม่อีกครั้ง
- การรีเซ็ต RST: หากเซิร์ฟเวอร์ไม่ได้เปิดใช้งานพอร์ตที่ร้องขอ เซิร์ฟเวอร์จะตอบกลับด้วย SYN พร้อมกับ RST ซึ่งจะปิดการเชื่อมต่อทันที


