সরাসরি পর্বে যান
পর্ব ৬২ · ৬২-এর মধ্যে · মডিউল ১০

পরিস্থিতিভিত্তিক ইন্টারভিউ — “google.com লিখে Enter চাপলে” আর সমস্যা খোঁজা

Scenario-Based Networking Interviews — “What happens when you press Enter”, 11 troubleshooting cases, design questions and a mock interview

Taught in Bangla, this page covers scenario-based networking interviews: how to handle open scenarios, the classic question of what happens when you type an address and press Enter answered at three lengths with latency estimates and follow-ups, eleven troubleshooting cases covering DNS, paths, MTU, proxies, firewalls, certificates, containers, voice, VLANs and ports, design scenarios for a branch office and a highly available web service, and a mock interview.

এই পর্বে যা শিখবেন

  • পরিস্থিতিভিত্তিক প্রশ্নে প্রশ্ন করা, অনুমান বলা আর স্তর ধরে জোরে ভাবার একটি নির্ভরযোগ্য কাঠামো
  • Enter চাপা থেকে পাতা পর্দায় আসা পর্যন্ত DNS, ARP, NAT, BGP, TCP বা QUIC, TLS 1.3, HTTP/2-3, CDN আর load balancer-এর ধারাবাহিক ব্যাখ্যা — সময়ের হিসাবসহ
  • DNS, IPv6, MTU, keep-alive, firewall, routing, certificate, Kubernetes, bufferbloat, DHCP relay আর TIME-WAIT-এর ১১টি বাস্তব সমস্যা পদ্ধতি মেনে খোঁজা
  • শাখা অফিস আর উচ্চ-প্রাপ্যতার (highly available) ওয়েব সার্ভিসের নেটওয়ার্ক ডিজাইনের প্রশ্নে কাঠামো মেনে উত্তর দেওয়া
  • পুরো কোর্সের ১০টি মডিউল এক নজরে মিলিয়ে নিজের দুর্বল জায়গা চেনা আর পরের পদক্ষেপ ঠিক করা

১ · পরিস্থিতিভিত্তিক প্রশ্ন কীভাবে সামলাবেন

“TCP আর UDP-র পার্থক্য কী?” — এমন প্রশ্নের উত্তর একটি সংজ্ঞা। কিন্তু “একটি ওয়েবসাইট কিছু ব্যবহারকারীর জন্য ধীর, আপনি কী করবেন?” — এর কোনো একক সঠিক বাক্য নেই। এখানে ইন্টারভিউয়ার দেখতে চান আপনি কীভাবে ভাবেন: অস্পষ্ট অভিযোগকে নির্দিষ্ট করতে পারেন কি না, স্তর ধরে সম্ভাবনা কমাতে পারেন কি না, অনুমানকে প্রমাণ দিয়ে যাচাই করেন কি না, আর জানেন কি না কোথায় থামতে হয়। Network engineer, system বা cloud administrator, SRE, DevOps আর backend পদের ইন্টারভিউতে এ ধরনের প্রশ্ন প্রায়ই আসে; ধরন প্রতিষ্ঠান আর পদভেদে আলাদা।

ভালো ডাক্তারের মতো ভাবুন। রোগী বললেন “মাথা ঘোরে”। ভালো ডাক্তার সঙ্গে সঙ্গে ওষুধ লেখেন না; আগে জিজ্ঞেস করেন — কবে থেকে, কখন বেশি, আর কী খেয়েছেন, আগে হয়েছে কি না। তারপর কয়েকটি সম্ভাব্য কারণ মাথায় রেখে সবচেয়ে সস্তা ও দ্রুত পরীক্ষাটি আগে করান — রক্তচাপ মাপা — তারপর দরকার হলে বড় পরীক্ষা। নেটওয়ার্কের সমস্যাতেও একই নিয়ম: প্রশ্ন → অনুমানের তালিকা → সস্তা পরীক্ষা আগে → প্রমাণ → চিকিৎসা → আবার যেন না হয় তার ব্যবস্থা।

সাত ধাপের কাঠামো

  1. প্রশ্ন করে পরিধি ঠিক করুন (clarifying question): কারা আক্রান্ত — সবাই, এক অফিস, এক শহর, এক ধরনের যন্ত্র? কবে থেকে? সবসময় নাকি মাঝে মাঝে? কী বদলেছে — deploy, firewall-এর নিয়ম, ISP, certificate? লক্ষণ ঠিক কী — error বার্তা, timeout, নাকি ধীর?
  2. অনুমান জোরে বলুন: “ধরে নিচ্ছি ব্যবহারকারী Linux ল্যাপটপে, বাসার Wi-Fi-তে, IPv4 আর NAT-এর পেছনে; DNS cache খালি।” ভুল অনুমান হলে ইন্টারভিউয়ার শুধরে দেবেন — সেটিই ভালো।
  3. স্তর ধরে এগোন: নিচ থেকে ওপরে (link → IP → gateway → routing → DNS → TCP → TLS → HTTP), বা মাঝখান থেকে ভাগ করে (half-split) — পর্ব ৫৫-এর পদ্ধতি। কোন পথ বাছলেন আর কেন, তা-ও বলুন।
  4. জোরে ভাবুন: চুপ করে দুই মিনিট ভেবে একটি উত্তর বলার চেয়ে “আমার প্রথম সন্দেহ DNS, কারণ IP দিয়ে চলছে; এটা যাচাই করতে…” — এভাবে ভাবনার পথ দেখানো অনেক বেশি মূল্যবান।
  5. সংখ্যা দিয়ে মাপুন: “ধীর” নয় — “RTT স্বাভাবিকে ৩০ ms, এখন ২৫০ ms”; “অনেক” নয় — “প্রতি সেকেন্ডে ২ হাজার নতুন সংযোগ, port আছে প্রায় ২৮ হাজার”। হিসাব জানা প্রার্থীকে আলাদা করে চেনা যায়।
  6. যাচাইয়ের কমান্ড বলুন: dig, curl -v, ss -ti, mtr, tcpdump, openssl s_client — আর প্রতিটির কোন আউটপুট কোন অনুমানকে বাদ দেয়। নিজের নয় এমন নেটওয়ার্কে capture বা scan নয় — অনুমতি থাকলেই কেবল।
  7. থামতে জানুন: মূল কারণ, সমাধান আর প্রতিরোধ বলে থামুন, তারপর জিজ্ঞেস করুন “কোনো অংশে আরও গভীরে যাব?” সময় শেষ হওয়ার আগেই একটি পূর্ণ উত্তর দেওয়া জরুরি; গভীরতা পরে।
প্রশ্ন → অনুমান → স্তর ধরে খোঁজা → সংখ্যা ও প্রমাণ → মূল কারণ → সমাধান → প্রতিরোধ
ইন্টারভিউর কৌশল
  • লক্ষণ দুই ভাগে লিখুন: কী কাজ করছে আর কী করছে না। “IP দিয়ে চলে, নাম দিয়ে চলে না” — এই এক জোড়াই অর্ধেক উত্তর।
  • Timeout আর refused আলাদা: refused মানে কেউ RST পাঠিয়েছে — port বন্ধ; timeout মানে পথে কেউ নিঃশব্দে ফেলে দিয়েছে — সাধারণত firewall (পর্ব ২৯, পর্ব ৪৯)।
  • “কী বদলেছে?” — বাস্তবে বেশিরভাগ ঘটনার পেছনে কোনো পরিবর্তন থাকে। প্রশ্নটি আগেভাগে করলে আপনাকে অভিজ্ঞ মনে হবে।
  • OS-এর পার্থক্য বলুন: Linux-এ ip, ss, dig; Windows-এ ipconfig, Test-NetConnection, Resolve-DnsName; macOS-এ কিছু কমান্ডের option আলাদা।
  • সমাধানের পরে প্রতিরোধ: monitoring, alert, পরিবর্তনের আগে পরীক্ষা, runbook — এটুকু যোগ করলেই উত্তরটি “জুনিয়র” থেকে “সিনিয়র” শোনায়।

নিচের টেবিলে এই পাতার পরিস্থিতিগুলোর মানচিত্র — কোনটি কোন পর্বের জ্ঞান চায়।

#পরিস্থিতিমূল ধারণারিভিশন
—Enter চাপলে কী হয়পুরো স্তর-ক্রম৩৫, ১৮, ১৯, ২৫, ২৯, ৪৮, ৩৭, ৩৮, ৫২
১IP দিয়ে খোলে, নাম দিয়ে নয়DNS resolver৩৫
২Wi-Fi-তে চলে, মোবাইল ডেটায় নয়IPv6, NAT64, CGNAT২১, ১৯
৩বড় upload আটকে যায়PMTUD black hole, MSS২০, ৫৫
৪মাঝে মাঝে 502keep-alive timeout, health check৫২, ৩৬
৫SSH চলে, HTTPS timeoutsecurity group, firewall৪৯, ৫৪
৬শুধু এক শহরে ধীরrouting, peering, CDN mapping২৫, ৩৮
৭কিছু যন্ত্রে certificate errorintermediate, trust store, ঘড়ি৪৮
৮Kubernetes service-এ পৌঁছানো যায় নাNetworkPolicy, DNS, endpoints৫৪
৯ব্যস্ত সময়ে VoIP ভাঙাbufferbloat, QoS৫৬, ২৬
১০নতুন VLAN-এ DHCP নেইDHCP relay১৮, ১৩
১১TIME-WAIT-এ port শেষephemeral port, connection reuse২৯, ৪৩
—শাখা অফিস আর HA ওয়েব সার্ভিস ডিজাইননকশার কাঠামো৫৭, ৫২, ৫৪

২ · ক্লাসিক প্রশ্ন — ঠিকানা লিখে Enter চাপলে কী হয়

রিভিশন: পর্ব ৩৫ · DNS, ১৮ · ARP, ১৯ · NAT, ২৫ · BGP, ২৯ · TCP handshake, ৩৩ · QUIC, ৪৮ · TLS, ৩৭ · HTTP/2-3, ৩৮ · CDN, ৫২ · load balancer

প্রশ্নটি সাধারণত এভাবে আসে: “ব্রাউজারে google.com লিখে Enter চাপলে কী কী ঘটে?” এটি ইন্টারভিউর সবচেয়ে পরিচিত প্রশ্নগুলোর একটি, কারণ এর কোনো শেষ নেই — প্রার্থী যত গভীরে যেতে পারেন, ততই যান। প্রকৃত কোনো প্রতিষ্ঠানের ভেতরের ঠিকানা আমরা জানি না, আর জানার দরকারও নেই; তাই নিচের প্রযুক্তিগত বিবরণে নাম www.example.com আর ঠিকানাগুলো documentation-এর জন্য সংরক্ষিত পরিসর থেকে নেওয়া। একই প্রশ্নের OS-এর দিক (interrupt, syscall, socket buffer) দেখতে পারেন OS কোর্সের ইন্টারভিউ পর্বে; এখানে নেটওয়ার্কের দিক।

শুরুতে অনুমানগুলো বলে নিন: একটি Linux ল্যাপটপ (192.168.0.105), বাসার Wi-Fi, router-এর LAN ঠিকানা 192.168.0.1 আর public ঠিকানা 203.0.113.7; ISP-র recursive resolver 198.51.100.53; সাইটটি একটি CDN-এর পেছনে, যার কাছের edge-এর ঠিকানা 192.0.2.80; প্রথম ভিজিট — কোনো cache নেই; IPv4 দিয়ে ব্যাখ্যা, IPv6-এর পার্থক্য আলাদা করে বলা হবে।

  1. ১ · URLparse, HSTS
  2. ২ · cachebrowser, OS
  3. ৩ · ARPgateway MAC
  4. ৪ · NATবাসার router
  5. ৫ · DNSroot, TLD, auth
  6. ৬ · routingISP, BGP
  7. ৭ · TCPSYN, SYN-ACK
  8. ৮ · TLS 1.3certificate
  9. ৯ · HTTP/2CDN, LB
  10. ১০ · পর্দায়render
