لایه 4 ( Transport Layer )

تا حالا شده به این فکر کنید که ، چرا وقتی آدرس Yahoo را در Web Browser تایپ می کنید ، فقط Page آن می بینید ؟ چرا مثلا فایل های آن را نمی بینید ؟ یا مثلا صفحه Desktop سروری که Yahoo روی آن است را ، نمی بینید .

Yahoo از کجا می فهمد که من سایتش را می خواهم ؟
مبدأ مشخص ، مقصد هم مشخص .
مقصود را چه جور می فهمد ؟ 🤔

اینها در لایه 4 اتفاق می افتد . لایه 4 مقصود را نشان می دهد و می گوید :
مبدأ و مقصد شما این MAC و IP است . 👈 Data را می فرستید. Data که به مقصد رسید ، چه چیزی می خواهید ؟
مثل اینکه ، یک نفر درب خانه شما زنگ بزند و شما بگید ، بله ! امرتون رو بفرمایید . مبدأ مشخص و مقصد هم خانه شما است ، اما مقصود مشخص نیست که برای چه کاری درب زده ؟


عملکرد لایه 4 :

✔️ لایه 4 ، به لایه انتقال یا Transport معروف است و جزء لایه های فوق العاده مهم در شبکه های کامپیوتری است .
✔️سیستم شما به وسیله لایه Transport ، منظور و مقصود Packet را متوجه می شود .

در لایه 4 ، دو پروتوکل فعالیت می کنند ، به نام های :
Transmission Control Protocol ( TCP )
User Datagram Protocol ( UDP )
این 2 پروتوکل به ما کمک می کنند که ، به مقصد نشان دهیم Data برای چه چیزی فرستاده شده است . به عنوان مثال :

کامپیوتری در مبدأ و کامپیوتری در مقصد وجود دارد که بر روی این کامپیوتر مقصد ، 4 سرویس مختلف فعال است . شامل : DHCP ، DNS ، Web Server ، FTP
کامپیوتر در مبدأ ، بسته اطلاعاتی را درست می کند و آدرس مبدأ ، آدرس مقصد ، MAC ، IP ، همه چیز را روی Packet می نویسد و برای مقصد می فرستد .
من به عنوان سیستم گیرنده Packet را دریافت می کنم . حالا باید بفهم که ، مبدأ از من چی چیزی می خواهد . اما چگونه ؟ کجای این بسته نوشته شده مبدأ چه چیزی می خواهد ؟
من کامپیوتری هستم که 4 سرویس ارائه می دهم ، من باید بدانم که این Packet برای رسیدن به کدام یک از این سرویس ها فرستاده شده است . اینکه مبدأ و مقصد مشخص باشد ، کفایت نمی کند .

در اینجا است که ، این 2 پروتوکل ( TCP ، UDP ) وارد بازی می شوند ، برای اینکه به مقصد نشان دهند ( به عنوان سیستم گیرنده ) ، مبدأ چه چیزی خواسته است .


پروتوکل TCP :

پروتوکل TCP اصطلاحاً ملغب شده به پروتوکل Connection-Oriented . پروتوکل Connection-Oriented یعنی ، وابسته به اتصال است . البته منظور از وابسته به اتصال ، اتصال فیزیکی نیست ، منظور آن وابسته به پروسه ای به نام Three-Way-Handshake است .
اصطلاحاً گفته می شود 2 کامپیوتر تحت پروتوکل TCP با یکدیگر انتقال Data انجام خواهند دارد ، اگر پروسه ای به اسم Three-Way-Handshake بین آنها با موفقیت انجام شود .

پروسه Three-Way-Handshake ، طبق تصویری که مشاهده می کنید ، یک پروسه 3 طرفه است و مبنای کار آن بدین صورت است :

✔️ کامپیوتر سمت چپ Data را سمت Server می فرستد . به پیامی که سمت سرور می فرستد برای اینکه ارتباط TCP برقرار شود ، SYN یا Synchronize گویند .
( به طرف مقابل می گوید ، بیا با هم ارتباط TCP داشته باشیم )

