حجت رستمی
دانشجوی رشته شبکه و متخصص Passive

پروتکل FTP چیست؟ معرفی سرویس File Transfer Protocol

FTP یا File Transfer Protocol از پروتکل های لایه application از مدل مرجع TCP/IP است. مرجع گسترش دهنده پروتکل FTP سازمان IETF است که آن را برای اولین بار تحت RFC 959 معرفی کرد و سپس در سالهای بعد تحت RFC های 2228 ، 2640 ، 2773 مورد بازنگری و به روز رسانی قرار داد. از این پروتکل برای احراز هویت کلاینتها و اتصال به یک server و انتقال فایلها از یک درایو به سیستم درخواست دهنده استفاده میشود که به برنامه های شما امکان داشتن یک رابط کلاینتی برای انتقال فایل ها را میدهد .

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

برنامه های نوشته شده به این واسطه میتوانند در لحظه با server های FTP ارتباط برقرار کنند . و به شما امکان برقراری 256 ارتباط همزمان و فعال را خواهد داد که میتواند شامل انواع third-party ها و proxy ها برای انتقالات داده بین دو جفت FTP server را فراهم کند. انتقالات متوالی third-party ها اجازه اجرای هر نوع فرایندی را بین دو جفت server را میدهد به عنوان مثال میتوان نرم افزار FTPPM را عنوان کرد. در خصوص پروتکل ها و سرویس های ارتباطی شبکه از جمله FTP سرور در دوره آموزش نتورک پلاس و کاربردش صحبت کرده ایم .

API هایی در FTP server وجود دارد که اتصال نرم افزار ها را بررسی میکند ، هنگامی که یک در خواست کننده جدید به FTP server درخواست خود را ارسال مینماید API چک میکند که آیا ارتباطی برای server وجود دارد و برقرار شده است یا نه؟ ساختار نرم افزار ها و برنامه ها 277 رابط کاربری را میتوانند به وجود آورند. اگر server ها اتصالی را dropped (جلوگیری از ارتباط) کند از انجایی که آخرین تاریخ و زمان آن را دارد ، در ادامه API آن ارتباط را مجددا برقرار میکند.

نکته : API ها در FTP بیمورد نیست و در برنامه های چند بعدی ، دسترسی API ها باید به صورت سریالی برقرار شود . برای مثال بدون سریالی بودن این ارتباط ، برنامه هایی که دارای دو موضوع متفاوت اجرا شده همزمان باشند ممکن است با مشکل و خطا مواجه شوند و بنابراین هر موضوع آن خود دارای یک connection جدا به سمت server خواهد بود.

همان طور که عنوان شد پروتکل FTP قادر به اشتراک گزاری فایلها بین host ها میباشد که از پروتکل TCP برای ایجاد یک ارتباط مجازی برای کنترل اطلاعت و سپس ایجاد یک connection (ارتباط) TCP جداگانه برای انتقال داده یا اطلاعات استفاده میکند. کنترل connection با استفاده از یک image از پروتکل TELNET که یک پروتکل ارتباط راه دور است برای تبادل دستورات و پیامها بین host ها اسفاده میشود که در ادامه با روند این پروتکل بیشتر آشنا خواهیم شد.

توابع کلیدی و مهم مورد استفاده در پروتکل FTP

  1. ترویج به اشتراک گذاری فایل (برنامه های کامپیوتر و یا اطلاعات)
  2. و ترغیب کلاینتهای راه دور برای استفاده از این پروتکل برای انتقال فایلها
  3. محافظ کاربران از تغییرات فضای ذخیره سازی سیستم ها در میان هاست ها
  4. و انتقال داده قابل اطمینان و کار آمد میان کامپوتر ها.

FTP ، به طور مستقیم از terminal (پایانه های کاربری ) توسط کاربران قابل استفاده میباشد. که این طراحی عمدتا برای استفاده برنامه ها میباشد. کنترل فریم های FTP میتواند از طریق مبادلات پیامهای TELNET که شامل دستورات TELNET و گذینه های مذاکره بین سیستم ها میشود انجام شود. هرچند که ، اغلب کنترل فریم های FTP همانند کد های متنی ASCII ویا از طریق پیامها و دستورات طبقه بندی شده FTP انجام میشود . messages ها یا همان پیامهای FTP پاسخهایی برای دستورات FTP میباشند که شامل کد های پاسخ به همراه explanatory text (متن های توضیحی) میباشند.

