NACK กับ ACK? เมื่อใดควรใช้อีกอันหนึ่ง


19

โดยส่วนตัวฉันไม่รู้สึกว่าจำเป็นต้องใช้ ACK มันเร็วกว่าถ้าเราแค่ส่ง NACK (n) สำหรับแพ็กเก็ตที่หายไปแทนที่จะส่ง ACK สำหรับแต่ละแพ็กเก็ตที่ได้รับ ดังนั้นเมื่อใด / สถานการณ์ใดที่เราจะใช้ ACK ผ่าน NACK และ viceversa


คุณช่วยให้บริบทเพิ่มเติมสำหรับสิ่งที่คุณกำลังพูดถึงกับเราได้ไหม คุณถามโดยทั่วไปหรือเกี่ยวกับ TCP หรือ ??
Mike Pennington

คำถามเครือข่ายทั่วไปไม่เกี่ยวข้องกับ TCP, UDP หรือพื้นที่เฉพาะอื่น ๆ
nFu9DT

คำตอบ:


29

เหตุผลสำหรับ ACK คือ NACK นั้นไม่เพียงพอ สมมติว่าฉันส่งกระแสข้อมูลของเซ็กเมนต์ X (สมมุติว่า 10 เพื่อความง่าย)

คุณกำลังเชื่อมต่อที่ไม่ดีและรับเซ็กเมนต์ 1, 2, 4 และ 5 เท่านั้นคอมพิวเตอร์ของคุณส่ง NACK สำหรับเซ็กเมนต์ 3 แต่ไม่ทราบว่าควรมีเซ็กเมนต์ 6-10 และไม่ได้ NACK เหล่านั้น

ดังนั้นฉันจึงส่งเซกเมนต์ 3 อีกครั้ง แต่คอมพิวเตอร์ของฉันเชื่อว่าข้อมูลถูกส่งไปอย่างไม่ถูกต้อง

ACK ให้การรับรองว่ากลุ่มมาถึงปลายทางแล้ว

หากคุณต้องการให้แอปพลิเคชันจัดการกับลำดับของข้อมูลและการส่งสัญญาณใหม่คุณสามารถเลือกใช้โปรโตคอลเช่น UDP (ตัวอย่างเช่น TFTP ทำ)


คำตอบที่ดี. แต่เราไม่สามารถกำหนดแพ็กเก็ตแรกเป็นแพ็กเก็ตพิเศษได้ - มันจะรวมจำนวนเซ็กเมนต์ที่จะส่ง
Hari

4
ยังคงทำให้เกิดปัญหาของผู้ส่งโดยไม่รู้ว่าได้รับข้อมูลหรือไม่ หากไม่มี ACK ในกระบวนการหากผู้ส่งไม่ได้ยินอะไรเลยก็จะต้องถือว่าข้อมูลทั้งหมดได้รับแม้ว่าการไหลของข้อมูลทั้งหมดจะหายไป ACK รับรองว่าได้รับข้อมูลแล้ว
YLearn

4

ทุกอย่างจะลดลงไปสู่การกระจายความน่าจะเป็นที่สูญเสียและรูปแบบการรับส่งข้อมูล

ยกตัวอย่างเช่นลิงค์ไร้สายทั่วไปที่มีอัตราการสูญเสีย 10-30% ที่มั่นคง หากคุณรับแต่ละเฟรมที่ได้รับ (เช่น 802.11abg) คุณจะตรวจพบได้อย่างรวดเร็วเมื่อเฟรมหายไปดังนั้นคุณจะไม่เสียเวลาในการรอการหมดเวลา

หากคุณไปที่ NAK แทนคุณจะขึ้นอยู่กับรูปแบบการรับส่งข้อมูล: - หากคุณส่งแพ็กเก็ตคำขอเดียวและคาดว่าจะได้คำตอบและคำขอนั้นหายไปคุณจะต้องหมดเวลาที่จะหมดอายุหากคุณไม่ได้รับ ตอบ. - หากคุณเพียงแค่ส่งกระแสข้อมูลแพ็คเก็ตไปยังผู้รับปิดเสียงส่วนใหญ่ก็เป็นที่ยอมรับได้เพียงรับ NAK เมื่อผู้รับได้รับแพ็คเก็ตต่อไปหรือดังนั้น แต่นี่หมายความว่าผู้รับต้องเรียงลำดับแพ็กเก็ตใหม่และผู้ส่งต้องติดตามงานค้างจำนวนมากของข้อความที่ส่งไป