এই ধাপে
কোথায়
মূল বার্তা
অনুমিত সময়
পর্ব
  1. URL বোঝা আর HSTS. ঠিকানা-বার আগে ঠিক করে লেখাটি একটি host name নাকি খোঁজার শব্দ; নাম হলে সামনে scheme বসায়। তারপর HSTS-এর তালিকা দেখে: ব্রাউজারের ভেতরে থাকা HSTS preload list-এ ডোমেইন থাকলে, বা আগের ভিজিটে Strict-Transport-Security header পেয়ে থাকলে, সরাসরি https:// — কোনো সাধারণ HTTP অনুরোধ যায় না, তাই ssl stripping-এর সুযোগ থাকে না (পর্ব ৪৮)। এখানে আমরা ধরে নিয়েছি ডোমেইনটি তালিকায় আছে।
  2. Cache খোঁজা. আগে ব্রাউজারের নিজের host cache, তারপর OS: Linux-এ glibc-র getaddrinfo /etc/nsswitch.conf মেনে hosts ফাইল, তারপর stub resolver — অনেক distro-তে systemd-resolved (127.0.0.53), যার নিজের cache আছে। সব miss হলে প্রশ্ন যায় DHCP-তে পাওয়া recursive resolver-এর কাছে, UDP port 53-এ। আধুনিক ব্রাউজার A আর AAAA দুটোই চায়, আর অনেক সময় HTTPS record-ও — যাতে HTTP/3 সমর্থনের খবর আগেই মেলে। কিছু ব্রাউজার DNS-over-HTTPS ব্যবহার করলে পথ আলাদা হয়।
  3. Gateway-র MAC — ARP. DNS-এর প্রশ্নটিও তো একটি packet; সেটি পাঠাতেই ল্যাপটপকে জানতে হবে gateway-র MAC ঠিকানা। গন্তব্য 198.51.100.53 নিজের subnet-এ নেই, তাই frame যাবে gateway-এর কাছে; ARP cache-এ না থাকলে broadcast-এ “192.168.0.1 কার?” প্রশ্ন, উত্তর আসে unicast-এ। গুরুত্বপূর্ণ সূক্ষ্মতা: ARP কখনো দূরের সার্ভারের MAC খোঁজে না — শুধু পরের hop-এর। IPv6-এ একই কাজ করে NDP.
  4. বাসার router-এ NAT. Private ঠিকানা ইন্টারনেটে চলে না। Router উৎস 192.168.0.105:51514 বদলে নিজের public ঠিকানা আর একটি নতুন port বসায় — 203.0.113.7:40001 — আর translation table-এ জোড়াটি মনে রাখে, যাতে উত্তর ফিরলে উল্টো বদল করা যায় (পর্ব ১৯)। ISP CGNAT ব্যবহার করলে এই বদল আরেকবার ঘটে ISP-র ভেতরে।
  5. DNS-এর পুনরাবৃত্ত খোঁজ. Resolver-এর cache-ও খালি হলে সে root server-কে জিজ্ঞেস করে; root উত্তর জানে না, কিন্তু .com-এর server-গুলোর ঠিকানা দেয় (referral). TLD server দেয় example.com-এর authoritative server-এর ঠিকানা; সেখান থেকে আসে আসল উত্তর — A 192.0.2.80, TTL ৩০০ সেকেন্ড। বাস্তবে resolver-এর কাছে root আর .com-এর তথ্য প্রায় সবসময় cache-এ থাকে, তাই সাধারণত এক ধাপেই হয়। CDN-এর ক্ষেত্রে প্রায়ই মাঝে একটি CNAME থাকে, আর উত্তর resolver-এর অবস্থান দেখে কাছের edge-এর ঠিকানা দেয়।
  6. Routing — ISP থেকে CDN. প্রতিটি router longest prefix match দিয়ে পরের hop ঠিক করে (পর্ব ২২)। ISP-র সীমানায় কোন পথে যাবে, তা ঠিক করে BGP — নিজের নীতি, peering আর AS-path দেখে (পর্ব ২৫)। CDN প্রায়ই anycast ব্যবহার করে: একই ঠিকানা অনেক শহর থেকে ঘোষণা করা হয়, আর BGP প্যাকেটকে “কাছের” সাইটে নিয়ে যায়। দেশের ভেতরের traffic দেশে রাখতে IXP-এর ভূমিকা বড়।
  7. TCP handshake. SYN, SYN-ACK, ACK — এক RTT (পর্ব ২৯)। দুই পক্ষ এখানেই MSS, window scale আর SACK-এর সমর্থন জানায়। Kernel একটি ephemeral port বেছে নেয়। ব্রাউজার আগে থেকে HTTP/3 সমর্থনের খবর পেলে এই ধাপের বদলে QUIC-এর handshake হয় — transport আর TLS একসাথে, মোট এক RTT (পর্ব ৩৩)।
  8. TLS 1.3 handshake. ClientHello-তে থাকে SNI (কোন সাইট চাই), ALPN (h2 চাই কি না) আর key share. সার্ভার এক উত্তরেই ServerHello, certificate, স্বাক্ষর আর Finished পাঠায় — তাই TLS 1.3-এ পূর্ণ handshake এক RTT. ব্রাউজার certificate chain যাচাই করে: trust store-এর একটি root পর্যন্ত স্বাক্ষর মেলে কি না, নাম SAN-এ আছে কি না, মেয়াদ ঠিক কি না, আর revocation বা CT-র নীতি (ব্রাউজারভেদে আলাদা)। তারপর Finished-এর সাথেই প্রথম HTTP অনুরোধ।
  9. HTTP/2 অনুরোধ, CDN আর load balancer. অনুরোধ যায় একটি HEADERS frame-এ (পর্ব ৩৭)। CDN edge cache-এ পেলে (HIT) সঙ্গে সঙ্গে উত্তর; না পেলে (MISS) edge origin-এর কাছে যায়, সেখানে load balancer health check-এ সুস্থ একটি সার্ভার বাছে (পর্ব ৫২)। উত্তরে cache-control ঠিক করে edge আর ব্রাউজার কতক্ষণ রাখবে (পর্ব ৩৮), আর Alt-Svc header জানাতে পারে যে পরের বার HTTP/3 চলবে।
  10. Render আর পরের অনুরোধ. HTML প্রথম কয়েকটি flight-এ আসে — slow start-এর কারণে প্রথম flight-এ মাত্র ১০টি segment (প্রায় ১৪ KB). ব্রাউজার HTML পড়তে পড়তে CSS, font, JS আর ছবির অনুরোধ পাঠায় — HTTP/2-এ একই সংযোগে, একসাথে অনেকগুলো stream. এরপর layout আর paint. সংযোগ কিছুক্ষণ খোলা থাকে পরের অনুরোধের জন্য; পরের ভিজিটে DNS cache, HTTP cache আর session resumption বা 0-RTT মিলে সময় অনেক কমে।

সময়রেখা আর latency budget

“কত সময় লাগে?” — এই ফলো-আপ প্রায় নিশ্চিত। নিচের টেবিলে একটি latency budget, অর্থাৎ মোট সময়কে ধাপে ভাগ করা হিসাব। সব সংখ্যা অনুমান, বাস্তব মাপ নয়: ল্যাপটপ থেকে CDN edge পর্যন্ত RTT ৩০ ms, resolver পর্যন্ত ১০ ms, resolver থেকে root, TLD আর authoritative পর্যন্ত যথাক্রমে ২০, ৩০ আর ৪০ ms, edge থেকে origin ৮০ ms, origin-এর প্রক্রিয়াকরণ ৬০ ms, HTML ৫০ KB, প্রাথমিক congestion window ১০ segment (RFC 6928), কোনো loss নেই।

ধাপকী ঘটেRound tripসময় (ms, অনুমান)মোট (ms)পর্ব
১–২URL, HSTS, cache খোঁজা০≈ ০০৩৫, ৪৮
৩–৪ARP (প্রায়ই cache-এ), NATLAN-এ≈ ১, হিসাবে ধরা হয়নি০১৮, ১৯
৫DNS — resolver, root, TLD, authoritative (cold)৪টি ছোট RTT১০ + ২০ + ৩০ + ৪০ = ১০০১০০৩৫
৭TCP handshake১৩০১৩০২৯
৮TLS 1.3 handshake১৩০১৬০৪৮
৯অনুরোধ → প্রথম বাইট (CDN miss: edge → origin)১ + origin-এর ১৩০ + ৮০ + ৬০ = ১৭০৩৩০৩৭, ৩৮, ৫২
১০কHTML-এর বাকি অংশ (slow start-এ আরও ২ flight)২৬০৩৯০৩২
১০খCSS, JS, ছবি, renderবহুকয়েকশো, পাতাভেদে—৩৬, ৩৭

লক্ষ করুন, প্রথম ভিজিটে বড় খরচ দুটি: cold DNS আর CDN miss. আর handshake-গুলো “RTT গুনে” খরচ করে — তাই দূরত্ব (RTT) কমানো, অর্থাৎ CDN-এর edge কাছে আনা, প্রায় সব ধাপকে একসাথে দ্রুত করে। এই কারণেই পর্ব ৫ আর ৫৬-এ বলা হয়েছিল, ছোট ওয়েব-অনুরোধে bandwidth নয়, latency-ই রাজা।

৩ · তিন দৈর্ঘ্যের উত্তর, latency-র হিসাব আর ফলো-আপ

একই প্রশ্নে ইন্টারভিউয়ার কখনো চান এক মিনিটের সারাংশ, কখনো পনেরো মিনিটের গভীর আলোচনা। তাই উত্তরটি তিন দৈর্ঘ্যে তৈরি রাখুন, আর শুরুতেই জিজ্ঞেস করুন: “সংক্ষেপে বলব, নাকি কোনো স্তরে গভীরে যাব?” আগে হিসাবটি নিজে চালিয়ে দেখুন — ওপরের টেবিলের অনুমান দিয়ে পাঁচটি অবস্থার মোট সময়। “চালান” চাপুন, তারপর A-র সংখ্যা বদলে দেখুন কোন ধাপ সবচেয়ে বেশি প্রভাব ফেলে:

// Latency budget for "type www.example.com and press Enter" (all numbers are ASSUMPTIONS, in ms).
const A = {
  rttResolver: 10, rttRoot: 20, rttTld: 30, rttAuth: 40,  // laptop->ISP resolver; resolver->root/.com/authoritative
  rttEdge: 30, rttOrigin: 80,      // laptop->nearest CDN edge; edge->origin data center
  edgeMs: 2, originMs: 60,         // processing time at the edge / at the origin
  htmlBytes: 50000, mss: 1460, initcwnd: 10,
};
function extraFlights(bytes) {     // extra round trips after the first flight (slow start, no loss)
  let sent = 0, cwnd = A.initcwnd, flights = 0;
  while (sent < bytes) { sent += cwnd * A.mss; cwnd *= 2; flights++; }
  return flights - 1;
}
function plan(name, o) {
  const dns = o.dns === "cold" ? A.rttResolver + A.rttRoot + A.rttTld + A.rttAuth
            : o.dns === "tld-cached" ? A.rttResolver + A.rttAuth : o.dns === "resolver-hit" ? A.rttResolver : 0;
  const hs = o.proto === "tcp+tls13" ? 2 * A.rttEdge : o.proto === "quic" ? A.rttEdge : 0;
  const req = A.rttEdge + (o.cdnHit ? A.edgeMs : A.rttOrigin + A.originMs);
  const body = extraFlights(A.htmlBytes) * A.rttEdge;
  const f = (v) => String(v).padStart(5);
  console.log(name.padEnd(30) + f(dns) + f(hs) + f(req) + f(body) + f(dns + hs + req + body) + " ms");
}
console.log("scenario".padEnd(30) + "  dns   hs  req body total");
plan("1 cold DNS, TCP+TLS, CDN miss", { dns: "cold", proto: "tcp+tls13", cdnHit: false });
plan("2 TLD cached, TCP+TLS, miss",   { dns: "tld-cached", proto: "tcp+tls13", cdnHit: false });
plan("3 resolver hit, TCP+TLS, hit",  { dns: "resolver-hit", proto: "tcp+tls13", cdnHit: true });
plan("4 resolver hit, QUIC, hit",     { dns: "resolver-hit", proto: "quic", cdnHit: true });
plan("5 OS cache, QUIC 0-RTT, hit",   { dns: "local", proto: "0rtt", cdnHit: true });
console.log("HTML " + A.htmlBytes + " B, initcwnd " + A.initcwnd + " x " + A.mss + " B -> " + extraFlights(A.htmlBytes) + " extra RTTs after the first flight");

আসল রানের আউটপুট:

scenario                        dns   hs  req body total
1 cold DNS, TCP+TLS, CDN miss   100   60  170   60  390 ms
2 TLD cached, TCP+TLS, miss      50   60  170   60  340 ms
3 resolver hit, TCP+TLS, hit     10   60   32   60  162 ms
4 resolver hit, QUIC, hit        10   30   32   60  132 ms
5 OS cache, QUIC 0-RTT, hit       0    0   32   60   92 ms
HTML 50000 B, initcwnd 10 x 1460 B -> 2 extra RTTs after the first flight

প্রথম লাইন ওপরের টেবিলের সাথে হুবহু মেলে: DNS ১০০, দুই handshake ৬০, প্রথম বাইট পর্যন্ত ১৭০, বাকি HTML ৬০ — মোট 390 ms. লাইন ২-এ resolver-এর cache-এ .com-এর তথ্য আছে, তাই DNS অর্ধেক — বাস্তবে এটিই সাধারণ অবস্থা।

লাইন ৩-এ সবচেয়ে বড় লাফ: CDN hit হওয়ায় req ১৭০ থেকে ৩২-এ নামল — origin-এর ৮০ ms-এর RTT আর ৬০ ms-এর প্রক্রিয়াকরণ বাদ। লাইন ৪-এ QUIC transport আর TLS একসাথে করে এক RTT বাঁচায় (hs ৬০ → ৩০), আর লাইন ৫-এ আগের ভিজিটের key দিয়ে 0-RTT-তে অনুরোধ প্রথম flight-এই চলে যায় — handshake-এর খরচ শূন্য।

শেষ লাইন: ৫০ KB HTML প্রথম flight-এ (১০ × ১৪৬০ = ১৪,৬০০ বাইট) পুরো আসে না; slow start-এ window দ্বিগুণ হয় — ২৯,২০০ আর তারপর ৫৮,৪০০ বাইট — তাই আরও ২টি RTT. প্রতিটি অবস্থায় body তাই ৬০ ms. ইন্টারভিউতে এটি বললে বোঝা যায় আপনি slow start-কে শুধু মুখস্থ নয়, ব্যবহার করতে জানেন (পর্ব ৩২)।

সংক্ষিপ্ত উত্তর — ১ মিনিট

“ব্রাউজার লেখাটিকে URL হিসেবে বোঝে, HSTS থাকলে সরাসরি HTTPS নেয়। নামের IP খোঁজে — ব্রাউজার আর OS-এর cache, না পেলে recursive resolver, যে দরকার হলে root, TLD আর authoritative server ঘুরে উত্তর আনে। প্যাকেট পাঠাতে ল্যাপটপ ARP দিয়ে gateway-র MAC জানে, বাসার router NAT করে, তারপর ISP আর BGP-র পথে প্যাকেট পৌঁছায় সাধারণত কাছের CDN edge-এ। সেখানে TCP handshake আর TLS 1.3 handshake — certificate যাচাইসহ — অথবা QUIC-এ দুটো একসাথে। তারপর HTTP/2 বা HTTP/3-এ GET; edge-এর cache-এ থাকলে সেখান থেকে, না থাকলে origin-এর load balancer হয়ে সার্ভার থেকে উত্তর। ব্রাউজার HTML পড়ে বাকি জিনিসের অনুরোধ একই সংযোগে পাঠায়, আর পাতা আঁকে। প্রথম ভিজিটে মোট কয়েকশো মিলিসেকেন্ড, যার বেশিরভাগ RTT-তে যায়।”

মাঝারি উত্তর — ৫ মিনিট

এক মিনিটের কাঠামো রেখে প্রতিটি স্তরে একটি করে “কেন” যোগ করুন, আর সময়ের হিসাব দিন:

  • Application-এর আগে: HSTS কেন — প্রথম অনুরোধ HTTP হলে মাঝপথে কেউ তাকে HTTP-তেই আটকে রাখতে পারত। Cache-এর স্তরগুলো কেন — প্রতিটি স্তর আগের স্তরের চেয়ে ধীর আর দূরে।
  • DNS: stub আর recursive-এর পার্থক্য; iterative referral; TTL কেন — বেশি হলে পরিবর্তন দেরিতে ছড়ায়, কম হলে resolver-এর ওপর চাপ। A আর AAAA দুটো এলে Happy Eyeballs দুটোই চেষ্টা করে, যেটি আগে সফল হয় সেটি নেয় (পর্ব ২১)।
  • LAN আর ইন্টারনেট: ARP শুধু পরের hop-এর জন্য; NAT কেন দরকার (IPv4-এর ঘাটতি) আর এর খরচ (inbound সংযোগ কঠিন); BGP নীতিভিত্তিক — সবচেয়ে ছোট পথ নয়, ISP-র ব্যবসায়িক নীতির পথ।
  • Transport আর নিরাপত্তা: TCP-তে ৩ RTT লাগে প্রথম বাইট পেতে (TCP + TLS + অনুরোধ), QUIC-এ ২, 0-RTT-তে ১; TLS-এ forward secrecy কেন ephemeral key-তে।
  • সার্ভারের দিক: CDN hit আর miss; L4 না L7 load balancer; health check; সংযোগ পুনর্ব্যবহার (keep-alive).
  • সংখ্যা: “RTT ৩০ ms ধরে, cold অবস্থায় প্রায় ৪০০ ms, cache গরম আর QUIC হলে ১০০ ms-এর আশপাশে” — আর পরিষ্কার বলুন যে এগুলো অনুমান।

