در این درس، ما لایه چهارم مدل OSI را که لایه انتقال نامیده میشود، بررسی میکنیم. چندین پروتکل در لایه انتقال فعالیت میکنند. با این حال، پرکاربردترین آنها پروتکلهای TCP و UDP هستند.
لینک آموزش قسمت اول : https://vrgl.ir/wUBrb
TCP زمانی استفاده میشود که قابلیت اطمینان و ترتیب دادهها اهمیت دارد.
UDP زمانی استفاده میشود که سرعت و تأخیر کم مهمتر از تحویل کامل و بینقص باشد.

شکل ۱. لایه انتقال.
اجازه دهید ابتدا هدر (Header) هر پروتکل را بررسی کنیم و سپس تفاوتهای بین این دو را مطالعه نماییم.
هر پروتکل در مدل OSI هدر مخصوص به خود را دارد که در طی فرآیند کپسولهسازی دادهها (Data Encapsulation) روی بسته قرار میدهد. از آنجایی که فرآیند کپسولهسازی دادهها از بالا (لایه ۷) به پایین (لایه ۱) آغاز میشود، لایه کاربرد تعیین میکند که آیا TCP یا UDP در لایه انتقال استفاده خواهد شد. بنابراین، بسته، بسته به نوع کاربرد، با هدر TCP یا UDP کپسولهسازی میشود.
نکته کلیدی: هر لایه از مدل OSI به لایه بالاتر از خود خدمترسانی میکند. لایه کاربرد به کاربر خدمترسانی میکند.
بیایید هر هدر را با جزئیات بررسی کنیم. آگاهی از محتوای هر هدر لایه ۴ بسیار مهم است، زیرا آنها اساس تمام فناوریهای شبکهای هستند که شما در مسیر صدور گواهینامههای CCNA/CCNP/CCIE خواهید آموخت.
هدر TCP حاوی اطلاعاتی است که برای اطمینان از تحویل مطمئن دادهها استفاده میشود. این هدر شامل فیلدهای زیر است، همانطور که در نمودار زیر نشان داده شده است:
پورتهای منبع و مقصد (برای شناسایی کاربردها/برنامهها).
شمارههای توالی (Sequence) و تأیید دریافت (Acknowledgment) (برای ردیابی و تأیید دریافت دادهها).
فلگها یا پرچمها (مانند SYN، ACK، و FIN) که وضعیت اتصال را کنترل میکنند.
اندازه پنجره (Window size) برای کنترل جریان (Flow Control).
Checksum (مجموع کنترلی) برای بررسی خطا.
فیلدهای اختیاری (Optional) برای ویژگیهای اضافی.

شکل ۲. هدر TCP.
TCP فیلدهای زیادی در هدر دارد زیرا برای مدیریت اتصال بین دو میزبان و اطمینان از تحویل مطمئن دادهها طراحی شده است. به همین دلیل به آن پروتکل اتصالگرا (connection-oriented) گفته میشود. هدر پرکاربرد TCP ۲۰ بایت طول دارد، اما اگر از گزینههای اختیاری استفاده شود، میتواند تا ۶۰ بایت نیز افزایش یابد.
هدر UDP بسیار سادهتر است. اندازه ثابتی معادل ۸ بایت دارد و تنها شامل چهار فیلد است، همانطور که در زیر نشان داده شده است:
پورتهای منبع و مقصد (برای شناسایی کاربردها/برنامهها).
طول (اندازه کلی هدر UDP و داده).
Checksum (مجموع کنترلی) (برای بررسی ابتدایی خطا استفاده میشود).

شکل ۳. هدر UDP.
UDP یک پروتکل بدون اتصال (connectionless) است. هدر آن تنها چهار فیلد دارد که آن را سریعتر و کارآمدتر از TCP میکند. با این حال، هیچ گونه قابلیت اطمینان داده را فراهم نمیکند، زیرا فیلدهای هدر لازم (شماره توالی و شماره تأیید دریافت) برای تأیید دریافت داده را ندارد.
UDP برای کاربردهایی استفاده میشود که سرعت مهمتر از قابلیت اطمینان است، مانند پخش زنده ویدئو، بازیهای آنلاین، و سایر خدمات بلادرنگ (Real-Time).
حال که هدرهای TCP و UDP را دیدیم، اجازه دهید درباره عملکرد اصلی اطلاعات موجود در هدر لایه ۴ بحث کنیم.
اول و مهمتر از همه، از هدر لایه انتقال برای شناسایی کاربردی که دادهها را ارسال و دریافت میکند در شبکه استفاده میشود. این وظیفه پورتهای منبع و مقصد است.
پورت منبع مشخص میکند که کدام برنامه در دستگاه فرستنده، دادهها را ایجاد کرده است.
پورت مقصد به دستگاه گیرنده میگوید که کدام برنامه باید دادهها را دریافت کند.
به عنوان مثال، به نمودار زیر نگاه کنید. سرور چندین برنامه را به طور همزمان اجرا میکند و به دریافت بستهها ادامه میدهد. همه بستهها هدرهای MAC (لایه ۲) و IP (لایه ۳) یکسانی دارند. به همین دلیل، سرور نمیتواند صرفاً با خواندن اطلاعات لایه ۲ و ۳ تشخیص دهد که کدام برنامه باید دادههای هر بسته را دریافت کند. اینجاست که اطلاعات موجود در هدر انتقال وارد عمل میشود.