(เดาว่าโซลูชันใดที่ 802.11n เลือกได้ทั้งสองอย่างผู้รับจะส่งบิตแมปความยาวผันแปรของเฟรมที่ได้รับ)

ตอนนี้ใช้เครือข่ายอินเทอร์เน็ตทั่วไป: คุณมีการสูญเสียแพ็กเก็ตเกือบ 0% จนกระทั่งสิ่งเลวร้ายเกิดขึ้นและคุณมีการสูญเสียแพ็กเก็ตเกือบ 100% ในช่วงเวลาหนึ่งตามกฎหมายการกระจายแบบเลขชี้กำลังจากการขัดจังหวะ 200ms ถึงนาทีและ ครึ่ง.

การรับแพ็คเก็ตแต่ละครั้งดูเหมือนจะไม่มีจุดหมายในเครือข่ายที่ไม่มีการสูญเสียจนกว่าคุณจะพิจารณากรณีที่มีการเชื่อมโยง: คุณจะไม่ได้รับ ACK หรือ NACK เป็นเวลานานและผู้รับจะไม่ส่งอะไรจนกว่าลิงก์ คืนค่าแล้ว

หากคุณใช้ ACK ผู้ส่งจะหยุดส่งและเก็บ backlog ไว้จนกว่าลิงก์จะถูกกู้คืน หากคุณใช้ NACK แทนในที่สุดผู้รับอาจบอกคุณว่าไม่ได้รับแพ็กเก็ตที่หลุดจาก Backlog ของผู้ส่งมาเป็นเวลานานและการเชื่อมต่อนั้นไม่สามารถกู้คืนได้


1

ACKs มีประโยชน์ในการเลื่อนโพรโทคอลหน้าต่างแบบเลื่อนพวกเขาอนุญาตให้ตัวส่งสัญญาณ A ทราบว่าข้อมูลที่ส่งได้รับจากระยะไกล B. ตัวส่งสัญญาณ A สามารถดำเนินการส่งข้อมูลถัดไปได้ - จนกระทั่งหน้าต่างการส่งข้อมูลนั้นเต็ม ได้รับการยอมรับ)

ACK อาจถูกพิจารณาว่ามีความสำคัญมากกว่า NAKs NAKs อนุญาตให้กู้คืนได้เร็วขึ้นในกรณีที่ไม่ได้รับแพ็กเก็ต / บล็อกที่ส่งโดย A และ B ตรวจพบโดยวิธีที่แพ็กเก็ต / บล็อกหายไป

มันเป็นไปได้อย่างสมบูรณ์แบบในการออกแบบโปรโตคอลที่สนับสนุนการถ่ายโอนและการควบคุมการไหลที่เชื่อถือได้เฉพาะกับ ACK โดยไม่มี NAK (ด้วยการส่งสัญญาณซ้ำโดยเครื่องส่งสัญญาณในกรณีที่เครื่องส่งสัญญาณไม่ได้รับ ACK กลไกการส่งสัญญาณที่จำเป็น


0

สิ่งหนึ่งที่สำคัญที่สุดที่ฉันต้องการเพิ่มที่นี่ใน TCP เราไม่ได้ส่ง ACK สำหรับแพ็กเก็ตที่ได้รับทุกครั้ง

อย่างไรก็ตาม ACKs จะถูกส่งสำหรับแพ็กเก็ต LAST RECEIVED เท่านั้น

โปรดแก้ไขฉันหากฉันผิด


1
นี่เป็นความจริงจนถึงจุดหนึ่ง ตัวอย่างเช่นเซกเมนต์ที่มีเฉพาะชุดธง ACK หรือ RST ไม่จำเป็นต้องมี ACK นอกจากนี้หากมีการใช้ ACK ที่ล่าช้าดังนั้นอาจไม่มี ACK ทุกเซ็กเมนต์อย่างไรก็ตามโดยทั่วไปจะต้องมี ACK ที่ส่งให้กับทุกเซกเมนต์อื่น ๆ การเชื่อมต่อ TCP จำนวนมากจะไม่ใช้ ACK ที่ล่าช้าและจะส่ง ACK สำหรับทุกส่วนที่มีข้อมูล
YLearn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.