จาก 'man 7 tcp' คุณจะเห็นสิ่งนี้:
tcp_tw_recycle (Boolean; default: disabled; since Linux 2.4)
Enable fast recycling of TIME_WAIT sockets. Enabling this option is not recommended since this causes problems when working with NAT
(Network Address Translation).
tcp_tw_reuse (Boolean; default: disabled; since Linux 2.4.19/2.6)
Allow to reuse TIME_WAIT sockets for new connections when it is safe from protocol viewpoint. It should not be changed without
advice/request of technical experts.
ช่วยไม่มากที่นั่น การทดสอบนี้มีข้อมูลเชิงลึกที่ดีเช่นกัน:
/programming/6426253/tcp-tw-reuse-vs-tcp-tw-recycle-which-to-use-or-both
แต่ไม่ใช่ข้อมูลที่เฉพาะเจาะจงว่าทำไมการใช้ซ้ำอย่างปลอดภัยกว่าการรีไซเคิล คำตอบพื้นฐานคือ tcp_tw_reuse จะอนุญาตให้หนึ่งใช้ซ็อกเก็ตเดียวกันหากมีหนึ่งใน TIME_WAIT พร้อมกับพารามิเตอร์ TCP เดียวกันและอยู่ในสถานะที่คาดว่าจะไม่มีการรับส่งข้อมูลเพิ่มเติม (ฉันเชื่อว่าเมื่อ FIN ถูกส่ง ) tcp_tw_recycle ในทางกลับกันเพียงแค่จะใช้ซ็อกเก็ตที่อยู่ใน TIME_WAIT ด้วยพารามิเตอร์เดียวกันโดยไม่คำนึงถึงสถานะซึ่งสามารถสร้างความสับสนให้กับไฟร์วอลล์ของรัฐซึ่งอาจคาดว่าแพ็กเก็ตที่แตกต่างกัน
tcp_tw_reuse สามารถทำได้ในการเลือกรหัสโดยการตั้งค่าตัวเลือกซ็อกเก็ต SO_REUSEADDR เอกสารในman 7 socket
เช่นนี้:
SO_REUSEADDR
Indicates that the rules used in validating addresses supplied in a bind(2) call should allow reuse of local addresses. For AF_INET
sockets this means that a socket may bind, except when there is an active listening socket bound to the address. When the listening
socket is bound to INADDR_ANY with a specific port then it is not possible to bind to this port for any local address. Argument is
an integer boolean flag.