شکل ۴. مالتیپلکسینگ بر اساس پورتها.
هنگامی که بستهها به یک دستگاه میرسند، شماره پورتهای موجود در هدر لایه ۴ به دستگاه کمک میکند تا تعیین کند کدام برنامه باید دادهها را دریافت کند. هر فرآیندی که روی سرور اجرا میشود، به دنبال دادههای ورودی در یک پورت TCP/UDP خاص «گوش میدهد»، همانطور که در خروجی زیر نشان داده شده است. به عنوان مثال، سرور وب روی پورت ۸۰ گوش میدهد، در حالی که سرور FTP روی پورت ۲۱ گوش میدهد.
Microsoft Windows [Version 11.0.25621.5339] (c) Microsoft Corporation. All rights reserved. C:\> netstat -a -n Active Connections Proto Local Address Foreign Address State TCP 1.2.3.4:21 0.0.0.0:0 LISTENING TCP 1.2.3.4:80 0.0.0.0:0 LISTENING TCP 1.2.3.4:443 0.0.0.0:0 LISTENING UDP 1.2.3.4:6703 0.0.0.0:0 LISTENING
در طول فرآیند خارجسازی کپسوله (Decapsulation)، هنگامی که سیستم عامل با سگمنت TCP با پورت مقصد ۸۰ روبرو میشود، بلافاصله تشخیص میدهد که باید دادهها را به سرور وبی که روی پورت ۸۰ گوش میدهد، تحویل دهد.
یکی دیگر از عملکردهای ضروری لایه انتقال، فراهم کردن خدمات اتصال انتها به انتها و قابلیت اطمینان برای پروتکلهای لایههای بالاتر است. TCP پروتکل لایه انتقالی است که این وظایف را انجام میدهد.
TCP با برقراری یک sessionTCP که وضعیت اتصال را همیشه حفظ میکند، اتصال انتها به انتها را فراهم مینماید. این کار در سه مرحله انجام میشود که به آن دستدهی سه طرفه (three-way handshake) میگویند:
گام ۱: کلاینتی که میخواهد اتصال را آغاز کند، یک پیام TCP با فلگ SYN تنظیم شده ارسال میکند. این یعنی: «من میخواهم یک اتصال را شروع کنم.»
گام ۲: سرور با یک پیام TCP پاسخ میدهد که شامل فلگهای SYN و ACK است. این یعنی: «درخواستت را دریافت کردم و من هم آمادهام.»
گام ۳: کلاینت یک پیام با فلگ ACK ارسال میکند تا تأیید کند. این یعنی: «ما متصل شدیم.»
پس از انجام این سه مرحله، دو میزبان میتوانند ارسال و دریافت دادهها را آغاز کنند. این فرآیند در نمودار زیر نشان داده شده است.

