TCP/IP مهمترین پروتکل ارتباطی در شبکه های کامپیوتری و به ویژه شبکه اینترنت می باشد. در اینترنت پروتکل های مختلفی وجود دارد که هر یک وظیفه خاص خود را انجام می دهند. تعدادی از این پروتکل ها را از جمله HTTP، HTTPS، FTP، TLS، SSH و…نام دارند. پروتکل ها با توجه به تعریفی که در کتاب پروفسور تنن باوم به نام شبکه های کامپیوتری آمده است به قوانین و روال هایی که برای برقراری ارتباطات مورد استفاده قرار می گیرند اطلاق می شود. اما در زبان عامیانه پروتکل یک زبان مشترک بین سیستم های کامپیوتری است که آنها را قادر می سازد بتوانند با همدیگر تبادل اطلاعات داشته باشند.
TCP/IP مخفف Transmission Control Protocol / Internet Protocol می باشد. معنی لغوی آن یعنی پروتکل کنترل انتقال / پروتکل اینترنت می باشد. TCP/IP پروتکل اولیه ارتباط به اینترنت است. پس دلیل اهمیت این پروتکل اینجا مشخص می شود. بدون TCP/IP عملاً اینترنتی هم وجود ندارد!
در شبکه اینترنت اطلاعات (داده ها) به بسته های کوچکی به نام Packet تقسیم بندی میشوند. سپس Packet ها از طریق شبکه منتقل می شوند در اینجا کار IP آن است که آنها را به میزبان راه دور منتقل کند. TCP در انتهای دیگر بسته ها را دریافت و وجود خطاها را بررسی میکند اگر خطایی رخ داده باشد TCP میتواند ارسال مجدد بسته بخصوص را درخواست نماید. بعد از اینکه تمام بسته ها به درستی دریافت شدند، TCP از شماره توالی برای ساختن مجدد پیام اصلی استفاده میکند.
به عبارت دیگر کار IP انتقال داده های خام Packet ها از یک مکان به مکان دیگر است. کار TCP کنترل امور و تضمین صحت داده هاست.
مدل شبکه TCP/IP پروتکل های خود را در 4 لایه دسته بندی کرده است که از پایین به بالا عبارتند از:
Network Interface / Access: پروتکل هایی مانند Ethernet و PPP در این لایه قرار دارند. این لایه پایین ترین سطح انتقال اطلاعات را بر عهده دارد و امکاناتی برای تبادل اطلاعات از طریق سخت افزار شبکه را فراهم می آورد.
Internet: پروتکل هایی مانند ICMP ،IPv4 و IPv6 در این لایه قرار دارند. این لایه مکانیزم هایی برای ارتباطات بین سیستمی، کنترل مسیر یابی پیغام ها، چک کردن صحت (validity checking) و ترکیب و تجزیه header پیغام ها را فراهم می آورد.
Transport: پروتکل هایی مانند TCP و UDP در این لایه قرار دارند. این لایه سرویس انتقال پیغام ها بین برنامه هایی که برروی سیستم های remote قرار دارند را فراهم می سازد.
Application: پروتکل هایی مانند DHCP ، DNS، FTP ، HTTP ، IMAP در این لایه قرار دارند. این لایه بالاترین سطح سرویس های اینترنت برای انتقال اطلاعات را فراهم می سازد (با استفاده از سرویس های لایه های پایین تر) و باعث می شوند ما براحتی با سرویس های لایه های پایینی کار کنیم.
گرچه این پروتکل برای ارتباط اینترنت طراحی شده است ولی امروزه در اکثر شبکه های خصوصی نیز از TCP/IP به عنوان پروتکل اصلی استفاده می شود.
توجه کنید که TCP یک پروتکل Connection Oriented یا اتصال گرا است و بدین معناست که صحت اطلاعات ارسالی برای این پروتکل بسیار مهم است و از جهتی سرعت آن نسبتا پایین است. پروتکل IP یک پروتکل Connection Less یا غیر اتصال گرا است که بدین معناست صحت داده های ارسالی چندان مهم نیست و سرعت بیشتر مد نظر است، در شبکه های مبتنی بر TCP بیت به بیت داده ها بعد از انتقال در شبکه بررسی می شود و همین دلیل کندی آن است، در صورتیکه در شبکه های IP سرعت ارسال مهم است. پشته پروتکل TCP/IP نقاط ضعف هر یک از این دو پروتکل را پوشش داده است و یک پروتکل ترکیبی خوب ایجاد کرده است.
پروتکل های مدل TCP/IP
در این بخش به آشنایی با پروتکل های مدل TCP/IPخواهیم پرداخت. در تصویر زیر برخی از این پروتکل ها را مشاهده می نمایید.
به علت اهمیت پروتکل IP و به دلیل اینکه در تمام پروتکل و سرویس های ارائه شده در شبکه IP نقش مهمی را ایفا می کند، ابتدا به این پروتکل می پردازیم.
Internet Protocol یا IP
این پروتکل یکی از مهمترین پروتکل های شبکه بوده و وظایف مهمی را بر عهده داردکه عبارتند از:
- کپسوله کردن: روند بسته بندی داده ها
- آدرس دهی: تشخیص سیستم های موجود در شبکه بوسیله آدرسIP
- مسيریابی: تشخیص بهترین مسیر تا سیستم مقصد
- قطعه بندی: بخش کردن داده ها به قطعه هایی با اندازه مناسب برای انتقال در شبکه
همانطور که در قسمت کپسوله سازی در مدل OSI توضیح داده شد، در هر لایه یک هدر به بسته اصلی اضافه خواهد شد. این هدر در لایه شبکه و برای پروتکل IP به شکل زیر خواهد بود.
فيلد Version : اولین فیلد در هدر IPمی باشد که 4 بیت است که نسخه پروتکل IP که این بسته بر اساس آن سازماندهی و ارسال شده است را تعیین می کند. امروزه با توجه به ارائه نسخه 6 از این پروتکل ولی هنوز مشاهده می شود که اکثرا در شبکه های اینترنت و داخلی از نسخه 4 این پروتکل استفاده می نمایند. در قسمت های بعد به تفصیل در مورد نسخه های این پروتکل توضیح داده خواهدشد.
فيلد IHL یا IP Header Length : در این فیلد که 4 بیتی است، طول کل سرآیند بسته را مشخص می نماید.
فيلد Type of Service : این فیلد 8 بیتی است که توسط آن، ماشین میزبان (ماشین تولید کننده بسته ) IP از مجموعه مسیر یاب ها تقاضای سرویس ویژه ای برای ارسال یک دیتاگرام را می نماید.
فیلد Total Length : در این فیلد 16 بیتی عددی قرار می گیرد که طول کل بسته که شامل IP و هدر است. حداکثر وطور کل بسته IP می تواند 65535 بایت باشد.
فيلد Identification : با توجه با انیکه در برخی مواقع ماشین های میزبان یا مسیریاب ها مجبورند بسته را به قطعات کوچکتری تقسیم کنند، هر قسمت شکسته شده باید دارای مشخصه ای برای شناسایی باشد. عددی که در این فیلد 16 بیتی عددی قرار می گیرد که شماره یک دیتاگرام واحد را مشخص می کند. کلیه بسته های IP که با این شماره وارد می شوند قطعه های مربوط به یک دیتاگرام بوده و و باید پس از گردآوری، بازسازی شوند.
فيلد Fragment Offset : این فیلد خود دارای سه بخش است:
الف) بيت DF یا Don’t Fragment : با یک شدن این بیت در یک بسته IP هیچ مسیریابی حق قطعه قطعه کردن آن را ندارد، چرا که مقصد قادر به بازسازی دیتاگرام های تکه تکه شده نیست. اگر این بیت به یک تنظیم شده باشد و مسیر یاب نتواند آن را به دلیل بزرگی اندازه، انتقال دهد لاجرم حذف خواهد شد.
ب) بيت MF یا More Fragment : این بیت مشخص می کند که آیا بسته IP آخرین قطعه از یک دیتاگرام محسوب می شود یا بازهم قطعه بعدی وجود دارد. در آخرین قطعه از یک دیتاگرام بیت MF صفر خواهد بود و در بقیه الزاما یک است.
ج) Fragment Offset : این قسمت که 13 بیتی است در حقیقت شماره ترتیب هر قطعه در یک دیتاگرام شکسته شده را مشخص می نماید. با توجه به حداکثر 13 بیتی بودن این فیلد، یک دیتاگرام حداکثر می تواند به 8192 تکه تقسیم شود. نکته مهم در این فیلد آن است که اندازه هر قطعه باید ضریبی از 8 باشد. یعنی به استثنای قطعه آخر، اندازه بقیه قطعه ها بایستی به گونه ای انتخاب شود که ضریبی از 8 باشد.
به عنوان مثال فرض کنید مسیریابی مجبور است یک دیتاگرام را به طول 5000 بایت قطعه قطعه کند به گونه ای که اندازه هر قطعه کمتر از 1500 بایت باشد. در این حالت نمی تواند اندازه هر قطعه را 1250 در نظر بگیرد چرا که ضریبی از 8 نیست ولی اندازه 1280 مناسب می باشد. بر این اساس مسیریاب، دیتاگرام را به سه بسته 1280 بایتی و یک بسته 1160 بایتی می شکند. در این مثال فرض کنید مسیریاب عدد 2322 را به عنوان مشخصه دیتاگرام انتخاب کرده است. بنابراین برای هر یک از 4 قطعه دیتاگرام، فیلد آفست و مشخصه به صورت زیر است.
فيلد Time To Live : این فیلد 8 بیتی در نقش یک شمارنده، طول عمر بسته را مشخص می کند. طول عمر یک بسته به زمانی اشاره می کند که بسته IP می تواند بر روی شبکه سرگردان باشد. حداکثر طول عمر یک بسته 255 خواهد بود که به ازای عبور از هر مسیریاب از مقدار این فیلد یک واحد کم می شود. هر گاه یک بسته IP به دلیل بافر شدن در حافظه یک مسیر یاب زمانی رامعطل بماند، به ازای هر ثانیه یک واحد از این فیلد کم خواهد شد. حال اگر مقدار این فیلد به صفر برسد بسته IP در هر نقطه از مسیریاب باشد، حذف می گردد. البته پس از حذف یک هشدار به ماشین تولید کننده ارسال خواهد شد.
فيلد Protocol : دیتاگرامی که در فیلد داده از یک بسته IP حمل می شود با ساختمان داده خاص از لایه بالاتر تحویل پروتکل IP شده تا روی شبکه ارسال شود. به عنوان مثال ممکن است این داده ها را پروتکل TCP در لایه بالاتر ارسال کرده باشد و یا ممکن است این کار توسط پروتکل UDP انجام شده باشد. بنابراین مقداد این فیلد شماره پروتکلی است که در لایه بالاتر تقاضای ارسال یک دیتاگرام کرده است. بسته ها پس از دریافت در مقصد باید به پروتکل تعیین شده تحویل داده شوند.
فيلد Header Checksum : این فیلد که 16 بیتی است به منظور کشف خطاهای احتمالی در سرآیند هر بسته از IP استفاده می شود. برای محاسبه کد کشف خطا، کل سرآیند به صورت دو بایت، دو بایت با یکدیگر جمع می شود. نهایتا حاصل جمع به روش مکمل منفی می شود و این عدد منفی در این فیلد قرار می گیرد. در هر مسیریاب قبل از پردازش و مسیریابی ابتدا صحت اطلاعات درون سرآیند بررسی می شود. دقت کنید که فیلد Checksum در هر مسیریاب باید از نو محاسبه و مقدار دهی شود زیرا وقتی یک بسته IP وارد یک مسیریاب می شود حداقل فیلد TTL از آن بسته عوض خواهد شد.
فيلد Source Address : هر ماشین میزبان در شبکه اینترنت یک آدرس جهانی و یکتای 32 بیتی دارد( البته 32 بیت برای نسخه 4 از IPبوده و نسخه 6 آن 128 بیتی می باشد.) بنابر این هر ماشین بابد در هنگام تولید یک بسته IP آدرس خودش را در این فیلد قرار دهد.
فيلد Destination Address : در این فیلد آدرس مربوط به مقصد که باید بسته IP به آن تحویل داده شود، قرار می گیرد.
فيلد اختياری Options : در این فیلد اختیاری می تواند تا حداکثر 40 بایت قرار داد که برای آزمایش، دیباگ، امنیت و سایر پارامترهای مشابه روی شبکه مورد استفاده قرار میگیرد.
فيلد Payload : در این فیلد داده های دریافتی از لایه بالاتر قرار می گیرد.
لازم به ذکر است که اکثر مطالب پست حاضر از کتاب نفوذگری در شبکه و روش های مقابله جناب احسان ملکیان برگرفته شده و قسمتی از آن هم مربوطه به سایت itpro.ir و ویدوآل می باشد.