গভীর উত্তর — যেকোনো স্তরে ডুব

ইন্টারভিউয়ার কোনো একটি স্তর বেছে নিলে সেখানে পুরো কোর্সের জ্ঞান কাজে লাগে। নিচের ফলো-আপগুলো প্রায়ই আসে — প্রতিটি আগে নিজে বলার চেষ্টা করুন।

ফলো-আপ ১“google.com” লিখলে ব্রাউজার কীভাবে বোঝে এটি ঠিকানা, খোঁজার শব্দ নয়? আর “https” না লিখলে কী হয়? (সহজ)

উত্তর: ঠিকানা-বার (omnibox) কিছু নিয়ম দেখে: ফাঁকা জায়গা নেই, বিন্দু আছে, শেষ অংশটি পরিচিত TLD — তাহলে সম্ভবত host name; নইলে search engine-এ খোঁজ। নিয়ম ব্রাউজারভেদে আলাদা। Scheme না লিখলে ব্রাউজার আগে HSTS-এর তালিকা দেখে; সেখানে থাকলে HTTPS. না থাকলে আধুনিক ব্রাউজারগুলো এখন সাধারণত আগে HTTPS চেষ্টা করে, ব্যর্থ হলে HTTP-তে ফেরে — কিন্তু এই আচরণ ব্রাউজার আর সংস্করণভেদে আলাদা, তাই ইন্টারভিউতে “অনেক আধুনিক ব্রাউজার” বলুন। পুরোনো আচরণে প্রথম অনুরোধ যেত http://-তে, আর সার্ভার 301 দিয়ে HTTPS-এ পাঠাত — এক বাড়তি round trip আর নিরাপত্তার ফাঁক।

ফলো-আপ ২DNS উত্তর পথে কেউ বদলে দিলে কী হবে? কোন প্রতিরক্ষা কাজ করে? (মাঝারি)

উত্তর: সাধারণ DNS UDP-তে, এনক্রিপশন বা স্বাক্ষর ছাড়া — তাই পথের কেউ ভুল ঠিকানা দিতে পারে, বা resolver-এর cache-এ ভুল তথ্য ঢোকানোর চেষ্টা (cache poisoning) হতে পারে (পর্ব ৩৫, ৫০)। প্রতিরক্ষা কয়েক স্তরে: resolver random query ID আর random উৎস port ব্যবহার করে অনুমান কঠিন করে; DNSSEC উত্তরের স্বাক্ষর যাচাই করতে দেয় (যদি ডোমেইন স্বাক্ষর করে আর resolver যাচাই করে); DNS-over-HTTPS বা DNS-over-TLS ল্যাপটপ থেকে resolver পর্যন্ত পথ এনক্রিপ্ট করে। আর সবচেয়ে গুরুত্বপূর্ণ কথা: ভুল ঠিকানা পেলেও TLS বাঁচায় — আক্রমণকারীর সার্ভারের কাছে www.example.com-এর বৈধ certificate নেই, তাই ব্রাউজার সতর্কবার্তা দেখাবে। এজন্যই HSTS আর TLS মিলে DNS-এর দুর্বলতার অনেকটা ঢেকে দেয়।

ফলো-আপ ৩IPv6 থাকলে গল্পের কোন কোন ধাপ বদলায়? (মাঝারি)

উত্তর: তিনটি বড় পরিবর্তন। (১) ARP-এর বদলে NDP — neighbor solicitation যায় multicast-এ, broadcast-এ নয় (পর্ব ২১)। (২) সাধারণত NAT নেই: ল্যাপটপের global ঠিকানা (SLAAC বা DHCPv6 থেকে) সরাসরি ইন্টারনেটে যায়, আর router-এর stateful firewall আগের মতো অনাহূত inbound আটকায়। (৩) DNS-এ AAAA record; দুটো ঠিকানা থাকলে Happy Eyeballs (RFC 8305) সামান্য আগে IPv6 চেষ্টা করে, দেরি হলে IPv4-ও শুরু করে। এ ছাড়া IPv6-এ router পথে fragment করে না, তাই Path MTU Discovery আর ICMPv6 “Packet Too Big” বার্তা চলতে দেওয়া আরও জরুরি — এটি কেস ২ আর ৩-এর সাথে যুক্ত।

ফলো-আপ ৪ব্রাউজার কীভাবে জানে HTTP/3 ব্যবহার করা যাবে? প্রথম ভিজিটেই কি QUIC? (কঠিন)

উত্তর: দুটি প্রচলিত পথ। (১) Alt-Svc header: প্রথম ভিজিট চলে TCP-র ওপর HTTP/2-তে; উত্তরে alt-svc: h3=":443" থাকলে ব্রাউজার মনে রাখে, আর পরের অনুরোধ বা পরের ভিজিটে QUIC চেষ্টা করে। (২) DNS-এর HTTPS record (RFC 9460): DNS-এর উত্তরেই alpn="h3" জানানো যায়, তাই প্রথম সংযোগই QUIC হতে পারে। QUIC UDP-তে চলে, আর কিছু নেটওয়ার্ক UDP 443 আটকায়; তাই ব্রাউজার সাধারণত TCP-র সাথে একটি দৌড় রাখে বা ব্যর্থ হলে TCP-তে ফেরে। তাই উত্তর: “প্রথম ভিজিটে সাধারণত না, যদি না HTTPS record থাকে; আর সবসময় TCP-তে ফেরার পথ থাকে।” (পর্ব ৩৩, ৩৭)

ফলো-আপ ৫পাতা খুলতে ৩ সেকেন্ড লাগছে। আপনার হিসাব বলছে ৪০০ ms হওয়া উচিত। সময় কোথায় যাচ্ছে, কীভাবে মাপবেন? (কঠিন)

উত্তর: আগে ভাগ করে মাপুন — অনুমান নয়। curl -w দিয়ে নেটওয়ার্কের অংশ: time_namelookup (DNS), time_connect (TCP), time_appconnect (TLS), time_starttransfer (প্রথম বাইট), time_total. ব্রাউজারের DevTools-এর Network আর Performance ট্যাবে প্রতিটি অনুরোধের waterfall. যদি HTML-এর প্রথম বাইট ৩৫০ ms-এ আসে, তাহলে বাকি সময় নেটওয়ার্কের নয় — বড় JS, render-আটকানো CSS, তৃতীয় পক্ষের script বা অনেক ছোট ছোট অনুরোধ। যদি time_starttransfer নিজেই ২.৫ সেকেন্ড হয়, তাহলে origin ধীর বা cache miss. যদি DNS-ই ১ সেকেন্ড, তাহলে resolver-এর সমস্যা (প্রথম চেষ্টা হারিয়ে timeout-এর পর দ্বিতীয় চেষ্টা প্রায়ই ঠিক ১ বা ৫ সেকেন্ডের মতো গোল সংখ্যার দেরি দেখায়)। Loss থাকলে retransmission দেখুন — ss -ti-তে retrans. পর্ব ৫৬-এর নিয়মটি মনে রাখুন: মাপুন, ভাগ করুন, সবচেয়ে বড় অংশটি আগে ঠিক করুন।

৪ · সমস্যা খোঁজার কেস ১–৬ — নাম, পথ, MTU, proxy, firewall আর দূরত্ব

প্রতিটি কেসে আগে শুধু লক্ষণ পড়ুন। খাতায় লিখুন: কী প্রশ্ন করবেন, তিনটি অনুমান কোন ক্রমে, আর প্রথম কোন কমান্ড চালাবেন। তারপর ভাঁজ খুলুন। আউটপুটগুলো একটি সাধারণ Linux যন্ত্রের উদাহরণ — চালানো নয়, ঠিকানাগুলো documentation-এর জন্য সংরক্ষিত পরিসরের। নিজের নয় এমন নেটওয়ার্কে capture বা scan করবেন না।

কেস ১ · IP দিয়ে সাইট খোলে, নাম দিয়ে খোলে না (সহজ)

রিভিশন: পর্ব ৩৫ · DNS, পর্ব ০৬ · Linux-এর টুল, পর্ব ৫৫

লক্ষণ: একটি অফিসের সবাই সকাল থেকে বলছেন intranet.example.com খুলছে না — “This site can’t be reached”. একজন IT কর্মী সার্ভারের IP দিয়ে চেষ্টা করে দেখেছেন, সেটি কাজ করছে।

কেস ১তদন্ত — প্রশ্ন, অনুমান, কমান্ড, কারণ, সমাধান আর প্রতিরোধ

যে প্রশ্ন করবেন: শুধু এই নাম, নাকি সব নাম (বাইরের সাইটও)? সবার ক্ষেত্রে, নাকি এক VLAN বা Wi-Fi-তে? রাতে কোনো পরিবর্তন — DNS record, resolver, firewall? Error বার্তাটি ঠিক কী — NXDOMAIN নাকি timeout?

অনুমান (সম্ভাবনার ক্রমে): (ক) DHCP-তে দেওয়া resolver চলছে না বা উত্তর জোগাড় করতে পারছে না; (খ) record মুছে গেছে বা বদলেছে, আর negative caching চলছে; (গ) কোনো যন্ত্রে /etc/hosts-এ পুরোনো লাইন; (ঘ) split-horizon DNS-এ ভেতরের view ভুল।

$ curl -sI --resolve intranet.example.com:443:10.0.5.20 https://intranet.example.com/ | head -1
HTTP/1.1 200 OK                          # সার্ভার, TCP, TLS ঠিক — সমস্যা নামে
$ getent hosts intranet.example.com      # (কিছুই আসে না)
$ resolvectl status | grep 'DNS Servers'
       DNS Servers: 10.0.0.53
$ dig @10.0.0.53 intranet.example.com +short
;; communications error to 10.0.0.53#53: timed out
$ dig @10.0.0.54 intranet.example.com +short
10.0.5.20                                 # দ্বিতীয় resolver ঠিক উত্তর দেয়

যুক্তি: --resolve দিয়ে নাম-খোঁজা বাদ রেখে একই নামে HTTPS চালানো গেল — অর্থাৎ নেটওয়ার্ক, সার্ভার আর certificate ঠিক। getent খালি, প্রথম resolver timeout, দ্বিতীয়টি ঠিক। NXDOMAIN নয়, timeout — তাই record নয়, resolver-এর সমস্যা।

মূল কারণ: রাতের রক্ষণাবেক্ষণে 10.0.0.53-এর DNS সার্ভিস আর চালু হয়নি, আর DHCP সবাইকে শুধু এই একটি resolver দিচ্ছিল। সমাধান: সার্ভিস চালু করা; DHCP option 6-এ দুটি resolver দেওয়া। প্রতিরোধ: প্রতিটি resolver-এর ওপর একটি synthetic check (প্রতি মিনিটে একটি পরিচিত নাম খোঁজা আর alert), রক্ষণাবেক্ষণের পরে যাচাইয়ের তালিকা। মনে রাখুন: IP দিয়ে HTTPS খুললে certificate-এর নাম মেলে না — তাই ইন্টারভিউতে --resolve বা Host header-এর কৌশলটি বলুন।

কেস ২ · Wi-Fi-তে অ্যাপ চলে, মোবাইল ডেটায় চলে না (মাঝারি)

রিভিশন: পর্ব ২১ · IPv6, পর্ব ১৯ · NAT, পর্ব ৫১, পর্ব ৫৪

লক্ষণ: একটি মোবাইল অ্যাপের API api.example.com. অফিস আর বাসার Wi-Fi-তে সব ঠিক, কিন্তু একটি মোবাইল অপারেটরের ডেটায় অ্যাপ বলে “নেটওয়ার্ক ত্রুটি”। অন্য অপারেটরে ঠিক চলে। গত সপ্তাহে DNS-এ কিছু record যোগ হয়েছে।

কেস ২তদন্ত — প্রশ্ন, অনুমান, কমান্ড, কারণ, সমাধান আর প্রতিরোধ

যে প্রশ্ন করবেন: একটি অপারেটরে, নাকি সব মোবাইল নেটওয়ার্কে? ব্রাউজারে সাইট খোলে কি? সব অনুরোধ ব্যর্থ, নাকি শুধু বড় অনুরোধ? DNS-এ ঠিক কোন record যোগ হয়েছে?

অনুমান: (ক) ওই অপারেটরের নেটওয়ার্ক IPv6-only বা IPv6-প্রধান (NAT64/DNS64, 464XLAT), আর নতুন AAAA record যে IPv6 ঠিকানা দেখায় সেখানে সার্ভিস পৌঁছানো যায় না; (খ) মোবাইল পথে MTU ছোট (কেস ৩-এর মতো); (গ) উল্টো দিকের সমস্যা — ব্যবহারকারী CGNAT-এর পেছনে থেকে বাসার কোনো সার্ভারে port forward দিয়ে ঢুকতে চাইছেন।

$ dig +short AAAA api.example.com
2001:db8:10::20                           # গত সপ্তাহে যোগ হওয়া record
$ curl -4 -sS -m 5 -o /dev/null -w '%{http_code}\n' https://api.example.com/health
200
$ curl -6 -sS -m 5 -o /dev/null -w '%{http_code}\n' https://api.example.com/health
curl: (28) Connection timed out after 5001 milliseconds
000

যুক্তি: IPv6 পথে timeout, IPv4-এ ঠিক। Wi-Fi-তে অ্যাপটি IPv4 পায় বা Happy Eyeballs IPv4-এ ফিরে যায়। কিন্তু IPv6-only মোবাইল নেটওয়ার্কে IPv4-এ পৌঁছানোর একমাত্র উপায় DNS64-এর বানানো ঠিকানা — আর আসল AAAA থাকলে DNS64 আর বানায় না। ফলে ফোনের কাছে একটিমাত্র পথ, আর সেটি ভাঙা।

মূল কারণ: AAAA প্রকাশ করা হয়েছে, কিন্তু cloud-এর security group-এ port 443 খোলা ছিল শুধু 0.0.0.0/0-এর জন্য, ::/0-এর জন্য নয়। সমাধান: IPv6-এর নিয়ম যোগ করা (বা IPv6 পুরো তৈরি না হওয়া পর্যন্ত AAAA সরানো)। প্রতিরোধ: বাইরে থেকে IPv4 আর IPv6 দুই পথেই আলাদা monitoring; “AAAA যোগ করা = IPv6-এর পূর্ণ প্রস্তুতি” — এই নিয়ম পরিবর্তনের তালিকায়। CGNAT-এর দিক: যদি ব্যবহারকারীর router-এর WAN ঠিকানা 100.64.0.0/10-এর ভেতরে হয় (RFC 6598-এর shared address space), তাহলে তিনি ISP-র NAT-এর পেছনে — বাইরে থেকে port forward দিয়ে তাঁর যন্ত্রে ঢোকা যাবে না; তখন IPv6, ISP-র public IP সেবা বা একটি বাইরের relay লাগে।