شکل ۵. برقراری یک جلسه TCP.
توجه داشته باشید که هر طرف اتصال از یک سوکت (Socket) استفاده میکند، که ترکیبی از آدرس IP و شماره پورت است. سوکت به میزبان کمک میکند تا دقیقاً تعیین کند دادهها باید به کدام برنامه ارسال یا از کدام برنامه دریافت شوند. به عنوان مثال، یک مرورگر وب از سوکت 10.1.1.1:53000 برای اتصال به یک سرور وب در سوکت 1.2.3.4:80 استفاده میکند.
اتصال TCP همیشه بین دو سوکت برقرار میشود. به عنوان مثال، جلسه TCP بین کلاینت و سرور نشان داده شده در نمودار بالا را میتوان به طور منحصر به فرد به صورت زیر شناسایی کرد:
Microsoft Windows [Version 11.0.25621.5329] (c) Microsoft Corporation. All rights reserved. C:\> netstat -a -n Active Connections Proto Local Address Foreign Address State TCP 10.1.1.1:53000 1.2.3.4:80 ESTABLISHED
در اینجا به یک مفهوم مهم توجه کنید. بیشتر ارتباطات اینترنتی از مدل کلاینت-سرور استفاده میکنند.
کلاینت برنامهای است که یک درخواست ارسال میکند. به عنوان مثال، یک مرورگر وب درخواست یک صفحه وب را دارد. توجه داشته باشید که کلاینت از یک شماره پورت دینامیک که به صورت تصادفی اختصاص داده شده است، استفاده میکند.
سرور برنامهای است که منتظر درخواستها میماند و خدماتی ارائه میدهد. به عنوان مثال، یک سرور وب صفحه وب درخواست شده را باز میفرستد. توجه داشته باشید که سرور از یک شماره پورت شناخته شده (Well-Known Port) استفاده میکند.
مفهوم شماره پورتها و سوکتها این امکان را فراهم میکند که چندین برنامه بتوانند به طور همزمان و بدون اینکه در لایه شبکه با یکدیگر ترکیب شوند، فعالیت کنند. هر دو پروتکل TCP و UDP از این ایده استفاده میکنند.
یکی دیگر از عملکردهای اساسی لایه انتقال، فراهم کردن تحویل مطمئن دادهها است. TCP بازیابی خطا را فراهم میکند تا به پروتکلهای کاربردی، مانند HTTP و FTP، کمک کند به طور قابل اعتماد کار کنند.
به عنوان مثال، فرض کنید یک کلاینت از یک مرورگر وب برای بازیابی صفحه اصلی از یک سرور وب از طریق HTTP استفاده میکند، همانطور که در نمودار زیر نشان داده شده است. بیایید قدم به قدم فرآیند را بررسی کنیم. ابتدا، کلاینت با آغاز یک دستدهی سه طرفه، یک جلسه TCP با سرور برقرار میکند. پس از برقراری جلسه TCP، کلاینت یک درخواست HTTP GET برای بازیابی صفحه اصلی سرور وب ارسال میکند. سپس سرور کل صفحه وب را از طریق HTTP ارسال میکند. اما اگر پاسخ سرور—یعنی خود صفحه وب—در طول انتقال گم شود چه؟ صفحه وب در مرورگر کلاینت نمایش داده نخواهد شد.

شکل ۶. شمارههای توالی TCP.
به همین دلیل، TCP یک روش داخلی دارد تا مطمئن شود دادهها با موفقیت تحویل داده میشوند. بسیاری از برنامهها به تحویل مطمئن نیاز دارند، بنابراین TCP با یک سیستم بازیابی خطا طراحی شده است. این کار را با استفاده از شمارههای توالی (Sequence Numbers - SEQ) و تأییدیهها (Acknowledgments - ACKs) انجام میدهد.
در نمودار بالا، سرور صفحه وب را در سه سگمنت TCP به کلاینت میفرستد که هر کدام با یک شماره توالی (SEQ) برچسبگذاری شدهاند. کلاینت سگمنتهای ۱ و ۳ را دریافت میکند، اما سگمنت ۲ در شبکه گم میشود. لایه TCP کلاینت متوجه میشود که سگمنت ۲ مفقود است (زیرا ۱ و ۳ را دریافت کرده اما ۲ را نه). کلاینت پیامی به سرور میفرستد و از آن میخواهد سگمنت ۲ را دوباره ارسال کند.
این فرآیند TCP را قادر میسازد تا دادههای مفقود را شناسایی کرده و درخواست ارسال مجدد کند، و بدین ترتیب مطمئن میشود که برنامه (مانند مرورگر وب) تمام اطلاعات لازم را دریافت میکند.
در نهایت، بیایید به تصویر بزرگتر نگاه کنیم و احتمالاً برخی از ابهاماتی را که ممکن است دانشآموزان داشته باشند، روشن کنیم. دیدیم که لایه انتقال (TCP) اتصال انتها به انتها را پیگیری میکند. با این حال، TCP بر نحوه حرکت اطلاعات از طریق شبکه به سمت میزبان راه دور تأثیری نمیگذارد.
لایه شبکه (IP) مسئول تحویل واقعی بستهها از مبدأ به مقصد است. این اطلاعات موجود در هدر لایه ۳ (آدرسهای IP منبع و مقصد) است که بستهها را در شبکه هدایت میکند. آدرسهای IP منبع و مقصد مانند آدرسهای فرستنده و گیرنده روی نامهای هستند که از طریق خدمات پستی ارسال میشود - آنها به خدمات پستی میگویند نامه از کجا آمده و به کجا باید برود. آدرسهای IP نیز همین کار را میکنند؛ آنها به شبکه میگویند بسته از کجا آمده و به کجا باید تحویل داده شود.

