/etc/init.d/networking restart
ให้ฉันทำอย่างละเอียด Transmission Control Protocol (TCP) ได้รับการออกแบบให้เป็นแบบสองทิศทางสั่งและโปรโตคอลการส่งข้อมูลที่เชื่อถือได้ระหว่างสองจุดสิ้นสุด (โปรแกรม) ในบริบทนี้คำที่น่าเชื่อถือหมายความว่ามันจะส่งแพ็กเก็ตใหม่หากได้รับกลาง TCP รับประกันความน่าเชื่อถือโดยการส่งแพ็กเก็ต Acknowleduation (ACK) กลับไปสำหรับแพ็กเก็ตเดียวหรือหลายช่วงที่ได้รับจากเพียร์
สิ่งนี้จะเหมือนกันสำหรับสัญญาณควบคุมเช่นคำขอยกเลิก / ตอบกลับ RFC 793กำหนดสถานะ TIME-WAIT ให้เป็นดังนี้:
TIME-WAIT - หมายถึงการรอเวลามากพอที่จะผ่านเพื่อให้แน่ใจว่า TCP ระยะไกลได้รับการตอบรับการร้องขอการยกเลิกการเชื่อมต่อ
ดูแผนภาพสถานะ TCP ต่อไปนี้:
TCP เป็นโปรโตคอลการสื่อสารสองทิศทางดังนั้นเมื่อสร้างการเชื่อมต่อแล้วจะไม่มีความแตกต่างระหว่างไคลเอนต์และเซิร์ฟเวอร์ นอกจากนี้ผู้ใช้หนึ่งคนสามารถโทรออกจากการทำงานได้และเพื่อนทั้งคู่ต้องเห็นด้วยกับการปิดเพื่อปิดการเชื่อมต่อ TCP ที่สร้างไว้อย่างสมบูรณ์
ลองเรียกอันแรกเพื่อเรียกการออกจากการเป็นคนใกล้ชิดและคนอื่น ๆ ที่ใกล้ชิดเรื่อย ๆ เมื่อแอ็คทีฟเข้าใกล้ส่ง FIN สถานะจะไปที่ FIN-WAIT-1 จากนั้นจะได้รับ ACK สำหรับ FIN ที่ส่งและสถานะจะไปที่ FIN-WAIT-2 เมื่อได้รับ FIN จากการแฝงที่แฝงอยู่ใกล้ยิ่งขึ้นแอคทีฟก็จะส่ง ACK ไปที่ FIN และสถานะจะไปที่ TIME-WAIT ในกรณีที่ passive passive ไม่ได้รับ ACK ไปยัง FIN ที่สองมันจะทำการส่งแพ็กเก็ต FIN อีกครั้ง
RFC 793ตั้งค่า TIME-OUT ให้เป็นสองเท่าของอายุการใช้งานสูงสุดของเซ็กเมนต์หรือ 2MSL ตั้งแต่ MSL เวลาสูงสุดที่แพ็คเก็ตสามารถท่องอินเทอร์เน็ตได้คือ 2 นาทีและ 2MSL คือ 4 นาที เนื่องจากไม่มี ACK ไปยัง ACK การใช้งานที่ใกล้ชิดจึงไม่สามารถทำอะไรได้นอกจากรอ 4 นาทีหากปฏิบัติตามโปรโตคอล TCP / IP อย่างถูกต้องในกรณีที่ผู้ส่งแฝงไม่ได้รับ ACK ไปยัง FIN (ตามหลักเหตุผล) .
ในความเป็นจริงแพ็คเก็ตที่หายไปอาจเป็นของหายากและหายากมากถ้ามันเกิดขึ้นภายใน LAN หรือภายในเครื่องเดียว
หากต้องการตอบคำถามทุกข้อวิธีบังคับให้ปิดซ็อกเก็ตใน TIME_WAIT ได้อย่างไรฉันจะยังคงยึดคำตอบเดิมของฉัน:
/etc/init.d/networking restart
ในทางปฏิบัติฉันจะตั้งโปรแกรมเพื่อให้ละเว้นสถานะ TIME-WAIT โดยใช้ตัวเลือก SO_REUSEADDR ตามที่ระบุใน WMR SO_REUSEADDR ทำอะไรกันแน่
ตัวเลือกซ็อกเก็ตนี้จะบอกเคอร์เนลว่าแม้ว่าพอร์ตนี้จะไม่ว่าง (ใน
สถานะ TIME_WAIT) ให้ดำเนินการต่อและนำกลับมาใช้ใหม่ หากไม่ว่าง แต่มีสถานะอื่นคุณจะยังคงได้รับข้อผิดพลาดที่ใช้งานอยู่แล้ว มันจะมีประโยชน์ถ้าเซิร์ฟเวอร์ของคุณถูกปิดแล้วรีสตาร์ททันทีในขณะที่ซ็อกเก็ตยังคงใช้งานบนพอร์ตของมัน คุณควรทราบว่าหากมีข้อมูลที่ไม่คาดคิดเกิดขึ้นอาจทำให้เซิร์ฟเวอร์ของคุณสับสน แต่ในขณะนี้อาจเป็นไปได้ แต่ก็ไม่น่าเป็นไปได้
TIME_WAIT
เซิร์ฟเวอร์มากเกินไป"เพียงข้ามคำตอบสามข้อแรกซึ่งหลีกเลี่ยงคำถามแทนที่จะตอบคำถาม