به این نکته توجه داشته باشید که شما نمیتوانید با استفاده از FTP درایو های خودتون رو تحت شبکه به اشتراک بگزارید، و یا از آن به عنوان شبیه سازی مانند Telnet برای پایانه های (کلاینتها) راه دور شبکه استفاده کنید . FTP کمکی برای دسترسی به فایلها و انتقال آنها با استفاده از یک سری فرامین محدود است،در واقع function یا توابع اصلی وعملکرد پروتکل FTP کپی فایلها به یک سیستم local (محلی) است، نه دسترسی به محلی روی server .FTP برای اولین بارکه توسط سازمان IETF در RFC 959 معرفی شد برای سالها جزء لوازم نصب کردنی بر روی سیستم های UNIX بوده است.

درهمه workstations (ایستگاه های کاری ) با سیستم عامل های UNIX به طور معمول FTP server را اجرا میکردند و به نوعی FTP client را به وجود میاوردند، و کاربران با تکیه بر این پروتکل در شبکه های LAN اقدام به انتقال فایلها از سیستمی به سیستم دیگر میکردند. همچنین FTP جزء اصلی ابزار اینترنت به شمار میآید وبا استفاده از هزاران server عمومی و در دسترس کاربران میتوانند از هر جای دنیا فایل های مورد نیاز خود را download کنند.

