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 HTTP, DNS, WebSocket Transport TCP, UDP (port নম্বর) Internet IP (IP address) Link WiFi, Ethernet, 4G (MAC) HTTP data TCP HTTP data IP TCP HTTP data MAC IP TCP HTTP data .. পাঠানোর সময়
পাঠানোর সময় প্রতিটা স্তর নিজের header (খাম) যোগ করে। গ্রহণকারী উল্টো ক্রমে খাম খোলে। তুমি backend developer হিসেবে মূলত উপরের দুই স্তরে কাজ করবে।
স্তর কাজ ঠিকানা তোমার সাথে সম্পর্ক
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)।

বাসার ভেতর (private) Phone 192.168.0.5 Laptop 192.168.0.7 TV 192.168.0.9 Router NAT 103.x.x.x Internet একটাই public IP দেখে Server
বাসার সব যন্ত্র একটা public IP শেয়ার করে। অনেক ISP আবার বহু বাসাকে একটা public IP তে রাখে (CGNAT)।

এর 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। এটা তিনটা জিনিস নিশ্চিত করে:

  1. গোপনীয়তা: মাঝপথে কেউ পড়তে পারবে না (password, card নম্বর)
  2. অখণ্ডতা: মাঝপথে কেউ বদলাতে পারবে না (যেমন ISP বিজ্ঞাপন ঢুকিয়ে দেওয়া)
  3. পরিচয়: তুমি আসল 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 ভরে যাবে।