وقتی اینترنت در دههی ۱۹۸۰ متولد شد، کسی فکر نمیکرد روزی به چنین غولی تبدیل بشه. اون موقع مهندسان برای آدرسدهی دستگاهها،
چیزی به نام IPv4 طراحی کردن:
حدود ۴.۳ میلیارد آدرس. به نظر میرسید این عدد بینهایت باشه.
🔹 آدرسهای IPv4 از ۴ بخش (Octet) تشکیل شدن؛ هر بخش ۸ بیت هست.
پس در مجموع:
🔹 یعنی IPv4 در کل یک آدرس ۳۲ بیتی محسوب میشه.

🔹 تعداد ترکیبهای ممکن با 32 بیت :
وقتی شما ۳۲ بیت داشته باشی، هر بیت میتونه ۰ یا ۱ باشه.
پس کل ترکیبها برابر میشه با:
>>> 2**32 4,294,967,296
یعنی حدود ۴.۲ میلیارد آدرس.
🔹 اما همهی این آدرسها قابل استفاده نیستند. بخشی برای کارهای خاص رزرو شدن مثل:
آدرسهای خصوصی (Private IP) : مثل
192.168.x.x
Loopback مثل
127.0.0.1
Multicast و محدودههای دیگر
👉 بنابراین، تعداد آدرس عمومی واقعی کمتر از ۴ میلیارد هست.
اما اینترنت مثل تهران دههی ۷۰ رشد کرد:
ناگهانی، شلوغ و پرمصرف. موبایل، لپتاپ، دوربین، تلویزیون، حتی یخچال و چراغها شروع کردن به «خانه خواستن». خیلی زود معلوم شد این تعداد آدرس کافی نیست.
سال ۱۹۹۸، سازمان IETF طرحی جدید معرفی کرد: IPv6. اینبار نه میلیاردها، بلکه عددی با ۳۹ صفر آدرس در دسترس بود. یعنی برای هر دانه شن ساحل هم میشه چند آدرس داد. این تغییر، مثل ساختن شهری بیپایان بود تا هیچ دستگاهی بیخانه نمونه.
چرا IPv6 اینقدر بزرگه؟
🔹 آدرسهای IPv6 از ۸ بخش (هر بخش 16 بیت یا همون 4 رقم هگزادسیمال) تشکیل شدن؛ مثل:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
🔹 هر بخش: 16 بیت
تعداد کل بیتها:
8×16=128 bit
وقتی ۱۲۸ بیت داشته باشی، تعداد حالتهای ممکن برابر میشه با:
2**128
یعنی یک عدد با ۳۸ صفر 😳
(حدوداً 340 میلیارد میلیارد میلیارد میلیارد آدرس)
حدود ۳۴۰ دسیلیون»
IPv6 طراحی شد تا مشکل کمبود آدرس در IPv4 رو حل کنه.
تعداد آدرسها انقدر زیاده که میشه
برخی محدودههای مهم رزرو شده:
0.0.0.0/8 → برای "این شبکه" یا استفاده نرمافزاری.
10.0.0.0/8 → شبکه خصوصی (LAN).
100.64.0.0/10 → مخصوص NAT (اشتراک آدرس بین کاربر و ISP).
127.0.0.0/8 → لوپبک (آدرس خود دستگاه، مثل 127.0.0.1).
169.254.0.0/16 → آدرس خودکار وقتی DHCP در دسترس نیست.
172.16.0.0/12 → شبکه خصوصی.
192.168.0.0/16 → شبکه خصوصی (خیلی رایج توی مودمها).
192.0.2.0/24 , 198.51.100.0/24 , 203.0.113.0/24 → برای آموزش/مستندات.
224.0.0.0/4 → برای مولتیکست (پخش به چند دستگاه همزمان).
240.0.0.0/4 → رزرو شده برای آینده.
255.255.255.255 → آدرس broadcast محدود (به همه در یک شبکه).
برخی محدودههای خاص:
::/128 → آدرس نامشخص.
::1/128 → لوپبک (معادل 127.0.0.1 در IPv4).
::ffff:0:0/96 → آدرسهای نگاشتشده IPv4.
64:ff9b::/96 → ترجمه بین IPv4 و IPv6 (NAT64).
2001:db8::/32 → برای مستندات/آموزش.
fc00::/7 → آدرس محلی منحصر به فرد (خصوصی).
fe80::/10 → آدرس Link-Local (ارتباط در یک لینک شبکه).
ff00::/8 → مولتیکست در IPv6.
...............................................................................................................................................
دههی ۹۰، مایکروسافت متوجه شد کاربرها زیاد به مشکل «بیآدرس ماندن» میخورن. یعنی اگر DHCP (سیستمی که آدرس میده) قطع بشه، دستگاهها کاملاً فلج میشن. پس ویژگی APIPA رو به ویندوز ۹۸ اضافه کرد.
یعنی وقتی کارت شبکهی کامپیوترت روشنه ولی از DHCP (اون سیستمی که توی مودم/روتر هست و به دستگاهها آدرس IP میده) هیچ پاسخی نگیره، کامپیوتر بیکار نمیمونه. خودش بهطور خودکار یه آدرس میسازه که همیشه از محدودهی 169.254.0.0 تا 169.254.255.255 هست.
این ویژگی رو میگن APIPA (Automatic Private IP Addressing).
کاربردش چیه؟
این آدرس به درد اینترنت وصل شدن نمیخوره چون هیچ روتر و گیتوی این رنج رو نمیشناسه. اما به درد این میخوره که دستگاههای داخل همون شبکهی کوچیک (مثلاً لپتاپ تو و کامپیوتر بغلی) هنوز بتونن همدیگه رو پیدا کنن.
مثال واقعی:
فرض کن مودمت خاموش شده. لپتاپت آدرس 169.254.12.34 گرفته، و کامپیوتر دوستت 169.254.56.78. شماها نمیتونید برید اینترنت، ولی میتونید فایل به هم بفرستید یا بازی شبکهای کنید.
این آدرسها فقط برای ارتباط داخل همان شبکهی کوچک کار میکنن. مثل اینه که وقتی شهرداری پلاک نده، خود مردم روی دیوار عددی گچ بزنن که حداقل همسایهها بدونن کی کجاست.
وقتی IPv6 اومد، طراحها دنبال راهی بودن که نیاز به وارد کردن دستی آدرس رو کمتر کنن.
اینجا پای EUI-64 وسط اومد.
کارت شبکهی هر دستگاه از اول یک شناسهی جهانی داره: MAC Address. ایده این بود: چرا از همین استفاده نکنیم؟ سیستم میتونه با ترکیب MAC و ساختار IPv6، خودش آدرس درست کنه. مثل اینه که شماره شناسنامهات به طور خودکار تبدیل به پلاک خانهات بشه.
MAC آدرس: طولش ۴۸ بیت (۶ بایت) است.
Interface ID در IPv6: طولش ۶۴ بیت (۸ بایت) است.
چالش: ۶۴ بیت لازم داریم، اما MAC فقط ۴۸ بیت است. یعنی باید ۱۶ بیت اضافه کنیم تا طول Interface ID کامل شود.
💡 راه حل استاندارد: وسط MAC، مقدار ثابت FFFE (16 بیت) را اضافه میکنیم تا طولش به ۶۴ بیت برسد.
مثلا:
MAC = 12:34:56:78:9A:BC → به دو بخش تقسیم میکنیم: 12:34:56 و 78:9A:BC
وسطش FFFE اضافه میکنیم:
12:34:56 + FFFE + 78:9A:BC = 12:34:56:FF:FE:78:9A:BC
چرا وسط؟
این روش استاندارد IEEE برای تبدیل MAC 48 بیتی به EUI-64 است و همه تجهیزات IPv6 این قانون را رعایت میکنند.
باعث میشود Interface ID هم منحصر به فرد باشد و هم طولش دقیقاً ۶۴ بیت شود.
این کار، یعنی تبدیل MAC 48 بیتی به شناسه ۶۴ بیتی (Interface ID) با روش EUI-64، برای خودکار کردن آدرسدهی IPv6 انجام میشود.
اسم رسمی: این روش را EUI-64 (Extended Unique Identifier 64-bit) مینامند.
هدف:
از MAC آدرس موجود دستگاه استفاده کنیم تا شناسه رابط منحصر به فرد بسازیم.
طول ۶۴ بیتی مورد نیاز برای Interface ID در IPv6 را با افزودن FFFE تکمیل کنیم.
مزیت: نیازی به پیکربندی دستی IPv6 برای هر دستگاه نیست؛ دستگاه خودش Interface ID را تولید میکند.
چرا وسط FFFE میگذاریم؟
MAC فقط ۴۸ بیت است، Interface ID باید ۶۴ بیت شود.
FFFE را وسط قرار میدهیم تا طول ۶۴ بیت کامل شود و استاندارد IEEE رعایت شود.
💡 به زبان ساده: این کار باعث میشود هر دستگاه IPv6 خودش یک آدرس رابط منحصر به فرد و استاندارد داشته باشد.
Broadcast توی شبکههای محلی (LAN) از اول یه ابزار ضروری بود. چون دستگاهها باید راهی پیدا میکردن همدیگه رو پیدا کنن. برای مثال وقتی یه کامپیوتر تازه روشن میشد و میخواست آدرس IP بگیره (با DHCP)، اول یه Broadcast میفرستاد:
«کسی هست که به من IP بده؟»
سرور DHCP که تو همون شبکه بود جواب میداد.
این روش ساده بود، ولی خیلی زود مشکل خودش رو نشون داد:
هر بستهی Broadcast باید به همهی دستگاههای شبکه تحویل داده بشه.
اگه شبکه بزرگ باشه (مثلاً هزار تا دستگاه)، همه باید اون بسته رو ببینن و پردازش کنن، حتی اگه اصلاً بهشون ربطی نداشته باشه.
این پدیده به اسم Broadcast Storm (طوفان برادکست) معروف شد؛ جایی که ترافیک شبکه به خاطر Broadcast بالا میرفت و کار کل شبکه میخوابید.
به همین دلیل وقتی IPv6 طراحی شد (دهه ۹۰ میلادی، استاندارد رسمی ۱۹۹۸)، مهندسا تصمیم گرفتن Broadcast رو کلاً حذف کنن.
به جاش از Multicast استفاده کردن: یعنی به جای داد زدن برای همه، فقط به یه گروه خاص پیام میدی. مثل اینکه به جای فریاد توی شهر، یه گروه واتساپ بسازی و فقط به اونایی که لازم دارن پیام بدی.
برای دیدن Broadcast توی IPv4 میتونی این کارو کنی:
arp -a
این دستور جدول ARP رو نشون میده. ARP خودش از Broadcast استفاده میکنه (وقتی میپرسه: «این IP مال کدوم MACه؟»).
یا میتونی یه Ping Broadcast بزنی (توی بعضی سیستمها ممکنه بلاک باشه):
ping 192.168.1.255
اینجا 192.168.1.255 آدرس Broadcast برای شبکهای با ماسک 255.255.255.0 ـه.
نتیجه؟ همهی دستگاههای توی اون شبکه که جواب Broadcast رو فعال دارن، باید پاسخ بدن.
IPv4 → Broadcast داشت (همه میشنیدن، حتی بیربطها).
IPv6 → Broadcast حذف شد و Multicast جاشو گرفت (فقط گروه هدف میشنوه).
اینجوری شبکهها هم بهینهتر شدن، هم مقیاسپذیرتر.
فرض کن داری به خانهی دوستت میری و درِ خانهشو میزنی و میگی: «فلانی، یه شارژ داری؟» او هم جواب میده و یا بهت میده. این دقیقاً همان چیزی است که در شبکههای اینترنتی Unicast اتفاق میافتد: پیام از یک فرستنده به یک گیرنده مشخص ارسال میشود.
در دنیای اینترنت، اکثر ارتباطها به همین شکل هستند. وقتی مرورگر وبت درخواست میکند تا یک صفحه را بارگذاری کند، یا وقتی پیام در واتساپ میفرستی، پیام دقیقاً به یک آدرس مشخص میرود و نه به همه.
فرض کن سیستم تو با آدرس IP 192.168.1.10 به سیستم دوستت با آدرس IP 192.168.1.20 پیام میدهد. این همان Unicast است:
ping 192.168.1.20
دستور ping بستهای را مستقیماً به همان دستگاه میفرستد و تنها از آن دستگاه پاسخ دریافت میکند. هیچ کس دیگر در شبکه این بسته را نمیگیرد.
در مقابل، اگر پیام به همه ارسال شود، آن موقع داریم درباره Broadcast یا اگر به گروه مشخصی ارسال شود، Multicast صحبت میکنیم.
به زبان ساده: Unicast یعنی «درب خانهی یک نفر زدن»؛ اینترنت بیشتر با همین روش کار میکند.
وقتی رسانههای دیجیتال رشد کردند و حجم اطلاعات بالا رفت، مشخص شد که ارسال پیامها به همه، بهصرفه نیست. اینجاست که Multicast وارد میشود: ارسال پیام به یک گروه مشخص از گیرندهها، نه به همه کاربران شبکه.
مثل تلویزیون اینترنتی یا پخش زنده فوتبال که فقط به مشترکهای عضو فرستاده میشود. این مفهوم در دههی ۹۰ طراحی شد تا پهنای باند اینترنت بهینه شود و شبکهها بتوانند همزمان به چند کاربر خاص سرویس بدهند بدون اینکه کل شبکه اشغال شود.
میتوان Multicast را مثل گروه واتساپ تصور کرد:
سرور ویدئو یک پیام (مثلاً بسته ویدئویی) میفرستد.
تنها کسانی که در گروه پخش زنده عضو هستند آن را دریافت میکنند.
در شبکه، این کار معمولاً با IP Multicast انجام میشود، جایی که آدرسهای خاصی (مثلاً کلاس D در IPv4: 224.0.0.0 تا 239.255.255.255) برای گروهها رزرو شدهاند. برای مثال، اگر سرور بخواهد یک ویدئو را به گروه 224.1.1.1 بفرستد، فقط گیرندههایی که به این گروه مشترک هستند، آن را دریافت میکنند.
به زبان ساده: Multicast یعنی «پیام به گروه خاص»؛ کاربردش در پخش زنده و رسانههای آنلاین است و پهنای باند شبکه را حفظ میکند.
فرض کن یه سرور ویدئو داری که میخواد یه ویدئوی زنده رو فقط برای چند کاربر خاص بفرسته. آدرس Multicast رو 224.1.1.1 انتخاب میکنیم و کاربران A، B و C به این گروه مشترک میشوند.
روی سرور (ارسال پیام):
# برنامهای ساده برای ارسال پیام به گروه Multicast echo "Live video stream" > /dev/udp/224.1.1.1/5000
روی کاربر A، B و C (دریافت پیام):
# برنامهای ساده برای دریافت پیام از گروه Multicast nc -lu 224.1.1.1 5000
توضیح:
پیام فقط به آدرس 224.1.1.1 میرود، یعنی فقط اعضای گروه آن را دریافت میکنند.
هیچ کاربر دیگری در شبکه این بسته را نمیبیند.
این همان کارکرد Multicast است: پیام به یک گروه مشخص، بدون هدر رفت پهنای باند برای بقیه کاربران.
در دههی ۲۰۰۰، وقتی ترافیک اینترنت جهانی به شدت افزایش پیدا کرد، شرکتها دنبال راهی بودن تا سرویسها سریعتر و بهینهتر به کاربران برسند.
اینجاست که Anycast وارد بازی شد:
چند سرور یک آدرس IP مشترک دارند.
وقتی کاربر به آن آدرس وصل میشود، همیشه به نزدیکترین سرور هدایت میشود.
مثلاً بیشتر سرورهای DNS و سرویسهای گوگل از Anycast استفاده میکنند. به زبان ساده: مثل این است که یک شمارهی اورژانس داشته باشی، اما تماس تو به نزدیکترین مرکز اورژانس وصل شود.
در شبکههای سنتی، هر آدرس IP به یک سرور اختصاص دارد. وقتی به اون آدرس وصل میشوی، بستهها دقیقاً به همان سرور میروند.
در Anycast، چند سرور در مکانهای مختلف دنیا همان آدرس IP را اعلام میکنند. یعنی همه سرورها میگویند: «من این IP را دارم».
این کار با روتینگ شبکهای (BGP) انجام میشود. وقتی یک کاربر درخواست میدهد:
بسته او وارد اینترنت میشود و مسیرش توسط روترها هدایت میشود.
شبکه مسیر کوتاهتر یا سریعتر به یک سرور خاص را تشخیص میدهد.
بسته به همان سرور هدایت میشود، بدون اینکه کاربر متوجه شود.
به زبان ساده: شبکه خودش تصمیم میگیرد کدام سرور از نظر مسیر اینترنتی کوتاهتر است و بسته را به آن میفرستد.
نزدیکترین یعنی مسیر با کمترین “هزینه” شبکه”:
تعداد روترهایی که باید بستهها از آنها عبور کنند (hop count)
تاخیر زمانی (latency) بین روترها
کیفیت و پهنای باند مسیر
حال هر سرور IP خودش را اعلام میکند
فرض کن سه سرور داریم:
سرور A در تهران
سرور B در لندن
سرور C در نیویورک
همه این سرورها میگویند: «من IP 192.0.2.1 را دارم.»
این اعلام کردن توسط پروتکل BGP (Border Gateway Protocol) انجام میشود که مسیریابی اینترنت را کنترل میکند.
وقتی یک کاربر درخواست میدهد (مثلاً ping یا مرور وب):
بسته کاربر وارد روترهای اینترنت میشود.
روترها مسیرهای موجود برای رسیدن به 192.0.2.1 را بررسی میکنند.
نزدیکترین یا سریعترین مسیر را انتخاب میکنند.
بسته به همان سرور هدایت میشود.
نکته: «نزدیکترین» اینجا به معنی مسافت فیزیکی نیست، بلکه کمترین تاخیر و بهترین مسیر شبکه است.
کاربر در تهران → بسته به سرور A میرود
کاربر در لندن → بسته به سرور B میرود
کاربر در نیویورک → بسته به سرور C میرود
کاربر فقط IP 192.0.2.1 را میبیند و فکر میکند با یک سرور ارتباط دارد، در حالی که بستهها هوشمندانه به نزدیکترین سرور واقعی هدایت میشوند.
IP مشترک: هر سرور IP را خودش اعلام میکند، اما بستهها همیشه از مسیر اینترنت به نزدیکترین سرور واقعی میرسند.
قابلیت تحمل خطا: اگر یک سرور خراب شود، شبکه به سرور بعدی هدایت میکند. کاربر همچنان با همان IP ارتباط برقرار میکند.
بهینهسازی سرعت: باعث کاهش تاخیر و مصرف پهنای باند میشود.
فرض کن سه سرور DNS داریم:
کاربر در تهران وقتی 192.0.2.1 را درخواست میکند، شبکه به صورت خودکار او را به DNS1 هدایت میکند، چون نزدیکترین سرور است. کاربر در نیویورک به DNS3 وصل میشود.
tracertدر ویندوز CMD، دستور زیر مسیر بستهها تا یک سرور (مثلاً google.com) را نشان میدهد:
tracert google.com
توضیح خروجی:
1 2 ms 1 ms 1 ms 192.168.1.1 2 15 ms 14 ms 16 ms 10.10.0.1 3 20 ms 19 ms 21 ms 203.0.113.1 4 35 ms 34 ms 36 ms 172.217.164.110
هر خط = یک hop است (یک روتر یا ایستگاه بین تو و سرور).
زمانها (ms) = تاخیر بستهها تا آن hop.
آخرین خط = سروری که بسته به آن میرسد.
در شبکه، این کار معمولاً با روتینگ هوشمند BGP انجام میشود تا ترافیک به سریعترین و بهینهترین مسیر برود.
به زبان ساده: Anycast یعنی «اتصال به نزدیکترین سرور با یک آدرس مشترک»؛ باعث کاهش تاخیر و بهبود تجربه کاربر میشود.
این آدرسها فقط تو همون شبکهی محلی کار میکنن و هیچوقت ازش بیرون نمیرن. مثل تاکسی خطی که فقط توی یه محله میچرخه. در IPv6 همیشه با fe80: شروع میشن.
با ورود IPv6، یک مشکل وجود داشت: «چطور دستگاهها بدون کمک بیرونی همدیگه رو پیدا کنن؟» برای همین، Link-local address طراحی شد. این آدرسها (با fe80:) همیشه به طور خودکار فعال هستن. مثل تاکسیهای خطی که فقط توی یک محله میچرخن و نیازی به مجوز شهر ندارن.
کامپیوترت گاهی میخواد با خودش حرف بزنه! اون وقت از آدرس Loopback استفاده میکنه. در IPv4 این میشه 127.0.0.1. یعنی سیستم میگه: «الو؟ خودم هستم!» برای تست نرمافزار یا سرویسها خیلی کاربردیه.
از روزهای اولیه اینترنت، توسعهدهندهها نیاز داشتن سیستم خودش رو تست کنه. برای همین، آدرس 127.0.0.1 ساخته شد: Loopback. یعنی دستگاه با خودش حرف بزنه. مثل اینکه تلفن رو برداری و شمارهی خودت رو بگیری. امروز هم در IPv6 معادلش ::1 هست.
اینو بذار دربان ساختمون فرض کن. هر وقت بخوای از محله بری بیرون، باید از دربان رد شی. Gateway همون مودمه یا روتره که ترافیک داخلی رو میگیره و میفرسته به اینترنت. بدون اون، سیستم فقط تو خونه میچرخه.
از اولین شبکههای سازمانی دههی ۸۰، نیاز بود دستگاهها راه خروج داشته باشن. این شد مفهوم Default Gateway. بدونش دربان ساختمون ، دستگاه فقط در همان شبکهی داخلی میچرخه و راهی به اینترنت نداره.