✔️ Server جواب می دهد ، که در جوابی که می دهد 2 عبارت قرار داده شده است :

ACK (Acknowledgement) : یعنی باشه مشکلی نیست .
SYN (Synchronize) : تاییدیه از سمت کامپیوتر می گیرد ، که آیا پای حرفت هستی یا الکی گفتی .

✔️ کامپیوتر تاییدیه ( ACK ) را بر می گرداند و می گوید ، نه ، حرف ما حرف است .


Transport

اگر این پروسه با موفقیت انجام شود، اصطلاحاً می گویند 2 کامپیوتر تحت پروتوکل TCP با هم به حالت Established در آمدند . ( نمونه آن را ببینیم ، کامپیوتر خودم را مثال می زنم 👇)

دستوری در ویندوز داریم به اسم netstat که ، این دستور وضعیت ارتباطات TCP کامپیوتر شما را نشان می دهد . ( فقط خروجی TCP را نشان می دهد )
در CMD ویندوز از کلید n- استفاده کردیم ، که IP را به صورت عددی برای ما می نویسد .

C:\Users\Hamed>netstat -n

طبق تصاویر زیر ، کامپیوتر من با قسمت های مختلفی ارتباطات TCP داشته است :

✔️ در ستون وضعیت حالت Established را نشان می دهد ( یعنی Three-Way-Handshake انجام شده است )
✔️ یک سری ارتباطات ، خودم با خودم برقرار کردم . ( 127.0.0.1 با 127.0.0.1 👈 این یعنی خودم ، که هیچ )
✔️ اما یک سری ارتباطات با سیستم های شما دارم . ( 2.120 - 192.168.2.6)
🤔 به نظر شما کامپیوتر من چه نیازی داشته ، که با کامپیوتر های شما ارتباط TCP برقرار کند ؟ هدف چه چیزی بوده است ؟ چرا IP های کلاس مقابل در این لیست نیست ؟


 Transport

تصویر بالا را فعلا نگه می داریم و به داستان خودمان بر می گردیم .

اگر به یاد داشته باشید ، وقتی که در مورد خواص پروتوکل ها صحبت می کردیم ، یکی از این خواص Packet Acknowledgment بود . رسید صادر کردن توسط مقصد برای مبدأ ، جهت بالا رفتن اطمینان پذیری از خواص TCP است . اصطلاحاً می گویند Acknowledgment 👈 TCP دارد .

✔️ اگر Data غیر از پروتکل TCP جابه جا شود ، احتمالاً Acknowledgment وجود نخواهد داشت .

✔️ به خاطر Acknowledgment است که می گو یند ، پروتوکل هایی که تحت TCP جابه جا می شوند ، اطمینان پذیر تر هستند . ( زیرا شما رسید دریافت می کنید )

✔️ بالغ بر %90 ، Data در شبکه های کامپیوتری بر پایه TCP جابه جا می شوند . البته شاید هم بیشتر %95 . بنابراین پروتوکل بسیار مهمی است .


👈 بنابراین بسیار حائز اهمیت است این پروسه Three-Way-Handshake . آیا می دانید یکی از ابزارهای مثلا حمله در شبکه های کامپیوتری همین پروسه Three-Way-Handshake است ؟ که اصطلاحاً به آن : SYN Flooding ، SYN Attack یا SYN سیل وار گویند .

✔️ یک کامپیوتری عمداً شروع می کند به سمت یک کامپیوتر دیگر ، مکرراً پیام های SYN می فرستد . 👈 بیا ارتباط TCP داشته باشیم … بیا ارتباط TCP داشته باشیم … (الکی)

✔️ این پیام ها در بافر RAM ذخیره می شود که ، فضای محدودی دارد . اگر کامپیوتر مقصد اینقدر این پیام ها را دریافت کند ، که این بافر پر شود ، Blue Screen می دهد .

✔️ البته باید مکانیزم هایی داشته باشیم که در برابر SYN های بد ، بتوانیم مقاوم باشیم . استفاده از Firewall و IPS برای همین موضوع است .


 Transport

👈 TCP Termination :

