Course-এর সূচি

1.6

Address: IP, MAC, Port, ARP ও DHCP

প্রতিটি Packet-এর তিন ধরনের Address, Public বনাম Private, Subnet, এবং ডিভাইস কীভাবে এগুলো পায় ও খুঁজে নেয়।

34 মিনিট পড়া + Animation

টিপস: ডটেড-আন্ডারলাইন করা যেকোনো শব্দে ট্যাপ বা Hover করলে তার অর্থ দেখবে।

এই Lesson শেষে তুমি পারবে

  • প্রতিটি Packet যে তিনটি Address বহন করে (MAC, IP, Port) তাদের নাম বলতে, এবং কোনটা কোন Layer ব্যবহার করে ও কতদূর যায় তা বলতে।
  • একটি IPv4 Address Binary-তে পড়তে, Subnet Mask বা CIDR Prefix দিয়ে Network ও Host অংশে ভাগ করতে, আর Network, Broadcast, Range ও Host সংখ্যা হিসাব করতে।
  • Private, Public, Loopback, Link-local (169.254), CGNAT ও Documentation Address চিনতে, এবং IPv6 Address পড়তে ও ছোট করে লিখতে।
  • Port, Socket ও 5-tuple ব্যাখ্যা করতে, আর Well-known, Registered ও Ephemeral Port Range বলতে।
  • DHCP (DORA, Lease) ও ARP (Request, Reply, Cache, Gratuitous ARP, Subnet-এর বাইরের Traffic) ধাপে ধাপে বোঝাতে, কী ভুল হতে পারে তা-সহ: DHCP Server না থাকা, IP Conflict, ভুয়া Server ও Spoofing।
  • চারটা চালু ভুল ধারণা ধরতে: MAC Address চিরস্থায়ী, IPv6-এ IPsec বাধ্যতামূলকভাবে চালু, 255.255.255.0 একটা “Classful” Mask, আর ARP করে Switch।

#প্রতিটি Packet-এ তিনটি Address

তোমার Laptop যখন Network-এ কিছু পাঠায়, Data-তে থাকে তিনটি আলাদা Address, প্রতি Layer-এ একটি:

AddressLayerউদাহরণকী চিহ্নিত করেকতদূর যায়
MAC AddressL2 (Data Link)3c:22:fb:01:01:01Local Link-এ একটি Network Interfaceএক Hop: প্রতিটি Router-এ বদলায়
IP AddressL3 (Network)192.168.1.10, 2001:db8::10পুরো Network-এ একটি Host (একটি Interface)End to end (NAT না বদলালে)
Port NumberL4 (Transport)443, 53000ওই Host-এর একটি Program / ConnectionEnd to end (NAT না বদলালে)

Note-এ প্রথম দুটির সংজ্ঞা আছে:

  • IP (Internet Protocol) ডিভাইসকে Network-এ একটি Logical Address দেয় আর Packet সেদিকে বয়ে নেয়। “Logical” মানে এটা Configuration দিয়ে দেওয়া হয়, Hardware-এ খোদাই করা নয়, আর তুমি কোন Network-এ আছ তার ওপর নির্ভর করে।
  • MAC (Media Access Control) হলো Hardware Address, যা Local Network-এ একটি Network Interface চেনায়। Ethernet ও Wi-Fi-তে Frame পৌঁছানো হয় MAC দেখে।

#IPv4 Address

একটি IPv4 Address হলো একটি ৩২-Bit সংখ্যা। পড়ার সুবিধার জন্য একে চারটি Octet (৮-Bit Byte) হিসেবে দশমিকে লেখা হয়, ডট দিয়ে আলাদা করে: Dotted-decimal Notation। প্রতিটি Octet ০–২৫৫।

Octet 1Octet 2Octet 3Octet 4
দশমিক192168110
Binary11000000101010000000000100001010

একটি Octet রূপান্তর করতে যে Bit-গুলো 1 তাদের মান যোগ করো: ১২৮, ৬৪, ৩২, ১৬, ৮, ৪, ২, ১। ১৯২ হলো ১২৮ + ৬৪, তাই 11000000; ১০ হলো ৮ + ২, তাই 00001010।

৩২ Bit-এ হয় 2³² ≈ ৪.৩ বিলিয়ন Address। শুনতে অনেক, কিন্তু ফোন, Laptop, Server আর IoT ডিভাইসে তা ফুরিয়ে গেছে: কেন্দ্রীয় Pool (IANA) শেষ হয়েছে ২০১১ সালে, আর আঞ্চলিক Registry-গুলো (বাংলাদেশ ও এশিয়া-প্যাসিফিকের জন্য APNIC) তার কিছু পরেই। Private Address, NAT ও IPv6 হলো এর উত্তর, যা নিচে দেখবে।

#Network অংশ ও Host অংশ

প্রতিটি IPv4 Address-এর দুটি অংশ:

  • Network অংশ (Prefix): Address-টি কোন Network-এর, ওই Subnet-এর সব ডিভাইসের জন্য একই;
  • Host অংশ: ওই Network-এর ভেতরে কোন ডিভাইস।

