مقدمه
وقتی برای اولین بار اسم NAT به گوشم خورد، همیشه فکر میکردم با یک پروتکل عجیب و پیچیده طرف هستم. وقتی شروع کردم مطلب رو مطالعه کردن، متوجه شدم داستان خیلی سادهتره.
در زمان استفاده از IPv4 تعداد Public IP Addressها محدود بود و نمیشد برای هر دستگاه یک IP عمومی در نظر گرفت. اینجا NAT وارد ماجرا شد و کمک کرد تعداد زیادی دستگاه داخل شبکه بتونن با استفاده از تعداد محدودی Public IP به اینترنت وصل بشن.
توی این مقاله میخوام ببینیم NAT دقیقاً چیه، چرا به وجود اومد و وقتی یک سیستم داخل شبکه میخواد به اینترنت وصل بشه، NAT دقیقاً چه کاری انجام میده.
NAT دقیقاً چیه؟
NAT مخفف Network Address Translation هست.
اگر بخوام خیلی ساده بگم، کار NAT اینه که آدرس IP رو هنگام عبور از یک شبکه به شبکه دیگه تغییر بده.
ما داخل شبکه معمولاً از Private IP استفاده میکنیم. مثلاً لپتاپ، موبایل یا تلویزیون داخل خونه هر کدوم میتونن یک Private IP داشته باشن.
ولی وقتی همین دستگاه بخواد بره توی اینترنت، داستان فرق میکنه.
Private IP برای استفاده داخل شبکه ساخته شده و قرار نیست با همین آدرس مستقیماً توی Internet ارتباط برقرار کنیم.
پس اینجا Router وارد کار میشه.
Router وقتی میبینه یک سیستم داخلی میخواد با اینترنت ارتباط برقرار کنه، با استفاده از NAT اطلاعات IP رو Translation میکنه و Traffic رو با Public IP شبکه به سمت اینترنت میفرسته.
یعنی اگر خیلی خلاصه بخوام بگم:
سیستم داخل شبکه Private IP داره، Router ارتباط اون رو به سمت Internet میفرسته و NAT وظیفه Translation رو انجام میده.
اصلاً چرا NAT به وجود اومد؟
برای فهمیدن NAT باید برگردیم به مشکل اصلی IPv4.
تعداد IPv4 Addressها محدوده. وقتی تعداد کامپیوترها، موبایلها، Serverها و تجهیزات شبکه زیاد شد، دیگه منطقی نبود برای هر دستگاه یک Public IP اختصاص بدیم.
اینجا گفتن خب چرا دستگاههای داخل یک شبکه رو با Public IP آدرسدهی نکنیم؟
به جاش میتونیم از Private IP Address استفاده کنیم.
مثلاً داخل یک خونه میتونیم دهها دستگاه داشته باشیم:
Laptop، Mobile، Smart TV، Printer و کلی دستگاه دیگه.همه این دستگاهها میتونن Private IP داشته باشن. اما لازم نیست هر کدوم یک Public IP جدا داشته باشن.Router میتونه ارتباط همه این دستگاهها رو از طریق یک Public IP به اینترنت بفرسته.
اینجاست که NAT واقعاً کاربرد خودش رو نشون میده.
NAT وقتی به اینترنت وصل میشیم چه کار میکنه؟
حالا یه مثال واقعی بزنیم.
فرض کنید با لپتاپ نشستید و وارد Google شدید.
لپتاپ شما داخل شبکه یک Private IP داره.
وقتی Google رو باز میکنید، لپتاپ یک درخواست برای Google میفرسته.
این درخواست اول میاد سمت Router.
Router میبینه مقصد این درخواست داخل شبکه خونه نیست و باید بره سمت اینترنت.
اینجا NAT وارد کار میشه.
Router اطلاعات مربوط به آدرس داخلی رو Translation میکنه و درخواست رو با Public IP شبکه به سمت Internet میفرسته.
حالا Google دیگه Private IP لپتاپ شما رو نمیبینه.
از دید Google، درخواست از Public IP شبکه شما اومده.
اما داستان اینجا تموم نمیشه.
Google جواب درخواست رو برمیگردونه.
این جواب دوباره به Router میرسه.
Router باید بفهمه این جواب برای کدوم دستگاه داخل شبکه بوده.
اینجاست که Router از اطلاعاتی که برای Connection نگه داشته استفاده میکنه و جواب رو به لپتاپ شما برمیگردونه.
پس شما فقط Google رو باز میکنید، ولی پشت صحنه Router داره Connectionها رو مدیریت میکنه و NAT هم Translation رو انجام میده.
NAT Table به چه دردی میخوره؟
اینجا یک مفهوم مهم داریم به اسم NAT Table یا جدول NAT.
Router نمیتونه همینطوری آدرسها رو تغییر بده و بعد یادش بره چه اتفاقی افتاده.
چون وقتی پاسخ (Response) از اینترنت برگرده، Router باید بدونه این پاسخ برای کدوم سیستم داخل شبکه بوده.
برای همین Router اطلاعات Connectionها رو داخل NAT Table نگه میداره.
مثلاً وقتی چند دستگاه مختلف داخل خونه همزمان به اینترنت وصل هستن، Router باید بتونه تشخیص بده:
این پاسخ برای Laptop بوده.
اون یکی برای Mobile بوده.
یکی دیگه برای Smart TV بوده.
NAT Table به Router کمک میکنه این ارتباطها رو از هم تشخیص بده و پاسخ برگشتی رو به دستگاه درست برگردونه.
پس PAT این وسط چیه؟
اینجا معمولاً اسم PAT رو هم میشنویم.
PAT یعنی Port Address Translation یا ترجمه آدرس با استفاده از شماره پورت.
در واقع PAT یکی از روشهاییه که باعث میشه تعداد زیادی دستگاه بتونن با یک Public IP همزمان از اینترنت استفاده کنن.
فرض کنید داخل یک خونه پنج دستگاه به اینترنت وصل هستن.
همه این دستگاهها از یک Public IP مشترک استفاده میکنن.
پس Router چطور میفهمه هر Connection (ارتباط) متعلق به کدوم دستگاهه؟
اینجا Port Number یا شماره پورت وارد ماجرا میشه.
Router علاوه بر IP، شماره پورت ارتباطها رو هم در نظر میگیره و با استفاده از اونها Connectionهای مختلف رو از هم جدا میکنه.
به همین دلیل چندین دستگاه میتونن همزمان از یک Public IP استفاده کنن، ولی Router همچنان میفهمه هر ارتباط مربوط به کدوم دستگاهه.
به همین دلیل چیزی که ما در بیشتر شبکههای خانگی به عنوان NAT میبینیم، در عمل معمولاً PAT یا NAT Overload هست.
سخن آخر
اگر بخوام کل NAT رو خیلی ساده جمع کنم، داستان اینه:
ما داخل شبکه از Private IP استفاده میکنیم. این IPها برای ارتباط داخل شبکه هستن و نمیتونن به شکل مستقیم توی Internet استفاده بشن.
وقتی یک سیستم داخلی میخواد به اینترنت وصل بشه، Router وارد ماجرا میشه و با استفاده از NAT، اطلاعات IP رو Translation میکنه تا Traffic بتونه از شبکه خارج بشه.
وقتی جواب هم برمیگرده، Router با استفاده از اطلاعاتی که از Connectionها داره، جواب رو به سیستم درست داخل شبکه میرسونه.



