การขนส่งความน่าเชื่อถือของ TCP
เราทุกคนคุ้นเคยกับโปรโตคอล TCP เป็นโปรโตคอลการขนส่งที่เชื่อถือได้ แต่มันจะมั่นใจได้อย่างไรว่าความน่าเชื่อถือของการขนส่ง
เพื่อให้บรรลุการส่งที่เชื่อถือได้ต้องมีการพิจารณาปัจจัยหลายอย่างเช่นการทุจริตข้อมูลการสูญเสียการทำซ้ำและเศษที่ไม่ถูกสั่งซื้อ หากปัญหาเหล่านี้ไม่สามารถแก้ไขได้การส่งที่เชื่อถือได้ไม่สามารถทำได้
ดังนั้น TCP จึงใช้กลไกเช่นหมายเลขลำดับการตอบรับการตอบรับการควบคุมการจัดการการเชื่อมต่อและการควบคุมหน้าต่างเพื่อให้ได้การส่งที่เชื่อถือได้
ในบทความนี้เราจะมุ่งเน้นไปที่หน้าต่างเลื่อนการควบคุมการไหลและการควบคุมความแออัดของ TCP กลไกการส่งสัญญาณซ้ำถูกครอบคลุมแยกกันในส่วนถัดไป
การควบคุมการไหลของเครือข่าย
การควบคุมการไหลของเครือข่ายหรือรู้ว่าการควบคุมการจราจรเครือข่ายเป็นการรวมตัวกันของความสัมพันธ์ที่ละเอียดอ่อนระหว่างผู้ผลิตและผู้บริโภค คุณอาจเจอสถานการณ์นี้มากในที่ทำงานหรือในการสัมภาษณ์ หากความสามารถของผู้ผลิตในการผลิตอย่างมากเกินความสามารถของผู้บริโภคในการบริโภคมันจะทำให้คิวเติบโตอย่างไม่มีกำหนด ในกรณีที่ร้ายแรงกว่านี้คุณอาจรู้ว่าเมื่อข้อความ RabbitMQ กองพะเนินเทินทึกมากเกินไปอาจทำให้ประสิทธิภาพการทำงานของเซิร์ฟเวอร์ MQ ทั้งหมดลดลง เช่นเดียวกับ TCP; หากไม่ถูกตรวจสอบข้อความจำนวนมากเกินไปจะถูกนำไปใส่ในเครือข่ายและผู้บริโภคจะเกินขีดความสามารถของพวกเขาในขณะที่ผู้ผลิตจะยังคงส่งข้อความที่ซ้ำกันซึ่งจะส่งผลกระทบอย่างมากต่อประสิทธิภาพของเครือข่าย
เพื่อแก้ไขปรากฏการณ์นี้ TCP จัดเตรียมกลไกสำหรับผู้ส่งเพื่อควบคุมปริมาณข้อมูลที่ส่งตามความสามารถในการรับสัญญาณจริงของตัวรับสัญญาณซึ่งเรียกว่าการควบคุมการไหล ตัวรับสัญญาณรักษาหน้าต่างรับในขณะที่ผู้ส่งดูแลหน้าต่างส่ง ควรสังเกตว่าหน้าต่างเหล่านี้มีไว้สำหรับการเชื่อมต่อ TCP เพียงครั้งเดียวเท่านั้นและไม่ใช่การเชื่อมต่อทั้งหมดแชร์หน้าต่าง
TCP ให้การควบคุมการไหลโดยใช้ตัวแปรสำหรับหน้าต่างรับ หน้าต่างรับให้ผู้ส่งมีข้อบ่งชี้ว่ายังมีพื้นที่แคชเท่าใด ผู้ส่งควบคุมจำนวนข้อมูลที่ส่งตามความสามารถในการยอมรับที่แท้จริงของผู้รับ
โฮสต์ตัวรับสัญญาณจะแจ้งให้ผู้ส่งขนาดของข้อมูลที่สามารถรับได้และผู้ส่งส่งถึงขีด จำกัด นี้ ขีด จำกัด นี้คือขนาดหน้าต่างจำส่วนหัว TCP ได้หรือไม่? มีฟิลด์หน้าต่างรับซึ่งใช้เพื่อระบุจำนวนไบต์ที่ผู้รับสามารถหรือเต็มใจที่จะได้รับ
โฮสต์ผู้ส่งจะส่งแพ็คเก็ตโพรบหน้าต่างเป็นระยะซึ่งใช้เพื่อตรวจจับว่าโฮสต์ตัวรับสัญญาณยังคงสามารถรับข้อมูลได้หรือไม่ เมื่อบัฟเฟอร์ของตัวรับสัญญาณตกอยู่ในอันตรายจากการไหลล้นขนาดหน้าต่างจะถูกตั้งค่าเป็นค่าที่เล็กกว่าเพื่อสั่งให้ผู้ส่งควบคุมปริมาณข้อมูลที่ส่ง
นี่คือไดอะแกรมการควบคุมการไหลของเครือข่าย:
การควบคุมความแออัดของเครือข่าย
ก่อนที่จะแนะนำการควบคุมความแออัดเราต้องเข้าใจว่านอกเหนือจากหน้าต่างรับและหน้าต่างส่งแล้วยังมีหน้าต่างความแออัดซึ่งส่วนใหญ่ใช้เพื่อแก้ปัญหาในอัตราที่ผู้ส่งเริ่มส่งข้อมูลไปยังหน้าต่างรับ ดังนั้นหน้าต่างความแออัดจะถูกเก็บรักษาไว้โดยผู้ส่ง TCP เราต้องการอัลกอริทึมในการตัดสินใจว่าข้อมูลมีความเหมาะสมมากเพียงใดเนื่องจากการส่งข้อมูลน้อยเกินไปหรือมากเกินไปนั้นไม่เหมาะดังนั้นแนวคิดของหน้าต่างแออัด
ในการควบคุมการไหลของเครือข่ายก่อนหน้าสิ่งที่เราหลีกเลี่ยงคือผู้ส่งที่เติมข้อมูลของตัวรับสัญญาณ แต่เราไม่รู้ว่าเกิดอะไรขึ้นในเครือข่าย โดยทั่วไปแล้วเครือข่ายคอมพิวเตอร์จะอยู่ในสภาพแวดล้อมที่ใช้ร่วมกัน เป็นผลให้อาจมีความแออัดของเครือข่ายเนื่องจากการสื่อสารระหว่างโฮสต์อื่น ๆ
เมื่อเครือข่ายแออัดหากมีการส่งแพ็กเก็ตจำนวนมากอย่างต่อเนื่องอาจทำให้เกิดปัญหาเช่นความล่าช้าและการสูญเสียแพ็คเก็ต ณ จุดนี้ TCP จะส่งข้อมูลส่งสัญญาณใหม่ แต่การส่งสัญญาณจะเพิ่มภาระในเครือข่ายส่งผลให้เกิดความล่าช้ามากขึ้นและการสูญเสียแพ็คเก็ตมากขึ้น สิ่งนี้สามารถเข้าสู่วงจรอุบาทว์และยิ่งใหญ่ขึ้นเรื่อย ๆ
ดังนั้น TCP ไม่สามารถเพิกเฉยต่อสิ่งที่เกิดขึ้นในเครือข่าย เมื่อเครือข่ายแออัด TCP จะเสียสละตัวเองโดยการลดปริมาณข้อมูลที่ส่ง
ดังนั้นจึงมีการเสนอการควบคุมความแออัดซึ่งมีวัตถุประสงค์เพื่อหลีกเลี่ยงการกรอกข้อมูลจากเครือข่ายทั้งหมดจากผู้ส่ง เพื่อควบคุมปริมาณข้อมูลที่ผู้ส่งควรส่ง TCP กำหนดแนวคิดที่เรียกว่าหน้าต่างความแออัด อัลกอริทึมการควบคุมความแออัดจะปรับขนาดของหน้าต่างความแออัดตามระดับความแออัดของเครือข่ายเพื่อควบคุมปริมาณข้อมูลที่ส่งโดยผู้ส่ง
หน้าต่างแออัดคืออะไร? สิ่งนี้เกี่ยวข้องกับหน้าต่างส่งอย่างไร
หน้าต่างความแออัดเป็นตัวแปรสถานะที่ดูแลโดยผู้ส่งที่กำหนดจำนวนข้อมูลที่ผู้ส่งสามารถส่งได้ หน้าต่างแออัดเปลี่ยนแปลงแบบไดนามิกตามระดับความแออัดของเครือข่าย
หน้าต่างการส่งเป็นขนาดหน้าต่างที่ตกลงกันระหว่างผู้ส่งและตัวรับสัญญาณที่ระบุจำนวนข้อมูลที่ผู้รับสามารถรับได้ หน้าต่างความแออัดและหน้าต่างส่งเกี่ยวข้อง หน้าต่างการส่งมักจะเท่ากับขั้นต่ำของความแออัดและการรับหน้าต่างนั่นคือ swnd = min (cwnd, rwnd)
CWND หน้าต่างแออัดเปลี่ยนแปลงดังนี้:
หากไม่มีความแออัดในเครือข่ายคือไม่มีการหมดเวลาการส่งสัญญาณการส่งสัญญาณการเพิ่มขึ้นหน้าต่างความแออัดจะเพิ่มขึ้น
หากมีความแออัดในเครือข่ายหน้าต่างแออัดจะลดลง
ผู้ส่งกำหนดว่าเครือข่ายได้รับการแออัดโดยสังเกตว่าแพ็คเก็ตการตอบรับ ACK นั้นได้รับภายในเวลาที่กำหนดหรือไม่ หากผู้ส่งไม่ได้รับแพ็คเก็ต ACK ACKNOWLEDGMENT ภายในเวลาที่กำหนดก็จะพิจารณาว่าเครือข่ายแออัด
นอกเหนือจากหน้าต่างแออัดแล้วก็ถึงเวลาที่จะหารือเกี่ยวกับอัลกอริทึมการควบคุมความแออัดของ TCP อัลกอริทึมการควบคุมความแออัดของ TCP ประกอบด้วยสามส่วนหลัก:
เริ่มช้า:ในขั้นต้นหน้าต่าง CWND congestion ค่อนข้างเล็กและผู้ส่งเพิ่มหน้าต่างแออัดแบบทวีคูณเพื่อปรับให้เข้ากับความสามารถของเครือข่ายอย่างรวดเร็ว
การหลีกเลี่ยงความแออัด:หลังจากหน้าต่างแออัดเกินเกณฑ์ที่กำหนดผู้ส่งจะเพิ่มหน้าต่างความแออัดในลักษณะเชิงเส้นเพื่อชะลออัตราการเติบโตของหน้าต่างแออัดและหลีกเลี่ยงการโอเวอร์โหลดเครือข่าย
การกู้คืนอย่างรวดเร็ว:หากความแออัดเกิดขึ้นผู้ส่งจะครึ่งหน้าต่างความแออัดและเข้าสู่สถานะการกู้คืนที่รวดเร็วเพื่อกำหนดตำแหน่งของการกู้คืนเครือข่ายผ่าน ACK ที่ได้รับซ้ำแล้ว
เริ่มช้า
เมื่อมีการสร้างการเชื่อมต่อ TCP หน้าต่างความแออัด CWND จะถูกตั้งค่าเป็นค่าเริ่มต้นเป็นค่า MSS ขั้นต่ำ (ขนาดส่วนสูงสุด) ด้วยวิธีนี้อัตราการส่งเริ่มต้นคือเกี่ยวกับ MSS/RTT ไบต์/วินาที แบนด์วิดท์ที่มีอยู่จริงมักจะมีขนาดใหญ่กว่า MSS/RTT มากดังนั้น TCP จึงต้องการค้นหาอัตราการส่งที่ดีที่สุดซึ่งสามารถทำได้โดยการเริ่มต้นช้า
ในกระบวนการเริ่มต้นช้าค่าของหน้าต่างแออัด CWND จะเริ่มต้นเป็น 1 MSS และทุกครั้งที่มีการยอมรับส่วนแพ็กเก็ตที่ส่งผ่านค่า CWND จะเพิ่มขึ้นหนึ่ง MSS นั่นคือค่าของ CWND จะกลายเป็น 2 MSS หลังจากนั้นค่าของ CWND จะเพิ่มขึ้นเป็นสองเท่าสำหรับการส่งส่วนแพ็กเก็ตที่ประสบความสำเร็จแต่ละครั้งและอื่น ๆ กระบวนการเติบโตที่เฉพาะเจาะจงจะแสดงในรูปต่อไปนี้
อย่างไรก็ตามอัตราการส่งไม่สามารถเติบโตได้เสมอไป การเติบโตจะสิ้นสุดลงในบางครั้ง ดังนั้นอัตราการส่งจะสิ้นสุดลงเมื่อใด โดยทั่วไปเริ่มต้นช้าการเพิ่มขึ้นของอัตราการส่งในหนึ่งวิธี:
วิธีแรกคือกรณีของการสูญเสียแพ็คเก็ตในระหว่างกระบวนการส่งการเริ่มต้นช้า เมื่อเกิดการสูญเสียแพ็คเก็ต TCP จะตั้งค่าหน้าต่างความแออัดของผู้ส่ง CWND เป็น 1 และเริ่มกระบวนการเริ่มต้นช้า ณ จุดนี้มีการแนะนำแนวคิดของ SSTHRESH เริ่มต้นอย่างช้าๆซึ่งมีค่าเริ่มต้นครึ่งหนึ่งของค่า CWND ที่สร้างการสูญเสียแพ็คเก็ต นั่นคือเมื่อตรวจพบความแออัดค่าของ ssthresh คือครึ่งหนึ่งของค่าหน้าต่าง
วิธีที่สองคือการเชื่อมโยงโดยตรงกับค่าของ SSTHRESH เริ่มต้นช้า เนื่องจากค่าของ SSTHRESH เป็นครึ่งหนึ่งของค่าหน้าต่างเมื่อตรวจพบความแออัดของความแออัดการสูญเสียแพ็คเก็ตอาจเกิดขึ้นกับการเพิ่มขึ้นเป็นสองเท่าเมื่อ CWND มีขนาดใหญ่กว่า SSTHRESH ดังนั้นจึงเป็นการดีที่สุดที่จะตั้งค่า CWND เป็น SSTHRESH ซึ่งจะทำให้ TCP เปลี่ยนไปใช้โหมดควบคุมความแออัดและสิ้นสุดการเริ่มต้นช้า
วิธีสุดท้ายที่การเริ่มต้นช้าอาจสิ้นสุดคือหากตรวจพบ ACK ซ้ำซ้อนสามตัว TCP จะทำการส่งสัญญาณใหม่อย่างรวดเร็วและเข้าสู่สถานะการกู้คืน (หากยังไม่ชัดเจนว่าทำไมมีแพ็คเก็ต ACK สามตัวมันจะถูกอธิบายแยกต่างหากในกลไกการส่งสัญญาณใหม่)
การหลีกเลี่ยงความแออัด
เมื่อ TCP เข้าสู่สถานะการควบคุมความแออัด CWND จะถูกตั้งค่าเป็นครึ่งหนึ่งของเกณฑ์ความแออัด SSthresh ซึ่งหมายความว่าค่าของ CWND ไม่สามารถเพิ่มเป็นสองเท่าได้ทุกครั้งที่ได้รับส่วนแพ็กเก็ต แต่มีการใช้วิธีการที่ค่อนข้างอนุรักษ์นิยมซึ่งค่าของ CWND จะเพิ่มขึ้นเพียงหนึ่ง MSS (ความยาวส่วนแพ็กเก็ตสูงสุด) หลังจากการส่งแต่ละครั้งเสร็จสิ้น ตัวอย่างเช่นแม้ว่าจะได้รับการยอมรับ 10 ส่วนแพ็คเก็ต แต่ค่าของ CWND จะเพิ่มขึ้นเพียงหนึ่ง MSS นี่คือรูปแบบการเติบโตเชิงเส้นและยังมีขอบเขตบนการเติบโต เมื่อการสูญเสียแพ็คเก็ตเกิดขึ้นค่าของ CWND จะถูกเปลี่ยนเป็น MSS และค่าของ SSTHRESH ถูกตั้งค่าเป็นครึ่งหนึ่งของ CWND หรือมันจะหยุดการเติบโตของ MSS เมื่อได้รับการตอบสนอง ACK 3 ครั้ง หากยังคงได้รับ ACKs ซ้ำซ้อนสามตัวหลังจากลดค่า CWND ครึ่งหนึ่งค่าของ SSTHRESH จะถูกบันทึกเป็นครึ่งหนึ่งของค่า CWND และสถานะการกู้คืนที่รวดเร็วจะถูกป้อน
การฟื้นตัวอย่างรวดเร็ว
ในสถานะการกู้คืนที่รวดเร็วค่าของหน้าต่างแออัด CWND เพิ่มขึ้นหนึ่ง MSS สำหรับแต่ละ ACK ที่ได้รับซ้ำซ้อนนั่นคือ ACK ที่ไม่ได้มาถึงลำดับ นี่คือการใช้ประโยชน์จากกลุ่มแพ็คเก็ตที่ส่งผ่านในเครือข่ายสำเร็จเพื่อปรับปรุงประสิทธิภาพการส่งข้อมูลให้มากที่สุด
เมื่อ ACK ของส่วนแพ็กเก็ตที่หายไปมาถึง TCP จะลดค่าของ CWND แล้วเข้าสู่สถานะการหลีกเลี่ยงความแออัด นี่คือการควบคุมขนาดของหน้าต่างความแออัดและหลีกเลี่ยงการเพิ่มความแออัดของเครือข่าย
หากการหมดเวลาเกิดขึ้นหลังจากสถานะการควบคุมความแออัดสภาพเครือข่ายจะรุนแรงขึ้นและ TCP ย้ายถิ่นจากสถานะการหลีกเลี่ยงความแออัดไปยังสถานะเริ่มต้นช้า ในกรณีนี้ค่าของหน้าต่างความแออัด CWND ถูกตั้งค่าเป็น 1 mss ความยาวส่วนแพ็กเก็ตสูงสุดและค่าของเกณฑ์การเริ่มต้นช้า SSTHRESH ถูกตั้งค่าเป็นครึ่งหนึ่งของ CWND จุดประสงค์ของสิ่งนี้คือการเพิ่มขนาดของหน้าต่างความแออัดอีกครั้งหลังจากเครือข่ายกู้คืนเพื่อปรับสมดุลอัตราการส่งและระดับความแออัดของเครือข่าย
สรุป
ในฐานะที่เป็นโปรโตคอลการขนส่งที่เชื่อถือได้ TCP ใช้การขนส่งที่เชื่อถือได้ตามหมายเลขลำดับการตอบรับการควบคุมการส่งสัญญาณการจัดการการเชื่อมต่อและการควบคุมหน้าต่าง ในหมู่พวกเขากลไกการควบคุมการไหลจะควบคุมปริมาณข้อมูลที่ส่งโดยผู้ส่งตามความสามารถในการรับจริงของตัวรับสัญญาณซึ่งหลีกเลี่ยงปัญหาของความแออัดของเครือข่ายและการเสื่อมสภาพของประสิทธิภาพ กลไกการควบคุมความแออัดหลีกเลี่ยงการเกิดขึ้นของความแออัดของเครือข่ายโดยการปรับจำนวนข้อมูลที่ส่งโดยผู้ส่ง แนวคิดของหน้าต่างความแออัดและหน้าต่างส่งมีความสัมพันธ์ซึ่งกันและกันและปริมาณข้อมูลที่ผู้ส่งถูกควบคุมโดยการปรับขนาดของหน้าต่างแออัดแบบไดนามิกแบบไดนามิก การเริ่มต้นช้าการหลีกเลี่ยงความแออัดและการกู้คืนอย่างรวดเร็วเป็นสามส่วนหลักของอัลกอริทึมการควบคุมความแออัดของ TCP ซึ่งปรับขนาดของหน้าต่างแออัดผ่านกลยุทธ์ที่แตกต่างกันเพื่อปรับให้เข้ากับความสามารถและระดับความแออัดของเครือข่าย
ในส่วนถัดไปเราจะตรวจสอบกลไกการส่งสัญญาณย้อนกลับของ TCP โดยละเอียด กลไกการส่งคืนเป็นส่วนสำคัญของ TCP เพื่อให้ได้การส่งที่เชื่อถือได้ ช่วยให้มั่นใจได้ว่าการส่งข้อมูลที่เชื่อถือได้โดยการส่งข้อมูลที่สูญหายเสียหายหรือล่าช้า หลักการดำเนินการและกลยุทธ์ของกลไกการส่งสัญญาณซ้ำจะได้รับการแนะนำและวิเคราะห์ในรายละเอียดในส่วนถัดไป คอยติดตาม!
เวลาโพสต์: ก.พ. -24-2025