ફાઇલ ટ્રાન્સ્ફર પ્રોટોકોલ

**ફાઇલ ટ્રાન્સ્ફર પ્રોટોકોલ** (અંગ્રેજી: File Transfer Protocol – FTP) એક પ્રમાણભૂત નેટવર્ક પ્રોટોકોલ છે જે TCP-આધારિત નેટવર્કમાં (જેમકે ઈન્ટરનેટ) એક હોસ્ટથી બીજા હોસ્ટ સુધી ફાઈલનું સ્થળાંતર કરે છે. FTPનું બંધારણ ક્લાયન્ટ-સર્વર સ્થાપત્ય પર આધારિત છે તેમજ સર્વર અને ક્લાયન્ટ વચ્ચે ડેટા જોડાણો થાય છે. FTP જોડાણ માટે આવેલા ક્લાયન્ટોને ક્લીયર-ટેક્ષ સાઈન-ઇન પ્રોટોકોલની મદદથી અધિકૃત કરે છે પરંતુ, જો સર્વરને અજ્ઞાત ઓળખથી પણ જોડવા રૂપરેખાંકિત કર્યું હોયતો તે આવા જોડાણને અનુમતિ આપે છે. સુરક્ષિત પ્રેષણ(પ્રવહન) માટે તે ઉપભોક્તા અધિકૃત નામ અને તેના પાસવર્ડને ગોપનીય રાખવા માટે FTP વારંવાર SSL/TLS (FTPS) જેવા ક્રિપ્ટોગ્રાફિક (સંકેતલીપીવાળું) પ્રોટોકોલોનો ઉપયોગ કરે છે. આના બદલે SSH ફાઈલ ટ્રાન્સફર પ્રોટોકોલ (SFTP) નો પણ ઉપયોગ થાય છે, પણ તકનીકી રીતે તે અલગ હોય છે.

પહેલાના FTP ક્લાયન્ટ સોફ્ટવેરનો વિકાસ ઓપરેટિંગ સિસ્ટમના ગ્રાફીકલ ઇન્ટરફેસ બન્યા તે પહેલા થયો હતો અને તે આજે લગભગ બધીજ ઓપેરેટીંગ સિસ્ટમ જેવીકે, વિન્ડોઝ, લિનક્સ અને યુનિક્સ જોડે આવે છે.   અત્યાર સુધીમાં ડેસ્કટોપ, સર્વર, મોબાઈલ ઉપકરણો અને હાર્ડવેર માટે ડઝનબંધ FTP ક્લાયન્ટો અને ઓટોમેશન એપ્લિકેશનો બની છે, અને વેબ-પેજના સંપાદન જેવી સેંકડો એપ્લીકેશનોમાં FTP સંસ્થાપિત થયેલ છે.

## ઈતિહાસ 
મૂળભૂત રીતે ફાઈલ ટ્રાન્સફર પ્રોટોકોલનું વિશિષ્ટ વિગતવર્ણનનું લેખન અભય ભૂષણ દ્વારા થયું હતું જે RFC 114 પર ૧૬ એપ્રિલ ૧૯૭૧માં પ્રકાશિત થયું હતું અને પછીથી RFC 765 (જુન ૧૯૮૦) અને RFC 959 (ઓક્ટોબર ૧૯૮૫) દ્વારા બદલાયું જે હાલના FTPનું વિશિષ્ટ વિગતવર્ણન કરે છે. RFC 959માં કેટલાંક સૂચિત સુધારાઓ થયા, દા.ત. RFC 2228 (જુન ૧૯૯૭)માં સુરક્ષા એક્ષ્ટેન્શન માટે દરખાસ્ત અને RFC 2428 (સપ્ટેમ્બર ૧૯૯૮)માં IPv6ના સમર્થન ઉમેરવા અને નવીન પ્રકારની પરોક્ષ સ્થિતિને વ્યાખ્યાયિત કરાયું છે.

## પ્રોટોકોલનું નિરીક્ષણ 
FTP બીજા ક્લાયન્ટ/સર્વર એપ્લીકેશનોથી તેની બે હોસ્ટ વચ્ચેના જોડાણ બાબતે અલગ પડે છે. તે બે હોસ્ટ વચ્ચે બે રીતે જોડાણ કરે છે : એક જોડાણ ડેટા સ્થાનાંતર કરવા ઉપયોગી છે અને બીજું જોડાણ સૂચનાઓ (આદેશ અને પ્રતિભાવ)ને નિયંત્રિત કરે છે. આ ડેટા અને આદેશનું જુદું જુદું નિયંત્રિત થવું FTPને વધુ અસરકારક બનાવે છે. FTP TCP ના બે જાણીતા પોર્ટનો ઉપયોગ કરે છે : પોર્ટ ૨૧ કે જે જોડાણ નિયંત્રણ માટે વપરાય છે અને પોર્ટ ૨૦ ડેટા જોડાણ (પરિવહન) માટે વપરાય છે. 

### સંચાર અને માહિતી સ્થાનાંતર 
FTP ક્લાયન્ટ ત્રણ ઘટકો ધરાવે છે: વપરાશકર્તા ઇન્ટરફેસ, ક્લાયન્ટ નિયંત્રણ કાર્યવાહી, ક્લાયન્ટ ડેટા સ્થાનાંતર પ્રક્રિયા. જયારે સર્વર બે ઘટકો ધરાવે છે : સર્વર નિયંત્રણ કાર્યવાહી, સર્વર ડેટા સ્થાનાંતર પ્રક્રિયા. નિયંત્રણ કાર્યવાહીઓ વચ્ચે નિયંત્રણ જોડાણ બને છે. ડેટા સ્થાનાંતર પ્રક્રિયાઓ વચ્ચે ડેટા જોડાણ બને છે. 

નિયંત્રણ જોડાણ સમગ્ર અરસપરસ FTP સત્ર દરમિયાન જોડાયેલ રહે છે. ડેટા જોડાણ દરેક ફાઈલના સ્થાનાંતર અનુસાર ખુલે અને બંધ થાય છે. જયારે વપરાશકર્તા જયરે FTP સત્ર ચાલુ કરે ત્યારે નિયંત્રણ જોડાણ ચાલુ થાય છે. જ્યારે નિયંત્રણ જોડાણ ખુલ્લું હોય ત્યારે ડેટા જોડાણ દરેક ફાઈલ મોકલતી વખતે એક થી વધારે વાર ખુલે છે અને બંધ થાય છે. 
જયારે ક્લાયન્ટ સર્વર જોડે જોડાણની વિનંતી મોકલે છે ત્યારે, સર્વર નિયંત્રણ જોડાણ મારફતે ત્રિ-અંકીય સ્થિતિ કોડથી પ્રતિક્રિયા આપે છે. દા.ત. “૨૦૦” (કે “૨૦૦ OK”) એટલેકે, પાછલો આદેશ સફળ થયો છે. આ સંખ્યાઓ (200) પ્રતિક્રિયા માટે કોડ અને વૈકલ્પિક ટેકસ્ટ (“OK”) માનવ માટે વાંચનીય સમજુતી કે વિનંતી દર્શાવે છે.  જોડાણની સક્રિય સ્થિતિમાં ક્લાયન્ટ સર્વર સુધી TCP નિયંત્રણ જોડાણ બનાવે છે અને સર્વર એ ક્લાયન્ટનું IP એડ્રેસ મોકલે છે તથા એક ઇચ્છાધીન ક્લાયન્ટ પોર્ટ નંબર આપે છે અને સર્વર તરફથી આ TCP જોડાણ પર આ ક્લાયન્ટના IP એડ્રેસ અને પોર્ટ નંબર ડેટા પરિવહનની રાહ જુએ છે.

જો ક્લાયન્ટ ફાયરવોલથી સુરક્ષિત હોય અને પોતાની તરફ આવતા જોડાણોને સ્વીકારી ના શકતું હોય તેવી સ્થિતિમાં તે પરોક્ષ (Passive) રીતે જોડાણ શક્ય બનાવે છે. આ પરોક્ષ સ્થિતિમાં ક્લાયન્ટ PASV આદેશનો ઉપયોગ કરી સર્વર સાથે નિયંત્રણ જોડાણ બનાવે છે અને તે(ક્લાયન્ટ) સર્વરના IP એડ્રેસ અને સર્વર પોર્ટ નંબર સર્વર પાસેથી મેળવે છે.  ૧૯૯૮ માં આ બંને (સક્રિય / પરોક્ષ) સ્થિતિઓને IPv6 ને સમર્થન આપવા સુધારવામાં આવી હતી. તે સમયે વધુ ફેરફારો પરોક્ષ મોડમાં તેને વિસ્તૃત કરવા કરાયા હતા.  

નેટવર્ક પર ડેટા ટ્રાન્સફર કરતી વખતે ચાર ડેટા પરિવહનો નો ઉપયોગ થાય છે. 

*ASCII મોડ : ટેક્સ્ટ માટે ઉપયોગ થાય છે. જયારે મોકલનાર હોસ્ટ પરથી ડેટાનું પ્રસારણ થવા પહેલા જો જરૂરી હોયતો તેનું “૮-બીટ-ASCII” માં રૂપાંતરણ થાય છે અને વળી પાછું મેળવનાર હોસ્ટને ડેટા મળે ત્યારે તેની ફરીથી રજૂઆત થાય છે. પરિણામે, આ રીતમાં સાદા-લખાણ (Plain Text) વાળી ફાઈલ સિવાય બીજા ડેટા માટે અયોગ્ય છે. 
*છબી(ઈમેજ) મોડ (સામાન્ય રીતે બાયનરી મોડથી ઓળખાય છે): આ રીતમાં મોકલનાર ફાઈલને બાઈટમાં મોકલે છે અને તેને મેળવનાર બાઈટ મળતા આ બાઈટોનો બાઈટસ્ટ્રીમમાં સંગ્રહ(store) કરે છે. (FTP ના દરેક અમલીકરણમાં ઈમેજ મોડને સમર્થન કરવાની ભલામણ કરી છે.)
*EBCDIC મોડ : આ રીતમાં બે હોસ્ટો વચ્ચે સાદા-ટેકસ્ટના ડેટા ની આપલે માં EBCDIC ના અક્ષર સમૂહ નો ઉપયોગ થાય છે. બાકીની કાર્યપ્રણાલી ASCII મોડ જેવી જ હોય છે.
*સ્થાનિક (લોકલ) મોડ : સમાન સુયોજનો સાથે બે કમ્પ્યુટર્સ ડેટાને ASCII રૂપાંતરિત માલિકી વગરના બંધારણમાં મોકલવા માટે પરવાનગી આપે છે. ટેકસ્ટ ફાઈલો માટે જુદા જુદા બંધારણ નિયંત્રણ અને રેકોર્ડ માળખું વૈકલ્પિક ધોરણે આપવામાં આવે છે. આ સુવિધાઓ TELNET કે ASA માટેની ફાઈલોને સવલત આપવા માટે કરાઈ છે. 

ડેટા સ્થાનાંતર ત્રણ રીતમાંથી કોઈ એક રીતે થાય છે.  ઘણા FTP સર્વરો સોફ્ટવેરના અપડેટો પૂરા પાડવા આવી અપરિચિત FTP સેવાનો ઉપયોગ કરે છે.  NAT માટે વધારાની જટિલતા છે કે, IP એડ્રેસ અને પોર્ટ નંબરનું પ્રતિનિધિત્વ PORT આદેશમાં હોય છે જે હોસ્ટનો ખાનગી IP એડ્રેસ હોય છે જયારે તે ઈન્ટરનેટ પર પોતાના જાહેર IP એડ્રેસથી ઓળખાતું હોય છે. (NAT નું કાર્ય ખાનગી IP એડ્રેસ નું જાહેર IP એડ્રેસમાં અનુવાદ કરી આપવાનું છે.)
આ સમસ્યા માટે બે વિચાર છે : એક છે કે, FTP ક્લાયન્ટ અને FTP સર્વર PASV આદેશ નો ઉપયોગ કરે જેથી FTP ક્લાયન્ટ થી સર્વર તરફ ડેટા જોડાણ બને. 
 

## વેબ બ્રાઉસર દ્વારા સમર્થન 
મોટે ભાગેના વેબ બ્રાઉસર FTP સર્વર પર રહેલી ફાઈલોને મેળવી શકવા સક્ષમ હોય છે, છતાં તેઓ FTPS જેવા પ્રોટોકોલ એક્સટેન્સનોનું સમર્થન કરતા નથી.  જયારે FTP ને HTTPની જેમ વેબ બ્રાઉસરમાં એક URLની જેમ લખવામાં આવતા તે રીમોટ સર્વર પર રહેલી ફાઈલો કે ડેટા ને વેબ સામગ્રીની જેમ પ્રદશિત કરે છે. FireFTP એક સંપૂર્ણ લક્ષણોવાળી FTP ક્લાઈન્ટ છે, જે એક્સ્ટેંશનની ફોર્મમાં ફાયરફોક્સ અંદર ચલાવી શકાય છે.

### સિન્ટેક્ષ 
FTP URL ની સિન્ટેક્ષનો ઉલ્લેખ RFC 1738માં કરેલ છે  
તે અનુસાર તેનો કોડ ftp://[[:]@][:]/  ૧૯૯૯ના મે મહિનામાં  RFC 2577 ના લેખકોએ તેના નીચે પ્રમાણેની નબળાઈઓ વર્ણવી હતી. 

*બરૂટ ફોર્સ એટેક (Brute Force Attacks) 
*બાઉન્સ હુમલા (Bounce Attacks)
*પેકેટ કેપ્ચર (સ્નીફિંગ) (Packet Capture)
*પોર્ટ ચોરી  (Port Stealing)
*વિડંબન હુમલા (Spoof Attacks)
*વપરાશકાર-નામ સુરક્ષા (Username Protection)

FTP તેના ટ્રાફિકને એનક્રિપ્ટ કરી શકતું નથી; તેના બધા પ્રસારણ સ્પષ્ટ ટેક્સ્ટમાં થાય છે. વપરાશકારોના નામ, પાસવર્ડ, આદેશો અને ડેટાને કોઈપણ પેકેટ કેપ્ચર(સ્નીફિંગ)ની મદદથી સરળતાથી વાંચી શકે છે. ઘણા ઈન્ટરનેટ પ્રોટોકોલ (જેવાકે SMTP, TelNet, POP અને IMAP) માટે આ સમસ્યા સામાન્ય છે, આ પ્રોટોકોલોની ડીઝાઇન માં TLS કે SSLજેવા એનક્રિપ્શન તંત્ર પહેલા તૈયાર કરી હતી. આ સમસ્યાનો સરળ ઉકેલ એ છેકે તમે તેની “સુરક્ષિત” (Secure) આવૃતિઓનો ઉપયોગ કરો. (દા.ત. FTP માટે FTPS, Telnet માટે TelnetS વિગેરે) અથવા બીજા કોઈ વધારે સુરક્ષિત પ્રોટોકોલ જે આ કાર્ય કરી શકતા હોય જેવા કે, SFTP/SCP સાધનો Secure Shell પ્રોટોકોલના અમલીકરણોનો સમાવેશ કરે છે.

### સલામત FTP 
ફાઈલોને સુરક્ષિત રીતે સ્થાનાંતર કરવાની કેટલીક પદ્ધતિઓ છે જે “સુરક્ષિત FTP” (Secure FTP)થી ઓળખાય છે. 
 
#### FTPS 
ExplicitFTPS એ FTP ધોરણનું વિસ્તરણ કરી આપે છે જે ક્લાયન્ટો દ્વારા FTP સત્રને એનક્રિપ્ટ કરવાની વિનંતી કરી શકવાની પરવાનગી આપે છે. આ AUTH TLS આદેશથી થાય છે. જે સત્ર TLS વિનંતી નથી આપતો તેને જોડાણનો સ્વીકાર કરવો કે અસ્વીકાર તેને માટે સર્વરમાં જોગવાઈ હોય છે. આ પ્રોટોકોલના વિસ્તરણ સૂચિત ધોરણો RFC 4217માં વ્યાખ્યાયિત છે. Implicit FTPS એ FTP નું અપ્રચલિત ધોરણ છે, જે SSLકે TLS ના ઉપયોગથી જોડાણ કરે છે. આના માટે સાદા FTP થી અલગ પોર્ટ વાપરવાનું સૂચવ્યું હતું.
#### SFTP 
SFTP એટલેકે, “SSH ફાઈલ ટ્રાન્સફર પ્રોટોકોલ” પણ FTP ની જેમ ફાઈલ મોકલવા અને તેમાં વપરાશકારો માટે FTP જેવા આદેશોનો ગણ છે. SFTP કે સુરક્ષિત FTP ફાઈલ ટ્રાન્સફર કરવા સુરક્ષિત શેલ (Secure Shell) નો ઉપયોગ કરે છે. FTP ના ધોરણની વિપરીત, તે ફાઈલના ડેટા ઉપરાંત આદેશોને પણ એનક્રિપ્ટ કરે છે, સાથે સાથે ખુલ્લા નેટવર્કમાં પ્રસારિત થતા પાસવર્ડ અને બીજા સવેદનશીલ ડેટાને સુરક્ષા પૂરી પાડે છે. તેની કાર્યપ્રણાલી FTP જેવી હોય છે, પણ તે FTPથી જુદા પ્રોટોકોલોનો ઉપયોગ કરે છે. મૂળભૂત FTP ક્લાયન્ટો SFTP સાથે જોડાણ કરી શકતા નથી કે SFTP ના ક્લાયન્ટો મૂળભૂત FTP સર્વર જોડે જોડાણ કરી શકતા નથી.
#### SSH પર FTP (SFTP નહિ) 
SSH પર FTP (SFTP નહિ) જે SSH જોડાણ પર એક મૂળભૂત (સાદા) FTPનું સત્ર બનાવે છે. કારણકે, FTP બહુવિધ TCP જોડાણોનો ઉપયોગ કરે છે. ઘણા SSH ક્લાયન્ટો જયારે નિયંત્રણ ચેનલ બનાવે છે (પોર્ટ ૨૧ પર ક્લાયન્ટ-થી-સર્વર જોડાણ) ત્યારે તેને સુરક્ષા આપશે. જયારે ડેટા સ્થાનાંતર થાય ત્યારે FTP સોફ્ટવેર નિયંત્રણ ચેનલ બંધ કરી નવી ડેટા ચેનલો બનાવે છે; જે SSH જોડાણથી ઉપરવટ જાય છે તેથી ડેટા ચેનલોમાં કોઈપણ પ્રકારની ગુપ્તતા કે સંપૂર્ણ રક્ષિત વિ. હોતા નથી. 
નહીતર, SSH ક્લાયન્ટ સોફ્ટવેર પાસે FTP પ્રોટોકોલને લાગતું જ્ઞાન હોવું જરૂરી છે, જેવું કે તે FTP ડેટા ચેનલો માટે અપરિચિતો દ્વારા ખુલેલા નવા પેકેટ ફોરવર્ડીંગ પર નજર રાખવા અને FTP નિયંત્રણ ચેનલના સંદેશાને ફરીથી લખવા વિ. નીચેના સોફ્ટવેર ઉદાહરણો આ જાતની સ્થિતિમાં ટેકો આપે છે.
*Tectia ConnecSecure (Win/Linux/Unix) ના SSH Communications Security’s software sute.
*Tectia Server for IBM z/OS of SSH Communications Security's software suite
*FONC (the GPL licensed) 
* Co:Z FTPSSH Proxy
SSH પર FTPને કોઈકવાર Secure FTP કહેવામાં આવે છે,

## FTP આદેશનું લીસ્ટ 
FTP સર્વરને આપવામાં આવતા FTP આદેશો નીચે મુજબ છે. આ લીસ્ટમાં IETF એ પ્રમાણિત કરેલ RFC 959ના આદેશો નો સમાવેશ કર્યો છે. નોંધીલો કે, મોટે ભાગેના આદેશોના ગણ FTP ક્લાયન્ટો તેના વપરાશકર્તાઓ માટે બનાવે છે. દા.ત. GET એ વપરાશકારોનો સામાન્ય આદેશ છે જે સર્વરમાંથી ફાઈલને ડાઉનલોડ કરવા માટે વાપરાય છે. જયારે તેના માટે રો આદેશ RETR છે. 

## FTP દ્વારા પરત થતા કોડ 
FTP સર્વર દ્વારા પરત થતા કોડની સારણી નીચે દર્શાવી છે. આ કોડને IETF દ્વારા RFC 959 માં પ્રમાણભૂત કરાયા છે. જેમ આ લેખમાં અગાઉ જણાવ્યું હતું કે, જવાબ કોડ કિંમત ત્રણ આંકડાના છે. પ્રથમ આંકડાના એક ત્રણ શક્ય નિષ્ફળતા પરિણામો-સફળતા છે, સૂચવે છે કે એક ભૂલ અથવા અપૂર્ણ જવાબ સૂચવે છે: 
*2yz - સફળ જવાબ
*4yz અથવા 5yz - નિષ્ફળ જવાબ
*1yz અથવા 3yz - ભૂલ અથવા અપૂર્ણ જવાબ

બીજા આંકડાઓ ભૂલનો પ્રકાર નક્કી કરે છે:
*x0z - સિન્ટેક્સ ભૂલ છે 
*x1z – માહિતીની માંગણી અથવા ખૂટતી માહિતી આપો.
*x2z - જોડાણો. નિયંત્રણ અને માહિતી જોડાણોનો ઉલ્લેખ.
*x3z - સત્તાધિકરણ અને એકાઉન્ટિંગ. પ્રવેશ પ્રક્રિયા અને એકાઉન્ટિંગ કાર્યવાહી ને લાગતું..
*x4z - વ્યાખ્યાયિત નથી.
*x5z - ફાઈલ સિસ્ટમ. ફાઈલ સિસ્ટમ સ્થિતિ કોડ રિલે.

ત્રીજો આકડો દરેક શ્રેણીઓ (જે બીજા આકડો વ્યાખ્યાયિત કરે છે) માટે વધારાની માહિતી આપે છે.

## બાહ્ય કડીઓ 
* RFC 959 – ફાઇલ ટ્રાન્સ્ફર પ્રોટોકોલ 
* RFC 1579 – ફાયરવોલ સાથે તાલમેલ ધરાવતો FTP
* RFC 2228 – FTP સિક્યોરિટી એક્સ્ટેન્શનો
* RFC 2428 – IPv6 અને NATs ફોર્મેટ માટેના FTP એક્સ્ટેન્શનો
* RFC 2640 – ફાઇલ ટ્રાન્સ્ફર પ્રોટોકોલનું ઇન્ટરનેશનલાઇઝેશન (વિવિધ ભાષાઓમાં)

;સર્વર
* VsFTPd (યુનિક્સ)
* ProFTPd (યુનિક્સ)
* Pure-FTPd (યુનિક્સ)
* FTP Server Test (ઓનલાઇન)
* FileZilla Server (વિન્ડોઝ)

## સંદર્ભો 
શ્રેણી:કમ્પ્યુટર વિજ્ઞાન