لایه 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 ) را بر می گرداند و می گوید ، نه ، حرف ما حرف است .
اگر این پروسه با موفقیت انجام شود، اصطلاحاً می گویند 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 های کلاس مقابل در این لیست نیست ؟
تصویر بالا را فعلا نگه می داریم و به داستان خودمان بر می گردیم .
اگر به یاد داشته باشید ، وقتی که در مورد خواص پروتوکل ها صحبت می کردیم ، یکی از این خواص 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 برای همین موضوع است .
👈 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 ، چند معنی دارد ؟
در تصویر بالا چند نکته حائز اهمیت است :
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 های کلاس مقابل در این لیست نیست ؟
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 مقصد است که شرط است و هیچ اهمیتی ندارد که کامپیوتر شما برای وصل شدن به من از چه شماره پورتی استفاده کرده است . ( پورت مبدأ بی اهمیت است )