ทำไมโหมด FTP แฝงใช้ช่วงของพอร์ตชั่วคราวเมื่อเทียบกับพอร์ตที่รู้จักกันดีเดียว? [ปิด]


9

ในโหมด FTP passive ฉันอ่านว่าเซิร์ฟเวอร์ส่งหมายเลขพอร์ตสุ่มไปยังไคลเอนต์ซึ่งสามารถสร้างช่องสัญญาณข้อมูลได้
จากนั้นไคลเอ็นต์จะสร้างช่องสัญญาณจากหมายเลขพอร์ตสุ่มไปยังหมายเลขพอร์ตนี้ที่เซิร์ฟเวอร์ส่ง

คำถามของฉันคือเหตุใดเซิร์ฟเวอร์จึงส่งหมายเลขพอร์ตสุ่มไปยังลูกค้า เหตุใดลูกค้าไม่สามารถสร้างช่องสัญญาณข้อมูลโดยตรงกับหมายเลขพอร์ต 20 ที่ฝั่งเซิร์ฟเวอร์ได้


2
ฉันคิดว่านี่เป็นหัวข้อนอก

น่าเสียดายที่คำถามเกี่ยวกับโปรโตคอลด้านบน OSI layer-4 เป็นหัวข้อที่นี่
Ron Maupin

คำตอบ:


13

นั่นคือวิธีที่โปรโตคอล FTP ออกแบบมาเพื่อทำงานในโหมดพาสซีฟ มันอาจไม่ใช่ความคิดที่ดีเพราะฉันไม่คิดว่ารุ่นนี้เคยทำซ้ำอีกครั้งในโพรโทคอลอื่น ๆ (และนั่นเป็นความจริงยิ่งกว่านั้นเกี่ยวกับโหมดการใช้งาน FTP)


บนพอร์ตการเชื่อมต่อข้อมูลไม่มีโปรโตคอล สิ่งที่เซิร์ฟเวอร์รู้ - สิ่งเดียวที่นำข้อมูลใด ๆ ในการเชื่อมต่อนั้น - คือหมายเลขพอร์ตที่คุณเชื่อมต่อ

หากคุณต้องเชื่อมต่อกับพอร์ตเดียวกันทุกครั้งเซิร์ฟเวอร์จะไม่สามารถบอกได้ว่าไฟล์ใดที่คุณกำลังเชื่อมต่อ หมายเลขพอร์ตทำหน้าที่เป็นลิงค์ระหว่างคำขอโอนในการเชื่อมต่อการควบคุมและการเชื่อมต่อข้อมูล - หมายเลขพอร์ตจะมีอยู่ในการตอบสนองต่อPASVคำสั่ง

หากลูกค้าสองรายต้องการขอโอนในเวลาเดียวกันเมื่อเซิร์ฟเวอร์ยอมรับการเชื่อมต่อบนพอร์ตเดียวเซิร์ฟเวอร์จะไม่สามารถบอกได้ว่าไฟล์ใดที่จะถ่ายโอน แน่นอนว่าเซิร์ฟเวอร์สามารถใช้ IP ไคลเอนต์สำหรับการตัดสินใจได้ (จริง ๆ แล้วเซิร์ฟเวอร์ FTP หลายเครื่องตรวจสอบว่า IP ไคลเอ็นต์ตรงกับ IP ที่ใช้ในการเชื่อมต่อการควบคุมเพื่อความปลอดภัย)

แต่สิ่งนี้จะไม่ทำงานสำหรับ:

  • การเชื่อมต่อหลายครั้งจากเครื่องเดียวกัน (ไคลเอนต์ FTP ส่วนใหญ่รองรับการถ่ายโอน / คิวแบบขนานและคุณสามารถเรียกใช้ไคลเอนต์ FTP ที่แตกต่างกันหลายเครื่องได้ในเครื่องเดียว);
  • การเชื่อมต่อจากเครื่องต่าง ๆ ภายในเครือข่าย (องค์กร) เดียวกันกับที่มี IP ภายนอกเดียวกัน

