CLOSE_WAIT และ TIME_WAIT สถานะคืออะไร


166

เมื่อฉันทำnetstat -aบนเครื่อง Windows ของฉันฉันจะได้รับรายชื่อของพอร์ตที่มีหนึ่งในสี่สถานะ:

- LISTENING
- CLOSE_WAIT
- TIME_WAIT
- ESTABLISHED

สิ่งที่CLOSE_WAITและTIME_WAITหมายถึง / ระบุ?



ดู 'man netstat' เลื่อนลงไปที่ส่วนสถานะ: linux.die.net/man/8/netstat
MaQleod

1
เสียบไร้ยางอายกับคำตอบใน sistersite Server Fault ของเรา
Hennes

ข้ามเว็บไซต์ล่อ: askubuntu.com/questions/538443/ …
Mokubai

คำตอบ:


179

เนื่องจากวิธีการทำงานของ TCP / IP จึงไม่สามารถปิดการเชื่อมต่อได้ทันที แพ็คเก็ตอาจมาถึงตามคำสั่งหรือถูกส่งใหม่หลังจากการเชื่อมต่อถูกปิด CLOSE_WAIT บ่งชี้ว่าปลายทางระยะไกล (อีกด้านหนึ่งของการเชื่อมต่อ) ได้ปิดการเชื่อมต่อ TIME_WAIT บ่งชี้ว่าจุดปลายเฉพาะที่ (ด้านนี้) ได้ปิดการเชื่อมต่อ การเชื่อมต่อกำลังถูกเก็บไว้เพื่อให้แพ็คเก็ตล่าช้าใด ๆ สามารถจับคู่กับการเชื่อมต่อและจัดการอย่างเหมาะสม การเชื่อมต่อจะถูกลบเมื่อหมดเวลาภายในสี่นาที ดูhttp://en.wikipedia.org/wiki/Transmission_Control_Protocolสำหรับรายละเอียดเพิ่มเติม


แต่นี่ไม่ได้หมายความว่าแม้ว่าแพ็คเก็ตมาถึงหลังจากฟังก์ชั่นกลับมาพวกเขาจะยังคงถูกยกเลิกโดยแอปพลิเคชันหรือไม่
MonsterMMORPG

@MonsterMMORPG แพ็คเก็ตที่ออกมาไม่สมบูรณ์หลังจากการเชื่อมต่อถูกปิดจะถูกจัดการโดยเครือข่ายสแต็ค สิ่งเหล่านี้มักจะถูกทิ้งอย่างปลอดภัยตามกฎแพ็กเก็ตที่ซ้ำกันปกติ แพ็คเก็ตที่ดูเหมือนจะเกี่ยวข้องกับการเชื่อมต่อที่ไม่รู้จักที่ใช้งานจะถูกยกเลิกและสร้างการตอบสนอง สถานะ WAIT ป้องกันการรับส่งข้อมูลนี้
BillThor

29

โดยทั่วไปสถานะ "WAIT" หมายถึงด้านหนึ่งปิดการเชื่อมต่อ แต่การยืนยันขั้นสุดท้ายของการปิดอยู่ระหว่างการพิจารณา

ดูเช่นแผนภาพนี้ของสถานะ TCP สำหรับรายละเอียด:

http://www.jxos.org/Projects/TCP/tcpstate.html


14
สิ่งนี้อธิบายได้อย่างแม่นยำ CLOSE_WAIT แต่ไม่ใช่ TIME_WAIT TIME_WAIT บ่งชี้ว่าแอปพลิเคชันในตัวเครื่องปิดการเชื่อมต่อและอีกด้านหนึ่งยอมรับและส่ง FIN ของตัวเอง ขณะนี้เรากำลังรอแพ็กเก็ตที่ซ้ำซ้อนหลงทางที่อาจทำให้ผู้ใช้รายใหม่ในพอร์ตเดียวกันไม่พอใจ
Chris Smowton

1
@ChrisSmowton ดังนั้นใครจะใช้คำศัพท์ที่ถูกต้อง? แผนภาพหรือnetstat? ( cf เลย )
Pacerier

@Pierier ฉันคิดว่าพวกเขาตรง - คุณคิดว่าพวกเขาไม่เห็นด้วย?
Chris Smowton

@ChrisSmowton ดังนั้นนี่หมายความว่าเจ้าของพอร์ตคนต่อไปอาจได้รับไบต์พิเศษและสามารถหยุดการตอบสนองหากเราตั้งค่า TIME_WAIT = 0
MonsterMMORPG

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

1

TIME_WAIT หมายถึงการรอเวลาให้เพียงพอเพื่อให้แน่ใจว่า TCP ระยะไกลได้รับ ACK ของคำขอ FIN ดู en.wikipedia.org/wiki/Transmission_Control_Protocol (และ RFC 793)


1
สิ่งนี้จะเพิ่มข้อมูลที่ให้ไว้โดยคำตอบที่มีอยู่?
fixer1234

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