কেস ৩ · ছোট অনুরোধ চলে, বড় upload আটকে যায় (কঠিন)

রিভিশন: পর্ব ২০ · ICMP, পর্ব ১৬ (fragmentation), পর্ব ৪৯ · VPN, পর্ব ৫৫

লক্ষণ: শাখা অফিস site-to-site VPN দিয়ে প্রধান অফিসের সার্ভারে যুক্ত। Login, ছোট পাতা, API-র ছোট উত্তর — সব ঠিক। কিন্তু বড় ফাইল upload শুরু হয়ে ০%-এ আটকে থাকে, আর কিছু বড় পাতা অর্ধেক এসে থেমে যায়। SSH-এ ঢোকা যায়, কিন্তু cat করে বড় ফাইল দেখলেই terminal জমে যায়।

কেস ৩তদন্ত — প্রশ্ন, অনুমান, কমান্ড, কারণ, সমাধান আর প্রতিরোধ

যে প্রশ্ন করবেন: VPN বা কোনো tunnel কি নতুন? ISP কি PPPoE ব্যবহার করে? Firewall-এ ICMP-র নিয়ম কী? সমস্যা কি শুধু tunnel-এর ভেতরের traffic-এ?

অনুমান: “ছোট চলে, বড় আটকায়” মানেই প্রথম সন্দেহ MTU: tunnel-এর header জায়গা খায়, তাই পথের MTU ১৫০০-এর কম; TCP পুরো ১৪৬০ বাইটের segment পাঠায় DF bit দিয়ে; router ফেলে দিয়ে ICMP “Fragmentation Needed” পাঠায়; কিন্তু কোনো firewall সেই ICMP আটকায় — প্রেরক কখনো জানে না। এটিই PMTUD black hole. বিকল্প: loss বা ধীর link — কিন্তু তাতে বড়-ছোট এমন পরিষ্কার ভাগ হয় না।

$ ping -c 2 -M do -s 1472 10.20.0.15      # 1472 + 8 ICMP + 20 IP = 1500
2 packets transmitted, 0 received, 100% packet loss    # কোনো "Frag needed" বার্তাও নেই
$ ping -c 2 -M do -s 1412 10.20.0.15      # 1412 + 28 = 1440
2 packets transmitted, 2 received, 0% packet loss
$ tracepath -n 10.20.0.15
 1?: [LOCALHOST]                      pmtu 1500
 1:  10.10.0.1                         1.1ms
 2:  no reply
$ sudo tcpdump -ni eth0 'host 10.20.0.15 and tcp'
10:02:11.104 IP 10.10.0.50.51800 > 10.20.0.15.443: Flags [.], seq 1:1449, ack 1, length 1448
10:02:11.320 IP 10.10.0.50.51800 > 10.20.0.15.443: Flags [.], seq 1:1449, ack 1, length 1448   # retransmission
10:02:11.760 IP 10.10.0.50.51800 > 10.20.0.15.443: Flags [.], seq 1:1449, ack 1, length 1448   # আবার

যুক্তি: ১৫০০ বাইটের packet নিঃশব্দে হারায়, ১৪৪০ পৌঁছায় — পথের MTU ১৪৪০-এর আশপাশে, আর ICMP-র সতর্কবার্তা ফিরছে না। Capture-এ একই পূর্ণ segment বারবার retransmit হচ্ছে, timeout দ্বিগুণ হচ্ছে (পর্ব ৩০-এর exponential backoff). length 1448 কারণ TCP timestamps option ১২ বাইট নেয় (১৪৬০ − ১২)।

মূল কারণ: নতুন tunnel-এর MTU ১৪৪০, আর পথের একটি firewall সব ICMP আটকায়। সমাধান: tunnel-এর router-এ MSS clamping — SYN-এর MSS কমিয়ে ১৪০০ করা (Linux-এ nftables-এ tcp flags syn tcp option maxseg size set rt mtu), আর firewall-এ ICMP type 3 code 4 (IPv6-এ ICMPv6 Packet Too Big) চলতে দেওয়া। প্রতিরোধ: “ICMP পুরো বন্ধ” নীতি বাতিল; প্রতিটি tunnel চালুর সময় ping -M do দিয়ে MTU যাচাই। নিচের হিসাবে সাধারণ encapsulation-এর পর কত MTU আর MSS থাকে, তা দেখুন।

// Effective MTU and TCP MSS behind common encapsulations (no IP/TCP options).
const base = 1500;                      // Ethernet payload size
const links = [                         // [name, extra header bytes added inside the 1500]
  ["plain Ethernet", 0],
  ["PPPoE (home fibre/DSL)", 8],
  ["GRE over IPv4", 24],
  ["VXLAN over IPv4", 50],
  ["WireGuard over IPv4", 60],
  ["WireGuard over IPv6", 80],
];
console.log("path".padEnd(24) + "  MTU  MSS(v4) MSS(v6)");
for (const [name, extra] of links) {
  const mtu = base - extra;
  console.log(name.padEnd(24) + String(mtu).padStart(5) + String(mtu - 40).padStart(8) + String(mtu - 60).padStart(8));
}
// A server advertises MSS 1460 and the path silently drops anything above 1440 bytes
const pathMtu = 1440, segs = [200, 900, 1460];
console.log("\npath MTU " + pathMtu + ", ICMP 'Fragmentation Needed' is filtered:");
for (const payload of segs) {
  const ipLen = payload + 40;
  console.log("  TCP payload " + String(payload).padStart(4) + " -> IP packet " + String(ipLen).padStart(4) + " B : " +
    (ipLen <= pathMtu ? "delivered" : "dropped silently (DF set), retransmits also dropped"));
}
console.log("fix: clamp MSS to " + (pathMtu - 40) + " on the tunnel/router, or allow ICMP type 3 code 4");

আসল রানের আউটপুট:

path                      MTU  MSS(v4) MSS(v6)
plain Ethernet           1500    1460    1440
PPPoE (home fibre/DSL)   1492    1452    1432
GRE over IPv4            1476    1436    1416
VXLAN over IPv4          1450    1410    1390
WireGuard over IPv4      1440    1400    1380
WireGuard over IPv6      1420    1380    1360

path MTU 1440, ICMP 'Fragmentation Needed' is filtered:
  TCP payload  200 -> IP packet  240 B : delivered
  TCP payload  900 -> IP packet  940 B : delivered
  TCP payload 1460 -> IP packet 1500 B : dropped silently (DF set), retransmits also dropped
fix: clamp MSS to 1400 on the tunnel/router, or allow ICMP type 3 code 4

ওপরের টেবিল: MSS = MTU − ৪০ (IPv4 ২০ + TCP ২০) আর IPv6-এ MTU − ৬০ (IPv6 header ৪০)। PPPoE ৮ বাইট খায়, তাই বাসার fibre-এ প্রায়ই 1492. WireGuard-এর বাইরের header IPv4-এ ৬০, IPv6-এ ৮০ বাইট — তাই তার প্রচলিত ডিফল্ট MTU ১৪২০, যাতে দুই ক্ষেত্রেই নিরাপদ থাকে। এগুলো option ছাড়া হিসাব; IPsec-এর overhead cipher-ভেদে আলাদা, তাই সেটি এখানে রাখা হয়নি।

নিচের অংশই কেস ৩-এর গল্প: ২০০ আর ৯০০ বাইটের segment (login, ছোট API) delivered, কিন্তু পূর্ণ ১৪৬০ বাইটের segment ১৫০০ বাইটের packet বানায় আর dropped silently — retransmission-ও একই আকারের, তাই সেটিও হারায়। clamp MSS to 1400 করলে প্রতিটি packet ১৪৪০-এ আঁটে।

কেস ৪ · Load balancer থেকে মাঝে মাঝে 502 (কঠিন)

রিভিশন: পর্ব ৫২ · load balancer, পর্ব ৩৬ · HTTP, পর্ব ২৯ · FIN, RST

লক্ষণ: একটি ওয়েব অ্যাপের সামনে একটি L7 load balancer, পেছনে চারটি অ্যাপ সার্ভার। প্রায় ০.১% অনুরোধ 502 Bad Gateway পায় — এলোমেলোভাবে, কিন্তু রাতে traffic কম থাকলে হার বেশি। সার্ভারের log-এ ওই অনুরোধগুলোর কোনো চিহ্ন নেই। সার্ভারের CPU আর মেমরি স্বাভাবিক।

কেস ৪তদন্ত — প্রশ্ন, অনুমান, কমান্ড, কারণ, সমাধান আর প্রতিরোধ

যে প্রশ্ন করবেন: 502-গুলো কি সব সার্ভারে সমান? Deploy-এর সময় বাড়ে? LB-র log-এ backend-এর দিকের কারণ কী লেখা (connection reset, timeout)? LB-র idle timeout কত, আর অ্যাপ সার্ভারের keep-alive timeout কত?

অনুমান: (ক) keep-alive timeout-এর অমিল — backend আগে idle সংযোগ বন্ধ করে, আর ঠিক সেই মুহূর্তে LB সেটিতে নতুন অনুরোধ পাঠায়; (খ) deploy-এর সময় connection draining ছাড়া সার্ভার বন্ধ; (গ) health check সুস্থ বলে, অথচ অ্যাপের কোনো worker আটকে; (ঘ) backend crash বা OOM — কিন্তু তাহলে সার্ভারের log বা metric-এ ছাপ থাকত।

# LB log (উদাহরণ): 502-এর লাইনগুলোতে backend সময় শূন্য, কারণ "upstream reset"
2026-10-20T02:14:07Z GET /api/cart 502 backend=10.0.1.21:8080 backend_time=0.000 reason=upstream_reset
# অ্যাপ সার্ভারে capture — LB 10.0.0.5, সার্ভার 10.0.1.21
02:14:07.000100 IP 10.0.1.21.8080 > 10.0.0.5.40112: Flags [F.]  # সার্ভার idle সংযোগ বন্ধ করছে
02:14:07.000350 IP 10.0.0.5.40112 > 10.0.1.21.8080: Flags [P.], length 412  # LB ঠিক তখনই অনুরোধ পাঠাল
02:14:07.000420 IP 10.0.1.21.8080 > 10.0.0.5.40112: Flags [R]   # বন্ধ socket — RST
# config: LB idle timeout = 60 s ; app server keep-alive timeout = 5 s

যুক্তি: backend সময় শূন্য আর সার্ভারের log-এ অনুরোধ নেই — অনুরোধ অ্যাপে পৌঁছায়ইনি। Capture-এ FIN আর অনুরোধ প্রায় একই মুহূর্তে উল্টো দিকে চলেছে — একটি দৌড় (race). রাতে হার বেশি, কারণ তখন সংযোগগুলো বেশিক্ষণ অলস থাকে আর ৫ সেকেন্ডের সীমা পেরোয়। নিচের stepper-এ দৌড়টি ধাপে ধাপে দেখুন।

মূল কারণ: সার্ভারের keep-alive timeout (৫ সেকেন্ড — কিছু runtime-এ, যেমন Node.js-এর HTTP সার্ভারে, এটিই ডিফল্ট) LB-র idle timeout (৬০ সেকেন্ড)-এর চেয়ে ছোট। সমাধান: backend-এর timeout LB-র চেয়ে বড় রাখা (যেমন ৬৫ সেকেন্ড), যাতে সবসময় LB আগে বন্ধ করে; idempotent অনুরোধে LB-র একবার retry; deploy-এ draining. প্রতিরোধ: দুই পাশের timeout একসাথে লিখে রাখা নিয়ম, 5xx-এর হারে alert, আর LB আর backend-এর 502-কে আলাদা metric-এ দেখা।

একটি পুনর্ব্যবহৃত সংযোগ: LB 10.0.0.5 ↔ সার্ভার 10.0.1.21:8080
সময়
LB-র চোখে সংযোগ
সার্ভারের চোখে
ব্যবহারকারী পান
  1. সংযোগ অলস। একটি অনুরোধের উত্তর গেছে, সংযোগ খোলা রাখা হয়েছে পুনর্ব্যবহারের জন্য। দুই পক্ষের নিজের নিজের timer — LB ৬০ সেকেন্ড অপেক্ষা করবে, সার্ভার মাত্র ৫ সেকেন্ড।
  2. সার্ভার আগে বন্ধ করল। ৫ সেকেন্ড পূর্ণ হতেই সার্ভার FIN পাঠিয়ে socket বন্ধ করল। কিন্তু FIN পৌঁছাতে আর LB-র সেটি প্রক্রিয়া করতে কিছু মাইক্রোসেকেন্ড লাগে।
  3. LB ঠিক তখনই অনুরোধ পাঠাল। ওই অল্প সময়ের মধ্যে একজন ব্যবহারকারীর অনুরোধ এল; LB-র তালিকায় সংযোগটি এখনো “অলস, ব্যবহারযোগ্য” — সে সেটিতেই GET পাঠাল। FIN আর GET পথে একে অপরকে পেরিয়ে গেল।
  4. RST আর 502. সার্ভারের কাছে socket বন্ধ, তাই নতুন ডেটার উত্তরে RST (পর্ব ২৯)। LB-র কাছে backend অনুরোধ নষ্ট করেছে — তাই ব্যবহারকারীকে 502. সার্ভারের অ্যাপ অনুরোধটি দেখেইনি, তাই তার log-এ কিছু নেই।
  5. সংশোধন: যে আগে বন্ধ করবে, সে-ই LB. সার্ভারের timeout ৬৫ সেকেন্ড করলে LB-র ৬০ সেকেন্ড সবসময় আগে ফুরায়; LB নিজে বন্ধ করে, তাই সে কখনো মরা সংযোগে অনুরোধ পাঠায় না। এই একটি নিয়মই এ ধরনের এলোমেলো 502-এর বড় অংশ সারায়।

কেস ৫ · SSH চলে, কিন্তু HTTPS timeout (সহজ)

রিভিশন: পর্ব ৪৯ · Firewall, পর্ব ৫৪ · VPC, security group, পর্ব ২৯

লক্ষণ: একটি নতুন cloud VM-এ (203.0.113.30) nginx বসানো হয়েছে। SSH দিয়ে ঢোকা যায়, VM-এর ভেতরে curl https://localhost চলে, কিন্তু বাইরে থেকে ব্রাউজারে খুললে অনেকক্ষণ ঘুরে “timed out”.

কেস ৫তদন্ত — প্রশ্ন, অনুমান, কমান্ড, কারণ, সমাধান আর প্রতিরোধ

যে প্রশ্ন করবেন: timeout নাকি “connection refused”? সব জায়গা থেকে, নাকি এক নেটওয়ার্ক থেকে? VM-এর সামনে কোন কোন firewall স্তর আছে — cloud-এর security group, subnet-এর ACL, VM-এর নিজের nftables বা firewalld?

