หากไคลเอ็นต์ tcp ส่งแพ็กเก็ตโดยมีหมายเลขลำดับจาก 10,000 ถึง 20000 ไปยังเซิร์ฟเวอร์ tcp tcp จะตอบกลับด้วย ACK พร้อมด้วย seq_ack 20001
ถ้าฉันดักจับแพ็กเก็ต TCP จากไคลเอนต์และแบ่งแพ็คเก็ตเป็น 2 เซ็กเมนต์ TCP หนึ่งอันที่มี seq จาก 10,000 ถึง 15,000 และอีกอันหนึ่งที่มี seq จาก 15001 ถึง 20000 จากนั้นเซ็กเมนต์ TCP 2 อันเหล่านี้จะถูกส่งไปยังเซิร์ฟเวอร์ TCP สมมติว่าส่วนที่สองหายไปในเส้นทาง เซิร์ฟเวอร์ TCP จะตอบสนอง ACK ด้วย seq_ack 15001
ตอนนี้เนื่องจากไคลเอนต์ TCP ส่งแพ็กเก็ตอินทิกรัลด้วย seq 10,000 ถึง 20000 แต่ได้รับ ACK ที่มี 15001 จากมุมมองของลูกค้านี่เป็นเรื่องแปลก มันจะตอบสนองอย่างไร ในทางทฤษฎีไคลเอนต์ควรส่งใหม่ไบต์จาก seq 15001 ถึง 20000 กล่าวคือไคลเอนต์จะส่งแพ็กเก็ตใหม่จาก seq 15001 แต่วิธีการเกี่ยวกับการปฏิบัติในการใช้งานสแต็ก TCP มันเป็นเช่นเดียวกับในทฤษฎี?
ฉันคิดว่าในบัฟเฟอร์การส่ง TCP เมื่อมีการส่งเซ็กเมนต์ tcp ส่วนยังคงอยู่จนกว่า ACK เมื่อ ACK มาไบต์เหล่านี้สำหรับเซ็กเมนต์จะถูกล้างออกจากบัฟเฟอร์ มีตัวชี้ในบัฟเฟอร์การส่งเมื่อ ACK มาตัวชี้ชี้ไปยังตำแหน่งที่ ack_seq สอดคล้องกับ ไบต์ที่ต่ำกว่า ack_seq จะถูกล้าง ด้วยวิธีนี้กลุ่มทั้งหมดไม่จำเป็นต้องถูกส่งใหม่