ভাগটা কোথায় হবে তা বলে Subnet Mask, যা ডট দিয়ে লেখা হয় অথবা CIDR Prefix Length (Classless Inter-Domain Routing) হিসেবে: শুরুর দিকের 1-Bit-এর সংখ্যা।

IP address    192.168.1.10   11000000.10101000.00000001.00001010
Subnet mask   255.255.255.0  11111111.11111111.11111111.00000000   (= /24)
              ───────── network (24 bits) ─────────  host (8 bits)
Network       192.168.1.0    (host bits all 0)
Broadcast     192.168.1.255  (host bits all 1)
Usable hosts  192.168.1.1 – 192.168.1.254   →   2⁸ − 2 = 254

যে Address-এর সব Host Bit 0, সেটা Network-এর নিজের নাম, আর যার সব Host Bit 1, সেটা Subnet-এর Broadcast Address (“এই Subnet-এর সবাই”)। এজন্যই ব্যবহারযোগ্য Host = 2^(Host Bit) − 2।

PrefixMaskAddressব্যবহারযোগ্য Hostসাধারণ ব্যবহার
/8255.0.0.016,777,21616,777,214পুরো 10.0.0.0/8 Private Range
/16255.255.0.065,53665,534একটি Cloud VPC, একটি ক্যাম্পাস
/24255.255.255.0256254বাসা বা অফিসের LAN, একটি Cloud Subnet
/25255.255.255.128128126একটি /24-এর অর্ধেক
/26255.255.255.1926462একটি ছোট Subnet
/30255.255.255.25242পুরনো ধাঁচের Point-to-point Link
/31255.255.255.25422Point-to-point Link (Network/Broadcast লাগে না)
/32255.255.255.25511একটিমাত্র Host (Firewall Rule, Route)

Prefix-এ প্রতিটি বাড়তি Bit Block-কে অর্ধেক করে। একটি Network-কে ছোট ছোট ভাগে ভাগ করাকে বলে Subnetting: একটি /24 হতে পারে দুটি /25, চারটি /26, এভাবে।

Network-কে Subnet-এ ভাগ করার কারণও ঠিক এই দুটো:

  • Broadcast কমে। ARP Request আর DHCP Discover Subnet-এর প্রত্যেক ডিভাইসের কাছে যায়। এক সমতল Network-এ ১০০০টা ডিভাইস থাকলে প্রতিটা মেশিন অন্যদের Broadcast সামলাতে সময় নষ্ট করে; ২০০ করে ৫টা Subnet হলে প্রতিটা Broadcast শুধু নিজের রুমেই পৌঁছায়, কারণ Router Broadcast পার করে না।
  • নিরাপত্তা আর Access Control সহজ হয়। এক Subnet থেকে আরেক Subnet-এ যেতে হলে Router বা Firewall পেরোতে হয়, তাই পুরো একটা রুমের জন্য একটা Rule লিখলেই হয়: “Guest Wi-Fi-র Subnet Internet-এ যেতে পারবে, কিন্তু Accounts-এর Subnet-এ না।”

বাস্তবের Subnet অবশ্য ২০০-র মতো গোল সংখ্যায় হয় না, হয় দুইয়ের ঘাতে। ২০০ পর্যন্ত ডিভাইসের ৫টা রুমের জন্য তুমি নেবে পাঁচটা /24 Subnet (প্রতিটায় ২৫৪টা ব্যবহারযোগ্য), যেমন 10.1.1.0/24 থেকে 10.1.5.0/24।

Subnet Calculator: Network অংশ, Host অংশ

যেকোনো IPv4 Address লেখো আর Prefix টেনে বদলাও। নীল Bit-গুলো Network-এর নাম, ধূসর Bit-গুলো তার ভেতরের Host-এর নাম।

192.168.1.10 /24

11000000101010000000000100001010

Subnet Mask 255.255.255.0

11111111111111111111111100000000

Subnet Mask

255.255.255.0 (/24)

Network Address

192.168.1.0/24

Broadcast Address

192.168.1.255

ব্যবহারযোগ্য Host Range

192.168.1.1 – 192.168.1.254

Block-এ মোট Address

256

ব্যবহারযোগ্য Host

254 (= 256 − 2)

Address-এর ধরন: Private (192.168/16): Internet-এ Route হয় না

এই গন্তব্য কি আমার Subnet-এ?

✓

192.168.1.20: একই Subnet: Network Bit মিলে গেছে। Laptop সরাসরি এই Address-এর জন্য ARP করে আর Frame সোজা তাকেই পাঠায়।

#Local কিনা? প্রতিটি Host-এর সিদ্ধান্ত