অনুমান: timeout মানে কেউ SYN নিঃশব্দে ফেলছে। (ক) security group-এ শুধু ২২ খোলা; (খ) VM-এর host firewall; (গ) nginx শুধু 127.0.0.1-এ শুনছে — কিন্তু তাহলে বাইরে থেকে timeout নয়, সাধারণত refused (RST) আসত।

$ nc -vz -w 5 203.0.113.30 22
Connection to 203.0.113.30 22 port [tcp/ssh] succeeded!
$ nc -vz -w 5 203.0.113.30 443
nc: connect to 203.0.113.30 port 443 (tcp) timed out: Operation now in progress
# VM-এর ভেতরে:
$ ss -ltn 'sport = :443'
State   Recv-Q  Send-Q  Local Address:Port  Peer Address:Port
LISTEN  0       511           0.0.0.0:443        0.0.0.0:*
$ sudo tcpdump -ni eth0 -c 5 'tcp port 443'
(বাইরে থেকে চেষ্টার সময়েও কোনো packet আসে না)

যুক্তি: nginx সব ঠিকানায় শুনছে, তাই (গ) বাদ। VM-এর interface-এ SYN আসছেই না — তাই host firewall-ও নয় (সে দেখত, তারপর ফেলত; tcpdump host firewall-এর আগেই packet দেখে)। বাকি থাকে VM-এর বাইরের স্তর: security group বা ACL.

মূল কারণ: security group-এ inbound নিয়ম শুধু TCP 22. সমাধান: TCP 443 (আর HTTP থেকে redirect চাইলে 80) 0.0.0.0/0 ও ::/0-এর জন্য খোলা; SSH-কে উল্টো দিকে সংকীর্ণ করা — শুধু অফিসের ঠিকানা বা VPN থেকে। প্রতিরোধ: firewall-এর নিয়ম কোডে (infrastructure as code) আর review-তে; চালুর পরে বাইরে থেকে স্বয়ংক্রিয় port-যাচাই — শুধু নিজের সিস্টেমে। “সব খুলে দিই” কখনো সমাধান নয়।

কেস ৬ · শুধু একটি শহরের ব্যবহারকারীদের জন্য সাইট ধীর (কঠিন)

রিভিশন: পর্ব ২৫ · BGP, peering, IXP, পর্ব ৩৮ · CDN, পর্ব ২০ · traceroute, পর্ব ৫৬

লক্ষণ: একটি সংবাদ-সাইট CDN-এর পেছনে। Real-user monitoring দেখাচ্ছে, দুদিন ধরে একটি শহরের একটি ISP-র ব্যবহারকারীদের পাতা খুলতে স্বাভাবিকের তিনগুণ সময় লাগছে। অন্য ISP আর অন্য শহর স্বাভাবিক।

কেস ৬তদন্ত — প্রশ্ন, অনুমান, কমান্ড, কারণ, সমাধান আর প্রতিরোধ

যে প্রশ্ন করবেন: ধীর মানে কোন অংশ — DNS, connect, প্রথম বাইট, নাকি পুরো download? ব্যবহারকারীরা কোন DNS resolver ব্যবহার করেন — ISP-র নাকি দূরের public resolver? দুদিন আগে CDN, DNS বা ISP-র দিকে কিছু বদলেছে?

অনুমান: (ক) ওই ISP থেকে CDN পর্যন্ত পথ বদলেছে — স্থানীয় peering বা IXP-র link বন্ধ, traffic এখন বিদেশের transit ঘুরে আসে; (খ) CDN ভুল edge বেছে দিচ্ছে, কারণ resolver-এর অবস্থান দেখে mapping হয় (ECS না থাকলে); (গ) ISP-র কোনো link-এ congestion — তখন peak সময়ে বেশি খারাপ।

# আক্রান্ত ISP-র একজন ব্যবহারকারীর অনুমতিতে, তাঁর যন্ত্র থেকে:
$ curl -o /dev/null -s -w 'dns %{time_namelookup}  connect %{time_connect}  ttfb %{time_starttransfer}\n' https://www.example.com/
dns 0.012  connect 0.191  ttfb 0.402          # অন্য ISP-তে connect ≈ 0.025
$ dig +short www.example.com
192.0.2.80                                     # সঠিক anycast ঠিকানা
$ mtr -rwzc 30 192.0.2.80
  1. AS???   192.168.1.1        0.0%   1.2 ms
  2. AS64500 198.51.100.1       0.0%   4.8 ms
  3. AS64500 198.51.100.66      0.0%   6.1 ms
  4. AS64510 203.0.113.9        0.0%  88.4 ms   # বিদেশের transit-এ চলে গেছে
  5. AS64510 203.0.113.41       0.0% 176.0 ms
  6. AS64496 192.0.2.80         0.0% 189.7 ms

যুক্তি: DNS দ্রুত আর ঠিকানা সঠিক — তাই (খ) এখানে নয়। connect নিজেই ১৯১ ms, অর্থাৎ RTT বড় — দূরত্বের সমস্যা, সার্ভারের নয়। mtr দেখাচ্ছে ISP (AS64500) থেকে সরাসরি CDN-এর নেটওয়ার্কে না গিয়ে একটি transit (AS64510)-এ যাচ্ছে, যেখানে RTT হঠাৎ ৮৮ ms-এ লাফায় — সাধারণত সমুদ্রের নিচের cable পেরোনোর চিহ্ন। Loss নেই, তাই congestion-এর চেয়ে পথের পরিবর্তন বেশি সম্ভাব্য। (ASN-গুলো documentation-এর জন্য সংরক্ষিত।)

মূল কারণ: ISP আর CDN-এর মধ্যে স্থানীয় peering session বন্ধ হয়ে গিয়েছিল, BGP বিকল্প পথ বেছেছে — বিদেশ ঘুরে। সমাধান: প্রমাণসহ (সময়, mtr, ASN, ঠিকানা) ISP আর CDN দুই পক্ষকেই জানানো; CDN সাময়িকভাবে ওই ISP-কে অন্য edge-এ পাঠাতে পারে। প্রতিরোধ: ISP আর শহর ধরে real-user metric-এ alert; একাধিক IXP-তে peering; দেশের ভেতরের traffic দেশের ভেতরে রাখতে স্থানীয় IXP-তে উপস্থিতি (বাংলাদেশে যেমন BDIX). মনে রাখুন: ইন্টারনেটের পথ আপনার নিয়ন্ত্রণে নয় — আপনার কাজ প্রমাণ জোগাড় করে সঠিক মানুষের কাছে পৌঁছানো।

৫ · সমস্যা খোঁজার কেস ৭–১১ — certificate, container, কণ্ঠস্বর, VLAN আর port

কেস ৭ · কিছু যন্ত্রে certificate error, বাকিগুলোতে ঠিক (মাঝারি)

রিভিশন: পর্ব ৪৮ · TLS, বিশ্বাসের শিকল, পর্ব ৪৭

লক্ষণ: নতুন certificate বসানোর পর ডেস্কটপ ব্রাউজারে https://shop.example.com ঠিক খোলে, কিন্তু কোম্পানির Android অ্যাপ, একটি সার্ভার থেকে চালানো curl আর কয়েকটি পুরোনো ফোন বলছে certificate বিশ্বাসযোগ্য নয়। একজন ব্যবহারকারীর ল্যাপটপে আবার ভিন্ন বার্তা — “certificate is not yet valid”.

কেস ৭তদন্ত — প্রশ্ন, অনুমান, কমান্ড, কারণ, সমাধান আর প্রতিরোধ

যে প্রশ্ন করবেন: error-এর হুবহু বার্তা কী? কোন যন্ত্র, কোন OS-এর কোন সংস্করণ? সার্ভারে certificate ফাইল কীভাবে বসানো হয়েছে — শুধু leaf, নাকি full chain? আক্রান্ত যন্ত্রের ঘড়ি ঠিক আছে?

অনুমান: তিনটি আলাদা সমস্যা একসাথে দেখা দিতে পারে — (ক) সার্ভার intermediate certificate পাঠাচ্ছে না; ডেস্কটপ ব্রাউজার cache-এ রাখা intermediate বা AIA fetching দিয়ে শিকল নিজে পূর্ণ করে, অ্যাপ আর curl করে না; (খ) পুরোনো যন্ত্রের trust store-এ নতুন root নেই, বা পুরোনো root-এর মেয়াদ শেষ; (গ) ল্যাপটপের ঘড়ি পেছনে — নতুন certificate তার চোখে “এখনো শুরুই হয়নি”।

$ openssl s_client -connect shop.example.com:443 -servername shop.example.com -showcerts </dev/null 2>/dev/null | grep -E 's:|i:|Verify'
 0 s:CN = shop.example.com
   i:CN = Example Issuing CA R2
Verify return code: 21 (unable to verify the first certificate)
# শুধু depth 0 — intermediate নেই। ঠিক করার পরে:
 0 s:CN = shop.example.com
   i:CN = Example Issuing CA R2
 1 s:CN = Example Issuing CA R2
   i:CN = Example Root CA X1
Verify return code: 0 (ok)
# ঘড়ির সমস্যার ল্যাপটপে:
$ date -u ; timedatectl | grep synchronized
Mon Jan  5 09:12:44 UTC 2026
System clock synchronized: no

মূল কারণ ও সমাধান: (ক) সার্ভারে leaf-এর বদলে full chain বসানো (nginx-এ ssl_certificate-এ fullchain ফাইল); (খ) পুরোনো যন্ত্রে OS আপডেট, বা সেই যন্ত্রগুলোর জন্য আলাদা chain-এর বিকল্প — ২০২১ সালের সেপ্টেম্বরে Let’s Encrypt-এর certificate যে পুরোনো root দিয়ে cross-sign করা ছিল (IdenTrust-এর DST Root CA X3), তার মেয়াদ শেষ হলে অনেক পুরোনো যন্ত্রে ঠিক এমন ঘটেছিল; (গ) ঘড়ি — NTP চালু করা। প্রতিরোধ: deploy-এর পরে “পরিষ্কার” পরিবেশ থেকে (openssl s_client, ব্রাউজার নয়) chain যাচাই; মেয়াদ শেষের আগে alert; স্বয়ংক্রিয় নবায়ন। ইন্টারভিউতে মূল কথা: “ব্রাউজারে চলে” প্রমাণ নয় — ব্রাউজার অনেক ভুল নিজে ঢেকে দেয়।

কেস ৮ · Kubernetes-এ একটি pod থেকে একটি service-এ পৌঁছানো যায় না (কঠিন)

রিভিশন: পর্ব ৫৪ · Docker আর Kubernetes নেটওয়ার্কিং, পর্ব ৩৫, OS · Container

লক্ষণ: shop namespace-এ নতুন একটি web deployment চালু হয়েছে। এটি payments namespace-এর api service-কে ডাকে, আর প্রতিবার timeout পায়। একই shop namespace-এর পুরোনো checkout pod একই service ঠিকঠাক ডাকতে পারে।

কেস ৮তদন্ত — প্রশ্ন, অনুমান, কমান্ড, কারণ, সমাধান আর প্রতিরোধ

যে প্রশ্ন করবেন: নাম খোঁজা ব্যর্থ, নাকি সংযোগ? কোন নাম ব্যবহার হচ্ছে — শুধু api, নাকি পূর্ণ নাম? Cluster-এ NetworkPolicy আছে কি, আর কোন CNI? নতুন pod-এর label কী?

অনুমান (স্তর ধরে): (ক) DNS — অন্য namespace-এর service-কে শুধু api নামে ডাকলে নিজের namespace-এ খোঁজে, পাওয়া যায় না; (খ) service-এর selector কোনো pod-এ মেলে না, তাই endpoint খালি; (গ) NetworkPolicy নতুন pod-কে অনুমতি দেয় না; (ঘ) pod-এর ভেতরের অ্যাপের ভুল port.

$ kubectl -n shop exec deploy/web -- getent hosts api.payments.svc.cluster.local
10.96.41.7      api.payments.svc.cluster.local          # DNS ঠিক
$ kubectl -n payments get endpointslices -l kubernetes.io/service-name=api
NAME        ADDRESSTYPE   PORTS   ENDPOINTS                 AGE
api-7xk2p   IPv4          8080    10.244.1.12,10.244.2.9    41d    # endpoint আছে
$ kubectl -n payments get networkpolicy
NAME                 POD-SELECTOR   AGE
default-deny-ingress <none>          30d
allow-from-checkout  app=api        30d
$ kubectl -n payments get networkpolicy allow-from-checkout -o jsonpath='{.spec.ingress[0].from}'
[{"namespaceSelector":{"matchLabels":{"kubernetes.io/metadata.name":"shop"}},"podSelector":{"matchLabels":{"app":"checkout"}}}]
$ kubectl -n shop get pod -l app=web --show-labels | tail -1
web-5d9c7b-q2xlm   1/1   Running   0   2h   app=web,pod-template-hash=5d9c7b

যুক্তি: নাম মেলে, endpoint আছে — তাই DNS আর service নয়। payments-এ default-deny নীতি, আর ব্যতিক্রম শুধু shop namespace-এর app=checkout label-ধারী pod-এর জন্য। নতুন pod-এর label app=web — নীতি তাকে চেনে না, তাই তার SYN নিঃশব্দে পড়ে যায়: timeout, refused নয়।

মূল কারণ: NetworkPolicy-তে নতুন client যোগ হয়নি। সমাধান: একটি label যেমন payments-client=true দিয়ে নীতি লেখা, আর দরকারি pod-এ সেই label দেওয়া — প্রতিটি নতুন অ্যাপে নীতি বদলানোর চেয়ে পরিষ্কার। প্রতিরোধ: নীতিগুলো কোডে আর review-তে; CI-তে “কে কাকে ডাকতে পারে” পরীক্ষা; দলের মধ্যে নিয়ম জানানো। বাড়তি ফাঁদ: pod-এর resolv.conf-এ ndots:5 ডিফল্ট, তাই বাইরের নাম খুঁজতে অনেক বাড়তি DNS query হয় — ধীর DNS-এর কেসে এটি মনে রাখুন।

কেস ৯ · অফিসের VoIP কল ব্যস্ত সময়ে ভেঙে যায় (মাঝারি)

রিভিশন: পর্ব ৫৬ · পারফরম্যান্স, পর্ব ২৬ · QoS, পর্ব ৪০ · VoIP আর jitter, পর্ব ০৫

লক্ষণ: ২০ জনের একটি অফিস, ৫০/২০ Mbps-এর একটি ইন্টারনেট সংযোগ। দুপুরের পরে, বিশেষ করে কেউ বড় ফাইল upload বা cloud backup করলে, VoIP কলে কথা কেটে যায়, রোবটের মতো শোনায়। সকালে ঠিক থাকে।

কেস ৯তদন্ত — প্রশ্ন, অনুমান, কমান্ড, কারণ, সমাধান আর প্রতিরোধ

যে প্রশ্ন করবেন: সমস্যা কি upload-এর সাথে মেলে? Wi-Fi-তে নাকি তারেও? কলের দুই দিকেই, নাকি এক দিকে? Router-এ কোন queue ব্যবস্থা?

