เหตุใดฉันจึงเห็นแพ็กเก็ต RST, ACK แทนที่จะเป็นแพ็กเก็ต RST


42

มองใน Wireshark ฉันมักจะเห็น TCP Streams จบด้วย RST, ACK packet แทน RST packet ใครรู้ว่าทำไมนี้คืออะไร

ตัวอย่างของสิ่งที่ฉันเห็น:

SYN SYN, ACK ... ข้อมูล ... RST, ACK

Wireshark ไม่ได้รับแพ็กเก็ต RST ก่อนแพ็กเก็ต RST, ACK


2
ทำไมคุณคิดว่าควรมีเซ็กเมนต์ RST ก่อน RST / ACK บางทีคุณอาจให้ตัวอย่างของการติดตามแพ็คเก็ตดังกล่าวหรือไม่
Gerben

ACK ส่ง RST ในแพ็กเก็ตเดียวกันหรือไม่?
Generalnetworkerror

คำตอบใดช่วยคุณได้บ้าง ถ้าเป็นเช่นนั้นคุณควรยอมรับคำตอบเพื่อที่คำถามจะไม่โผล่ขึ้นมาเรื่อย ๆ โดยมองหาคำตอบ หรือคุณสามารถให้และยอมรับคำตอบของคุณเอง
Ron Maupin

ฉัน ACK คุณส่งการร้องขอการเชื่อมต่อ \ data สิ้นสุดการเชื่อมต่อ = RST
motoko

คำตอบ:


55

RST / ACK ไม่ใช่การตอบรับของ RST เช่นเดียวกับ SYN / ACK ไม่ใช่การรับรู้ของ SYN การสร้าง TCP จริง ๆ แล้วเป็นกระบวนการสี่ทาง: การเริ่มต้นโฮสต์ส่ง SYN ไปยังโฮสต์ที่รับซึ่งส่ง ACK สำหรับ SYN นั้น การรับโฮสต์ส่ง SYN ไปยังโฮสต์ที่เริ่มต้นซึ่งส่ง ACK กลับ นี่เป็นการสื่อสารแบบไร้รัฐ

SYN --> 
    <-- ACK
    <-- SYN
ACK -->

เพื่อให้มีประสิทธิภาพมากขึ้นโฮสต์ที่รับสามารถ ACK SYN และส่ง SYN ของตัวเองในแพ็กเก็ตเดียวกันสร้างกระบวนการสามทางที่เราเคยเห็น

SYN -->
    <-- SYN/ACK
ACK -->

ในกรณีของ RST / ACK อุปกรณ์จะรับทราบว่าข้อมูลใดถูกส่งในแพ็กเก็ตก่อนหน้าตามลำดับด้วย ACK จากนั้นแจ้งผู้ส่งว่าการเชื่อมต่อปิดด้วย RST อุปกรณ์กำลังรวมสองแพ็กเก็ตเป็นหนึ่งเดียวเช่น SYN / ACK ปกติแล้ว RST / ACK จะไม่ตอบสนองตามปกติในการปิดเซสชัน TCP แต่ก็ไม่จำเป็นต้องบ่งบอกถึงปัญหา


4
สถานการณ์ตัวอย่างของการส่ง RST / ACK คือเมื่อโฮสต์ที่รับไม่ได้ฟังพอร์ต TCP ปลายทาง
Indika K

ใช่แน่นอน. ฉันเคยลองจำลองการจู่โจม DDoS (เพื่อวัตถุประสงค์ทางการศึกษา;) จากเครื่อง A ไปยังเครื่อง B บนพอร์ต 80 แต่พอร์ต 80 ของ B ไม่เปิด ดังนั้นฉันสามารถเห็นเครื่อง B ส่งการRST ACKตอบสนองมากมายไปยังที่อยู่ปลอมที่มา
smwikipedia

การตอบสนอง RST / ACK สามารถขึ้นอยู่กับเนื้อหาของแพ็คเก็ตหรือไม่? เซิร์ฟเวอร์ Ie ได้รับแพ็กเก็ตและเนื่องจากเนื้อหาของแพ็กเก็ตตรงกับเงื่อนไขบางประการเซสชันจึงถูกปิด
skooog

1

เมื่อสร้างการเชื่อมต่อแล้วแพ็คเก็ตทั้งหมดจะต้องมีชุด ACK และจับคู่หมายเลขลำดับของแพ็กเก็ตที่ได้รับเพื่อการขนส่ง / ความปลอดภัยที่เชื่อถือได้ RST ที่ไม่มี ACK จะไม่ได้รับการยอมรับ เมื่อด้านใดด้านหนึ่งส่ง RST ซ็อกเก็ตจะถูกปิดทันทีและด้านรับก็ปิดซ็อกเก็ตทันทีหลังจากได้รับ RST ที่ถูกต้อง ไม่จำเป็นต้องเป็นและไม่สามารถยอมรับได้

หลังจากจับมือ TCP

A ---> B Syn = x, Ack = y, len = z, ตั้งค่าสถานะ ACK

B ---> A Syn = y, Ack = x + z, len = o, ตั้งค่าสถานะ ACK

A ---> B Syn = x + z, Ack = y + o, len = p, ตั้งค่าสถานะ ACK

B ---> A Syn = y + o, ACK = x + z + p, len = q, RST, ธง ACK

B ปิดซ็อกเก็ตหลังจากที่ส่งแพ็คเก็ตล่าสุดและ A ปิดซ็อกเก็ตหลังจากที่ได้รับมัน

(ไม่พิจารณาหน้าต่าง TCP ที่นี่หรืออาจมีแพ็คเก็ตมากขึ้นจากปลายด้านหนึ่งก่อนการเรียกใช้)

ACK ตั้งค่าสถานะหมายเลขการตอบรับและขั้นตอนการตอบรับมีความเกี่ยวข้อง แต่ไม่เหมือนกัน

ต่อ RFC793

RFC793

หมายเลขตอบรับ: 32 บิต

If the ACK control bit is set this field contains the value of the
next sequence number the sender of the segment is expecting to
receive.  Once a connection is established this is always sent.

รีเซ็ตการประมวลผล

ในทุกรัฐยกเว้น SYN-SENT เซ็กเมนต์รีเซ็ต (RST) ทั้งหมดจะถูกตรวจสอบโดยการตรวจสอบฟิลด์ SEQ การรีเซ็ตจะใช้งานได้หากหมายเลขลำดับอยู่ในหน้าต่าง ในสถานะ SYN-SENT (RST ที่ได้รับจากการตอบสนองต่อ SYN เริ่มต้น) RST นั้นเป็นที่ยอมรับได้ถ้าฟิลด์ ACK ยอมรับ SYN

ผู้รับของ RST แรกตรวจสอบแล้วเปลี่ยนสถานะ หากผู้รับอยู่ในสถานะรับฟังมันจะไม่สนใจมัน หากผู้รับอยู่ในสถานะ SYN-RECEIVED และเคยอยู่ในสถานะรับฟังแล้วผู้รับจะกลับสู่สถานะรับฟังไม่เช่นนั้นผู้รับจะยกเลิกการเชื่อมต่อและไปที่สถานะปิด หากผู้รับอยู่ในสถานะอื่นใดก็จะยกเลิกการเชื่อมต่อและแนะนำผู้ใช้และไปที่สถานะปิด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.