پروتکل انتقال فایل که از این به بعد آن را FTP می نامیم ابزاریست مطمئن برای انتقال فایل بین کامپیوترهائی که به شبکۀ اینترنت متصل هستند. خدماتی که این پروتکل ارائه می کند عبارتند از:

  • تهیه لیستی از فایلهای موجود از سیستم فایل کامپیوتر راه دور
  • حذف، تغییر نام و جا به جا کردن فایلهای کامپیوتر راه دور
  • جستجو در شاخه های (دایرکتورهای) کامپیوتر راه دور
  • ایجاد یا حذف شاخه روی کامپیوتر راه دور
  • انتقال فایل از کامپیوتر راه دور به کامپیوتر میزبان
  • انتقال فایل و ذخیرۀ آن از کامپیوتر میزبان به کامپیوتر راه دور

قابلیتهائی که پروتکل FTP عرضه می کند می توان برای سیستم سرویس دهنده بسیار خطرناک باشد چرا که بسادگی می توان فایلهای یک کامپیوتر راه دور را آلوده یا نابود کرد.

فلذا در این پروتکل کاربران باید قبل از تقاضای هر سرویسی کلمۀ عبور خود را وارد نمایند و سرویس دهنده پس از شناسایی کاربر، سطح دسترسی و عملیات مجاز برای کاربر را تعیین می کند و یک نشست  FTP آغاز می شود.

FTP این قابلیت را ندارد که بتوان همانند پروتکل  Telnet برنامه ای را بر روی ماشین راه دور اجرا کرد بلکه فقط روشی سریع، ساده و مطمئن برای خدمات فایل به کاربران راه دور محسوب می شود.

حال باید ارتباط بیسن سرویس دهنده و سرویس گیرنده FTP را تشریح نماییم:

در پروتکل FTP برای شروع یک نشست بین برنامه سرویس دهنده و برنامۀ سرویس گیرنده باید دو ارتباط همزمان از نوع TCP برقرار شود.  به هر یک از این ارتباطات در ادبیات پروتکل FTP کانال گفته می شود.

این دو کانال عبارتند از:

  • کانال داده: یک ارتباط TCP با پورت شماره 20 از سرویس دهنده که روی آن داده ها (مثلاً بلوکهای رد و بدل یک فایل) مبادله می شوند.
  • کانال فرمان: یک ارتباط TCP با پورت شماره 21 که روی آن فرامین لازم برای مدیریت فایلها رد و بدل می شوند.
پروتکل انتقال فایل ( FTP )

دلیل لزوم برقراری دو کانال مجزا بین سرویس دهنده و سرویس گیرنده آن است که بتوان بدون قطع جریان داده ها فرامین را بطور همزمان مبادله کرد.

بعنوان مثال در حین انتقال یک فایل می توان روی کانال فرمان، دستور لغور عمل انتقال یا تغییر مود انتقال را صادر کرد.

ذکر این نکته ضروری استکه در پروتکل FTP همۀ عملیات انتقال فایل در پیش زمینه انجام می شود بدین معنا که پروتکل FTP از سیستم Spooler یا صف برای انتقال فایلها استفاده نمی کند بلکه عملیات انتقال به صورت بلادرنگ انجام می گیرد.

( سیستمهائی مثل مدیریت چاپ در پس زمینه عمل می کند یعنی وقتی پروسه ای تقاضای چاپ یک سند را می دهد سیستم عامل آنرا به صف می کند تا در موقع مناسب آن را چاپ نماید فلذا مشخص نیست از زمان صدور فرمان چه مدت طول بکشد تا سند چاپ شود چرا که اولویت با پروسه هائی است که در پیش زمینه اجرا می شوند.)

یگونه ای که اشاره شد سرویس دهندۀ FTP بایستی دو پروسه همزمان ایجاد نماید که یک وظیفه مدیریت ارتباط روی کانال فرمان را به عهده داشته و اصطلاحاً مفسر پروتکل یا پروسه PI نامیده می شود و وظیفه پروسه دیگر مدیریت انتقال داده ها است و به DTP یا پروسه انتقال داده معروف است.

پروسه PI همیشه به پورت شماره 21 گوش می دهد و پروسه DTP به پورت شماره 20 مقید شده است

روشهای برقراری یک نشست FTP

برقراری ازتباط بین سرویس دهنده و سرویس گیرنده FTP با دو روش امکان پذیر است :

  • روش معمولی یا Normal Mode
  • روش غیر فعال یا  passive mode

در روش معمولی برای برقراری یک نشست FTP مراحل زیر انجام می شود:

الف) در برنامه سمت سرویس گیرنده ( برنامه سمت مشتری ) ابتدا دو سوکت نوع TCP با شماره پورت تصادفی بالای 1024 ایجاد میشود.

ب)در مرحله دوم برنامۀ سمت مشتری سعی می کند با استفاده از دستور connct() ارتباط یکی از سوکتهای ایجاد شده را با پورت شماره 21 از سرویس دهنده برقرار نماید.

