เอฟทีพี
เอฟทีพี หรือ เกณฑ์วิธีถ่ายโอนแฟ้ม () เป็นโพรโทคอลเครือข่ายชนิดหนึ่ง ใช้สำหรับแลกเปลี่ยนและจัดการไฟล์บนเครือข่ายทีซีพี/ไอพีเช่นอินเทอร์เน็ต เอฟทีพีถูกสร้างขึ้นด้วยสถาปัตยกรรมแบบระบบรับ-ให้บริการ (client-server) และใช้การเชื่อมต่อสำหรับส่วนข้อมูลและส่วนควบคุมแยกกันระหว่างเครื่องลูกข่ายกับเครื่องแม่ข่าย โปรแกรมประยุกต์เอฟทีพีเริ่มแรกโต้ตอบกันด้วยเครื่องมือรายคำสั่ง สั่งการด้วยไวยากรณ์ที่เป็นมาตรฐาน แต่ก็มีการพัฒนาส่วนต่อประสานกราฟิกกับผู้ใช้ขึ้นมาสำหรับระบบปฏิบัติการเดสก์ท็อปที่ใช้กันทุกวันนี้ เอฟทีพียังถูกใช้เป็นส่วนประกอบของโปรแกรมประยุกต์อื่นเพื่อส่งผ่านไฟล์โดยอัตโนมัติสำหรับการทำงานภายในโปรแกรม เราสามารถใช้เอฟทีพีผ่านทางการพิสูจน์ตัวจริงด้วยชื่อผู้ใช้และรหัสผ่าน หรือเข้าถึงด้วยผู้ใช้นิรนาม
นอกจากนี้ยังมีทีเอฟทีพี (Trivial File Transfer Protocol) ซึ่งมีลักษณะคล้ายกับเอฟทีพีที่ลดความซับซ้อนลง แต่ไม่สามารถควบคุมให้ทำงานประสานกันได้ และไม่มีการพิสูจน์ตัวจริง
เอฟทีพีมีการกำหนดลักษณะเฉพาะครั้งแรกใน RFC 114 เมื่อ 16 เมษายน พ.ศ. 2514 จากนั้นถูกเปลี่ยนโดย RFC 765 เมื่อเดือนมิถุนายน พ.ศ. 2523 และต่อมาก็ถูกเปลี่ยนอีกครั้งหนึ่งโดย RFC 959 เมื่อเดือนตุลาคม พ.ศ. 2528 ซึ่งเป็นรุ่นที่ใช้กันอยู่ในปัจจุบัน มีมาตรฐานอีกจำนวนหนึ่งที่พยายามเสริมคุณลักษณะเข้าไปในเอกสารขอความเห็นรุ่นดังกล่าว ตัวอย่างเช่น RFC 2228 เมื่อเดือนมิถุนายน พ.ศ. 2540 เสนอให้เพิ่มส่วนขยายสำหรับความปลอดภัย และ RFC 2428 เมื่อเดือนกันยายน พ.ศ. 2541 เพิ่มการรองรับสำหรับไอพีวี6 และกำหนดวิธีการส่งผ่านไฟล์แบบวิธีรับการร้องขอชนิดใหม่
จากการสรุปไว้โดยเอกสารขอความเห็น เอฟทีพีใช้สำหรับ
เครื่องลูกข่ายเริ่มต้นสร้างการเชื่อมต่อไปยังเครื่องแม่ข่ายโดยใช้ทีซีพีบนพอร์ตหมายเลข 21 การเชื่อมต่อนี้คือ "การเชื่อมต่อส่วนควบคุม" ซึ่งจะเปิดอยู่ตลอดเวลาขณะที่มีการใช้งาน หลังจากนั้น "การเชื่อมต่อส่วนข้อมูล" บนพอร์ตหมายเลข 20 จะถูกสร้างขึ้นตามความจำเป็นเพื่อส่งผ่านข้อมูลไฟล์ คำสั่งที่ส่งโดยเครื่องลูกข่ายไปยังส่วนควบคุมมีรูปแบบเป็นข้อความแอสกี และจบคำสั่งด้วย CRLF (อักขระปัดแคร่ตามด้วยอักขระป้อนบรรทัด) ตัวอย่างเช่น RETR "filename" เป็นคำสั่งรับข้อมูลไฟล์ที่ต้องการจากเครื่องแม่ข่ายมายังเครื่องลูกข่าย
หลังจากเครื่องแม่ข่ายได้รับคำสั่งแล้ว จะตอบกลับด้วยรหัสสถานภาพเป็นตัวเลขสามหลักพร้อมกับข้อความแอสกีถ้ามี บนการเชื่อมต่อส่วนควบคุม ตัวอย่างเช่น 200 หรือ 200 OK หมายความว่าคำสั่งล่าสุดสำเร็จผล การส่งผ่านไฟล์บนการเชื่อมต่อส่วนข้อมูลที่กำลังดำเนินอยู่สามารถยุติลงได้ด้วยการส่งคำสั่งให้หยุดไปบนการเชื่อมต่อส่วนควบคุม
เอฟทีพีสามารถทำงานได้ใน "วิธีส่งการร้องขอ" หรือ แอคทีฟโหมด (active mode) และ "วิธีรับการร้องขอ" พาสซีฟโหมด (passive mode) ซึ่งเป็นการเลือกว่าให้จัดการการเชื่อมต่อที่สองอย่างไร ด้วยวิธีส่งการร้องขอ เครื่องลูกข่ายจะส่งหมายเลขไอพีและพอร์ตที่ต้องการใช้ส่งผ่านข้อมูลให้กับเครื่องแม่ข่าย จากนั้นเครื่องแม่ข่ายจะเปิดการเชื่อมต่อนั้นกลับมา ในขณะที่วิธีรับการร้องขอ เครื่องแม่ข่ายจะส่งหมายเลขไอพีและพอร์ตให้กับเครื่องลูกข่ายก่อน จากนั้นเครื่องลูกข่ายจะสร้างการเชื่อมต่อดังกล่าว (แนวคิดตรงข้ามกับวิธีส่งการร้องขอ) วิธีรับการร้องขอถูกคิดค้นขึ้นมาเพื่อใช้ในกรณีเครื่องลูกข่ายตั้งอยู่หลังไฟร์วอลล์ และไม่สามารถรับการเชื่อมต่อทีซีพีที่ไม่รู้จักจากภายนอกได้ วิธีการทั้งคู่ได้รับการปรับปรุงเมื่อเดือนกันยายน พ.ศ. 2541 เพื่อให้รองรับไอพีวี6 และปรับแต่งวิธีรับการร้องขอทำให้เกิดเป็น "วิธีรับการร้องขอแบบเสริม" (extended passive mode) ขึ้นมา
ขณะที่ส่งผ่านข้อมูลไปบนเครือข่าย การแสดงออกของข้อมูลสามารถใช้ได้สี่อย่าง ซึ่งมีเพียงสองชนิดที่ใช้กันโดยทั่วไป
ส่วนที่เหลืออีกสองชนิดคือ "วิธีข้อมูลเอบซีดิก" และ "วิธีข้อมูลไฟล์เฉพาะที่" ถูกยกเลิกการใช้งานไปแล้ว สำหรับไฟล์ข้อความธรรมดา เราสามารถเลือกการควบคุมรูปแบบและโครงสร้างการบันทึกที่แตกต่างกันได้ แม้ว่าคุณลักษณะเหล่านี้แทบจะไม่ได้ใช้ในปัจจุบัน วิธีการส่งผ่านข้อมูลต่าง ๆ เหล่านี้สามารถเลือกใช้ได้ตามต้องการ แต่วิธีการปริยายที่ใช้กันในปัจจุบันจะเป็นการส่งกระแสข้อมูลเสมอ
ลักษณะเฉพาะเริ่มแรกของเอฟทีพีใช้วิธีการส่งผ่านไฟล์ที่ไม่มีการรักษาความปลอดภัย เพราะไม่มีวิธีการใดที่ระบุการส่งผ่านแบบเข้ารหัสข้อมูล หมายความว่าภายใต้การกำหนดค่าเครือข่ายส่วนใหญ่ ชื่อผู้ใช้ รหัสผ่าน คำสั่งเอฟทีพี และไฟล์ที่ส่งผ่าน สามารถถูกดักจับได้โดยใครก็ตามที่อยู่บนเครือข่ายเดียวกันด้วยตัวดักจับกลุ่มข้อมูล (packet sniffer) สิ่งนี้เป็นปัญหาหนึ่งของโพรโทคอลอินเทอร์เน็ตโดยทั่วไปเช่น เอชทีทีพี เอสเอ็มทีพี เทลเน็ต เป็นต้น จึงเกิดการคิดค้นเอสเอสแอลเพื่อการเข้ารหัสขึ้นมาใช้ การแก้ปัญหาความปลอดภัยนี้คือใช้ เอสเอฟทีพี (SSH File Transfer Protocol) หรือ เอฟทีพีเอส (FTP over SSL) ซึ่งเพิ่มการเข้ารหัสด้วยเอสเอสแอล (หรือทีแอลเอส) ไปบนเอฟทีพีธรรมดา ตามที่ระบุไว้ใน RFC 4217
เครื่องแม่ข่ายที่ให้บริการเอฟทีพีอาจมีการเพิ่มระดับการเข้าถึงโดยผู้ใช้นิรนาม (anonymous FTP) นั่นคือไม่ต้องระบุตัวตนกับเครื่องแม่ข่าย โดยทั่วไปผู้ใช้ต้องล็อกอินเข้าสู่บริการด้วยชื่อบัญชี anonymous และเครื่องแม่ข่ายมักจะร้องขอให้ใส่รหัสผ่านเป็นที่อยู่อีเมลแทน ถึงกระนั้นก็ตาม บริการเอฟทีพีไม่สามารถตรวจสอบว่าที่อยู่อีเมลนั้นมีตัวตนอยู่จริงหรือเป็นของผู้ใช้จริงหรือไม่
โปรแกรมลูกข่ายเอฟทีพีสมัยใหม่มักจะซ่อนกระบวนการล็อกอินแบบนิรนามจากผู้ใช้ และป้อนข้อมูลหลอก ๆ เป็นรหัสผ่าน (เนื่องจากโปรแกรมอาจไม่สามารถรับรู้ที่อยู่อีเมลของผู้ใช้ได้)
โพรโทคอลโกเฟอร์ (Gopher) เป็นทางเลือกอีกทางหนึ่งเพื่อการเข้าถึงเอฟทีพีของผู้ใช้นิรนาม เช่นเดียวกับทีเอฟทีพีและเอฟเอสพี (File Service Protocol)
เมื่อการเข้าถึงเอฟทีพีถูกจำกัด บริการเอฟทีพีระยะไกล (เอฟทีพีเมล) สามารถใช้งานแทนได้เพื่อแก้ปัญหานี้ อีเมลที่บรรจุคำสั่งเอฟทีพีที่สร้างขึ้นจะถูกส่งไปยังเครื่องให้บริการเอฟทีพีระยะไกล ซึ่งเครื่องนั้นเป็นเมลเซิร์ฟเวอร์ที่สามารถแจงส่วนอีเมลที่รับมาแล้วดำเนินการคำสั่งเอฟทีพีได้ และส่งกลับข้อมูลใด ๆ ที่ดาวน์โหลดไปทางอีเมลเป็นไฟล์แนบ วิธีนี้มีความยืดหยุ่นน้อยกว่าการใช้โปรแกรมลูกข่ายเอฟทีพี เพราะไม่สามารถแสดงรายการไดเรกทอรีหรือปรับแต่งคำสั่งได้อย่างทันใจ และอาจเกิดปัญหาไฟล์แนบที่มีขนาดใหญ่ไม่สามารถส่งผ่านไปถึงผู้รับ เนื่องจากผู้ใช้อินเทอร์เน็ตทุกวันนี้สามารถเข้าถึงเอฟทีพีได้โดยตรงอยู่แล้ว กระบวนการเหล่านี้จึงไม่มีการใช้อีกต่อไป
เว็บเบราว์เซอร์และตัวจัดการไฟล์รุ่นใหม่ ๆ ส่วนใหญ่สามารถติดต่อกับเครื่องให้บริการเอฟทีพีได้ แม้ว่าอาจไม่มีการรองรับส่วนขยายโพรโทคอลเช่นเอฟทีพีเอส การใช้เว็บเบราว์เซอร์และตัวจัดการไฟล์สามารถจัดดำเนินการไฟล์ระยะไกลบนเอฟทีพี ด้วยส่วนติดต่อที่คล้ายกับระบบไฟล์เฉพาะที่ สามารถกระทำได้โดยป้อนยูอาร์แอลของเอฟทีพีในรูปแบบนี้
สำหรับชื่อผู้ใช้และรหัสผ่านสำหรับการล็อกอิน สามารถใส่ได้พร้อมกันในยูอาร์แอลด้วยรูปแบบนี้ (ถ้าไม่ใส่ในตอนแรก ระบบจะถามทีหลัง)
เว็บเบราว์เซอร์ส่วนมากจำเป็นต้องใช้วิธีรับการร้องขอ (passive mode) ซึ่งเครื่องให้บริการไม่ได้รองรับคุณลักษณะนี้ทุกเครื่อง เว็บเบราว์เซอร์บางโปรแกรมอนุญาตให้ดาวน์โหลดไฟล์ได้อย่างเดียว ไม่มีวิธีอัปโหลดไฟล์ไปยังเครื่องแม่ข่าย