นั่นคือวิธีที่โปรโตคอล FTP ออกแบบมาเพื่อทำงานในโหมดพาสซีฟ มันอาจไม่ใช่ความคิดที่ดีเพราะฉันไม่คิดว่ารุ่นนี้เคยทำซ้ำอีกครั้งในโพรโทคอลอื่น ๆ (และนั่นเป็นความจริงยิ่งกว่านั้นเกี่ยวกับโหมดการใช้งาน FTP)
บนพอร์ตการเชื่อมต่อข้อมูลไม่มีโปรโตคอล สิ่งที่เซิร์ฟเวอร์รู้ - สิ่งเดียวที่นำข้อมูลใด ๆ ในการเชื่อมต่อนั้น - คือหมายเลขพอร์ตที่คุณเชื่อมต่อ
หากคุณต้องเชื่อมต่อกับพอร์ตเดียวกันทุกครั้งเซิร์ฟเวอร์จะไม่สามารถบอกได้ว่าไฟล์ใดที่คุณกำลังเชื่อมต่อ หมายเลขพอร์ตทำหน้าที่เป็นลิงค์ระหว่างคำขอโอนในการเชื่อมต่อการควบคุมและการเชื่อมต่อข้อมูล - หมายเลขพอร์ตจะมีอยู่ในการตอบสนองต่อPASV
คำสั่ง
หากลูกค้าสองรายต้องการขอโอนในเวลาเดียวกันเมื่อเซิร์ฟเวอร์ยอมรับการเชื่อมต่อบนพอร์ตเดียวเซิร์ฟเวอร์จะไม่สามารถบอกได้ว่าไฟล์ใดที่จะถ่ายโอน แน่นอนว่าเซิร์ฟเวอร์สามารถใช้ IP ไคลเอนต์สำหรับการตัดสินใจได้ (จริง ๆ แล้วเซิร์ฟเวอร์ FTP หลายเครื่องตรวจสอบว่า IP ไคลเอ็นต์ตรงกับ IP ที่ใช้ในการเชื่อมต่อการควบคุมเพื่อความปลอดภัย)
แต่สิ่งนี้จะไม่ทำงานสำหรับ:
- การเชื่อมต่อหลายครั้งจากเครื่องเดียวกัน (ไคลเอนต์ FTP ส่วนใหญ่รองรับการถ่ายโอน / คิวแบบขนานและคุณสามารถเรียกใช้ไคลเอนต์ FTP ที่แตกต่างกันหลายเครื่องได้ในเครื่องเดียว);
- การเชื่อมต่อจากเครื่องต่าง ๆ ภายในเครือข่าย (องค์กร) เดียวกันกับที่มี IP ภายนอกเดียวกัน
คัดลอกบางส่วนจากคำตอบของฉันไปที่ทำไม FTP แฝงโหมดต้องการช่วงพอร์ตเมื่อเทียบกับพอร์ตเดียวเท่านั้น? บน Server Fault