در ادامه با اینکه FTP بر روی کامپیوتر های مبتنی بر سیستم عامل ویندوز هم مورد استفاده است اما در اصل برای کامپیوتر های دارای سیستم عامل UNIX نوشته شده است، ولی به هر حال هر نوع از سیستم عامل های ویندوزی با یک پشته TCP/IP یک کلاینت FTP مبتنی بر text-based را خواهد داشت و میتوانند با مرورگر های صفحات وب به سرور های FTP دسترسی پیدا کنند. FTP server قابلیت ارائه به عنوان بخشی از سرویس دهنده وب ویندوزی یا( Internet Information Services (IIS را نیز دارد.

همانند HTTP پروتکل FTP هم از پروتکل TCP برای انتقال سرویس ها و عرضه آنها تحت دستورات متنی برای interface (رابط کاربری ) کاربران استفاده میکند. یکی از تفاوتهای اصلی بین FTP و HTTP (همچون دیگر پروتکل ها ) دراین است که FTP از دو port numbers (شماره پورت) به صورت خاصی در عملکرد خود استفاده مینماید. هنگامی که یک FTP client به یک server متصل میشود،.

از شماره پورت 21 برای ایجاد یک control connection (اتصال کنترلی) استفاده میشود این اتصال تا زمان اتمام یک session (جلسه) بین server ها و client باز و باقی میماند که server ها و client ها از آن برای تبادل دستورات و پاسخ ها استفاده مینمایند. هنگامی که client ها درخواست انتقال یک فایل را دارند، سیستم دوم این connection (اتصال) خود را روی port 20 ایجاد میکند، که هر کدام از طرفین خدمات گیرنده یا خدمات دهنده از آن برای انتقال فایلها استفاده میکنند و هر کدام میتوانند بلافاصله بعد از انجام انتقال خاطمه دهنده این اتصال باشند.

بیشتردسترسی های FTP بر روی اینترنت از نوع anonymous (کاربر ناشناس) میباشد ولی در شبکه های LAN خصوصی بیشتر موارد امنیتی برای دسترسی به FTP server در نظر گرفته میشود. FTP server ها در WEB server های IIS از user local (کاربران ایجاد شده بر روی خود سرور FTP) یا از user accounts (اکانت کاربران) ایجاد شده بر روی سرویس اکتیو دایرکتوری برای احراز هویت اتصال client ها استفاده میکنند. در حالی که سیستم های UNIX معمولا از یک لیست تایید شده اسامی کاربران موجود بر روی سیستم های local برای کنترل دسترسی استفاده میکنند.

همچنین شما میتوانید از FTP servers های خود با استفاده از تعریف دستترسی های غیر مجاز و رمز های عبور محافظت کنید، به این نکته همیشه توجه داشته باشید که تمامی پیامهای FTP شما به صورت عادی کاملا غیر محافظت شده میباشند.

همانند HTTP، تبادل اطلاعات در ارتباطات توسط client ها و server ها تحت یک اتصال FTP با استفاده از رشته های متنی صورت میپذیرد که این رشته پیامها به صورت cleartext (غیر رمز نگاری شده) انتقال پیدا میکنند و اگر کسی با استفاده از یک نرم افزار مانیتورینگ شبکه به آنالیز مسیرpacket (بسته های داده ارسالی یا دریافتی شما) های شما در شبکه دست بزند به راحتی میتواند account names ( اسامی کاربری) و کلمه های رمز عبور کاربران را در این بسته ها را به راحتی مشاهده نموده و آنها را به دست بیاورد.

برای جلوگیری از چنین حملاتی در شبکه های کامپیوتری با پیاده سازی FTP server با استفاده از پروتکل های TLS, SSL و(Secure Shell (SSH به ارائه پیامهای رمز نگاری شده میپردازند. که توسط نام هایی و عناوین مختلف برای FTP سرور ها قابل پیاده سازی میباشد مانند FTPS و یا "FTP over SSH" و همچنین اصطلاح پروتکلی دیگری که SFTP نامیده میشود که مخفف کلمات " Secure File Transfer Protocol" میباشد. که یک برنامه با قابلیت مشابه است که با استفاده از SSH برای انتقال فایل ها از آن استفاده میشود.

یک FTP client شامل یک user interface (رابط کاربری) میباشد که میتوانند text based یا گرافیکی باشند، و یک مترجم پروتکل client را نیز شامل میشود .مترجم پروتکل client با یک مترجم پروتکل server با استفاده از دستورات متنی تحت یک اتصال کنترلی ارتباط برقرار مینماید همانند آنچه که در تصویر زیر مشاهده میکنید .

هنگامی که دستوری برای شروع انتقال داده ای فراخوانی میشود یکی از مترجم های پروتکل (server یا client ) باعث ایجاد فرایند پردازشی برای عمل انتقال داده ها میشود. هر نوع فرایند ارتباط به طور مشابه بر روی دیگر ماشین، با استفاده از یک اتصال داده ای یا data connection برقرار میشود.

وب سایت توسینسو

دستورات صادر شده توسط مترجم پروتکل لزوما متناظر با یک دستور user interface مبتنی بر متن (text-based) قدیمی نخواهد بود. برای مثال، در بازیابی یک فایل از server ، دستورات یک user interface قدیمی یا اصطلاحا با رویکرد traditional (سنتی) یک file name از نوع GET plus میباشد 

اما بعد از اینکه مترجم پروتکل کلاینت این دستور را دریافت کرد، یک دستور تحت عنوان RETR به سمت server با همان file name ارسال خواهد کرد.بنابراین user interface ها به این ترتیب میتوانند برای اهدافی مانند محلی سازی زبان یا دیگر دلایل اقدامات لازم را انجام دهند ، اما دستورات به کار رفته و سازگاربا مترجم پروتکل به همان صورت اولیه باقی میماند .

هر دستور ارسال شده توسط FTP server به هر client با یک کد سه رقمی و یک رشته متنی پاسخ داده میشود. همانند HTTP، پیاده سازی همه FTP server ها هم باید از یک سری کد های پاسخ استاندارد استفاده کنند ، به طوری که client ها بتوانند حرکت بعدی را معین کنند

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

در هر session که از طرف FTP آغاز میشود ، هر اتصال client با یک server با استفاده از یک رابط کاربری گرافیکی یا یک خط دستوری ، نام سرویس DNS و IP address را مشخص مینماید و به این ترتیب اولین سفارش کار با ایجاد یک اتصال TCP با استفاده از روش استاندارد three-way handshake (روش دست تکانی سه مرحله ای) شروع میشود.

FTP های استاندارد کلاینتها را در دو مود قادر به انجام عملیات میکنند، و تعیین میکنند که سیستم ها یک اتصال TCP را چگونه ایجاد کنند. در active mode( حالت فعال)، کلاینتها IP address و شماره پورت خود را به server ارسال میکنند و server ها هم با دریافت این اطلاعات اقدام به ایجاد و راه اندازی فرایند اتصال میپردازند. به دلیل اینکه کلاینتها در شبکه در پشت firewalls ها قرار داده میشوند به صورت پیش فرض نمیتوانند یک اتصال TCP را دریافت کنند که باید این موضوع در firewallsها لحاظ شوند .

همچنین FTP از یک حالت دیگر به نام passive mode ( حالت غیرفعال) نیز پشتیبانی میکنند. در این حالت کلاینتها یک دستور(command) تحت عنوان PASV را به server ارسال میکنند، و server ها نیز شماره پورت لازم و IP address خود را به کلاینتها ارسال میکنند تا کلاینتها بتوانند اتصال مورد نیاز برای انتقال اطلاعات را ایجاد بکنند.

بعد از این که دو سیستم توانستند به صورت کامل با استفاده از روش three-way handshake با هم صحبت کنند اتصال TCP مورد نیاز برای control connection در FTP ایجاد شده و تا پایان session باز و باقی میماند. واولین پیام انتقال توسط server ، شناسایی و اعلام میشود بعد از اینکه کلاینتها پیام تایید ورود TCP را دریافت کردند کاربران میتوانند عمل logon خود را با استفاده از نام کاربریشان و همچنین رمز عبور انجام دهند.

و پس از آن کلاینتها IP address و پورت مورد استفاده خود را برای data connections به اطلاع server میرسانند مانند شماره پورت های 7و233 مقدار دو بایتی شماره پورت میباشد که این اعداد از ترجمه 2025 به دست آمده است نکته ای که در مقدار این پورتها وجود دارد با تبدیل این دو کلمه دو بایتی به شکل دودویی از (00000111 11101001) و سپس تبدیل ارزش کل دو بایت به صورت دسیمال شما رقم 2025 را میتوانید به دست بیاورید.

در این نکته ، کلاینتها میتوانند روش ارسال دستورات برای انتقال و درخواست فایل های مورد نظرشان را از file system را به FTP server ارسال نمایند مانند پاک کردن یا ایجاد کردن فایلها بر روی server در دایرکتوری پیش فرض تعیین شده .

Command Description (معرفی دستورات FTP)

  • ABOR فرایند قطع اتصال داده ها
  • ACCT>account> حساب کاربری برای سیستم های دسترسی
  • ALLO>bytes>تخصیص بایتهایی برای فایلهای ذخیره شده بر روی server
  • APPE>filename> الحاق فایل به فایل با همان نام بر روی server
  • CDUP>dir path> تغییر ریشه دایرکتوری بر روی server
  • CWD>dir path> تغییر کار دایرکتوری بر روی server
  • DELE>filename> پاک کردن فایلهای مشخص شده بر روی server
  • LIST>name> لیست اطلاعاتی از نام فایلها یا لیست فایل هایی که نام یک دایرکتوری هستند.
  • HELP>command> بازگشت اطلاعات بر روی دستورات مشخص شده
  • MODE >mode> حالت انتقال (S=stream, B=block, C=compressed).
  • MKD >directory> ایجاد دایرکتوری های مشخص شده بر روی server
  • NOOP >directory> علت حرکت تاییدیه از دیگر server ها
  • NLST لیستی شامل دایرکتوری های مشخص شده
  • PASS >password> رمز عبوری برای سیستم log-in
  • PASV درخواست server تا اتصال داده ها منتظربماند
  • PORT>address> آدرس IP و دو بایت شماره port سیستم
  • PWD نشان دهنده دایرکتوری که اکنون در حال کاراست
  • QUIT خروج یا Log off از FTP server
  • REIN حالت log-in مجدد کانکشن
  • REST >offset> راه اندازی مجدد انتقال فایل
  • RETR >filename> بازیابی فایل (کپی) از سرور
  • RMD >directory> پاک کردن دایرکتوری های مشخص شده بر روی سرور
  • RNFR>old path> نام گذاری مجدد از طریق مسیر قدیمی فایل
  • RNTO >new path> تغییر نام به مسیر جدید
  • SITE >params> سایت پارامتر های خاص ارائه شده توسط سرور
  • SMNT >pathname> ساختار فایل مشخص شده
  • STAT>directory> بازگشت اطلاعات در مرحله فعلی یا دایرکتوری
  • STOR >filename> ذخیره یا کپی فایل به سرور
  • STOU>filename> ذخیره فایل به نام سرور
  • STRU >type> ساختار داده (F=file, R=record, P=page).
  • SYST بازگشت به سیستم عامل استفاده شده توسط سرور
  • TYPE >data type> نوع داده (A=ASCII, E=EBCDIC, I=binary).
  • USER>username> نام کاربری برای log-in سیستم

استاندارد پیامهای FTP به شرح زیر شامل کد های پاسخ با متن توضیحی

  • 110- راه اندازی مجدد نشانگر در علامت yyyy = mmmm (فایل های اشاره گر جدید)
  • 120- آمادگی سرویس دهی n نفر در دقیقه
  • 125- کانکشن باز داده ، شروع انتقال
  • 150- کانکشن باز
  • 200- OK
  • 202- دستور اجرا نشد
  • 211- پاسخ از وضعیت سیستم
  • 212- پاسخ از وضعیت دایرکتوری
  • 213- پاسخ از وضعیت فایل ها و پرونده ها
  • 214- پاسخ پیام درخواست کمک
  • 215- پاسخ نوع سیستم
  • 220- خدمات آماده
  • 221- خروج از سیستم شبکه
  • 225- اتصال داده باز
  • 226- اتصال داده بسته
  • 227- مد passive را وارد کنید (IP address, port ID).
  • 230- ورود به سیستم شبکه
  • 250- تکمیل حرکت فایل مورد انتقال
  • 257- نام مسیر ایجاد شد
  • 331- رمز عبور را وارد کنید
  • 332- نیازمند نام Account کاربری
  • 350- انتظار برای حرکت فایل
  • 421- سرویس shutting down (خاموش) است
  • 425- امکان باز کردن اتصال داده نیست
  • 426- اتصال (کانکشن) بسته است.
  • 450- فایل خارج از دسترس
  • 451- مواجه با خطای محلی
  • 452- فضای حافظه کافی نیست
  • 500- دستور وارد شده نامعتبر است
  • 501- پارامتر استفاده شده نادرست است
  • 502- دستور وارد شده اجرا نشد
  • 503- توالی فرامین نامناسب
  • 504- تشخیص پارامتر نامعتبر برای دستورات
  • 530- به شبکه وارد نشدید
  • 532- شما نیاز به یک حساب کاربری برای ذخیره سازی فایلها دارید.
  • 550- فایلها غیر قابل دسترسی اند
  • 551- نوع صفحه ناشناخته
  • 552- تخصیص بیش از حد فضای ذخیره سازی
  • 553- نام فایل مجاز نیست

برای روشن شدن مطلب در مورد اعداد و دستورات ارائه شده به توضیح مختصر در سه مورد از آنها که به نظرم مهم میامد میپردازم.دستور NLST : در پاسخ این دستور، server باز شدن کانال داده یا data connection را به اطلاع client ها میرساند . به همین دلیل لیستی از فایل های ASCII بین آنها انتقال پیدا میکند.

و کد 150 : نشان دهنده باز شدن مد کد های ASCII برای data connection (اتصال داده ) میباشد. با استفاده از پورت 20 و پورت سرویس گیرنده ای که در دستورات 2025 قبلا مشخص شده است پیامی را به کلاینتها ارسال میکند. و بعد از اینکه سیستم ها دومین اتصال را ایجاد کردند server اقدام به انتقال فایلهایی میکند که حاوی لیستی از دایرکتوری های موجود میباشد .

بسته به نوع و تعداد فایلها، ممکن است نیاز به انتقال چندین بسته یا (packet) باشد و پس از آن server ها اقدام به ارسال اولین پیام در فرایند انتقال را خواهند کرد و سپس میتوانند به اتصال data connection خاتمه دهند . بعد از اینکه اتصال data connection بسته شد، server اتصال را به control connection تبدل نموده و انتقال فایلها را با دریافت یک پیام تایید کامل شدن در یافت فایلها از کلاینت به پایان میرساند.

کد 226 : نمایش دهنده کامل شدن انتقال داده میباشد

در این نکته : کلاینتها زمانی که آماده دیگر دستو.رات میشوند مانند درخواستی برای انتقال یک فایل تمامی مراحل دریافت یک فایل را با استفاده از دستور PORT از نو آغاز میکنند ، یا از دیگر توابعی که فقط برای اتصال control connection استفاده میشود را میتوانند استفاده کنند. زمانی که کلاینت برای خاتمه جلسه با بستن اتصال کنترل آماده است ، یک دستور QUIT را به server ارسال میکند و با دریافت تایید مانند دستور 221 به کار خود خاتمه میدهد.

نکته مهمی که در مورد FTP وجود دارد در این است که در میان پروتکل های لایه application منحصرا از دو پورت جداگانه از نوع TCP با شماره های 20 و 21 برای ایجاد ترافیک دستوری و داده ای بین کلاینت و server استفاده میشود.ونهایتا پروتکل های مرتبط با FTP :به طور اختصاصی پروتکل TELNET و TCP میباشد.


حجت رستمی
حجت رستمی

دانشجوی رشته شبکه و متخصص Passive

دانشجوی رشته اینترنت و شبکه های گسترده علاقه مند به یادگیری active شبکه

نظرات