অনুমান: (ক) bufferbloat — upload link ভরে গেলে router বা modem-এর বড় buffer-এ packet জমে, সব packet-এর delay বাড়ে, VoIP-এর jitter buffer আর সামলাতে পারে না; (খ) Wi-Fi-তে airtime-এর ভিড়; (গ) ISP-র দিকে congestion.

# অলস অবস্থায়:
$ ping -c 20 -q 198.51.100.1
rtt min/avg/max/mdev = 7.9/8.4/9.6/0.4 ms
# একজন সহকর্মী বড় backup চালু করার পরে (upload পূর্ণ):
$ ping -c 20 -q 198.51.100.1
rtt min/avg/max/mdev = 312.6/447.1/583.0/71.8 ms
$ tc -s qdisc show dev wan0
qdisc pfifo_fast 0: root refcnt 2 bands 3
 Sent 81234567 bytes 70211 pkt (dropped 12, overlimits 0 requeues 3)
 backlog 0b 0p requeues 3                      # জমা হচ্ছে modem-এ, router-এ নয়

যুক্তি: loss প্রায় নেই, কিন্তু চাপে RTT ৮ থেকে ৪৪৭ ms — buffer ভরে থাকার ক্লাসিক চিহ্ন (queueing delay, পর্ব ০৫)। Router-এর নিজের queue খালি, কারণ সে link-এর চেয়ে দ্রুত পাঠিয়ে দেয় — জমে modem-এ, যেখানে আমাদের নিয়ন্ত্রণ নেই।

মূল কারণ: upload-এর ভিড়ে modem-এর বড় buffer. সমাধান: router-এ SQM — upload-কে link-এর চেয়ে সামান্য কম হারে (প্রায় ৮৫–৯৫%) shape করে queue নিজের কাছে আনা, আর সেখানে fq_codel বা CAKE-এর মতো ন্যায্য ও ছোট-queue ব্যবস্থা; LAN-এ voice-এ DSCP EF চিহ্ন আর Wi-Fi-তে WMM; backup-কে রাতে বা হার-সীমায়। প্রতিরোধ: “লোডের সময়ের latency” মাপা নিয়মিত; capacity পরিকল্পনা। সতর্কতা: DSCP চিহ্ন সাধারণত আপনার নিজের নেটওয়ার্কের ভেতরে কাজ করে; ISP সাধারণত তা মানে না।

কেস ১০ · নতুন VLAN-এর যন্ত্রগুলো DHCP থেকে ঠিকানা পায় না (সহজ)

রিভিশন: পর্ব ১৮ · DHCP, পর্ব ১৩ · VLAN আর trunk, পর্ব ২২

লক্ষণ: একটি অফিসে CCTV-র জন্য নতুন VLAN 30 (10.0.30.0/24) বানানো হয়েছে। Camera-গুলো চালু হয়ে 169.254.x.x ঠিকানা নিচ্ছে। DHCP সার্ভার 10.0.0.10, আছে server VLAN 10-এ। পুরোনো VLAN-গুলোর যন্ত্র ঠিকানা পায়।

কেস ১০তদন্ত — প্রশ্ন, অনুমান, কমান্ড, কারণ, সমাধান আর প্রতিরোধ

যে প্রশ্ন করবেন: Camera-র switch port কি VLAN 30-এর access port? Trunk-এ VLAN 30 অনুমোদিত? VLAN-গুলোর মধ্যে routing কে করে — L3 switch না router? DHCP সার্ভারে নতুন scope বানানো হয়েছে?

অনুমান: DHCP DISCOVER একটি broadcast — router পেরোয় না (পর্ব ১৮)। তাই অন্য subnet-এর সার্ভারের জন্য VLAN 30-এর gateway-তে DHCP relay লাগে। সম্ভাব্য কারণ: (ক) relay (Cisco-ধাঁচে ip helper-address) নেই; (খ) সার্ভারে 10.0.30.0/24-এর scope নেই; (গ) trunk-এ VLAN 30 নেই; (ঘ) মাঝের firewall UDP 67 আটকায়।

# L3 switch-এ (উদাহরণ, Cisco IOS-ধাঁচ):
switch# show running-config interface Vlan30
interface Vlan30
 ip address 10.0.30.1 255.255.255.0          ! helper-address নেই
switch# show interfaces trunk | include 30
Gi1/0/48    1,10,20,30                        ! trunk-এ VLAN 30 আছে
# DHCP সার্ভারে capture — কিছুই আসে না:
$ sudo tcpdump -ni eth0 -c 5 'udp port 67'
(নীরব)

যুক্তি: trunk ঠিক, কিন্তু VLAN 30-এর gateway-তে relay নেই — তাই broadcast VLAN 30-এর ভেতরেই মরে যায়, সার্ভারে কিছু পৌঁছায় না।

মূল কারণ: relay কনফিগার করা হয়নি। সমাধান: interface Vlan30-এ ip helper-address 10.0.0.10 (অন্য vendor-এ নাম আলাদা); relay প্যাকেটে giaddr = 10.0.30.1 বসায়, আর সার্ভার সেটি দেখেই সঠিক scope বাছে — তাই সার্ভারে 10.0.30.0/24-এর scope (gateway 10.0.30.1-সহ) লাগবে, আর পথে UDP 67 চলতে দিতে হবে। প্রতিরোধ: “নতুন VLAN-এর চেকলিস্ট”: VLAN, trunk, SVI, relay, scope, firewall-এর নিয়ম, DHCP snooping-এর trusted port. Camera-র VLAN-কে বাকি নেটওয়ার্ক থেকে ACL দিয়ে আলাদা রাখুন (পর্ব ৫৭)।

কেস ১১ · ব্যস্ত client-এ TIME-WAIT জমে নতুন সংযোগ ব্যর্থ (কঠিন)

রিভিশন: পর্ব ২৯ · TIME-WAIT, পর্ব ২৭ · port, পর্ব ৪৩, পর্ব ৫৬

লক্ষণ: একটি Linux সার্ভিস প্রতি অনুরোধে একটি নতুন HTTP সংযোগ খোলে আর উত্তর পেয়েই বন্ধ করে — সব অনুরোধ একটি ভেতরের API 203.0.113.10:443-এ। Traffic প্রতি সেকেন্ডে প্রায় ২ হাজার অনুরোধে উঠতেই log ভরে যায় connect: Cannot assign requested address (EADDRNOTAVAIL)-এ।

কেস ১১তদন্ত — প্রশ্ন, অনুমান, কমান্ড, কারণ, সমাধান আর প্রতিরোধ

যে প্রশ্ন করবেন: সংযোগ কে বন্ধ করে — client না সার্ভার? HTTP client-এ keep-alive বা connection pool চালু? গন্তব্য একটিই ঠিকানা আর port?

অনুমান: যে পক্ষ আগে বন্ধ করে, TIME-WAIT তার কাছে থাকে (পর্ব ২৯)। Linux-এ TIME-WAIT ৬০ সেকেন্ড। একটি নির্দিষ্ট (উৎস IP, গন্তব্য IP, গন্তব্য port)-এর জন্য ভিন্ন সংযোগ মানে ভিন্ন উৎস port — আর ডিফল্ট ephemeral port-এর পরিসর সীমিত। তাই সন্দেহ: port exhaustion.

$ ss -s | grep -i timewait
TCP:   28771 (estab 312, closed 28301, orphaned 0, timewait 28233)
$ ss -Htan state time-wait dst 203.0.113.10 | wc -l
28221
$ sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768	60999

যুক্তি: প্রায় সব port TIME-WAIT-এ, আর গন্তব্য একটিই। নিচের হিসাব দেখায় কেন এটি অনিবার্য ছিল।

মূল কারণ: প্রতি অনুরোধে নতুন সংযোগ, আর client নিজেই বন্ধ করে। সমাধান (পছন্দের ক্রমে): (১) সংযোগ পুনর্ব্যবহার — HTTP keep-alive আর connection pool, বা HTTP/2-এ এক সংযোগে বহু অনুরোধ; (২) দরকার হলে port-এর পরিসর বাড়ানো; (৩) একাধিক গন্তব্য ঠিকানা বা উৎস ঠিকানা; (৪) Linux-এ net.ipv4.tcp_tw_reuse — শুধু বাইরে যাওয়া সংযোগে আর TCP timestamps চালু থাকলে নিরাপদে TIME-WAIT-এর port আবার নেয়। পুরোনো tcp_tw_recycle NAT-এর পেছনের client-দের ভাঙত, আর Linux 4.12-এ সরিয়ে ফেলা হয়েছে — AI বা পুরোনো ব্লগ এটি বললে বিশ্বাস করবেন না। প্রতিরোধ: TIME-WAIT আর ব্যবহৃত port-এর সংখ্যায় metric আর alert; load test-এ প্রকৃত হারে নতুন সংযোগ মাপা। মনে রাখুন, TIME-WAIT কোনো বাগ নয় — দেরিতে আসা পুরোনো segment থেকে নতুন সংযোগকে বাঁচায়।

// How many NEW connections per second can one client IP open to ONE server ip:port
// if every connection is closed by the client (client keeps TIME-WAIT)?
const TIME_WAIT_S = 60;                    // Linux keeps TIME-WAIT for 60 s (fixed in the kernel)
const ranges = {
  "Linux default 32768-60999": [32768, 60999],
  "Linux widened 1024-65535": [1024, 65535],
};
console.log("port range".padEnd(30) + "ports  max new conn/s");
for (const [name, [lo, hi]] of Object.entries(ranges)) {
  const ports = hi - lo + 1;
  console.log(name.padEnd(30) + String(ports).padStart(5) + String(Math.floor(ports / TIME_WAIT_S)).padStart(10));
}
// The client wants 2000 requests per second to 203.0.113.10:443
const need = 2000, ports = 60999 - 32768 + 1;
console.log("\nneed " + need + " req/s, one connection per request:");
console.log("  ports held in TIME-WAIT after 60 s = " + need * TIME_WAIT_S + " (have " + ports + ") -> " +
  (need * TIME_WAIT_S > ports ? "EXHAUSTED" : "ok"));
for (const reqPerConn of [10, 100]) {
  const newConnPerS = need / reqPerConn;
  console.log("  keep-alive, " + String(reqPerConn).padStart(3) + " req/conn -> " + String(newConnPerS).padStart(4) +
    " new conn/s, " + String(newConnPerS * TIME_WAIT_S).padStart(5) + " ports in TIME-WAIT -> ok");
}

আসল রানের আউটপুট:

port range                    ports  max new conn/s
Linux default 32768-60999     28232       470
Linux widened 1024-65535      64512      1075

need 2000 req/s, one connection per request:
  ports held in TIME-WAIT after 60 s = 120000 (have 28232) -> EXHAUSTED
  keep-alive,  10 req/conn ->  200 new conn/s, 12000 ports in TIME-WAIT -> ok
  keep-alive, 100 req/conn ->   20 new conn/s,  1200 ports in TIME-WAIT -> ok

প্রথম অংশ: ডিফল্ট পরিসরে 28232টি port; প্রতিটি ৬০ সেকেন্ড আটকে থাকলে একটি গন্তব্যে টানা সর্বোচ্চ প্রায় 470টি নতুন সংযোগ প্রতি সেকেন্ডে। পরিসর বাড়ালেও 1075 — ২ হাজারের অনেক নিচে। তাই port বাড়ানো একা সমাধান নয়।

দ্বিতীয় অংশ: প্রতি অনুরোধে নতুন সংযোগ হলে ৬০ সেকেন্ডে 120000টি port লাগত — আছে ২৮ হাজার, তাই EXHAUSTED. প্রতি সংযোগে ১০টি অনুরোধ হলেই নতুন সংযোগ নামে ২০০-তে, আটকে থাকা port ১২ হাজার — ok; ১০০টি হলে মাত্র ১২০০। এটিই ইন্টারভিউর সংখ্যাভিত্তিক উত্তর: “পুনর্ব্যবহার সমস্যাটিকে দশ থেকে একশো গুণ ছোট করে দেয়।”

৬ · ডিজাইন-ধাঁচের পরিস্থিতি — শাখা অফিস আর উচ্চ-প্রাপ্যতার ওয়েব সার্ভিস

ডিজাইনের প্রশ্নে কোনো একক সঠিক উত্তর নেই; দেখা হয় আপনি চাহিদা থেকে নকশায় যুক্তি দিয়ে যান কি না, আর trade-off স্বীকার করেন কি না। একটি সহজ কাঠামো: চাহিদা → ঠিকানা আর ভাগ → পথ আর redundancy → নিরাপত্তা → পরিচালনা আর পর্যবেক্ষণ → খরচ আর বৃদ্ধি. পুরো উদাহরণসহ অনুশীলন আছে পর্ব ৫৭-এর ক্যাপস্টোনে; এখানে ইন্টারভিউর ১৫ মিনিটের সংস্করণ।

ডিজাইন ১চট্টগ্রামে একটি নতুন শাখা অফিস — ৬০ জন কর্মী, ঢাকার প্রধান অফিসের সার্ভার ব্যবহার করবে। নেটওয়ার্কটি নকশা করুন। (মাঝারি)

আগে প্রশ্ন: কোন কোন অ্যাপ — ভেতরের ERP, ইমেইল, VoIP, ভিডিও কল? কতটা প্রাপ্যতা দরকার — ইন্টারনেট বন্ধ হলে কাজ থামবে কি? অতিথি Wi-Fi, CCTV, প্রিন্টার আছে? বাজেট আর স্থানীয় IT কর্মী আছে কি?

ঠিকানা আর ভাগ: প্রধান অফিসের পরিকল্পনার সাথে না মেলে এমন একটি ব্লক, যেমন 10.20.0.0/16 শাখার জন্য সংরক্ষণ, আর VLAN-এ ভাগ: কর্মী 10.20.10.0/24, VoIP 10.20.20.0/24, CCTV 10.20.30.0/24, অতিথি 10.20.40.0/24 (শুধু ইন্টারনেট), management 10.20.99.0/24. একটি /24-এ ২৫৪টি host — ৬০ জনের দ্বিগুণ বৃদ্ধিতেও যথেষ্ট (পর্ব ১৭)। DHCP স্থানীয়ভাবে, বা প্রধান অফিস থেকে relay দিয়ে — কেস ১০ মনে রাখুন।

পথ আর redundancy: দুটি ভিন্ন ISP (আলাদা পথে আসা fibre হলে ভালো); প্রধান অফিসের সাথে দুটির ওপর দিয়েই site-to-site VPN (IPsec বা WireGuard, পর্ব ৪৯), বা SD-WAN — যা link-এর মান দেখে traffic সরায়। Tunnel-এর MTU আর MSS clamping (কেস ৩)। ইন্টারনেট সরাসরি শাখা থেকে (local breakout), শুধু ভেতরের traffic tunnel-এ।