คัดลอกบางส่วนจากคำตอบของฉันไปที่ทำไม FTP แฝงโหมดต้องการช่วงพอร์ตเมื่อเทียบกับพอร์ตเดียวเท่านั้น? บน Server Fault


หมายเลขพอร์ตที่ใช้ในฝั่งเซิร์ฟเวอร์สามารถเป็น 20 ใช่ไหม ในทุกคำตอบหมายเลขพอร์ตทางฝั่งเซิร์ฟเวอร์จะไม่ใช่ 20
Zephyr

คำตอบของฉันอธิบายว่าทำไมหมายเลขพอร์ตจะต้องไม่ซ้ำกันสำหรับการเชื่อมต่อ / ถ่ายโอนแต่ละครั้ง ดังนั้นจึงไม่สามารถแก้ไขได้ถึง 20.
Martin Prikryl

ใช่มันไม่สามารถแก้ไขได้ แต่หนึ่งในนั้นคือ 20 ใช่ไหม
Zephyr

1
ใช่ แต่พอร์ตอื่น ๆ ทั้งหมดจะต้องสูงกว่า 1024 และจากมุมมองที่ใช้งานได้จริงช่วงของพอร์ตที่ต่อเนื่องกันจะดีกว่า ไฟร์วอลล์ / NAT ส่วนใหญ่รองรับกฎตามช่วง คุณไม่ต้องการเพิ่มกฎพิเศษสำหรับพอร์ตที่แยก 20 - เซิร์ฟเวอร์ FTP ส่วนใหญ่สนับสนุนช่วงของพอร์ตที่ต่อเนื่องกันเท่านั้น
Martin Prikryl

1
@ Zac67 ไม่ไคลเอ็นต์จะเปิดการเชื่อมต่อใหม่ (นอกเหนือจากการเชื่อมต่อการควบคุม) เพื่อดึงไฟล์ในโหมดพาสซีฟดังนั้นเซิร์ฟเวอร์ไม่สามารถใช้หมายเลขพอร์ตต้นทาง (ไคลเอนต์) เพื่อแยกความแตกต่างระหว่างการเชื่อมต่อไคลเอนต์ นอกจากนี้ NAT มักจะทำให้พอร์ตไคลเอ็นต์ต้นทาง (และ / หรือที่อยู่ IP) หยุดทำงานซึ่งทำให้วิธีการดังกล่าวใช้ไม่ได้ในทางปฏิบัติ
jjmontes

4

โดยปกติแล้วเซิร์ฟเวอร์จะไม่ส่งพอร์ตสุ่ม แต่จะเป็นพอร์ตว่างจากช่วง / พูลที่กำหนด (โดยการติดตั้ง) สำหรับลูกค้าที่ดูสุ่ม พอร์ตนี้จะต้องถูกส่งต่อไปยังไฟร์วอลล์ซึ่งจำเป็นต้องมีการกำหนดช่วง

น่าเสียดายที่ FTP นั้นโบราณ ฉันเดาว่าเซิร์ฟเวอร์โบราณไม่สามารถแยกแยะเซสชันข้อมูลของลูกค้าหลายรายยกเว้นพอร์ต โดยทั่วไปจะดีกว่าที่จะไปยังโปรโตคอลที่ทันสมัยมากขึ้นซึ่งทุกอย่างถูกแพ็กเก็ตอย่างเรียบร้อยภายในเซสชันซ็อกเก็ตเดียว


มันสามารถเป็น 20 ได้จริงไหม? ในทุก ๆ เว็บไซต์หมายเลขพอร์ตของเซิร์ฟเวอร์สำหรับข้อมูลนั้นไม่ใช่ 20.
Zephyr

20 คือพอร์ตขาออกจากเซิร์ฟเวอร์สำหรับFTP ที่ใช้งาน (ซึ่งไม่ได้ใช้งานมากนัก)
Zac67

ไม่ใช่เซิร์ฟเวอร์โบราณที่มีปัญหา แต่ผู้ออกแบบโปรโตคอลยังคงพยายามหาวิธีที่ดีที่สุดในการทำสิ่งที่ซับซ้อนกว่าการตอบสนองคำขอแบบดั้งเดิม
ทำเครื่องหมาย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.