পাঠানোর আগে Host Mask ব্যবহার করে গন্তব্যকে নিজের Network-এর সঙ্গে মেলায় (Bit-গুলোর একটি Bitwise “and”):

  • Network অংশ এক → আমার Subnet-এ: ARP দিয়ে গন্তব্যের MAC খুঁজে সরাসরি Frame পাঠাও।
  • Network অংশ ভিন্ন → অন্য কোথাও: Frame পাঠাও Default Gateway (Router)-এ, Router-এর MAC দিয়ে।

/24 Mask-এ 192.168.1.20 হলো 192.168.1.10-এর Local, কিন্তু 192.168.2.5 আর 198.51.100.20 নয়। ওপরের Calculator-এ দুটোই চেষ্টা করে দেখো। ভুল Mask একটি পরিচিত ভুল Configuration: Host তখন Router-এর পেছনের মেশিনের জন্য ARP করে, বা অকারণে Local Traffic Router-এ পাঠায়।

#Public, Private ও বিশেষ Address

কিছু Range বিশেষ কাজের জন্য সংরক্ষিত। এগুলো জানা থাকলে এক নজরে একটি Configuration পড়তে পারবে:

Rangeনামঅর্থ
10.0.0.0/8Privateযে কেউ ভেতরে ব্যবহার করতে পারে; Internet-এ কখনো Route হয় না (RFC 1918)
172.16.0.0/12Private172.16.0.0 – 172.31.255.255 (পুরো 172.x নয়!)
192.168.0.0/16Privateসাধারণ বাসার Router: 192.168.0.x বা 192.168.1.x
100.64.0.0/10Shared / CGNATযে ISP গ্রাহকদের Carrier-grade NAT-এর পেছনে রাখে, তাদের ভেতরে ব্যবহৃত
127.0.0.0/8Loopback127.0.0.1 = “এই মেশিন”; কখনো Host ছেড়ে যায় না
169.254.0.0/16Link-local (APIPA)DHCP ব্যর্থ হলে নিজে নেওয়া; শুধু Local Link-এ কাজ করে
0.0.0.0Unspecified“এখনো Address নেই” (DHCP), বা Server Bind করলে “সব Interface”
255.255.255.255Limited Broadcastএই Link-এর সবাই (DHCP Discover ব্যবহার করে)
224.0.0.0/4Multicastএক থেকে অনেক Group (Streaming, Routing Protocol)
192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24Documentationশুধু উদাহরণ ও বইয়ের জন্য, এই Course-এর মতো

বাকি প্রায় সবই Public: বিশ্বজুড়ে অনন্য, Registry-র মাধ্যমে ISP ও প্রতিষ্ঠানকে বরাদ্দ করা, আর Internet-এ Route হয়।

  • একটি Private Address শুধু তার নিজের Network-এর ভেতরে অনন্য। লাখো বাসা একই সময়ে 192.168.1.10 ব্যবহার করে। Internet-এ যেতে Router-এর NAT একে একটি Public Address দিয়ে বদলে দেয় (NAT-এর বিস্তারিত Lesson 1.7-এ)।
  • CGNAT: অনেক ISP, বিশেষ করে Mobile Operator, এখন আর প্রতিটি বাসার Router-কে Public IPv4 Address দেয় না। Router পায় একটি 100.64.x.x Address, আর ISP আবার রূপান্তর করে। পার্শ্বপ্রতিক্রিয়া: Internet থেকে কেউ তোমার বাসার ভেতরে Connection খুলতে পারে না।

Private, Public, CGNAT ও Loopback

দুটি বাসা হুবহু একই Private Address ব্যবহার করে। Internet-এ শুধু Public Address অনন্য।

পরিস্থিতি

Laptop, বাসা ১192.168.1.10
Phone, বাসা ১192.168.1.11
Router ১WAN 100.64.12.34
Laptop, বাসা ২192.168.1.10
Router ২WAN 100.64.12.35
ISP CGNATPublic 203.0.113.7
Server198.51.100.20
ধাপ 1 / 3
1

দুটি Laptop-ই 192.168.1.10। এতে কোনো সমস্যা নেই: Private Range (10/8, 172.16/12, 192.168/16) লাখো Network-এ বারবার ব্যবহৃত হয় আর Internet-এ কখনো Route হয় না।

#IPv6 Address

IPv6 ব্যবহার করে ১২৮-Bit Address: 2¹²⁸ ≈ ৩.৪ × ১০³⁸, যা প্রতিটি ডিভাইসকে NAT ছাড়াই বিশ্বজুড়ে অনন্য Address দেওয়ার জন্য যথেষ্ট। এগুলো লেখা হয় চার Hexadecimal অঙ্কের আটটি Group হিসেবে, কোলন দিয়ে আলাদা করে:

Full:        2001:0db8:0000:0000:0000:ff00:0042:8329
Rule 1 (drop leading zeros in each group):
             2001:db8:0:0:0:ff00:42:8329
Rule 2 (replace ONE run of consecutive all-zero groups with ::):
             2001:db8::ff00:42:8329

:: মাত্র একবার বসানো যায়, নইলে কোনটা কয়টি শূন্য Group লুকিয়ে রেখেছে বোঝা যেত না।