اگر این ارتباط بقرار شود در حقیقت کانال فرمان باز شده و پروسه IP آماده تغییر فرامین صادره از سمت مشتری است.

ج)بر نامۀ سمت مشتری با فرمان PORI   به برنامۀ سمت سرویس دهندۀ شمارۀ پورت سوکت دوم را اعلام می نماید و منتظر می ماند.

(در حقیقت برنامه مشتری روی سوکت دوم عمل listen انجام می دهد)

د) در ادامه برنامۀ سرویس دهنده سعی می کند یک ارتباط با TCP با شماره پورت اعلام شده برقرار نماید. یکی از نکات عجیب در این پروتکل آنست که سرویس دهنده FTP موظف است تقدام به برقراری یک ارتباط TCP از طریق دستور connect() یا برنامه مشتری نماید در صورتی که معمولاً سرویس دهنده پذیرندۀ ارتباط است نه شروع کنندۀ ارتباط .

ه) برنامه سمت مشتری ارتباط TCP شروع شده از سرویس دهندۀ را تصدیق کرده و یک نشست FTP آغاز می شود.

با یک مثال مراحل فوق به تصویر کشیده شده است.

ابتدا برنامۀ سمت مشتری دو سوکت باز کرده و شمارۀ پورتهای 5150 و 5151 را به آنها نسبت داده است.

( با دستور bind() ) سپس از طریق سوکت اول یک ارتباط TCP با پورت 21 از سرویس دهنده برقرار کرده و پس از برقراری ارتباط با ارسال فرمان PORT 5151 شمارۀ پورت سوکت دوم خود را اعلام کرده است.

سمت سرویس دهنده ضمن تصدیق پذیرش یک نشست بلافاصله اقدام به برقراری یک ارتباط TCP بین پورت شمارۀ 20 خودش و پورت شمارۀ 5151 از سرویس گیزنده نموده است با تصدیق این ارتباط نشست FTP  آغاز می شود.

حال باید روش غیر فعال را در برقراری یک نشست FTP بررسی نمائیم:

الف) در برنامۀ سمت مشتری ابتدا دو سوکت نوع TCP با شماره پورت تصادفی بالای 1024 ایجاد می شود.

ب) برنامۀ سمت مشتری سعی می کند ارتباط TCP یکی از از سوکتهای ایجاد شده را با پورت شمارۀ 21 از سرویس دهنده برقرار نماید.

با برقراری این ارتباط کانال فرمان باز شده و پروسه PI آمادۀ تفسیر فرامین صادره از سمت مشتری خواهد شد.

ج) برنامۀ سمت مشتری با فرمان PASV به برنامۀ سمت سرویس دهنده اعلام می کند که خواستار یک نشست  از نوع غیر فعال است.

د)برنامۀ سمت سرویس دهنده یک سوکت با شماره پورت تصادفی ( بالای 1024) ایجاد کرده و شمارۀ به برنامۀ مشتری اعلام می نماید.

ه) برنامۀ سمت مشتری ارتباط سوکت دوم خود را با شماره پورت اعلام شده برقرار کرده پس از تصدیق ارتباط نشست FTP آغاز می شود.

مثالی از برقراری نشست غیر فعال تصویر شده است: ابتدا برنامۀ سمت مشتری دو سوکت باز کرده و شماره پورتهای 2150 و 5151 را به آنها نسبت داده است.

پس از طریق سوکت اول یک ارتباط TCP با پورت 21 از سرویس دهنده برقرار شده و با ارسال فرمان PASV منتظر تصدیق و اعلام شمارۀ پورت از سرویس دهنده می ماند در این مثال سرویس دهنده ضمن اعلام شماره پورت 3267 گوشوده شدن کانال فرمان زا تصدیق می کند.

مجدداً برنامۀ سمت مشتری ارتباط سوکت دوم خود را با شماره پورت 3267 از سرویس دهنده برقرار نموده و در صورت تصدیق ارتباط، نشست FTP آغاز می شود.

در دنیای یونیکس برنامه سمت سرویس دهنده بنام FTPD و برنامه سمت مشتری بنام ftp مشهور است.

دقت کنید که برخی از سرویس دهنده ها از روش غیر فعال حمایت نمی کنند و فقط روش معمولی را می پذیرد.

در برنامه ftp دو نوع فرمان تعریف شده که گاهاً با هم اشتباه می شوند.

نوع اول فرامینی هستند که روی کانال فرمان یعنی بین سرویس دهنده و سرویس گیرنده رد و بدل می شود این فرامین که در بخش بعدی معرفی  می شوند فرامین داخلی نام دارند. نوع دوم فرامینی هستند که بین کاربر و برنامه ftp تعریف شده و کاربر برای بکار گیری برنامه ftp باید آنها را بداند. ( همانند فرامین DOS )