اگر 2 سیستم از هم خسته شوند و دیگر نخواهند با هم ارتباط TCP داشته باشند ، پروسه Termination اتفاق می افتد . اما Termination به شهرت ایجاد ارتباط Three-Way-Handshake نیست . روش بدین صورت است که ، یک سیستم می گوید Finish و آن سیستم دیگر هم می گوید ، باشه مشکلی نیست ، تمومش کنیم .

اگر این دو سیستم 2 دقیقه دیگر ، دوباره بخواند با هم ارتباط TCP داشته باشند ، باید پروسه Three-Way-Handshake مجدداً بین آنها انجام شود.


پروتوکل UDP :

در کنار TCP در لایه 4 ، ما پروتوکل UDP را داریم . پروتوکل Connectionless 👈 UDP است ( وابسته به اتصال نیست ) . البته منظور این نیست ، که کابل شبکه را وصل نکنیم ، کار می کند . منظور این است که ، Three-Way-Handshake ندارد . پروسه ای نیست که نیاز باشد قبل از آن انجام شود ، تا اینکه UDP بتواند کار کند .

✔️ به خاطر داشته باشید روش کار UDP بدین صورت است که ، برای فرستادن Data منتظر رسیدن ، رسید نمی ماند . ( مثل TCP )
Packet 3 ، Packet 2 ، Packet 1 … انشاالله که می رسند … بقیش با خداست ( منتظر رسید نمی ماند).

✔️ حجم بسته های UDP غالباً کوچکتر از TCP است .

به خاطر همین منتظر رسید نماندن و کوچک بودن بسته های اطلاعاتی باعث شده که ، UDP سریعتر از TCP باشد . اصطلاحاً می گویند : UDP سریعتر ، TCP اطمینان پذیرتر .



👈 این داستان ها را مطرح کردیم ، که یک مقدار با ذات این 2 پروتوکل آشنا شوید . اما سوالی که الان مطرح است 🤔

کامپیوتر در مبدأ ، بسته اطلاعاتی را درست می کند و آدرس مبدأ ، آدرس مقصد ، MAC ، IP ، همه چیز را روی Packet می نویسد و برای مقصد می فرستد .

من به عنوان سیستم گیرنده Packet را دریافت می کنم . حالا باید بفهم که ، مبدأ از من چی چیزی می خواهد . اما چگونه ؟ کجای این بسته نوشته شده مبدأ چه چیزی می خواهد ؟
آخر بسته نوشته شده ، پروتوکل انتقال دهنده TCP است . بنده خدا نوشته بود من دقت نکردم .🙂

من کامپیوتری هستم که 4 سرویس ( DHCP ، DNS ، Web Server ، FTP ) ارائه می دهم ، من باید بدانم که این Packet برای رسیدن به کدام یک از این سرویس ها فرستاده شده است .
کدام یک از این 4 تا سرویس را از من می خواهد ؟ 🤔

👈 دوستان عزیز ، 2 پروتوکل TCP و UDP برای اینکه مقصود را مشخص کنند ، به تنهایی کفایت نمی کنند . این که روی Packet نوشته شده ( پروتوکل انتقال دهنده TCP ) ، ما باز هم متوجه نخواهیم شد که ، کدام یک از این سرویس ها را می خواهد . نیاز یه یک مکمل دارد . ( یک شماره کد )

✔️ هر سیستمی در شبکه های کامپیوتری ، اعم از روتر ، کامپیوتر و … 65535 کد دارد ، که البته به آنها شماره PORT اطلاق می شود .( چیزهای فیزیکی نیستند ، اینها یک سری عدد هستند )

✔️ تلفیق TCP و UDP با این شماره Port ها است که تکلیف را مشخص می کند .
حالا من متوجه می شوم که ، از این 4 تا سرویس Website را می خواسته . زیرا TCP 80 در Application Layer ( لایه 7 ) ، معادل HTTP است .
مثلا نوشته شده ، UDP 53 👈 سرویس DNS را می خواهد . یا مثلا TCP 21 👈 سرویس FTP را می خواهد .