LAN: একটি বা দুটি access switch (PoE — ফোন, AP, camera-র জন্য), uplink-এ trunk; ছোট অফিসে এক core যথেষ্ট, তবে STP চালু রাখা (পর্ব ১২)। Wi-Fi: কয়েকটি AP, WPA3-Enterprise কর্মীদের জন্য, অতিথির জন্য আলাদা SSID আর VLAN (পর্ব ১৪)।

নিরাপত্তা: শাখার firewall-এ zone: অতিথি → শুধু ইন্টারনেট; CCTV → শুধু recorder; কর্মী → ভেতরের অ্যাপ; management শুধু admin-দের থেকে। DHCP snooping আর port security (পর্ব ৫০)।

VoIP আর QoS: voice VLAN, DSCP EF, আর WAN-এ SQM (কেস ৯)।

পরিচালনা: কেন্দ্রীয় log, SNMP বা telemetry, config-এর backup আর version control, দূর থেকে out-of-band প্রবেশ (যেমন 4G modem-এর মাধ্যমে)।

Trade-off বলুন: দুই ISP খরচ বাড়ায়, কিন্তু একটি বন্ধ হলে পুরো শাখা অচল হওয়ার খরচ বেশি; SD-WAN সহজ পরিচালনা দেয়, কিন্তু vendor-নির্ভরতা বাড়ায়।

ডিজাইন ২একটি উচ্চ-প্রাপ্যতার (highly available) ওয়েব সার্ভিসের নেটওয়ার্ক নকশা করুন — লক্ষ্য বছরে মোট কয়েক ঘণ্টার কম বন্ধ থাকা। (কঠিন)

আগে প্রশ্ন আর সংখ্যা: কত ব্যবহারকারী, কোন অঞ্চলে? প্রতি সেকেন্ডে কত অনুরোধ, peak কত? Static বনাম dynamic অনুপাত? ৯৯.৯% মানে বছরে প্রায় ৮.৮ ঘণ্টা বন্ধ থাকা যায়; ৯৯.৯৯% মানে প্রায় ৫৩ মিনিট — প্রতিটি “নয়” খরচ অনেক বাড়ায়।

স্তরে স্তরে single point of failure সরানো:

  • DNS: দুটি ভিন্ন DNS সরবরাহকারী বা anycast DNS; সঠিক TTL — failover-এ দ্রুত বদলানোর জন্য কম, কিন্তু খুব কম নয় (পর্ব ৩৫)।
  • Edge: CDN — static কনটেন্ট, TLS termination, DDoS-এর প্রথম ঢাল (পর্ব ৩৮, ৫০)।
  • অঞ্চল আর zone: অন্তত দুটি availability zone-এ সার্ভার; বড় লক্ষ্য হলে দুটি region আর GSLB বা anycast দিয়ে বণ্টন (পর্ব ৫২, ৫৪)।
  • Load balancer: নিজেই redundant — managed LB, বা দুটি LB আর VRRP-এর মতো ভাসমান ঠিকানা; health check যা আসল নির্ভরতা (database) মেপে বলে “সুস্থ”, কিন্তু এতটা কঠোর নয় যে database-এর এক মুহূর্তের ধীরতায় সব সার্ভার একসাথে বাদ পড়ে (পর্ব ৫২)।
  • Data center-এর ভেতরে: leaf-spine আর ECMP — একটি link বা switch গেলে traffic বাকিগুলোতে ভাগ হয়; সার্ভারে দুটি NIC দুটি switch-এ।
  • সংযোগের আচরণ: keep-alive timeout-এর ক্রম (কেস ৪), connection draining, client-এ retry — exponential backoff আর jitter-সহ, যাতে একসাথে সবাই আবার চেষ্টা করে ঝড় না তোলে।
  • নিরাপত্তা: শুধু LB public; সার্ভার private subnet-এ; security group-এ ন্যূনতম port (কেস ৫); বাইরে যাওয়া traffic NAT gateway দিয়ে।

পর্যবেক্ষণ: বাইরে থেকে synthetic check বহু অঞ্চল থেকে, IPv4 আর IPv6 দুটোতেই (কেস ২); 5xx-এর হার আর p99 latency-তে alert; failover নিয়মিত অনুশীলন — যে failover কখনো পরীক্ষা হয়নি, সেটি কাজ করবে বলে ধরে নেওয়া যায় না।

Trade-off: বহু-region সক্রিয়-সক্রিয় নকশা ডেটার সামঞ্জস্য কঠিন করে (DBMS · distributed database); সক্রিয়-নিষ্ক্রিয় সহজ, কিন্তু failover-এ কয়েক মিনিট যায়। খরচ, জটিলতা আর লক্ষ্যের মধ্যে আপনি কোথায় দাঁড়ালেন — সেটি স্পষ্ট বলুন।

৭ · একটি mock interview — প্রশ্ন আর শক্তিশালী উত্তর

নিচের কথোপকথনটি বানানো — কোনো নির্দিষ্ট প্রতিষ্ঠানের নয় — একটি SRE বা network engineer পদের ২৫ মিনিটের রাউন্ডের আদলে। প্রতিটি উত্তরের পরে ছোট মন্তব্যে বলা আছে, উত্তরটি কেন ভালো। পড়ার সময় প্রতিটি প্রশ্নের পরে থেমে নিজের উত্তর আগে বলুন।

পরীক্ষক: একজন গ্রাহক বলছেন, “আপনাদের সাইট আজ খুব ধীর।” আপনি কী করবেন?

প্রার্থী: আগে কয়েকটি প্রশ্ন করব। শুধু এই গ্রাহক, নাকি অনেকে? কবে থেকে? সব পাতা, নাকি কিছু? “ধীর” মানে পাতা আসতে দেরি, নাকি খোলার পরে ব্যবহারে দেরি? আর আজ আমাদের দিকে কিছু deploy বা পরিবর্তন হয়েছে কি না, সেটি আমি নিজে দেখব।

মন্তব্য: সরাসরি সমাধানে না গিয়ে পরিধি ঠিক করা, আর “কী বদলেছে” প্রথমেই।

পরীক্ষক: ধরুন, শুধু একটি ISP-র ব্যবহারকারীরা, সকাল থেকে, সব পাতায়।

প্রার্থী: তাহলে সার্ভার-দিকের সমস্যা কম সম্ভাব্য, কারণ অন্য ISP ঠিক আছে। আমার অনুমান ক্রমানুসারে: ওই ISP থেকে আমাদের CDN পর্যন্ত পথ বদলেছে, বা কোনো link ভিড়ে; দ্বিতীয়ত CDN ভুল edge বেছে দিচ্ছে। যাচাই করব RUM-এর ডেটা ভাগ করে — DNS, connect, TTFB আলাদা। যদি connect-এর সময়ই বড়, তাহলে RTT বড় — পথের সমস্যা।

মন্তব্য: লক্ষণের জোড়া (এক ISP খারাপ, বাকিরা ভালো) থেকে যুক্তি, আর সময়কে ভাগ করে মাপা।

পরীক্ষক: Connect ১৯০ ms, অন্য ISP-তে ২৫ ms. এখন?

প্রার্থী: RTT প্রায় আটগুণ — দেশের ভেতরের পথে এটা অস্বাভাবিক, বিদেশ ঘুরে আসার মতো। ওই ISP-র একজন ব্যবহারকারীর অনুমতি নিয়ে, বা ওই ISP-তে আমাদের কোনো probe থাকলে সেখান থেকে, mtr চালাব ASN-সহ, দেখব কোন hop-এ RTT লাফায় আর কোন AS-এ। একই সাথে CDN-এর ড্যাশবোর্ডে দেখব ওই ISP-র traffic কোন edge-এ যাচ্ছে। প্রমাণ পেলে ISP আর CDN দুই পক্ষকে সময়, mtr আর ASN পাঠাব; আর সাময়িকভাবে CDN-কে বলব ওই ISP-কে অন্য edge-এ পাঠাতে।

মন্তব্য: সংখ্যার তুলনা, নির্দিষ্ট কমান্ড, অনুমতির কথা, আর “আমার নিয়ন্ত্রণের বাইরে হলে কী করব” — বাস্তববোধ।

পরীক্ষক: ঠিক আছে। একটু অন্য দিকে যাই — HTTP/3 চালু করলে কি এই ব্যবহারকারীরা উপকৃত হবেন?

প্রার্থী: কিছুটা। নতুন সংযোগে QUIC এক RTT বাঁচায় — RTT ১৯০ ms হলে প্রতি নতুন সংযোগে প্রায় ১৯০ ms কম, আর loss থাকলে HTTP/2-এর মতো এক stream-এর loss বাকিদের আটকায় না। কিন্তু মূল সমস্যা, অর্থাৎ বড় RTT, থেকেই যায় — প্রতিটি round trip এখনো ১৯০ ms. তাই এটা উপশম, চিকিৎসা নয়। আর কিছু নেটওয়ার্ক UDP আটকায়, তাই TCP-তে ফেরার পথ রাখতে হবে।

মন্তব্য: সুবিধা সংখ্যায়, সীমা স্পষ্ট — “উপশম, চিকিৎসা নয়”।

পরীক্ষক: শেষ প্রশ্ন — এমন ঘটনা আবার হলে যেন আগে জানতে পারেন, কী করবেন?

প্রার্থী: তিনটি জিনিস। ISP আর শহর ধরে RUM-এর latency-তে alert, যাতে গ্রাহকের আগে আমরা জানি। কয়েকটি প্রধান ISP-তে synthetic probe, IPv4 আর IPv6 দুটোতে। আর ঘটনার পরে একটি blameless পর্যালোচনা — সময়রেখা, কী কাজ করল, কী করল না, আর যোগাযোগের তালিকা হালনাগাদ — ISP আর CDN-এর কার সাথে যোগাযোগ করতে হয়।

মন্তব্য: প্রতিরোধ আর শেখা দিয়ে শেষ — সিনিয়র পদের প্রত্যাশা।

এই উত্তরগুলোতে যা লক্ষ করবেন
  • প্রতিটি দাবির পেছনে একটি সংখ্যা বা একটি কমান্ড।
  • অনুমান তালিকা করে, সবচেয়ে সম্ভাব্যটি আগে, আর কোন প্রমাণ কোনটি বাদ দেয় — তা বলা।
  • নিজের নিয়ন্ত্রণের সীমা স্বীকার করা, আর সেখানে কী করবেন তা জানা।
  • কোনো উত্তর অজানা হলে “নিশ্চিত নই, এভাবে যাচাই করব” — বানিয়ে বলার চেয়ে অনেক ভালো।

৮ · AI দিয়ে প্রস্তুতি — পরিস্থিতির অনুশীলন, যাচাইসহ

ইন্টারভিউ চলাকালীন AI-এর সাহায্য অনেক জায়গায় নিষিদ্ধ। নিয়ম প্রতিষ্ঠানভেদে আলাদা আর বদলায় — আগে জিজ্ঞেস করে নিন, অনুমতি না থাকলে ব্যবহার করবেন না। প্রস্তুতির সময় অবশ্য AI ভালো অনুশীলন-সঙ্গী, যদি তাকে প্রশ্নকর্তা বানান, উত্তরদাতা নয়।

পরিস্থিতির প্রশ্নে AI-এর ভুলগুলো চেনা দরকার, কারণ সেগুলো আত্মবিশ্বাসী শোনায়:

AI-এর সাধারণ ভুলউদাহরণকীভাবে ধরবেন
পুরোনো কমান্ডifconfig, netstat, routeআধুনিক Linux-এ ip, ss; man page দেখুন
বিপজ্জনক “সমাধান”“firewall বন্ধ করে দিন”, “সব ICMP আটকান”, tcp_tw_recycle চালুকেস ৩, ৫, ১১ — প্রতিটি সমাধানের ঝুঁকি জিজ্ঞেস করুন
Vendor-এর কনফিগ সর্বজনীন বলেip helper-address সব যন্ত্রে একইনিজের যন্ত্রের নথি দেখুন; lab-এ পরীক্ষা
ভুল হিসাবMSS, port-এর সংখ্যা, RTT-এর যোগফল, subnetএই পাতার হিসাবগুলোর মতো নিজে চালিয়ে মেলান
বানানো RFC বা ডিফল্ট মান“RFC 9999 অনুযায়ী…”, ভুল timeoutRFC Editor-এ খুঁজুন; নিজের সিস্টেমে sysctl দেখুন
প্রমাণ ছাড়া এক কারণে লাফ“এটা নিশ্চয়ই DNS”জিজ্ঞেস করুন: কোন আউটপুট এটা প্রমাণ বা বাতিল করবে?

নিচের prompt দিয়ে একটি পরিস্থিতিভিত্তিক mock interview চালান — AI-কে উত্তর দিতে নিষেধ করা হয়েছে, আর ধাপে ধাপে “আউটপুট” দিতে বলা হয়েছে, যেন বাস্তব তদন্তের মতো লাগে:

তুমি একজন অভিজ্ঞ network/SRE ইন্টারভিউয়ার। আমার সাথে একটি পরিস্থিতিভিত্তিক নেটওয়ার্ক সমস্যা খোঁজার ইন্টারভিউ নাও। নিয়ম: ১. একটি বাস্তবসম্মত সমস্যার শুধু লক্ষণ দাও (DNS, MTU, firewall, load balancer, TLS, routing, DHCP, Kubernetes বা TCP-র কোনো একটি)। মূল কারণ গোপন রাখো। ২. আমি প্রশ্ন করলে উত্তর দাও; আমি কোনো কমান্ড চালাতে চাইলে তার বাস্তবসম্মত আউটপুট দাও — শুধু documentation IP (192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24) আর example.com ব্যবহার করবে। ৩. আমি না চাইলে সমাধান বলবে না। আমি ভুল পথে গেলেও প্রথমে থামাবে না — আউটপুট দিয়েই বুঝতে দাও। ৪. কোনো কমান্ড বা ডিফল্ট মান নিয়ে নিশ্চিত না হলে "নিশ্চিত নই" বলবে, বানাবে না। ৫. শেষে পাঁচটি দিকে ১–৫ নম্বর দাও: প্রশ্ন করা, অনুমানের ক্রম, প্রমাণ ব্যবহার, সমাধান ও প্রতিরোধ, যোগাযোগ। প্রতিটির জন্য একটি নির্দিষ্ট পরামর্শ দাও। প্রশংসা নয়, সৎ মূল্যায়ন চাই। প্রথম সমস্যার লক্ষণ দিয়ে শুরু করো।

AI-এর দেওয়া “আউটপুট” বানানো — তাই শেষে প্রতিটি গুরুত্বপূর্ণ দাবি নিজে যাচাই করুন: একটি VM বা container-এ সমস্যাটি ঘটিয়ে দেখুন (যেমন ip link set dev eth0 mtu 1400 দিয়ে কেস ৩), tcpdump দিয়ে নিজের ল্যাবের packet দেখুন, আর কোনো সংখ্যা এলে হিসাব নিজে চালান।

