FTP

File Transfer Protocol (FTP) — ქსელური ოქმი, რომლის დანიშნულებაა ერთი კომპიუტერიდან მეორეში ფაილების გადაგზავნა კომპიუტერული ქსელის საშუალებით. FTP მუშაობს TCP ოქმზე დაყრდნობით, რაც მონაცემთა გადაცემის საიმედოობას უზრუნველყოფს მონაცემთა დამატებითი შემოწმების გარეშე. FTP კლიენტი უკავშირდება FTP სერვერს, რის შემდეგაც მას შეუძლია სერვერისთვის ფაილების გადაცემა, მიღება და ასევე სერვერზე განთავსებული ფაილების მართვა. IANA-ის მიერ სერვერული მხარისთვის სპეციალურად გამოყოფილია 20-ე, 21-ე და 115-ე (SFTP) IP პორტები, FTP სერვერი კლიენტებისგან შემომავალი კავშირების მისაღებად ნაგულისხმებად უსმენს 21-ე პორტს. ამ პორტზე დაკავშირების შემდეგ ზედა დონეზე ხდება კლიენტთან მონაცემთა ნაკადების შექმნა, რომლის საშუალებითაც ხდება ბრძანებების დამუშავება, ხოლო ფაილების გადაცემისთვის ხდება ცალკე მექანიზმის ამოქმედება და მონაცემთა გადაცემის ნაკადის შექმნა. მუშაობის განსხვავებულ მეთოდებს მონაცემთა გადაცემისთვის განსხვავებული გადაცემის მექანიზმების ამოქმედება სჭირდება. აქტიურ რეჟიმში კლიენტი ხსნის დინამიკურ პორტს, უგზავნის FTP სერვერს დინამიკური პორტის ნომერს რომელსაც ის უსმენს მართვის ნაკადის მისაღებად, რის შემდეგაც ამ პორტზე ხდება TCP სესიის გამართვა და ბრძანებების გაგზავნა. მონაცემთა გაგზავნისთვის და მიღებისთვბის სერვერი ხსნის 20-ე პორტს და მისი საშუალებით აგზავნის ფაილებს. აქტიური რეჟიმის დროს კლიენტი აგზავნის PORT ბრძანებას და IP მისამართის და პორტის მითითებით ფორმატში „h1,h2,h3,h4,p1,p2“. ყოველი ველი არის ჰოსტის IP მისამართის 8 ბიტიანი ნაწილების ათობითში გამოსახული მნიშვნელობა, რომელსაც მოჰყვება მონაცემთა გადაცემისთვის არჩეული პორტი. მაგალითად, კლიენტი რომელსაც აქვს IP მისამართი 192.168.0.1, და ელოდება მონაცემებს 49154 პორტზე, გააგზავნის ბრძანებას „PORT 192,168,0,1,192,2“. პორტის ველები უნდა იყოს წარმოდგენილი როგორც p1×256 + p2 = პორტს, ანუ, ამ მაგალითში, 192×256 + 2 = 49154. პასიურ რეჟიმში, FTP სერვერი ხსნის დინამიკურ პორტს, უგზავნის FTP კლიენტს სერვერის IP მისამართს და პორტს რომელსაც ის უსმენს (16-ბიტიანი მნიშვნელობა დაყოფილია ორ ნაწილად, ისევე როგორც ზევით მოყვანილ მაგალითში) მართვის ნაკადის მისაღებად და ელოდება კავშირს კლიენტისგან. ამ შემთხვევაში FTP კლიენტი გაგზავნისას იყენებს დინამიკურ პორტს. პასიური რეჟიმის დროს, კლიენტი აგზავნის PASV ბრძანებას, რომელსაც სერვერი პასუხობს „227 Entering Passive Mode (127,0,0,1,192,52)“-ის მსგავსად. IP მისამართი და პორტი გამოყვანილია იგივენაირად როგორც PORT ბრძანების მაგალითში. გაფართოებულ პასიურ რეჟიმში FTP სერვერი მუშაობს ზუსტად ისევე როგორც პასიურ რეჟიმში იმ განსხვავებით, რომ ის აგზავნის მხოლოდ პორტის ნომერს რომელიც არ არის დაყოფილი ზედა და ქვედა ბაიტებად და კლიენტი ნაგულისხმევად უკავშირდება იგივე IP მისამართს რომელსაც თავიდანვე შეეხმიანა. გაფართოებული პასიური რეჟიმი დაემატა RFC 2428 სტანდარტს 1998 წელს. რადგან მონაცემების გადაცემა ცალკე არხით ხდება და ამ დროს მართვის ნაკადი დუმს — ხშირად ჩნდება ხოლმე პრობლემები ქსელურ ფარის გამო, რადგან მისთვის ძნელია სტანდარტული მეთოდით სესიის გათვლა და ხშირია არხის დაბლოკვის შემთხვევები დიდი ზომის ფაილების გადაცემისას რაც იგივე არხით ახალი ფაილების გადაცემას უშლის ხელს, მიუხედავად იმისა, რომ ამ დიდი ფაილების გადაცემა წარმატებით ხდება. FTP ოქმს აქვს ფაილების მიღების შეწყვეტის შემდეგ გადაცემის განახლების საშუალება REST ბრძანების საშუალებით. კლიენტი აგზავნის REST ბრძანებასთან ერთად მიღებული ბაიტების რაოდენობას და აგრძელებს ფაილის მიღებას. აგრეთვე, ზოგიერთ ტექსტურ რეჟიმში მომუშავე კლიენტებს აქვთ შიდა ბრძანება „reget"“, რომელიც „get“ ბრძანებით ჩამოტვირთვის შემთხვევაში კავშირის ხარვეზების და წყვეტების შემთხვევაში ავტომატურად აგრძელებს ფაილის მიღების მცდელობას. ატვირთვების გაგრძელება ბევრად რთულია — მიუხედავად იმისა, რომ FTP ოქმს გააჩნია APPE ბრძანება რომლის დანიშნულებაც სერვერზე მოთავსებული ფაილისთვის მონაცემების მიმატებაა, იმისთვის რომ კლიენტმა იცოდეს თუ რა ადგილას გაწყდა კავშირი — ის წინასწარ ამოწმებს ფაილის ზომას სხვა მეთოდით, მაგალითად მთელი დირექტორიის ფაილების მახასიათებლების მიხედვით, თუნდაც SIZE ბრძანების გამოყენებით. ASCII რეჟიმში გადაცემის გაგრძელება შეიძლება პრობლემატიური აღმოჩნდეს თუ კლიენტი და სერვერი განსხვავებულ სიმბოლოებს იყენებენ სტრიქონის დამთავრებისას EOL. FTP-ის მიმოხილვა