✔️ از این 65535 پورت 👈 0 تا 1023 را Well Known Ports( پورت های معروف ) گویند . از آن جهت معروف هستند زیرا در دنیا همه از آنها استفاده می کنند .
مثلا همه می دانند 443 ، HTTPS است .

شماره پورت بالای 1024 چه کاربردی دارد ؟

بعضی از سیستم عامل ها اگر بخواهند ، یک سری قابلیت های خاص به خود اضافه کنند ، شماره Port بالای 1024 را انتخاب می کنند .
یا مثلا طرف برنامه نویس است و می خواهد یک برنامه بنویسد که تحت شبکه کار کند. باید به آن شماره Port بده ، بنابراین بالای 1024 را انتخاب می کند . زیرا همه سیستم عامل های دنیا می دانند HTTPS 👈 TCP 443 است . حال اگر شما TCP 443 را برای برنامه خودت انتخاب کنی ، کامپیوتر نمی فهمد و می گوید TCP 443 ، چند معنی دارد ؟


 Transport

در تصویر بالا چند نکته حائز اهمیت است :

1 قالب با TCP است .
2 تمام پورت های نوشته شده زیر 1024 هستند ، یعنی جزء پورت های معروف هستند .
3 مشخص شده ، هر پروتوکل با شماره Port آن در لایه Application چه معنایی دارد .
4 بعضی از پروتوکل ها که تعداد آنها زیاد نیست ، بر روی بیش از یک Port کار می کنند . FTP : 20/21 ، DHCP : 67/68
5 همچنین بعضی از پروتوکل ها هم هستند که هم با TCP و هم با UDP کار می کنند . DNS : TCP/UDP ، 53

سوال :
چه نیازی است که ما این شماره Port ها را بشناسیم ؟

در بحث شبکه های کامپیوتری ، بعضی از دستگاه ها هستند که ترافیک ها را در لایه Transport می شناسند نه در لایه Application .
مثلا ، در لایه 7 وقتی به یک دستگاه بگویید HTTP بد است ، نمی فهمد . جهت ارتباط با دستگاه باید به زبان لایه 4 با آن صحبت کنید ، TCP 80 بد است .

بنابراین اگر این شماره Port ها را یاد نگیرید ، نمی توانید با این دستگاه ها ارتباط برقرار کنید .
مثلا Firewall ها را می توانیم نام ببریم . اینها لایه 4 می فهمند و شما باید بتوانید به زبان لایه 4 با آنها صحبت کنید.


سوال را دوباره مطرح می کنیم :
🤔 به نظر شما کامپیوتر من چه نیازی داشته ، که با کامپیوتر های شما ارتباط TCP برقرار کند ؟ هدف چه چیزی بوده است ؟ چرا IP های کلاس مقابل در این لیست نیست ؟



 Transport

49173 : 6 . 2 . 168 . 192 👈 به عددی که پشت : می نویسند ، شماره Port گویند .
هر کدام از شماها با یک شماره Port سمت کامپیوتر من Data فرستادید ، که هیچ نظمی ندارد . اما همه شماها به یک نکته اشاره کردید 👈 TCP 5938 ، که معنی آن TeamViewer است و اینکه شما تصویر سیستم من را می بینید ، به خاطر عملکرد پروتوکل TCP بر روی پورت 5938 است .

پروسه وصل شدن :
برنامه TeamViewer را باز کردید و به آن گفتید که وصل شود به 👈 100 . 2 . 168 . 192
بر روی Connected کلیک کردید .
کمتر از 1 ثانیه ، پنجره User Name و Password باز شد .
در همین 1 ثانیه ، پروسه Three-Way-Handshake انجام شد .
بعد از اینکه به سیستم من متصل شدید ، گفتید ای کامپیوتری که IP ات 👈 100 . 2 . 168 . 192 هست ، لطف کن TCP 5938 .


👈 نکته ای که حائز اهمیت است ، همیشه شما برای اینکه به یک نفر بفهمانید که من از تو چه چیزی را می خواهم ، این PORT مقصد است که شرط است و هیچ اهمیتی ندارد که کامپیوتر شما برای وصل شدن به من از چه شماره پورتی استفاده کرده است . ( پورت مبدأ بی اهمیت است )