PrefixধরনIPv4-এর কোনটির মতো
2000::/3Global Unicast (Public)Public Address
fe80::/10Link-local, প্রতিটি Interface-এ স্বয়ংক্রিয়ভাবে169.254.x.x, তবে সবসময় থাকে ও স্বাভাবিক
fc00::/7 (বাস্তবে fd00::/8)Unique LocalPrivate Range
::1Loopback127.0.0.1
ff00::/8MulticastMulticast (IPv6-এ Broadcast নেই)
2001:db8::/32Documentation192.0.2.0/24 ইত্যাদি

সাধারণ ভাগ হলো /64: প্রথম ৬৪ Bit Network Prefix (Router দেয়), শেষ ৬৪ Bit Interface ID, যা ডিভাইস নিজেই তৈরি করতে পারে (SLAAC, নিচের DHCP Animation-এ দেখানো)। URL-এ IPv6 Address বন্ধনীর মধ্যে লেখা হয়, যাতে তার কোলন Port-এর সঙ্গে গুলিয়ে না যায়: https://[2001:db8::10]:443/।

আজ বেশিরভাগ Network চলে Dual Stack-এ: ডিভাইসের IPv4 ও IPv6 দুটো Address-ই থাকে, আর DNS A ও AAAA দুটো Record-ই দেয়।

Note-এ IPv6-এর সুবিধা হিসেবে লেখা আছে Auto-configuration (ওপরের SLAAC), NAT-এর দরকার না থাকা (প্রতিটা ডিভাইস Global Address পেতে পারে, যদিও ভেতরে কী ঢুকবে তা তখনো Firewall-ই ঠিক করে), আর “শক্তিশালী Built-in নিরাপত্তা (IPsec)”। শেষেরটা শুধরে নিতে হবে:

#MAC Address

একটি MAC Address ৪৮ Bit (৬ Byte), লেখা হয় Hex অঙ্কের ছয়টি জোড়া হিসেবে: 3c:22:fb:01:01:01 (Linux, macOS) বা 3C-22-FB-01-01-01 (Windows)।

  • প্রথম ৩ Byte হলো OUI (Organizationally Unique Identifier), যা IEEE নির্মাতাকে বরাদ্দ দেয়। এটা দেখে নির্মাতা খুঁজে বের করা যায়। শেষ ৩ Byte নির্মাতা নিজে ঠিক করে।
  • ff:ff:ff:ff:ff:ff হলো Broadcast MAC: Link-এর প্রতিটি ডিভাইস Frame-টি গ্রহণ করে।
  • MAC একটি Network Interface-এর, ডিভাইসের নয়: একটি Laptop-এর Wi-Fi-এর জন্য একটি আর Ethernet-এর জন্য আরেকটি MAC থাকে।
  • এটা অনন্য হওয়ার কথা, কিন্তু স্থির নয়: Software দিয়ে বদলানো যায়, আর ফোন ও Laptop এখন গোপনীয়তার জন্য প্রতিটি Wi-Fi Network-এ Random MAC ব্যবহার করে (তখন দ্বিতীয় Hex অঙ্কটি 2, 6, A বা E হয়, যা “Locally Administered” Address চিহ্নিত করে)। MAC-কে কখনো নিরাপদ পরিচয় হিসেবে ধরো না।

#IP Address বনাম MAC Address

Note থেকে:

  • IP Address Packet-এর Network-Level Source ও Destination চিহ্নিত করে।
  • MAC Address Frame-কে Local Link-এ পরের ডিভাইসে পৌঁছাতে সাহায্য করে।
  • Computer থেকে Router-এ পাঠানোর সময় Destination IP Server-এর IP হতে পারে, কিন্তু Destination MAC সাধারণত Router-এর Local Interface-এর MAC।
  • Router পরের Link-এ পাঠানোর সময় নতুন Link-Layer Frame তৈরি করে; তাই MAC Address প্রতিটি Link-এ বদলায়।
  • সাধারণ Routing-এ NAT না থাকলে Source ও Destination IP End-to-End একই থাকে।
  • IPv4 Router Packet Forward করার সময় TTL কমায়; IPv6-এ এর সমতুল্য Field হলো Hop Limit।

IP বনাম MAC: প্রতিটি Link-এ কী বদলায়

Note-এর Connection: TCP-তে 192.168.1.10:53000 → 198.51.100.20:443। হাইলাইট করা Field মাত্রই বদলানো হয়েছে।

পরিস্থিতি

Laptop192.168.1.10
বাসার RouterLAN .1 · WAN 203.0.113.5
ISP Router
Server198.51.100.20

Laptop-এর তৈরি

Source MAC

3c:22:fb:01:01:01

Destination MAC

00:1a:2b:00:00:01

Source IP

192.168.1.10

Destination IP

198.51.100.20

Source Port

53000

Destination Port

443

Protocol / Flag

TCP SYN

TTL

64

ধাপ 1 / 5
1

Laptop একটি Connection খোলে। Source IP 192.168.1.10 (তার Private Address), Destination IP 198.51.100.20 (Server), Source Port 53000 (এই Connection-এর জন্য বাছা অস্থায়ী Port), Destination Port 443 (HTTPS), TCP আর SYN Flag।

নিজেকে যাচাই করোপ্রশ্ন

তোমার Laptop (192.168.1.10/24) 198.51.100.20-এ একটি Packet পাঠাল। Laptop থেকে বের হওয়া Frame-এর Destination MAC Address কী?

#Port

IP Address Packet-কে সঠিক মেশিনে পৌঁছায়; Port পৌঁছায় ওই মেশিনের সঠিক Program-এ। Port হলো TCP বা UDP Header-এর একটি ১৬-Bit সংখ্যা, ০–৬৫৫৩৫। TCP ও UDP-এর Port আলাদা: TCP 53 আর UDP 53 ভিন্ন জিনিস।

Note-এর উদাহরণ: তোমার কম্পিউটার HTTPS দিয়ে একটি Web Server-এ Connection খুলছে। (Address-গুলো ডকুমেন্টেশনের জন্য সংরক্ষিত উদাহরণ, বাস্তব Google Server-এর IP নয়।)

Fieldউদাহরণঅর্থ
Source IP192.168.1.10Client-এর Private IP
Destination IP198.51.100.20উদাহরণস্বরূপ Server-এর IP
Source Port53000Client-এর অস্থায়ী Port
Destination Port443HTTPS-এর প্রচলিত Server Port
ProtocolTCPTransport Protocol
TCP FlagSYN, ACK, …Connection ও Data Transfer নিয়ন্ত্রণ

সহজভাবে:

  • Source IP: কোথা থেকে Packet পাঠানো হচ্ছে।
  • Destination IP: কোন IP-তে Packet পৌঁছাবে।
  • Source Port: Client-এর এই নির্দিষ্ট Connection চিহ্নিত করে।
  • Destination Port: Server-এর কোন Transport Service-এ Data যাবে তা চিহ্নিত করে।

Port 443 HTTPS-এর শুধু প্রচলিত Port; এটা বাধ্যতামূলক নয় (https://example.com:8443 দিব্যি চলে)। একইভাবে Client Port 53000 একটি উদাহরণ, স্থায়ী নিয়ম নয়: প্রতিটি নতুন Connection-এর জন্য অপারেটিং সিস্টেম একটি খালি Port বেছে নেয়।

Rangeনামকে ব্যবহার করে
0–1023Well-known PortStandard সেবা; Linux-এ Default-এ শুধু root এগুলোতে Listen করতে পারে
1024–49151Registered PortIANA-তে নিবন্ধিত Application (Database, Tool)
49152–65535Dynamic / Ephemeral PortClient-এর অস্থায়ী Port (Linux Default-এ 32768–60999 ব্যবহার করে)

যে Port-গুলো মুখস্থ রাখার মতো:

PortসেবাPortসেবা
22SSH443HTTPS (TCP, আর HTTP/3-এর জন্য UDP)
25SMTP (Server থেকে Server-এ Mail)3306MySQL
53DNS (UDP ও TCP)5432PostgreSQL
67 / 68DHCP Server / Client (UDP)6379Redis
80HTTP27017MongoDB

#Socket ও 5-tuple

  • একটি Socket হলো কথোপকথনের এক প্রান্ত: IP Address + Port (+ Protocol), যেমন 198.51.100.20:443।
  • Server একটি Socket-এ Listen করে। Client নিজের একটি Ephemeral Port-এর Socket থেকে Connect করে।
  • প্রতিটি Connection অনন্যভাবে চেনা যায় তার 5-tuple দিয়ে: Protocol, Source IP, Source Port, Destination IP, Destination Port। এভাবেই Port 443-এর একটি Server একসঙ্গে হাজারো Client সামলায়, আর একই সাইটে খোলা দুটি Browser Tab আলাদা থাকে।

Port ও Socket: একটি IP, অনেক কথোপকথন

IP Address Packet-কে মেশিন পর্যন্ত পৌঁছায়; Port পৌঁছায় সঠিক Program পর্যন্ত। একটি Connection চেনা হয় তার 5-tuple দিয়ে।

পরিস্থিতি

Laptop192.168.1.10
Admin192.0.2.44
Internet Scanner192.0.2.66
Server198.51.100.20
nginxTCP :443
sshdTCP :22
PostgreSQL127.0.0.1:5432
:53000 → :443

Server-এ Connection (5-tuple)

ProtocolRemote IP:PortLocal IP:PortProgram
TCP192.168.1.10:53000198.51.100.20:443nginx
ধাপ 1 / 4
1

Tab 1 Website-এ Connect করে। অপারেটিং সিস্টেম একটি খালি Ephemeral Source Port বাছে, 53000। গন্তব্য: 198.51.100.20-এর Port 443, যেখানে nginx Listen করছে।

দুটি ব্যর্থতার বার্তা অনেক কিছু বলে: “Connection Refused” (দ্রুত একটি TCP RST) মানে মেশিনে পৌঁছানো যায় কিন্তু ওই Port-এ কেউ Listen করছে না; Timeout সাধারণত মানে Firewall Packet ফেলে দিয়েছে বা Host-এ পৌঁছানো যাচ্ছে না।

#DHCP: স্বয়ংক্রিয়ভাবে Address পাওয়া

Network ব্যবহারের আগে একটি ডিভাইসের চারটি জিনিস লাগে: একটি IP Address, একটি Subnet Mask, একটি Default Gateway আর DNS Server। প্রতিটি ফোনে হাতে করে এগুলো লেখা অসম্ভব, তাই DHCP (Dynamic Host Configuration Protocol) এগুলো স্বয়ংক্রিয়ভাবে দেয়। বাসার Network-এ Wi-Fi Router-ই DHCP Server।

DHCP: ডিভাইস কীভাবে Address পায়

একটি Laptop কোনো Address ছাড়াই Wi-Fi-তে যুক্ত হয়। DHCP UDP ব্যবহার করে: Client Port 68-এ, Server Port 67-এ।

পরিস্থিতি

Discover, Offer, Request, Acknowledge: চারটি বার্তা, আর ডিভাইস প্রস্তুত।

নতুন Laptop3c:22:fb:01:01:010.0.0.0
DHCP Serverবাসার Router 192.168.1.1
PrinterStatic 192.168.1.50
ভুয়া ডিভাইস192.168.1.66
IP নেই: 0.0.0.0
ধাপ 1 / 7
1

Laptop-এর MAC Address আছে, কিন্তু IP, Gateway বা DNS Server নেই। এখনো নির্দিষ্ট কাউকে পাঠাতে পারে না, তাই তাকে Broadcast করতে হবে।

চারটি বার্তার এই আদান-প্রদান মনে রাখা হয় DORA নামে:

  1. Discover (Client → Broadcast): “কোনো DHCP Server আছে?” Client-এর এখনো IP নেই, তাই 0.0.0.0 থেকে 255.255.255.255-এ পাঠায়, UDP Port 68 → 67।
  2. Offer (Server → Client): “তুমি 192.168.1.10 নিতে পারো, Mask /24, Gateway .1, DNS .1, ২৪ ঘণ্টার জন্য।”
  3. Request (Client → Broadcast): “আমি 192.168.1.1-এর অফার নিচ্ছি।” Broadcast, যাতে অন্য DHCP Server বোঝে তাদের বাছা হয়নি।
  4. Acknowledge (Server → Client): “নিশ্চিত।” Lease শুরু। ACK-এর সঙ্গে Mask, Default Gateway আর DNS Server-ও আসে।

বাস্তবে যা গুরুত্বপূর্ণ:

  • Lease-এর মেয়াদ শেষ হয়। Lease-এর ৫০ %-এ Client সরাসরি Server-এর কাছে নবায়ন করে; ৮৭.৫ %-এ যেকোনো Server-কে জিজ্ঞেস করে; ১০০ %-এ Address ব্যবহার বন্ধ করতে হয়।
  • Reservation থাকলে Server একই MAC Address-কে সবসময় একই IP দেয়: Printer ও বাসার Server-এর জন্য ভালো। Static Address অবশ্যই DHCP Pool-এর বাইরে রাখতে হবে, নইলে Conflict হবে।
  • Broadcast Router পার হয় না, তাই বড় Network-এ Router-এর একটি DHCP Relay Request-গুলো কেন্দ্রীয় DHCP Server-এ পাঠিয়ে দেয়।
  • কোনো Server উত্তর না দিলে Windows ও macOS নিজেই 169.254.x.x (APIPA) নেয়: ডিভাইস তখন শুধু একই Link-এর অন্য ডিভাইসে পৌঁছাতে পারে, Internet নেই। 169.254 দেখা মানে “DHCP ব্যর্থ”।
  • যে কেউ DHCP Server চালাতে পারে, তাই একটি ভুয়া (Rogue) DHCP Server নিজেকে Gateway হিসেবে দিয়ে দিতে পারে। Managed Switch DHCP Snooping দিয়ে এটা আটকায়।

#ARP: IP Address থেকে MAC Address

Host এখন জানে কোন IP-তে পাঠাতে হবে (গন্তব্য নিজে, বা Gateway)। কিন্তু Ethernet ও Wi-Fi Frame পৌঁছায় MAC দেখে। ARP (Address Resolution Protocol) Local Network-এ একটি IP Address-এর MAC Address খুঁজে বের করে।

ARP: একটি IP-এর MAC Address খোঁজা

Laptop A (192.168.1.10/24) একটি IP-তে পাঠাতে চায়। Ethernet-এর আগে একটি MAC Address দরকার।

পরিস্থিতি

Laptop A192.168.1.10
Server B192.168.1.20
Host C192.168.1.30
Router (Gateway)192.168.1.1
.20 Local · Cache: নেই
ধাপ 1 / 6
1

A 192.168.1.20-এ পৌঁছাতে চায়। তার /24 Mask বলে এটা একই Subnet-এ, তাই সরাসরি পৌঁছানো যাবে। কিন্তু তার ARP Cache-এ .20-এর কোনো MAC নেই।

যেভাবে কাজ করে:

  1. Host তার ARP Cache দেখে। IP সেখানে থাকলে কাজ শেষ।
  2. না থাকলে সে একটি ARP Request Broadcast করে (Destination MAC ff:ff:ff:ff:ff:ff, EtherType 0x0806): “192.168.1.20 কার? 192.168.1.10-কে জানাও।”
  3. Link-এর প্রতিটি Host এটা পায়; শুধু ওই IP-এর মালিক একটি Unicast ARP Reply পাঠায়: “192.168.1.20 আছে aa:bb:cc:00:00:20-এ।”
  4. Sender উত্তরটি কিছুক্ষণের জন্য Cache করে আর Frame পাঠায়।

মূল কথা:

  • ARP ব্যবহার হয় শুধু একই Subnet-এর প্রতিবেশীর জন্য। Subnet-এর বাইরের যেকোনো গন্তব্যের জন্য Host তার Default Gateway-এর জন্য ARP করে, কখনো দূরের Server-এর জন্য নয়। ARP Broadcast কখনো Router পার হয় না।
  • Gratuitous ARP এমন একটি ঘোষণা যা কেউ চায়নি (“192.168.1.100 আছে আমার MAC-এ”)। ডিভাইস চালু হওয়ার সময় এটা পাঠায়, আর High-availability জোড়া এক সেকেন্ডের মধ্যে Virtual IP অপেক্ষমাণ মেশিনে সরাতে এটা ব্যবহার করে।
  • IP Conflict: একই IP-এর দুটি ডিভাইস দুজনেই ARP-এর উত্তর দেয়, আর প্রতিবেশীদের Cache দুজনের মধ্যে লাফায়। অপারেটিং সিস্টেম একটি Address ব্যবহারের আগে ARP দিয়ে যাচাই করে আর “IP address conflict” সতর্কতা দেখায়।
  • ARP Spoofing: ARP-এ কোনো Authentication নেই, তাই একই LAN-এর একজন আক্রমণকারী Gateway-এর IP দাবি করে Man-in-the-middle হয়ে যেতে পারে। প্রতিরোধ হলো Switch-এ Dynamic ARP Inspection আর, সবার ওপরে, Encryption (TLS, SSH, VPN)।
  • IPv6-এ ARP-এর জায়গায় আছে NDP (Neighbor Discovery Protocol), যা Broadcast-এর বদলে Multicast ICMPv6 বার্তা ব্যবহার করে।

#সব একসঙ্গে

তোমার Laptop যখন একটি Wi-Fi Network-এ যুক্ত হয়ে একটি Website খোলে, Address-গুলো এই ক্রমে কাজে আসে:

  1. DHCP Laptop-কে দেয় IP (192.168.1.10/24), Gateway (192.168.1.1) আর DNS Server।
  2. Laptop DNS-কে জিজ্ঞেস করতে চায়। DNS Server Subnet-এর বাইরে (বা Router নিজেই), তাই সে Gateway-এর জন্য ARP করে আর Router-এর MAC Cache করে।
  3. DNS (Lesson 1.8) নামটিকে Server-এর IP 198.51.100.20-এ রূপান্তর করে।
  4. Laptop একটি Ephemeral Port (53000) থেকে Port 443-এ একটি TCP Connection খোলে, Router-এর MAC-এ Frame পাঠায়, ভেতরে Server-এর IP।
  5. Router NAT প্রয়োগ করে, আর Packet Hop by hop Internet পার হয়, প্রতিটি Link-এ নতুন MAC নিয়ে (Lesson 1.5)।

#System Design-এ Addressing

  • CIDR দিয়ে Cloud Network-এর পরিকল্পনা করো। একটি VPC হতে পারে 10.0.0.0/16, প্রতিটি Availability Zone-এর জন্য Public ও Private /24 Subnet-এ ভাগ করা। Range-গুলো তোমার অফিস, অন্য VPC ও Partner-দের সঙ্গে যেন না মেলে, কারণ মিলে যাওয়া Network কষ্টকর NAT ছাড়া Peering বা VPN দিয়ে জোড়া যায় না। বাড়ার জায়গা রাখো; AWS প্রতিটি Subnet-এ ৫টি Address নিজের জন্য রেখে দেয়।
  • Default-এ Private। Database, Cache ও Internal সেবা থাকে Public IP ছাড়া Private Subnet-এ; শুধু Load Balancer Internet-মুখী। Security Group ও Firewall লেখা হয় CIDR Block ও Port দিয়ে (“10.0.1.0/24 থেকে TCP 5432 খোলা”)।
  • IP Hard-code কোরো না। Instance, Container ও Pod Restart হলে নতুন Address পায়। DNS নাম ও Service Discovery ব্যবহার করো, দরকারে Floating/Virtual IP।
  • Port সীমিত সম্পদ। যে Proxy ও NAT Gateway এক গন্তব্যে অনেক Connection খোলে, তাদের Ephemeral Port ফুরিয়ে যেতে পারে। Connection Pooling ও Keep-alive এটা এড়ায়।
  • IPv4 দুর্লভ, আর এর দাম আছে। Cloud এখন Public IPv4 Address-এর জন্য টাকা নেয়, যা সেবাগুলোকে IPv6 ও শেয়ার করা Load Balancer-এর দিকে ঠেলে দিচ্ছে।
  • Debug করার সময় বিশেষ Range চিনে রাখো। 169.254.x.x মানে DHCP ব্যর্থ (Cloud Metadata Service-ও 169.254.169.254 ব্যবহার করে); Router-এর WAN-এ 100.64.x.x মানে CGNAT; 127.0.0.1-এ Bind মানে শুধু Local।

#নিজে চেষ্টা করো

# Your IP, mask, gateway, DNS, MAC and DHCP lease
ipconfig /all                 # Windows
ip addr; ip route             # Linux ("default via ..." is your gateway)
ifconfig; netstat -rn         # macOS

# Your ARP / neighbour cache
arp -a                        # Windows, macOS, Linux
ip neigh                      # Linux

# Release and renew the DHCP lease (watch DORA in Wireshark with filter "dhcp")
ipconfig /release && ipconfig /renew     # Windows
sudo dhclient -r && sudo dhclient        # Linux

# Which programs listen on which ports, and your open connections (5-tuples)
netstat -ano                  # Windows
ss -tlnp                      # Linux: listening TCP sockets
ss -tn                        # Linux: established connections

# Your public IP as the internet sees it (compare with ipconfig!)
curl -4 https://ifconfig.me
curl -6 https://ifconfig.me

ipconfig যদি 192.168.x.x দেখায় কিন্তু curl -4 ifconfig.me অন্য কিছু দেখায়, সেই পার্থক্যটাই NAT। তোমার Router-এর WAN Address যদি 100.64–100.127 দিয়ে শুরু হয়, তুমি CGNAT-এর পেছনে আছ।

#সারসংক্ষেপ

মূল বিষয়গুলো

  • প্রতিটি Packet বহন করে একটি MAC (L2, এক Hop, প্রতিটি Router-এ বদলায়), একটি IP (L3, NAT না থাকলে End to end) আর একটি Port (L4, কোন Program)।
  • IPv4 হলো চার Octet-এ ৩২ Bit। Subnet Mask / CIDR Prefix একে Network ও Host অংশে ভাগ করে; ব্যবহারযোগ্য Host = 2^(Host Bit) − 2 (একটি /24-এ ২৫৪)।
  • Host নিজের Subnet-এর গন্তব্যে সরাসরি (ARP-এর পর) পাঠায়, বাকি সবকিছু Default Gateway-তে।
  • Private Range 10/8, 172.16/12, 192.168/16 সবখানে বারবার ব্যবহৃত হয় আর NAT লাগে; আরও জেনে রাখো 127.0.0.1 Loopback, 169.254 (DHCP ব্যর্থ), 100.64/10 (CGNAT) আর Documentation Range।
  • IPv6 হলো Hex Group-এ ১২৮ Bit; শুরুর শূন্য বাদ দাও আর শূন্য Group-এর একটি ধারাকে :: দিয়ে বদলাও। Link-local fe80::, Loopback ::1, Broadcast নেই, /64 Subnet।
  • Port ০–৬৫৫৩৫: Well-known (22, 53, 80, 443…), Registered (3306, 5432, 6379), Ephemeral (49152–65535)। Socket হলো IP:Port; একটি Connection হলো একটি অনন্য 5-tuple।
  • DHCP (Discover, Offer, Request, Acknowledge) IP, Mask, Gateway ও DNS Lease দেয়। ARP Local Link-এ Broadcast Request ও Unicast Reply দিয়ে IP থেকে MAC বের করে, Cache-এ রাখে; Gratuitous ARP ঘোষণা করে, Spoofing এর অপব্যবহার করে।
  • যে ভুল ধারণাগুলো ছাড়তে হবে: MAC চিরস্থায়ী না (ফোন প্রতিটা Wi-Fi Network-এ Random MAC ব্যবহার করে); IPv6 নিজে থেকে IPsec চালু করে না (RFC 6434 একে ঐচ্ছিক করেছে); 255.255.255.0 আসলে অন্যভাবে লেখা /24, “Classful” না; ARP পাঠায় Host, Switch শুধু পৌঁছে দেয়।
  • Subnet করার দুই কারণ: ছোট Broadcast এলাকা, আর Subnet-এর মধ্যে Access Control।