شکل ۷. همکاری لایههای انتقال و شبکه.
به طور خلاصه، لایه انتقال شامل اطلاعاتی درباره اینکه کدام برنامه دادهها را ارسال کرده و کدام برنامه در انتهای راه دور باید آن را دریافت کند، است. علاوه بر این، اگر از TCP استفاده شود، لایه انتقال وضعیت اتصال (اینکه آیا طرف راه دور میخواهد ارتباط برقرار کند) و قابلیت اطمینان (با استفاده از شمارههای توالی و تأییدیهها) را حفظ میکند.
لایه انتقال فرض میکند که لایه شبکه بستهها را به انتهای راه دور تحویل میدهد، همانطور که در درس بعدی با جزئیات بیشتری خواهیم دید.
مهمترین چیزی که افراد باید درک کنند و به خاطر بسپارند این است که چه اطلاعاتی در لایه انتقال مدل OSI قرار داده میشود و هدف از آن اطلاعات چیست.
اول و مهمتر از همه، لایه انتقال (هم TCP و هم UDP) شماره پورتهای منبع و مقصد را وارد میکند.
شماره پورت منبع نشان میدهد که کدام برنامه دادهها را ارسال کرده است.
شماره پورت مقصد نشان میدهد که کدام برنامه در انتهای راه دور باید دادهها را دریافت کند.
اگر لایه کاربرد از UDP برای انتقال استفاده کند، اساساً همه چیز همین است. در هدر UDP، به جز شماره پورتها، اطلاعات مهم دیگری وجود ندارد.
اگر لایه کاربرد از TCP برای انتقال استفاده کند، لایه انتقال همچنین شمارههای توالی، شمارههای تأیید دریافت، و فلگها را در کنار شماره پورتها وارد میکند. از شمارههای توالی و تأییدیهها برای تحویل مطمئن و ترتیببندی دادهها استفاده میشود.
شمارههای توالی (SEQ) هر سگمنت ارسال شده را برچسبگذاری میکنند، بنابراین گیرنده ترتیب دادهها را میداند.
تأییدیهها (ACKs) توسط گیرنده بازگردانده میشوند تا تأیید کنند کدام سگمنت رسیده است. اگر دادهای مفقود یا نامنظم باشد، TCP میتواند آن را با استفاده از شمارههای توالی تشخیص دهد و درخواست ارسال مجدد کند.
فلگهای TCP بیتهای کنترلی در هدر TCP هستند که به مدیریت وضعیت و رفتار اتصال TCP کمک میکنند. هر فلگ نقش خاصی دارد:
SYN – شروع یک اتصال.
ACK – تأیید دریافت دادهها.
FIN – پایان دادن به یک اتصال.
RST – بازنشانی (ریست) یک اتصال.
PSH – به گیرنده میگوید که دادهها را فوراً پردازش کند.
URG – دادهها را به عنوان فوری علامتگذاری میکند. از این فلگها در ترکیبهای مختلف برای برقراری، مدیریت، و بستن اتصالات TCP استفاده میشود.
با در نظر داشتن این نکات اساسی، میتوانیم همه چیزهایی را که تاکنون بحث کردیم به شرح زیر خلاصه کنیم:
TCP (Transmission Control Protocol):
قابل اطمینان (Reliable): تضمین میکند که همه دادهها به ترتیب میرسند.
با استفاده از دستدهی ۳ طرفه و فلگهای SYN و ACK یک جلسه TCP برقرار میکند.
برای بازیابی خطا از شمارههای توالی (SEQ) و تأییدیهها (ACKs) استفاده میکند.
به دلیل ویژگیهای افزوده شده قابلیت اطمینان و اندازه هدر، کندتر است.
معمولاً برای وب (HTTP/HTTPS)، ایمیل، و انتقال فایل استفاده میشود.
UDP (User Datagram Protocol):
غیرقابل اطمینان (Unreliable): تحویل یا ترتیب را تضمین نمیکند.
نیاز به تنظیم اتصال ندارد، بنابراین سریعتر است.
فاقد شماره توالی یا تأییدیهها است.
اغلب برای پخش صدا/ویدئو (Streaming)، بازیهای آنلاین و سایر خدمات بلادرنگ استفاده میشود.
برای کاربردهایی که به سرعت بیش از قابلیت اطمینان نیاز دارند، مناسب است.
یک سوکت از یک آدرس IP و یک شماره پورت تشکیل شده است. یک جفت سوکت یک اتصال منحصر به فرد TCP را شناسایی میکند. بیشتر برنامههای اینترنتی از مدل کلاینت-سرور استفاده میکنند:
کلاینت اتصال را آغاز میکند و درخواست برخی منابع را دارد.
سرور منابع درخواست شده را فراهم میکند.
کلاینت از یک شماره پورت دینامیک تصادفی استفاده میکند. به عنوان مثال، یک تب مرورگر وب از پورت TCP 61000 برای آغاز اتصال به google.com استفاده میکند.
سرور از یک شماره پورت شناخته شده که توسط IANA ثبت شده است، استفاده میکند. به عنوان مثال، یک سرور وب روی پورتهای ۸۰ و ۴۴۳ به دنبال اتصال گوش میدهد.
**حمید رضا اسفندیاری _ کارشناس شبکه و فناوری اطلاعات**