Networking: IP, TCP, UDP, DNS, HTTP
Internet এর ভাষা
আগের অধ্যায়ে দেখেছি একটা request কোন পথে যায়। এবার দেখবো সেই পথের নিয়মগুলো: data আসলে কীভাবে এক computer থেকে আরেক computer এ যায়, IP address কী, TCP আর UDP কেন দুই রকম, DNS এ কী কী record থাকে, আর HTTP এর version গুলোর পার্থক্য কী। System design এ load balancer, CDN, WebSocket, video call সব কিছুর ভিত্তি এগুলো।
#স্তরে স্তরে network: চিঠির উদাহরণ
ধরো তুমি ঢাকা থেকে সিলেটে একটা চিঠি পাঠাবে। তুমি শুধু চিঠি লেখো। খামে ঠিকানা লেখে আরেকজন, ডাকঘর ঠিক করে কোন বাসে যাবে, বাস আসলে রাস্তা দিয়ে নিয়ে যায়। প্রত্যেকে শুধু নিজের কাজ করে, অন্যের কাজ নিয়ে মাথা ঘামায় না।
Network ও এভাবে স্তরে (layer) ভাগ করা। পড়াশোনায় ৭ স্তরের OSI model পড়ানো হয়, কিন্তু বাস্তবে ৪ স্তরের TCP/IP model দিয়ে চিন্তা করাই সহজ:
| স্তর | কাজ | ঠিকানা | তোমার সাথে সম্পর্ক |
|---|---|---|---|
| Application | কী বলা হচ্ছে | URL, domain | FastAPI, HTTP, JSON |
| Transport | কোন program এর কাছে, নির্ভরযোগ্যভাবে কিনা | Port (443, 5432) |
TCP/UDP বাছাই, connection |
| Internet | কোন computer এর কাছে | IP address | Server এর IP, firewall |
| Link | পাশের যন্ত্র পর্যন্ত | MAC address | সাধারণত মাথা ঘামাতে হয় না |
#IP address
Internet এ প্রতিটা যন্ত্রের একটা ঠিকানা থাকে, যাকে বলে IP address।
- IPv4:
203.0.113.10এর মতো, ৪টা সংখ্যা (প্রতিটা ০-২৫৫)। মোট প্রায় ৪৩০ কোটি ঠিকানা সম্ভব, যা পৃথিবীর যন্ত্রের জন্য অনেক আগেই কম পড়ে গেছে। - IPv6:
2001:db8::8a2e:370:7334এর মতো। এত ঠিকানা যে কখনো শেষ হবে না।
#Public আর private IP, আর NAT
তোমার বাসার WiFi তে phone, laptop, TV সবার IP সাধারণত 192.168.x.x ধরনের। এগুলো private IP, শুধু বাসার ভেতরে চলে। Internet এ পুরো বাসা একটা public IP দিয়ে দেখা যায়। Router মাঝখানে বসে হিসাব রাখে কোন উত্তর কোন যন্ত্রের, একে বলে NAT (Network Address Translation)।
এর system design প্রভাব:
- Rate limit শুধু IP দিয়ে করলে বিপদ। দেশের অনেক mobile operator আর ISP হাজার হাজার user কে অল্প কয়েকটা public IP দিয়ে বের করে (CGNAT)। শুধু IP দেখে "এক IP থেকে মিনিটে ১০০ request এর বেশি না" নিয়ম দিলে একই IP এর পেছনের নিরীহ user রাও আটকে যাবে। তাই user id বা token দিয়ে limit করা ভালো। (Rate Limiting)
- Server এর ভেতরের network: Cloud এ তোমার database এর শুধু private IP থাকা উচিত, যাতে internet থেকে কেউ সরাসরি ঢুকতে না পারে। শুধু app server ই database এর সাথে কথা বলবে।
#Port
একটা computer এ অনেক program চলে। IP বলে কোন computer, আর port বলে সেই computer এর কোন program। কিছু পরিচিত port:
| Port | কী চলে |
|---|---|
| 22 | SSH (server এ login) |
| 80 / 443 | HTTP / HTTPS |
| 5432 | PostgreSQL |
| 3306 | MySQL |
| 6379 | Redis |
| 8000 | FastAPI development (uvicorn এর default) |
#TCP বনাম UDP
Transport layer এ দুই রকম ব্যবস্থা আছে।
TCP হলো রেজিস্ট্রি করা চিঠির মতো: প্রাপ্তি স্বীকার করতে হয়, হারালে আবার পাঠানো হয়, ক্রম ঠিক থাকে। UDP হলো ভিড়ের মধ্যে চিৎকার করে বলার মতো: দ্রুত, কিন্তু কেউ শুনলো কিনা নিশ্চয়তা নেই।
| TCP | UDP | |
|---|---|---|
| সংযোগ | আগে handshake লাগে | সরাসরি পাঠানো শুরু |
| পৌঁছানোর নিশ্চয়তা | আছে (হারালে আবার পাঠায়) | নেই |
| ক্রম | ঠিক থাকে | এলোমেলো আসতে পারে |
| গতি | তুলনামূলক ধীর | দ্রুত, কম overhead |
| কোথায় | Web, API, database, email, file | Video call, online game, live stream, DNS |
Video call এ কেন UDP? WhatsApp বা Google Meet এ এক মুহূর্তের ছবি হারিয়ে গেলে সেটা ৩০০ ms পরে এসে কোনো লাভ নেই, ততক্ষণে কথা এগিয়ে গেছে। পুরনো frame এর জন্য অপেক্ষা করার চেয়ে বাদ দিয়ে এগিয়ে যাওয়া ভালো। কিন্তু bank transfer এর একটা byte ও হারানো চলবে না, তাই সেখানে TCP।
#DNS আরও গভীরে
আগের অধ্যায়ে দেখেছি DNS নাম থেকে IP দেয়। DNS এ আসলে কয়েক রকম record থাকে:
| Record | কাজ | উদাহরণ |
|---|---|---|
A |
নাম → IPv4 | api.example.com → 203.0.113.10 |
AAAA |
নাম → IPv6 | api.example.com → 2001:db8::1 |
CNAME |
নাম → আরেকটা নাম | www.example.com → example.pages.dev |
MX |
Email কোন server এ যাবে | example.com → mail.google.com |
TXT |
যেকোনো লেখা, সাধারণত যাচাইয়ের জন্য | Domain এর মালিকানা প্রমাণ, SPF |
NS |
এই domain এর DNS কোন server দেখে | ns1.cloudflare.com |
তুমি যখন Cloudflare Pages এ site deploy করে নিজের domain লাগাও, তখন আসলে একটা CNAME record বানাও যেটা yoursite.pages.dev এর দিকে নির্দেশ করে।
#DNS দিয়ে traffic নিয়ন্ত্রণ
- Round-robin DNS: একই নামের জন্য কয়েকটা IP দেওয়া, যাতে user রা ভাগ হয়ে বিভিন্ন server এ যায়। সহজ, কিন্তু কোনো server নষ্ট হলে DNS সেটা জানে না, user রা তখনও নষ্ট server এ যেতে থাকবে।
- GeoDNS: User কোন দেশ থেকে আসছে দেখে কাছের server এর IP দেওয়া। বাংলাদেশের user কে Singapore, ইউরোপের user কে Frankfurt।
- Failover: মূল server এর health check fail করলে DNS backup server এর IP দিতে শুরু করে। কিন্তু TTL এর কারণে বদল সঙ্গে সঙ্গে সবার কাছে পৌঁছায় না।
#HTTP এর version
| Version | মূল বৈশিষ্ট্য | সমস্যা যেটা সমাধান করলো |
|---|---|---|
| HTTP/1.1 | একটা connection এ একবারে একটা request | HTTP/1.0 এ প্রতিটা request এ নতুন connection লাগতো |
| HTTP/2 | একটা connection এ একসাথে অনেক request (multiplexing), header compression | পেজের ১০০টা file এর জন্য অপেক্ষার লাইন |
| HTTP/3 | QUIC (UDP) এর উপর | TCP তে একটা packet হারালে সব request আটকে থাকা, mobile network বদলালে connection ভাঙা |
ভালো খবর: তোমাকে নিজে এগুলো implement করতে হবে না। Cloudflare, Nginx বা load balancer সাধারণত HTTP/2 আর HTTP/3 নিজেই সামলায়, আর পেছনে তোমার FastAPI সাধারণ HTTP/1.1 এ কথা বলে।
#HTTPS আর certificate
HTTPS মানে HTTP + TLS encryption। এটা তিনটা জিনিস নিশ্চিত করে:
- গোপনীয়তা: মাঝপথে কেউ পড়তে পারবে না (password, card নম্বর)
- অখণ্ডতা: মাঝপথে কেউ বদলাতে পারবে না (যেমন ISP বিজ্ঞাপন ঢুকিয়ে দেওয়া)
- পরিচয়: তুমি আসল server এর সাথেই কথা বলছো, নকলের সাথে না
Certificate এখন বিনামূল্যে পাওয়া যায় (Let's Encrypt), আর Cloudflare, Railway, Render এর মতো platform নিজেই HTTPS দিয়ে দেয়। তাই production এ HTTP (S ছাড়া) ব্যবহারের কোনো কারণ নেই। Android ও iOS এখন default ভাবে S ছাড়া HTTP request আটকে দেয়।
#অনুশীলন
#নিজেকে যাচাই করো
IP address আর port এর পার্থক্য কী? একটা উপমা দাও।
IP address হলো একটা বিল্ডিং এর ঠিকানা (কোন computer)। Port হলো সেই বিল্ডিং এর ফ্ল্যাট নম্বর (computer এর কোন program)। 203.0.113.10:5432 মানে ওই computer এর PostgreSQL।
Video call এ TCP এর বদলে UDP কেন ভালো?
Video call এ পুরনো frame দেরিতে আসলে কোনো লাভ নেই। TCP হারানো packet আবার পাঠানোর জন্য অপেক্ষা করে, ফলে পুরো stream আটকে যায়। UDP তে হারানো frame বাদ দিয়ে এগিয়ে যাওয়া যায়, তাই কথা মসৃণ থাকে।
শুধু IP address দেখে rate limit করলে বাংলাদেশে কী সমস্যা হতে পারে?
অনেক ISP আর mobile operator CGNAT ব্যবহার করে, মানে হাজারো user একই public IP শেয়ার করে। তখন একজনের বেশি request এর কারণে একই IP এর সবাই আটকে যেতে পারে। User id বা API key দিয়ে limit করা ভালো, IP কে শুধু বাড়তি সুরক্ষা হিসেবে ব্যবহার করা যায়।
CNAME আর A record এর পার্থক্য কী?
A record একটা নামকে সরাসরি IPv4 address এর সাথে যুক্ত করে। CNAME একটা নামকে আরেকটা নামের সাথে যুক্ত করে, তারপর সেই নামের IP খোঁজা হয়। Platform এর IP বদলালেও CNAME ঠিক থাকে, তাই hosting platform গুলো সাধারণত CNAME দিতে বলে।
Database server এর public IP থাকা কেন বিপজ্জনক?
তাহলে internet এর যে কেউ database এর port এ সরাসরি চেষ্টা করতে পারে: password আন্দাজ করা, পুরনো version এর দুর্বলতা কাজে লাগানো। Database শুধু private network এ রাখলে কেবল app server ই এর সাথে কথা বলতে পারে।
চিহ্ন দিলে sidebar আর রোডম্যাপে এই অধ্যায়ের station ভরে যাবে।