AI দিয়ে অনুশীলনের চেকলিস্ট

৯ · কোর্সের সমাপ্তি — ১০টি মডিউলে যা শিখলেন, আর এরপর কোথায়

আপনি কোর্সের শেষ পর্বে পৌঁছেছেন — অভিনন্দন। লক্ষ করুন, Enter চাপার একটি প্রশ্নের উত্তর দিতে গিয়েই আপনি প্রায় পুরো কোর্স ছুঁয়ে গেলেন। এটাই নেটওয়ার্কের আসল রূপ: আলাদা আলাদা protocol নয়, একসাথে কাজ করা স্তরের একটি ব্যবস্থা। নিচের টেবিলে প্রতিটি মডিউলের সারাংশ আর এই পাতার কোন অংশে তা কাজে লাগল।

মডিউলযা শিখলেনএই পাতায় কোথায় লাগলশুরুর পর্ব
১ · নেটওয়ার্কের ভিত্তিস্তর, encapsulation, packet switching, delay আর throughput, Linux-এর টুলlatency budget, কেস ৯-এর queueing delay০১
২ · Physical আর data linkসংকেত, error detection, ARQ, MAC protocol, Ethernet, VLAN, Wi-FiARP-এর ধাপ, কেস ১০-এর VLAN আর trunk০৭
৩ · Network স্তরIPv4, subnetting, DHCP, ARP, NAT, ICMP, IPv6NAT-এর ধাপ, কেস ২, ৩, ১০১৫
৪ · Routingrouting table, distance vector, link state, BGP, multicast আর QoSISP আর BGP-র ধাপ, কেস ৬২২
৫ · Transport স্তরport, UDP, TCP-র সংযোগ, নির্ভরযোগ্যতা, flow আর congestion control, QUIChandshake, slow start, কেস ৪ আর ১১২৭
৬ · Application স্তরDNS, HTTP, HTTP/2-3, cache আর CDN, ইমেইল, real-timeDNS-এর পুনরাবৃত্ত খোঁজ, HTTP/2, CDN, কেস ১ আর ৯৩৪
৭ · Socket প্রোগ্রামিংTCP ও UDP socket, concurrent আর event-driven সার্ভার, ছোট HTTP সার্ভারkeep-alive, connection reuse, কেস ১১৪১
৮ · নেটওয়ার্ক নিরাপত্তাCIA, cryptography, TLS, firewall আর VPN, আক্রমণ ও প্রতিরক্ষাHSTS, TLS 1.3, কেস ৫ আর ৭৪৬
৯ · আধুনিক নেটওয়ার্কমোবাইল, data center, SDN, cloud আর container, সমস্যা খোঁজা, পারফরম্যান্স, ক্যাপস্টোনload balancer, কেস ৪, ৮, ডিজাইন ১–২৫১
১০ · পরীক্ষা ও ইন্টারভিউnumerical, MCQ, লিখিত-ভাইভা, ধারণার আর পরিস্থিতির ইন্টারভিউএই পাতা পুরোটাই৫৮

নিজেকে যাচাইয়ের তালিকা

নিচের প্রতিটি কাজ খাতা বা ফাঁকা কাগজে, বই না দেখে করতে পারলে টিক দিন। যেগুলোতে আটকান, শেষের সংখ্যার পর্বটি আবার দেখুন।

এরপর কোথায়

নেটওয়ার্ক একা থাকে না — এটি OS, অ্যালগরিদম আর ডেটাবেসের সাথে মিলেই বাস্তব সিস্টেম বানায়। ABCL TECH-এ আপনার পরের পদক্ষেপের কয়েকটি পথ:

অপারেটিং সিস্টেম

Socket buffer, epoll, container আর namespace — নেটওয়ার্ক stack যে OS-এর ভেতরে চলে, তার পুরো ছবি। Backend, SRE আর DevOps-এর জন্য সবচেয়ে কাছের পরের কোর্স।

ডেটা স্ট্রাকচার ও অ্যালগরিদম

Dijkstra, Bellman-Ford, hash table, heap — routing আর load balancing-এর পেছনের অ্যালগরিদম, আর কোডিং ইন্টারভিউর প্রস্তুতি।

DBMS আর SQL

Replication, distributed database আর transaction — উচ্চ-প্রাপ্যতার সার্ভিসের ডেটার দিক।

C প্রোগ্রামিং

Socket প্রোগ্রামিং আরও গভীরে নিতে চাইলে C-র pointer, মেমরি আর system call-এর ভিত মজবুত করুন।

আর যাঁরা একদম গোড়া থেকে কাউকে শেখাতে চান, বা নিজের ভিত আবার দেখতে চান, তাঁদের জন্য কম্পিউটার ফান্ডামেন্টালস ও ICT কোর্সটি আছে।

নিজেকে যাচাই করুন

প্রতিটি প্রশ্ন একটি ছোট পরিস্থিতি। ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমপ্রথমবার একটি HTTPS সাইটের ঠিকানা লিখে Enter চাপলে (TCP-র ওপর HTTP/2, কোনো cache নেই) ঘটনাগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. ব্রাউজার URL বোঝে আর HSTS-এর তালিকা দেখে
  2. Resolver নামটির IP ঠিকানা খুঁজে আনে
  3. সার্ভারের সাথে TCP-র SYN, SYN-ACK, ACK
  4. TLS handshake আর certificate যাচাই
  5. HTTP/2-এ GET অনুরোধ আর উত্তর

(সহজ) একটি অফিসে curl --resolve app.example.com:443:10.0.5.20 https://app.example.com/ ঠিক উত্তর দেয়, কিন্তু getent hosts app.example.com কিছুই দেখায় না। dig @10.0.0.53 app.example.com timeout হয়, আর dig @10.0.0.54 app.example.com সঠিক ঠিকানা দেয়। সবচেয়ে সম্ভাব্য সমস্যা কোথায়?

  • যন্ত্রগুলোকে দেওয়া প্রথম DNS resolver-টি কাজ করছে না
  • সার্ভারের TLS certificate-এর মেয়াদ শেষ
  • DNS zone থেকে record মুছে গেছে
  • সার্ভারের firewall port 443 আটকাচ্ছে

(কঠিন) একটি site-to-site VPN-এর ওপর দিয়ে ছোট অনুরোধ চলে, কিন্তু বড় upload আটকে যায়। ping -M do -s 1472 কোনো উত্তর বা ত্রুটিবার্তা ছাড়াই ব্যর্থ, আর ping -M do -s 1400 সফল। কোন সমাধানটি সবচেয়ে উপযুক্ত?

  • ISP-র কাছ থেকে বেশি bandwidth কেনা
  • Tunnel-এর router-এ MSS clamping, আর ICMP “Fragmentation Needed” চলতে দেওয়া
  • TCP-র receive window বাড়ানো
  • নিরাপত্তার জন্য সব ICMP পুরোপুরি বন্ধ করা

(সহজ) একটি cloud VM-এ nc -vz 203.0.113.30 22 সফল, কিন্তু nc -vz 203.0.113.30 443 timeout হয়। VM-এর ভেতরে ss -ltn দেখায় nginx 0.0.0.0:443-এ শুনছে, আর tcpdump বাইরে থেকে চেষ্টার সময় port 443-এ কোনো packet দেখে না। কোথায় খুঁজবেন?

  • nginx-কে 127.0.0.1 থেকে সব ঠিকানায় শোনাতে হবে
  • VM-এর ভেতরের nftables-এর নিয়ম
  • Cloud-এর security group বা নেটওয়ার্ক ACL-এর inbound নিয়ম
  • DNS-এর A record

(মাঝারি) একটি load balancer-এর idle timeout ৬০ সেকেন্ড, আর পেছনের অ্যাপ সার্ভারের HTTP keep-alive timeout ৫ সেকেন্ড। অল্প কিছু অনুরোধ এলোমেলোভাবে 502 পায়, আর সার্ভারের log-এ সেগুলোর চিহ্ন নেই। সবচেয়ে উপযুক্ত সংশোধন কোনটি?

  • Health check-এর interval কমানো
  • আরও অ্যাপ সার্ভার যোগ করা
  • LB-র idle timeout ১২০ সেকেন্ড করা
  • সার্ভারের keep-alive timeout LB-র চেয়ে বড় করা, যেমন ৬৫ সেকেন্ড

(মাঝারি) DNS-এর উত্তর আগে থেকেই cache-এ আছে। Client আর সার্ভারের মধ্যে RTT ৪০ ms. TCP-র ওপর TLS 1.3 (পূর্ণ handshake, resumption নয়) দিয়ে একটি HTTPS GET পাঠালে উত্তরের প্রথম বাইট আসতে কমপক্ষে কত সময় লাগবে? সার্ভারের প্রক্রিয়াকরণ আর transmission delay শূন্য ধরুন।

  • ৮০ ms
  • ১২০ ms
  • ১৬০ ms
  • ৪০ ms

(সহজ) নতুন VLAN 30 (10.0.30.0/24, gateway 10.0.30.1 একটি L3 switch-এ) বানানোর পর সেখানকার যন্ত্রগুলো 169.254.x.x ঠিকানা নিচ্ছে। DHCP সার্ভার 10.0.0.10 অন্য VLAN-এ, আর পুরোনো VLAN-গুলো ঠিকানা পায়। সবচেয়ে সম্ভাব্য অনুপস্থিত জিনিস কোনটি?

  • যন্ত্রগুলোর ARP cache
  • VLAN 30-এর জন্য NAT-এর নিয়ম
  • VLAN 30-এর gateway interface-এ DHCP relay
  • DNS সার্ভারে VLAN 30-এর record

(কঠিন) একটি Linux client প্রতিটি অনুরোধে একটি নতুন TCP সংযোগ খোলে আর নিজেই বন্ধ করে — সব অনুরোধ একটি ip:port-এ, প্রতি সেকেন্ডে ২,০০০টি। Ephemeral port-এর পরিসর ডিফল্ট ৩২৭৬৮–৬০৯৯৯ আর TIME-WAIT ৬০ সেকেন্ড। কিছুক্ষণ পরে EADDRNOTAVAIL আসে। সবচেয়ে ভালো দীর্ঘমেয়াদি সমাধান কোনটি?

  • tcp_tw_recycle চালু করা
  • শুধু port-এর পরিসর ১০২৪–৬৫৫৩৫ করা
  • TIME-WAIT অবস্থা পুরো বন্ধ করে দেওয়া
  • HTTP keep-alive আর connection pool দিয়ে সংযোগ পুনর্ব্যবহার

(মাঝারি) নতুন certificate বসানোর পর ডেস্কটপ ব্রাউজারে সাইট ঠিক খোলে, কিন্তু একটি সার্ভার থেকে curl আর কোম্পানির মোবাইল অ্যাপ বলে “unable to verify the first certificate”. openssl s_client -showcerts শুধু depth 0-এর certificate দেখায়। মূল কারণ কী?

  • সার্ভার intermediate certificate পাঠাচ্ছে না
  • Leaf certificate-এর মেয়াদ শেষ
  • Client যন্ত্রের ঘড়ি ভুল
  • Client SNI পাঠাচ্ছে না

(মাঝারি) একটি ছোট অফিসে কেউ বড় cloud backup চালু করলেই VoIP কল ভেঙে যায়। অলস অবস্থায় ISP-র gateway-তে ping ৮ ms, backup চলার সময় প্রায় ৪৫০ ms, কিন্তু packet loss প্রায় শূন্য। প্রথম কোন পদক্ষেপ সবচেয়ে কার্যকর?

  • VoIP-এর codec কম bitrate-এর করা
  • শুধু ফোনে DSCP EF চিহ্ন দেওয়া
  • Router-এ SQM — upload-কে সামান্য কম হারে shape করে fq_codel বা CAKE
  • Wi-Fi-র channel বদলানো

(কঠিন) Kubernetes-এ shop namespace-এর নতুন pod (label app=web) payments namespace-এর api service-এ timeout পায়। পূর্ণ নাম ঠিক ঠিকানায় resolve হয়, service-এর endpoint আছে, আর payments-এ একটি default-deny ingress নীতি ও একটি নীতি আছে যা শুধু shop-এর app=checkout pod-কে অনুমতি দেয়। একই shop namespace-এর পুরোনো checkout pod একই service ঠিকঠাক ডাকতে পারে। কারণ কী?

  • CoreDNS নাম খুঁজে পাচ্ছে না
  • NetworkPolicy নতুন pod-এর label-কে অনুমতি দেয় না
  • Service-এর selector কোনো pod-এ মেলে না
  • kube-proxy চলছে না

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব শব্দ এখানে একসাথে:

মনে রাখুন

  1. পরিস্থিতির প্রশ্নে কাঠামোই শক্তি: প্রশ্ন → অনুমান → স্তর ধরে খোঁজা → সংখ্যা ও প্রমাণ → মূল কারণ → সমাধান → প্রতিরোধ। জোরে ভাবুন, আর কোথায় থামবেন তা জানুন।
  2. Enter চাপার গল্প পুরো কোর্সের সারাংশ: URL আর HSTS, DNS, ARP, NAT, BGP, TCP বা QUIC, TLS 1.3, HTTP/2-3, CDN, load balancer, render — আর প্রতিটি handshake RTT গুনে খরচ করে।
  3. লক্ষণের জোড়া অর্ধেক উত্তর: IP চলে কিন্তু নাম নয় (DNS), ছোট চলে কিন্তু বড় নয় (MTU), SSH চলে কিন্তু HTTPS নয় (firewall), এক ISP খারাপ কিন্তু বাকিরা ভালো (পথ)। Timeout আর refused আলাদা অর্থ বহন করে।
  4. অনেক এলোমেলো সমস্যার পেছনে timer আর সীমা: keep-alive-এর ক্রম, TIME-WAIT আর port, TTL আর cache, buffer-এর আকার — সংখ্যা জানলে সমস্যা হিসাব করে দেখানো যায়।
  5. শেখা এখানেই শেষ নয়: নিজের ল্যাবে (VM, container) প্রতিটি কেস ঘটিয়ে দেখুন, capture পড়ুন, আর OS, DSA ও DBMS-এর সাথে মিলিয়ে বাস্তব সিস্টেমের পুরো ছবি তৈরি করুন।

এরপর: এটিই কোর্সের শেষ পর্ব — অভিনন্দন! কোর্স হোম-এ ফিরে পুরো রোডম্যাপ দেখুন, ড্যাশবোর্ডে মডিউল টেস্ট আর কোর্সের সমাপনী পরীক্ষা দিন, আর পর্ব ৬১-এর ধারণার প্রশ্ন আর এই পাতার ১১টি কেস থেকে প্রতি সপ্তাহে দুটি করে ঘড়ি ধরে, জোরে বলে অনুশীলন করুন। পরের কোর্স হিসেবে অপারেটিং সিস্টেম বা DSA বেছে নিতে পারেন।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান