ฉันได้ทำการวิจัยมากเท่าที่จะทำได้โดยไม่ต้องขุดลงในเคอร์เนล ดูเหมือนว่ามีข้อมูลจำนวนมากถูกบิดเบือน / ไม่ถูกต้องในเรื่องดังนั้นฉันหวังว่าสิ่งนี้จะตอบคำถามสำหรับฉันและคนอื่น ๆ ในทันที
การพูด IPv4 อย่างเคร่งครัดเป็นไปได้หรือไม่ที่จะมีการอ่อนล้าของพอร์ต ให้ฉันอธิบาย:
- ดูเหมือนว่าจะมีพอร์ต 65535 ให้ใช้งาน 0 ไม่สามารถใช้ได้
- ฉันได้อ่านแล้วว่าการอ่อนเพลียของพอร์ตนั้นต้องการ (src ip, src port, dst ip, dst port) เพื่อให้เป็นเอกลักษณ์
- เพื่อให้ชัดเจนและสมมติว่าฉันสามารถใช้พอร์ตชั่วคราวได้ 100% ผ่านการตั้งค่า sysctl net.ipv4.ip_local_port_range
และนี่คือคำถาม: นี่เป็นวิธีการทำงานหรือไม่
- ฉันสามารถเชื่อมต่อได้ 65k จาก 127.0.0.1:(x) ถึง 127.0.0.1:80
- ฉันสามารถเชื่อมต่อได้ 65k จาก 127.0.0.1:(x) ถึง 127.0.0.1:555
- โดยทั่วไปอีกครั้งคำถามคือ (srcip, srcport, dstip, dstport) จะต้องไม่ซ้ำกันถูกต้องหรือไม่
- ฉันไม่สามารถเปิดการเชื่อมต่อมากกว่า 65k จาก ip "A" ถึง IP "B", พอร์ต "N"
- ในทำนองเดียวกันIP เดียวไม่สามารถเปิดการเชื่อมต่อมากกว่า 65k ไปยังเว็บเซิร์ฟเวอร์ของฉันได้ที่ xxxx: 80 แต่ฉันสามารถรองรับได้มากกว่า 65k โดยรวมตราบใดที่พวกเขามาจากแหล่ง IP ที่แตกต่างกัน?
ในที่สุดฉันก็สับสนเล็กน้อยเกี่ยวกับพอร์ตชั่วคราว (ขาออก) และพอร์ตขาเข้าที่กำลังฟังอยู่ ฉันรู้ทันทีว่าการเชื่อมต่อนั้นถูกสร้างขึ้นในแต่ละด้านของการเชื่อมต่อคือเพียร์และเท่าเทียมกัน แต่ก่อนที่จะเกิดขึ้น:
ตัวอย่างเช่นหาก tuple (srcip, srcport, dstip, dstport) ต้องไม่ซ้ำกันทำไมจึงเป็นเช่นนั้นถ้าฉันเปิดใช้งานเช่น
net.ipv4.ip_local_port_range = 1024 65535
ซึ่งอนุญาตให้ใช้พอร์ตชั่วคราวจาก 1024-65535 ว่าถ้าฉันมีบริการที่ผูกกับพอร์ต 3306 (mySQL เป็นต้น) บางครั้งพวกเขาจะไม่สามารถเริ่มทำงานได้เนื่องจากพอร์ตที่ใช้งานอยู่
สิ่งนี้เกี่ยวข้องกับข้อเท็จจริงที่: (และนี่คือคำแถลงที่ฉันขอให้ตรวจสอบ):
- (srcip, srcport, dstip, dstport) เป็นสิ่งจำเป็นสำหรับการเชื่อมต่อแต่ละครั้งด้วยช่วงพอร์ต 1-65535 (ไม่สนใจการใช้งานชั่วคราวของระบบปฏิบัติการ)
- อย่างไรก็ตามสำหรับซ็อกเก็ตที่จะผูกมันอาจถูกมองว่าเป็น (srcip, srcport, *, *) หรืออีกวิธีหนึ่งในการทำสิ่งนี้คือ IP จะต้องไม่ใช้พอร์ตนั้นด้วยเหตุผลใดก็ตาม
ฉันสามารถตรวจสอบพฤติกรรมดังกล่าวข้างต้นคือฉันใช้สาย sysctl ที่แน่นอนด้านบนและเพราะฉันย้าย mySQL ไปยังพอร์ตที่ต่ำกว่า 1024 เพราะบางครั้งมันจะสุ่มและล้มเหลวในการเริ่มต้นใหม่เพราะสมมติว่าระบบปฏิบัติการใช้พอร์ตนั้น (3306) สำหรับพอร์ตชั่วคราว