วิธีการตรวจสอบการตั้งค่าแบบสุ่มบนพอร์ตไคลเอนต์ TCP ที่เชื่อมต่อผ่านทางวนกลับไปยังเซิร์ฟเวอร์
ฉันมีชุดทดสอบที่เริ่มต้นเซิร์ฟเวอร์บน localhost แล้วรันการทดสอบหลายพันครั้งซึ่งรวมถึงการเริ่มต้นและหยุดไคลเอ็นต์ที่เชื่อมต่อกับเซิร์ฟเวอร์ในเครื่องนี้ในเครื่องเดียวกัน ฉันพยายามค้นหาสาเหตุของ RST ที่ลูกค้าส่งไปยังเซิร์ฟเวอร์ นี่คือลำดับเหตุการณ์: ไคลเอ็นต์เริ่มต้น SYN เซิร์ฟเวอร์ส่งกลับ SYN, ACK ไคลเอนต์ส่ง RST (แทน ACK และสร้างการเชื่อมต่อ) การสังเกตการณ์หนึ่งครั้งในหลาย ๆ ครั้งเซิร์ฟเวอร์ใช้ CPU ประมาณ 99 เปอร์เซ็นต์แม้ว่ามันจะกลับมาเป็นปกติในไม่กี่วินาที / นาที ตอนแรกฉันคิดว่าอาจเป็นเพราะลูกค้าใช้พอร์ตจากการเชื่อมต่อที่ปิดก่อนหน้านี้ซึ่งอยู่ในสถานะ TIME_WAIT และเมื่อเซิร์ฟเวอร์ส่ง SYN, ACK ในไคลเอ็นต์การเชื่อมต่อนั้นออก RST แม้ว่าฉันจะสงสัยว่าทำไมลูกค้าควรใช้พอร์ตในสถานะ TIME_WAIT แต่ฉันใช้ fedora core 4 แบบเก่าและคิดว่าอาจจะไม่ได้ใช้ TCP / IP :-) ตอนนี้ฉันไม่เชื่อว่าเป็นเหตุผลเพราะการปรับแต่งทั้งหมดที่ทำในการแก้ไขปัญหาข้างต้นไม่ได้ช่วยบรรเทาปัญหา FYI ต่อไปนี้เป็นการเปลี่ยนแปลงที่ฉันได้ลอง/etc/sysctl.conf: net.ipv4.ip_local_port_range = 1024 …