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

নেটওয়ার্কিং ইন্টারভিউর প্রশ্ন — ধারণা থেকে বাস্তব সিস্টেম

Networking Interview Questions — Fundamentals, TCP/UDP/QUIC, HTTP and TLS, Routing and Switching, Backend Networking, Security and Linux Commands, with Follow-ups

Taught in Bangla, this page prepares networking interview questions by role: answer structure, fundamentals interviewers probe such as layers, addressing, ARP, DHCP, DNS and NAT, deep TCP, UDP and QUIC questions, HTTP, TLS and load balancers, routing and switching for network engineers, backend networking from sockets to Kubernetes, security, Linux command fluency, behavioural questions about outages, and a preparation plan.

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

  • পদ অনুযায়ী (network/system admin, NOC, network engineer, SRE/DevOps, backend, security analyst) কোন প্রশ্নে কতটা গভীরে যেতে হয় বোঝা
  • ARP, DHCP, DNS, NAT, TCP, QUIC, HTTP আর TLS-এর প্রশ্নে সংজ্ঞা থেকে শুরু করে বাস্তব সিস্টেমের আচরণ পর্যন্ত গুছিয়ে বলা
  • VLAN, STP, OSPF, BGP, ECMP আর subnetting-এর প্রশ্ন দ্রুত আর নির্ভুলভাবে সামলানো
  • backend আর SRE-র প্রশ্ন — socket, epoll, connection pool, timeout, retry, idempotency, Kubernetes Service আর DNS TTL-এর ফাঁদ
  • Linux-এর ip, ss, dig, curl, tcpdump, mtr আর nft কী বলে তা ব্যাখ্যা করতে পারা

১ · নেটওয়ার্কিং ইন্টারভিউ কীভাবে হয় — পদ অনুযায়ী জোর আর উত্তরের কাঠামো

পর্ব ৫৮–৬০-এ numerical, MCQ আর লিখিত-মৌখিক প্রশ্নের অনুশীলন হয়েছে। চাকরির ইন্টারভিউ আলাদা। সেখানে “TCP-র সংজ্ঞা লিখুন” প্রায় আসে না; আসে “একটি সার্ভিস মাঝে মাঝে ৫০২ দিচ্ছে, কোথা থেকে দেখবেন?” বা “এই ক্ষেত্রে TCP না UDP, কেন?”। ইন্টারভিউয়ার দেখেন আপনি ধারণাটি বাস্তব সিস্টেমের সাথে জুড়তে পারেন কি না। নিচের প্রশ্নগুলো নানা প্রতিষ্ঠানে প্রায়ই আসা ধরনের প্রশ্ন; কোনোটি কোনো নির্দিষ্ট প্রতিষ্ঠান বা পরীক্ষার প্রশ্ন বলে দাবি করা হচ্ছে না, আর প্রতিষ্ঠানভেদে ধরন অনেক বদলায়।

পদসাধারণত যেদিকে জোরএই পাতার যে অংশ বেশি কাজে লাগবে
Network / system administratorIP পরিকল্পনা, DHCP, DNS, VLAN, firewall, VPN, Windows ও Linux-এর কমান্ড, অফিস-নেটওয়ার্কের সমস্যাঅংশ ২, ৫, ৭, ৮
NOC engineermonitoring-এর alarm বোঝা, ping/traceroute/mtr পড়া, link আর BGP session-এর অবস্থা, escalation আর ticketঅংশ ২, ৫, ৮, ৯
Network engineerrouting আর switching-এর গভীরতা — VLAN, STP, OSPF, BGP, ECMP, দ্রুত subnetting, নকশার trade-offঅংশ ২, ৫, ৭
SRE / DevOps / platformLinux networking, DNS, load balancer, TLS, Kubernetes, timeout আর retry, packet captureঅংশ ৩, ৪, ৬, ৮
Backend / software engineerHTTP, TCP-র মূল আচরণ, socket, connection pool, retry আর idempotency, caching, CORSঅংশ ৩, ৪, ৬
Security analyst (প্রতিরক্ষা)firewall-এর নিয়ম, TLS আর certificate, log আর packet পড়া, DDoS-এর প্রতিরক্ষা, zero trustঅংশ ৪, ৭, ৮

পাঁচ ধাপের উত্তর-কাঠামো

সংজ্ঞা (এক বাক্য) → mechanism (কীভাবে কাজ করে) → trade-off (দাম কী) → বাস্তব উদাহরণ → কীভাবে যাচাই করবেন

প্রথম ৩০ সেকেন্ডে এক বাক্যের সংজ্ঞা আর মূল mechanism বলুন, তারপর থেমে জিজ্ঞেস করুন কোন দিকে গভীরে যাবেন। Trade-off বললে বোঝা যায় আপনি শুধু মুখস্থ করেননি; বাস্তব উদাহরণ (“অফিসে DHCP server বন্ধ থাকলে ল্যাপটপ 169.254.x.x পায়”) বললে বোঝা যায় হাতে কাজ করেছেন; আর যাচাইয়ের কমান্ড (ip neigh, dig, ss, tcpdump) বললে বোঝা যায় অনুমানে থেমে থাকেন না।

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

নিচের stepper-এ একটি সহজ প্রশ্ন কীভাবে ধাপে ধাপে গভীর হয়, দেখুন। ইন্টারভিউয়ার প্রায়ই ঠিক এভাবে “আর তারপর?” বলে খুঁড়তে থাকেন, যতক্ষণ না আপনার জ্ঞানের সীমায় পৌঁছান — সেখানে সৎ থাকাই আসল পরীক্ষা।

  1. ১ · সংজ্ঞাARP কী?
  2. ২ · mechanismrequest, reply, cache
  3. ৩ · ফলো-আপঅন্য subnet হলে?
  4. ৪ · গভীরদুর্বলতা আর রক্ষা
  5. ৫ · যাচাইনিজের চোখে দেখা
এই ধাপে
ইন্টারভিউয়ার বলেন
যা যাচাই হচ্ছে
উত্তরের মূল কথা
  1. সংজ্ঞা — এক বাক্যে। “ARP একই LAN-এর ভেতরে একটি IPv4 ঠিকানার মালিকের MAC ঠিকানা খুঁজে বের করে, কারণ Ethernet frame পাঠাতে গন্তব্য MAC লাগে।” এখানে থেমে যাওয়া যায়; ইন্টারভিউয়ার চাইলে এগোবেন।
  2. Mechanism. 192.168.1.10 broadcast-এ (ff:ff:ff:ff:ff:ff) জিজ্ঞেস করে “192.168.1.20 কার? 192.168.1.10-কে জানান” — এটি protocol-বার্তার নাম, তাই উদ্ধৃতিতে। মালিক unicast-এ উত্তর দেয়। দুই পক্ষই ফলটি ARP cache-এ কিছুক্ষণ রাখে, যাতে প্রতিটি প্যাকেটে আবার জিজ্ঞেস করতে না হয়।
  3. ফলো-আপ — অন্য subnet. 198.51.100.7 নিজের /24-এর বাইরে, তাই host গন্তব্যের জন্য ARP করে না; routing table দেখে default gateway-এর MAC খোঁজে। Frame-এর গন্তব্য MAC হয় gateway-এর, কিন্তু IP header-এর গন্তব্য থাকে 198.51.100.7 — প্রতিটি hop-এ MAC বদলায়, IP থাকে একই (NAT না থাকলে)।
  4. আরও গভীর — নিরাপত্তা। ARP-এ কোনো প্রমাণীকরণ নেই; কেউ মিথ্যা reply দিয়ে নিজেকে gateway দাবি করতে পারে (ARP spoofing, ধারণাগতভাবে)। প্রতিরক্ষা: managed switch-এ DHCP snooping আর তার টেবিল দিয়ে Dynamic ARP Inspection, client isolation, আর ওপরের স্তরে TLS — যাতে কেউ মাঝে বসলেও পড়তে না পারে। বৈধ ব্যবহারও বলুন: failover-এ নতুন মালিক gratuitous ARP পাঠিয়ে সবার cache হালনাগাদ করে।
  5. যাচাই। ip neigh cache দেখায় (REACHABLE, STALE, FAILED); tcpdump -n arp request আর reply দেখায়; Windows-এ arp -a. শেষে যোগ করুন: IPv6-এ ARP নেই, তার জায়গায় ICMPv6-ভিত্তিক NDP. এই পাঁচ ধাপ পর্ব ১৮ আর ২১-এর বিষয়; একই ছক যেকোনো প্রশ্নে খাটে।
প্র ০১যে প্রশ্নের উত্তর জানেন না, সেখানে কী বলবেন? (সহজ)

উত্তর: বানিয়ে বলবেন না। সৎভাবে সীমা বলুন, তারপর যা জানেন তা থেকে যুক্তি দিন, আর কীভাবে খুঁজে বের করবেন বলুন: “BGP-র ঠিক কোন attribute আগে তুলনা হয় তা নিশ্চিত মনে নেই। যা জানি — local preference AS-এর ভেতরে বেরোনোর পথ ঠিক করে, AS path ছোট হলে পছন্দ… নিশ্চিত হতে vendor-এর ডকুমেন্টেশন আর RFC 4271 দেখতাম, আর lab-এ দুটি route দিয়ে পরীক্ষা করতাম।”

ফলো-আপ: “তাহলে আন্দাজ করুন।” → আন্দাজকে আন্দাজ বলেই দিন, আর যুক্তিটি বলুন — ইন্টারভিউয়ার আসলে আপনার চিন্তার ধরন দেখছেন।

আরও গভীর ফলো-আপ: “Production-এ এমন হলে?” → “কেউ জানে না” অবস্থায় runbook, ডকুমেন্টেশন আর অভিজ্ঞ সহকর্মীর কাছে escalation-ই পেশাদার পথ; আত্মবিশ্বাসী ভুল সিদ্ধান্ত outage বড় করে।

প্র ০২“এক মিনিটে বলুন, TCP আর UDP-র পার্থক্য” — এত ছোট সময়ে কী রাখবেন, কী বাদ দেবেন? (সহজ)

উত্তর: তিনটি জিনিস: মূল পার্থক্য, তার দাম, আর একটি করে উদাহরণ। “TCP সংযোগ বানিয়ে ক্রমমতো, নির্ভরযোগ্য byte stream দেয়, flow আর congestion control-সহ; দাম handshake-এর দেরি আর হারানো প্যাকেটে অপেক্ষা। UDP শুধু datagram পাঠায় — সংযোগ নেই, নিশ্চয়তা নেই, কিন্তু হালকা আর দেরি কম। ওয়েব আর ফাইল-স্থানান্তরে TCP; DNS-এর ছোট প্রশ্ন, VoIP আর গেমে UDP; আর QUIC UDP-র ওপর নিজের নির্ভরযোগ্যতা বানায়।”

ফলো-আপ: “UDP-তে কি কখনো নির্ভরযোগ্যতা লাগে?” → হ্যাঁ, তখন application বা QUIC নিজে sequence, ACK আর retransmission যোগ করে (প্র ২২)।

আরও গভীর ফলো-আপ: “DNS কি শুধু UDP?” → না; বড় উত্তর, zone transfer আর DNS-over-TLS-এ TCP লাগে, আর TCP সমর্থন DNS-এর বাধ্যতামূলক অংশ (RFC 7766).

২ · মৌলিক ধারণা, যেখানে ইন্টারভিউয়ার গভীরে খোঁড়েন — স্তর, ঠিকানা, ARP, DHCP, DNS, NAT

রিভিশন: পর্ব ০৩ · OSI আর encapsulation, পর্ব ১২ · Ethernet আর switch, পর্ব ১৬ · IPv4, পর্ব ১৮ · DHCP আর ARP, পর্ব ১৯ · NAT, পর্ব ২০ · ICMP, পর্ব ২১ · IPv6, পর্ব ৩৫ · DNS

প্র ০৩OSI-র সাত স্তর বাস্তবে কি কাজে লাগে? Switch, router আর load balancer কোন স্তরে কাজ করে? (সহজ)

উত্তর: বাস্তব ইন্টারনেট চলে TCP/IP মডেলে, কিন্তু OSI-র নম্বরগুলো আলোচনার সাধারণ ভাষা — “L2 সমস্যা”, “L7 load balancer” বললে সবাই বোঝে। Switch মূলত L2 (MAC দেখে frame পাঠায়), router L3 (IP দেখে), সাধারণ firewall L3/L4 (ঠিকানা, port, অবস্থা), আর load balancer L4 (TCP/UDP সংযোগ) বা L7 (HTTP-র path, header) — কোনটি তা নির্ভর করে সে কী দেখে সিদ্ধান্ত নেয় তার ওপর।

ফলো-আপ: “TLS কোন স্তরে?” → TCP আর HTTP-র মাঝে; OSI-র কোনো একটি ঘরে পরিষ্কার বসে না — এই প্রশ্নে “মডেল একটি মানচিত্র, ভূখণ্ড নয়” বলাই ভালো উত্তর।

আরও গভীর ফলো-আপ: “Layer 3 switch তাহলে কী?” → hardware-এ (ASIC) routing করে এমন switch — VLAN-এর মধ্যে routing করে; নাম মার্কেটিংয়ের, কাজটি router-এরই।

প্র ০৪একটি প্যাকেট একটি router পার হলে header-এর কোন কোন ঘর বদলায়? (মাঝারি)

উত্তর: L2 পুরোটা নতুন হয়: পুরোনো Ethernet frame খুলে ফেলা হয় (decapsulation), আর পরের link-এর জন্য নতুন উৎস-MAC (router-এর বেরোনোর interface) আর গন্তব্য-MAC (next hop) দিয়ে নতুন frame বানানো হয় (encapsulation). IP header-এ TTL এক কমে, তাই IPv4 header checksum আবার হিসাব হয়। উৎস আর গন্তব্য IP একই থাকে।

ফলো-আপ: “কখন IP-ও বদলায়?” → NAT থাকলে (উৎস IP আর port, প্র ০৯)। আর MTU ছোট হলে IPv4-এ fragmentation (DF না থাকলে)।

আরও গভীর ফলো-আপ: “IPv6-এ কী আলাদা?” → header checksum নেই, তাই শুধু Hop Limit কমে; router fragment করে না — বড় প্যাকেটে ICMPv6 “Packet Too Big” ফেরত পাঠায়।

প্র ০৫MAC, IP আর port — তিন রকম ঠিকানা কেন? শুধু MAC দিয়ে পুরো ইন্টারনেট চলত না কেন? (সহজ)

উত্তর: তিনটি তিন প্রশ্নের উত্তর দেয়: MAC — “এই link-এ কোন যন্ত্র?”, IP — “পৃথিবীর কোন নেটওয়ার্কের কোন host?”, port — “সেই host-এর কোন প্রোগ্রাম?”। MAC সমতল (flat) — নির্মাতা অনুযায়ী দেওয়া, অবস্থান বোঝায় না; তাই শুধু MAC দিয়ে routing করতে প্রতিটি router-কে পৃথিবীর সব যন্ত্রের তালিকা রাখতে হতো। IP-র prefix অবস্থান বোঝায়, তাই একটি route পুরো নেটওয়ার্ক ঢাকে।

ফলো-আপ: “ডাকঘরের উদাহরণে?” → জেলা-থানা-গলি (IP prefix), বাড়ির নম্বর (host), আর বাড়ির কোন সদস্য (port); পাশের বাড়ির হাতে চিঠি তুলে দেওয়া (MAC) শুধু শেষ ধাপে।

আরও গভীর ফলো-আপ: “ফোনের MAC বারবার বদলায় কেন?” → গোপনীয়তার জন্য অনেক OS Wi-Fi-তে এলোমেলো MAC ব্যবহার করে; তাই MAC দিয়ে যন্ত্র চেনা বা DHCP reservation এখন কম নির্ভরযোগ্য।

প্র ০৬DHCP কীভাবে ঠিকানা দেয়? প্রথম বার্তা broadcast কেন? 169.254.x.x পেলে কী বুঝবেন? (সহজ)

উত্তর: চার ধাপ — DORA: Discover (client broadcast), Offer (server ঠিকানা প্রস্তাব করে), Request (client একটি offer বেছে নেয়), Ack (server নিশ্চিত করে, সাথে mask, gateway, DNS আর lease-এর মেয়াদ)। Client-এর তখনো কোনো IP নেই, server-এর ঠিকানাও জানে না — তাই উৎস 0.0.0.0, গন্তব্য 255.255.255.255, UDP port 68 থেকে 67. ঠিকানা 169.254.x.x মানে কোনো server উত্তর দেয়নি, আর OS নিজে link-local ঠিকানা নিয়েছে (APIPA) — ইন্টারনেট চলবে না।

ফলো-আপ: “Server অন্য subnet-এ থাকলে broadcast পৌঁছাবে কীভাবে?” → router-এ DHCP relay (Cisco-তে ip helper-address) broadcast ধরে server-এ unicast করে, আর giaddr দেখে server ঠিক pool বাছে।

আরও গভীর ফলো-আপ: “অফিসে কেউ নিজের router লাগিয়ে দিল, সবার ঠিকানা ভুল আসছে।” → rogue DHCP server; প্রতিরক্ষা switch-এ DHCP snooping — শুধু uplink port-কে trusted রাখা।

প্র ০৭একটি নাম resolve হওয়ার পুরো পথ বলুন — recursive আর iterative-এর পার্থক্য কোথায়? (মাঝারি)

উত্তর: অ্যাপ OS-এর stub resolver-কে জিজ্ঞেস করে (আগে /etc/hosts আর cache). Stub একটি recursive resolver-কে (ISP-এর, অফিসের বা public) recursive প্রশ্ন করে — “পুরো উত্তর এনে দিন”। Resolver cache-এ না পেলে iterative পথে হাঁটে: root server → .com-এর TLD server → example.com-এর authoritative server; প্রতিটি শুধু “পরের জনকে জিজ্ঞেস করুন” (referral) দেয়। শেষ উত্তর TTL পর্যন্ত cache-এ থাকে।

ফলো-আপ: “TTL কম রাখলে লাভ-ক্ষতি?” → পরিবর্তন দ্রুত ছড়ায়, কিন্তু resolver বেশি প্রশ্ন পাঠায় — দেরি আর authoritative-এর ভার বাড়ে (প্র ৪৯)।

আরও গভীর ফলো-আপ: “নাম না থাকলে সেই ‘নেই’ উত্তরও কি cache হয়?” → হ্যাঁ, negative caching — SOA রেকর্ড অনুযায়ী (RFC 2308). তাই নতুন রেকর্ড বানানোর আগে কেউ জিজ্ঞেস করে থাকলে কিছুক্ষণ NXDOMAIN-ই আসতে পারে।

প্র ০৮A, AAAA, CNAME, MX, NS, TXT — কোনটি কী? domain-এর মূল নামে (apex) CNAME রাখা যায় না কেন? (মাঝারি)

উত্তর: A — IPv4 ঠিকানা; AAAA — IPv6; CNAME — “এই নামটি আসলে অন্য নামের ডাকনাম”; MX — মেইল কোন server নেবে (অগ্রাধিকারসহ); NS — zone-এর authoritative server কারা; TXT — মুক্ত লেখা, বাস্তবে SPF, DKIM, DMARC আর domain-মালিকানা যাচাইয়ে। CNAME থাকলে সেই নামে অন্য কোনো রেকর্ড রাখা যায় না; অথচ apex-এ (example.com) NS আর SOA বাধ্যতামূলক — তাই apex-এ CNAME নিষেধ।

ফলো-আপ: “CDN-এর নাম তাহলে apex-এ কীভাবে বসায়?” → অনেক DNS সেবা ALIAS/ANAME বা CNAME flattening দেয় — server নিজে লক্ষ্যটি resolve করে A/AAAA উত্তর দেয়; এটি মান নয়, সেবাদাতার বৈশিষ্ট্য।

আরও গভীর ফলো-আপ: “PTR কী কাজে লাগে?” → IP থেকে নাম (reverse DNS); মেইল server-এর সুনাম আর log পড়তে কাজে লাগে।

প্র ০৯NAT কীভাবে কাজ করে? বাইরে থেকে সংযোগ কেন সরাসরি ভেতরে আসে না? NAT কি নিরাপত্তা? (মাঝারি)

উত্তর: বাড়ি বা অফিসের router ভেতরের private ঠিকানা আর port বদলে নিজের public ঠিকানা আর একটি port বসায় (PAT/NAPT), আর একটি translation টেবিলে জোড়াটি লিখে রাখে; উত্তর এলে টেবিল দেখে উল্টো বদলায়। বাইরে থেকে নতুন সংযোগের জন্য টেবিলে কোনো রেকর্ড নেই, তাই router জানে না কাকে দেবে — port forwarding না থাকলে প্যাকেট ফেলে দেয়।

ফলো-আপ: “তাহলে NAT-ই তো firewall?” → না। NAT-এর উদ্দেশ্য ঠিকানা বাঁচানো; নিরাপত্তার মতো আচরণ পার্শ্বফল। নিরাপত্তা দেয় stateful firewall-এর “ভেতর থেকে শুরু হলে তবেই” নিয়ম — IPv6-এ NAT ছাড়াও ঠিক সেই নিয়ম রাখা হয়।

আরও গভীর ফলো-আপ: “Mobile operator-এর নেটওয়ার্কে game বা P2P কেন সমস্যা করে?” → CGNAT: operator নিজেও NAT করে, তাই ব্যবহারকারী দুই স্তরের NAT-এর পেছনে; port forwarding অসম্ভব, hole punching কঠিন — STUN/TURN আর relay লাগে (পর্ব ১৯)। Linux-এ NAT-এর অবস্থা থাকে conntrack টেবিলে।

প্র ১০অ্যাপ নিজের মেশিনে চলে, অথচ অন্য মেশিন থেকে “connection refused”. 127.0.0.1 আর 0.0.0.0-এ bind-এর পার্থক্য কী? (সহজ)

উত্তর: 127.0.0.1-এ bind করা server শুধু loopback interface-এ শোনে — একই মেশিনের ভেতর থেকে আসা সংযোগই পায়; বাইরের যন্ত্রের SYN-এর উত্তরে kernel RST পাঠায়, তাই “refused”. 0.0.0.0 মানে “এই মেশিনের সব IPv4 ঠিকানায়”। ss -ltn-এ Local Address কলামে এটি সরাসরি দেখা যায় (অংশ ৮)।

ফলো-আপ: “Docker container-এ অ্যাপ 127.0.0.1-এ শুনলে?” → container-এর নিজের loopback, তাই port publish করেও বাইরে থেকে পৌঁছানো যায় না — container-এ অ্যাপকে 0.0.0.0-এ শুনতে হয়।

আরও গভীর ফলো-আপ: “Refused না এসে timeout হলে?” → মাঝে firewall প্যাকেট নিঃশব্দে ফেলছে (DROP), বা route নেই — প্র ২৩ আর তার নিচের দুটি C উদাহরণ।

প্র ১১MTU, MSS আর Path MTU Discovery — “ছোট পাতা খোলে, বড় পাতা ঝুলে থাকে” কেন হয়? (কঠিন)

উত্তর: MTU হলো একটি link-এ সবচেয়ে বড় IP প্যাকেট (Ethernet-এ সাধারণত ১৫০০ বাইট); MSS হলো TCP-র ডেটা-অংশের সর্বোচ্চ (১৫০০ − ২০ IP − ২০ TCP = ১৪৬০)। Path MTU Discovery-তে প্রেরক DF বসিয়ে পাঠায়; পথে ছোট MTU পেলে router ICMP “Fragmentation Needed” ফেরত দেয়। কোনো firewall যদি সব ICMP আটকে রাখে, প্রেরক কখনো জানে না — handshake আর ছোট উত্তর চলে, বড় প্যাকেট নিঃশব্দে হারায়: PMTUD black hole.

ফলো-আপ: “সমাধান?” → প্রয়োজনীয় ICMP (type 3 code 4; IPv6-এ Packet Too Big) চলতে দেওয়া, আর tunnel বা PPPoE-র সীমানায় MSS clamping.

আরও গভীর ফলো-আপ: “ICMP ছাড়া PMTU খোঁজা যায়?” → হ্যাঁ, PLPMTUD (RFC 4821) — transport নিজে বিভিন্ন আকারের probe পাঠিয়ে দেখে কোনটি পৌঁছায়; QUIC এমন কৌশল ব্যবহার করতে পারে।

প্র ১২IPv6-এ IPv4 থেকে বড় পার্থক্যগুলো কী? ইন্টারভিউতে কোন তিনটি কথা অবশ্যই বলবেন? (মাঝারি)

উত্তর: (১) ঠিকানা ১২৮ বিট, তাই NAT ছাড়াই প্রতিটি যন্ত্রের global ঠিকানা সম্ভব; (২) broadcast নেই — ARP-এর জায়গায় multicast-ভিত্তিক NDP, আর router advertisement দেখে যন্ত্র নিজে ঠিকানা বানায় (SLAAC) বা DHCPv6 নেয়; (৩) সরল fixed header, router fragment করে না, checksum নেই। একটি interface-এ একসাথে link-local আর একাধিক global ঠিকানা থাকা স্বাভাবিক।

ফলো-আপ: “Dual-stack-এ ব্রাউজার কোনটি আগে নেয়?” → Happy Eyeballs (RFC 8305): IPv6 আগে চেষ্টা, অল্প দেরিতে IPv4-ও শুরু, যেটি আগে সংযুক্ত হয় সেটি।

আরও গভীর ফলো-আপ: “IPv6-এ কি ICMP আটকানো যায়?” → ICMPv6 ছাড়া NDP আর PMTUD ভাঙে; তাই ঢালাও block নয়, RFC 4890-এর মতো নির্দেশিকা মেনে বাছাই।

৩ · TCP, UDP আর QUIC — গভীর প্রশ্ন

রিভিশন: পর্ব ২৭ · Port আর socket, পর্ব ২৮ · UDP, পর্ব ২৯ · Handshake আর TIME-WAIT, পর্ব ৩০ · Retransmission আর RTO, পর্ব ৩১ · Flow control, পর্ব ৩২ · Congestion control, পর্ব ৩৩ · QUIC

প্র ১৩TCP-তে handshake তিন ধাপের কেন — দুই ধাপে হতো না? (মাঝারি)

উত্তর: দুই পক্ষকেই নিজের শুরুর sequence number (ISN) জানাতে হবে, আর অপরজন সেটি পেয়েছে তা নিশ্চিত হতে হবে। SYN (client-এর ISN) → SYN-ACK (server-এর ISN + client-এর ISN-এর ack) → ACK (server-এর ISN-এর ack) — চারটি কাজ তিন বার্তায়, কারণ মাঝের দুটি একসাথে যায়। দুই ধাপে server জানত না তার ISN client পেয়েছে কি না, আর নেটওয়ার্কে আটকে থাকা পুরোনো SYN এলে server অকারণে সংযোগ খুলে বসত।

ফলো-আপ: “ISN শূন্য থেকে শুরু হয় না কেন?” → পুরোনো সংযোগের দেরিতে আসা segment যেন নতুনটির সাথে না মেশে, আর বাইরের কেউ যেন sequence আন্দাজ করে নকল segment ঢোকাতে না পারে — তাই ISN সময়-নির্ভর আর অনুমান-অযোগ্য (RFC 6528).

আরও গভীর ফলো-আপ: “Handshake-এর দেরি কমানোর উপায়?” → connection reuse (keep-alive, pool), TCP Fast Open (প্রচলন সীমিত), আর QUIC-এ transport ও TLS-এর handshake একসাথে — নতুন সংযোগে ১ RTT, আগের সেশনে ০-RTT.

প্র ১৪TIME-WAIT কেন আছে? কোন পক্ষ এতে যায়? সার্ভারে হাজারো TIME-WAIT দেখলে কী করবেন? (মাঝারি)

উত্তর: যে পক্ষ আগে বন্ধ করে (active close), শেষ ACK পাঠানোর পর সে TIME-WAIT-এ থাকে — মান অনুযায়ী 2×MSL; Linux-এ নির্দিষ্ট ৬০ সেকেন্ড। দুই কারণ: শেষ ACK হারালে অপর পক্ষ FIN আবার পাঠাবে, তখন উত্তর দিতে হবে; আর একই চার-ঠিকানার নতুন সংযোগে পুরোনো সংযোগের দেরিতে আসা segment যেন না ঢোকে।

ফলো-আপ: “ক্ষতি কী?” → সাধারণত সামান্য — প্রতিটি অল্প মেমরি নেয়। আসল সমস্যা হয় client-পক্ষে: একই গন্তব্যে প্রতি অনুরোধে নতুন সংযোগ খুললে ephemeral port ফুরায় (নিচের হিসাবে প্রায় ৪৭১/সেকেন্ড)। সমাধান সংযোগ পুনর্ব্যবহার — keep-alive আর connection pool; net.ipv4.tcp_tw_reuse (শুধু outgoing-এ) সহায়ক।

আরও গভীর ফলো-আপ: “tcp_fin_timeout কমালে TIME-WAIT কমবে?” → না — ওটি FIN-WAIT-2-এর সময়; Linux-এ TIME-WAIT-এর ৬০ সেকেন্ড kernel-এ স্থির। আর tcp_tw_recycle NAT-এর পেছনের client ভাঙত বলে Linux 4.12-এ সরানো হয়েছে।

কে TIME-WAIT-এ যায়, নিজের চোখে দেখুন: নিচে একটি ছোট server তিনটি সংযোগ নিজে আগে বন্ধ করে।

# Who ends up in TIME-WAIT? The side that closes first (active close).
command -v perl >/dev/null || { echo "perl নেই"; exit 0; }
perl -MIO::Socket::INET -e '
  my $l = IO::Socket::INET->new(LocalAddr=>"127.0.0.1:7000", Listen=>5, ReuseAddr=>1) or die;
  for (1..3) { my $c = $l->accept; print $c "bye\n"; close $c; }   # server closes first
' &
sleep 0.3
for i in 1 2 3; do
  perl -MIO::Socket::INET -e '
    my $s = IO::Socket::INET->new(PeerAddr=>"127.0.0.1:7000") or die "connect: $!";
    my $line = <$s>; select(undef,undef,undef,0.1); close $s;'
done
wait
echo "== ss -tan state time-wait =="
ss -tan state time-wait
echo "== count by local port =="
ss -Htan state time-wait | awk '{print $3}' | sort | uniq -c

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

== ss -tan state time-wait ==
Recv-Q Send-Q Local Address:Port Peer Address:Port Process
0      0          127.0.0.1:7000    127.0.0.1:37056
0      0          127.0.0.1:7000    127.0.0.1:37068
0      0          127.0.0.1:7000    127.0.0.1:37076
== count by local port ==
      3 127.0.0.1:7000

তিনটি TIME-WAIT-ই server-এর দিকে (Local Address 127.0.0.1:7000), কারণ server-ই আগে close করেছে; client-এর দিকে একটিও নেই। Peer-এর port (৩৭০৫৬ ইত্যাদি) client-এর ephemeral port — প্রতিবার চালালে আলাদা আসবে। Web server যদি keep-alive ছাড়া প্রতিটি উত্তরের পর নিজে বন্ধ করে, server-এ হাজারো TIME-WAIT জমে — দেখতে ভয়ের, কিন্তু server-এর port ফুরায় না, কারণ সবগুলো একই :7000-এ, শুধু peer আলাদা। state time-wait ফিল্টার দিলে ss State কলামটি দেখায় না।

প্র ১৫সার্ভারে শত শত CLOSE-WAIT জমছে। কার দোষ, আর কী মানে? (মাঝারি)

উত্তর: CLOSE-WAIT মানে অপর পক্ষ FIN পাঠিয়েছে, kernel ACK দিয়েছে, কিন্তু আপনার অ্যাপ এখনো close() ডাকেনি। এটি প্রায় সবসময় অ্যাপের বাগ — সংযোগ বন্ধ না করা, error-পথে socket ভুলে যাওয়া, বা থ্রেড আটকে থাকা। Kernel নিজে থেকে এ অবস্থা ছাড়ে না, তাই সংখ্যা বাড়তেই থাকে, শেষে fd ফুরায় (EMFILE).

ফলো-আপ: “কীভাবে নিশ্চিত হবেন?” → ss -tanp state close-wait কোন process আর কোন peer দেখায়; peer সাধারণত একটি নির্দিষ্ট upstream — সেই client-কোডের error-handling দেখুন।

আরও গভীর ফলো-আপ: “TIME-WAIT আর CLOSE-WAIT-এর তুলনায় কোনটি বেশি চিন্তার?” → CLOSE-WAIT; TIME-WAIT নিজে মিলিয়ে যায়, CLOSE-WAIT জমা মানে leak.

প্র ১৬TCP হারানো segment কীভাবে বোঝে? RTO আর fast retransmit-এর পার্থক্য কী? (মাঝারি)

উত্তর: দুই পথে। (১) Timeout: ACK না এলে RTO শেষে আবার পাঠানো; RTO মাপা RTT থেকে — SRTT আর RTTVAR-এর EWMA (α = ১/৮, β = ১/৪), RTO = SRTT + ৪·RTTVAR (RFC 6298, শুরুর মান ১ সেকেন্ড; Linux-এর নিম্নসীমা ২০০ ms). প্রতিবার timeout-এ RTO দ্বিগুণ। (২) Fast retransmit: পরপর তিনটি duplicate ACK এলে timeout-এর অপেক্ষা না করেই আবার পাঠানো — একটি segment হারিয়েছে, পরেরগুলো পৌঁছাচ্ছে।

ফলো-আপ: “কোনটি বেশি খারাপ লক্ষণ?” → timeout; মানে পাইপ প্রায় খালি বা বড় ক্ষতি — congestion window ১-এ নেমে যায়, আর latency-তে স্পষ্ট লাফ দেখা যায়।

আরও গভীর ফলো-আপ: “আবার পাঠানো segment-এর ACK দিয়ে RTT মাপা হয় না কেন?” → ACK কোন কপির তা বোঝা যায় না — Karn-এর algorithm; timestamp option থাকলে এই অস্পষ্টতা মেটে। আধুনিক Linux SACK আর RACK দিয়ে আরও সূক্ষ্মভাবে ক্ষতি ধরে।

প্র ১৭Flow control আর congestion control-এর পার্থক্য কী? কোন window আসলে পাঠানো ঠিক করে? (সহজ)

উত্তর: Flow control গ্রাহককে রক্ষা করে — গ্রাহক নিজের ফাঁকা buffer receive window (rwnd) হিসেবে জানায়। Congestion control নেটওয়ার্ককে রক্ষা করে — প্রেরক নিজে congestion window (cwnd) অনুমান করে, ক্ষতি বা দেরি দেখে কমায়। একসাথে না-ACK-হওয়া ডেটা থাকতে পারে min(rwnd, cwnd) পর্যন্ত।

ফলো-আপ: “rwnd শূন্য হলে?” → প্রেরক থামে, আর মাঝে মাঝে window probe পাঠায়, যাতে window খোলার খবর হারালেও deadlock না হয় (persist timer).

আরও গভীর ফলো-আপ: “আন্তঃমহাদেশীয় link-এ বড় ফাইল ধীর, অথচ link ফাঁকা।” → একটি সংযোগের সর্বোচ্চ ≈ window ÷ RTT; window scaling বন্ধ থাকলে ৬৪ KiB ÷ ২০০ ms ≈ ২.৬২ Mbit/s. প্রয়োজন BDP-র সমান window (নিচের হিসাব, পর্ব ৩১ আর ৫৬)।

প্র ১৮Slow start, AIMD, CUBIC আর BBR — এক মিনিটে পার্থক্য বলুন। (কঠিন)

উত্তর: Slow start-এ প্রতি RTT-তে cwnd প্রায় দ্বিগুণ হয়, ssthresh পর্যন্ত; তারপর congestion avoidance-এ প্রতি RTT-তে ১ MSS যোগ, ক্ষতিতে অর্ধেক — AIMD (Reno). CUBIC (Linux-এর ডিফল্ট, RFC 9438) ক্ষতির পর সময়ের cubic ফাংশনে বাড়ে — বড় BDP-র পথে দ্রুত আগের মাত্রায় ফেরে। BBR ক্ষতিকে মূল সংকেত ধরে না; bottleneck bandwidth আর ন্যূনতম RTT মেপে সেই হারে pacing করে পাঠায়।

ফলো-আপ: “Wi-Fi বা মোবাইলে ক্ষতি-ভিত্তিক algorithm কেন সমস্যায় পড়ে?” → বেতারে কিছু ক্ষতি congestion নয়, তবু Reno/CUBIC গতি কমায়; BBR এমন পথে অনেক সময় ভালো throughput পায়।

আরও গভীর ফলো-আপ: “BBR-এর সমালোচনা?” → প্রথম সংস্করণ (v1) CUBIC-এর সাথে একই bottleneck-এ ন্যায্য ভাগ না দেওয়া আর গভীর buffer-এ বেশি retransmission নিয়ে সমালোচিত হয়েছিল; পরের সংস্করণগুলো ক্ষতিও বিবেচনায় নেয়। Linux-এ বদলানো যায় net.ipv4.tcp_congestion_control দিয়ে, প্রতি-socket-এ TCP_CONGESTION.

প্র ১৯ছোট ছোট request-এ হঠাৎ প্রায় ৪০ ms করে দেরি — Nagle আর delayed ACK কীভাবে মিলে এটি ঘটায়? (কঠিন)

উত্তর: Nagle (RFC 896): আগের ছোট segment-এর ACK না আসা পর্যন্ত নতুন ছোট ডেটা জমিয়ে রাখে। Delayed ACK: গ্রাহক ACK একটু দেরিতে দেয়, যাতে উত্তরের সাথে বা দুই segment একসাথে ack করা যায় (মান অনুযায়ী ৫০০ ms-এর কম; Linux-এ সাধারণত কয়েক দশ ms, ন্যূনতম প্রায় ৪০ ms). অ্যাপ যদি একটি request দুই write-এ পাঠায় (header, তারপর body), দ্বিতীয়টি Nagle-এ আটকে থাকে ACK-এর জন্য, আর ACK আটকে থাকে delayed-ACK timer-এ — দুই পক্ষ পরস্পরের অপেক্ষায়।

ফলো-আপ: “সমাধান?” → সবচেয়ে ভালো: পুরো বার্তা একবারে লেখা (buffer করে বা writev). Latency-সংবেদনশীল protocol-এ TCP_NODELAY; অনেক RPC লাইব্রেরি এটি ডিফল্টে দেয়।

আরও গভীর ফলো-আপ: “TCP_NODELAY সবসময় দিলে ক্ষতি?” → অনেক ক্ষুদ্র write-এ অনেক ক্ষুদ্র প্যাকেট — header-এর অপচয় বাড়ে; Linux-এ TCP_CORK উল্টো কাজ করে: জমিয়ে পূর্ণ segment পাঠায়।

প্র ২০Head-of-line blocking কোথায় কোথায় হয়? HTTP/2 কি এটি পুরো মেটায়? (মাঝারি)

উত্তর: Head-of-line blocking মানে সামনের একটি আটকে থাকা জিনিস পেছনের সবাইকে আটকায়। HTTP/1.1-এ একটি সংযোগে উত্তর আসে ক্রমমতো — একটি ধীর উত্তর পরেরগুলো আটকায়; তাই ব্রাউজার একাধিক সংযোগ খোলে। HTTP/2 একটি সংযোগে অনেক stream মিশিয়ে application-স্তরের HOL মেটায়, কিন্তু নিচের TCP একটিই ক্রমমতো byte stream — একটি segment হারালে সব stream-এর পরের ডেটা kernel-এ আটকে থাকে: transport-স্তরের HOL.

ফলো-আপ: “তাহলে ক্ষতিপূর্ণ নেটওয়ার্কে HTTP/2 কি HTTP/1.1-এর চেয়েও খারাপ হতে পারে?” → হ্যাঁ, উচ্চ ক্ষতির পথে একটি সংযোগের একটি ক্ষতি সবাইকে থামায়, যেখানে ছয়টি আলাদা সংযোগে ক্ষতি ভাগ হয়ে যেত।

আরও গভীর ফলো-আপ: “QUIC কীভাবে মেটায়?” → প্রতিটি stream-এর নিজস্ব ক্রম; একটি stream-এর হারানো প্যাকেট শুধু সেই stream আটকায়। Switch-এর ভেতরেও HOL হয় — input queue-তে; সমাধান virtual output queue (পর্ব ১৫)।

প্র ২১QUIC নতুন transport হয়েও TCP-র মতো kernel-এ না বসে UDP-র ওপর কেন? (কঠিন)

উত্তর: মূল কারণ ossification: ইন্টারনেটের অসংখ্য firewall আর NAT শুধু TCP আর UDP চেনে; নতুন protocol নম্বর অনেক জায়গায় আটকে যেত। আর TCP বদলাতে হলে বিশ্বের সব OS-এর kernel হালনাগাদ করতে হয় — বছরের পর বছর। UDP-র ওপর QUIC user space-এর লাইব্রেরিতে থাকে, তাই অ্যাপের সাথে দ্রুত হালনাগাদ হয়; প্রায় পুরো header এনক্রিপ্ট বলে middlebox ভেতরে হাত দিতে পারে না, ফলে ভবিষ্যতেও ossify হয় কম। QUIC-এর মান RFC 9000 (২০২১), তার ওপর HTTP/3 — RFC 9114 (২০২২)।

ফলো-আপ: “QUIC কী দেয় যা TCP+TLS দেয় না?” → TLS 1.3 handshake-এর সাথে মিলিয়ে ১-RTT সংযোগ (আগের সেশনে ০-RTT), stream-ভিত্তিক ক্ষতি-সামলানো, আর connection ID দিয়ে Wi-Fi থেকে মোবাইল ডেটায় গেলেও সংযোগ টিকে থাকা (connection migration).

আরও গভীর ফলো-আপ: “০-RTT-এর ঝুঁকি?” → প্রথম ফ্লাইটের ডেটা replay করা যায়, তাই শুধু idempotent অনুরোধে (যেমন GET) ব্যবহার করা উচিত। আর দাম: user space-এ এনক্রিপশন আর প্রতিটি প্যাকেট আলাদা syscall-এ CPU খরচ বেশি; UDP GSO-র মতো কৌশলে কমানো হয়। কোথাও UDP আটকানো থাকলে ব্রাউজার TCP-তে ফেরে।

প্র ২২একটি অনলাইন গেম বা ভিডিও কলের জন্য TCP না UDP? “UDP-তে নির্ভরযোগ্যতা” মানে কী? (মাঝারি)

উত্তর: সাধারণত UDP (বা তার ওপর RTP/WebRTC, QUIC). কারণ পুরোনো তথ্য দেরিতে পৌঁছানোর চেয়ে বাদ পড়া ভালো — ৩০০ ms আগের খেলোয়াড়ের অবস্থান বা ভিডিও-ফ্রেম এখন অর্থহীন; TCP হারানো segment-এর জন্য পরের সব আটকে রাখে, ফলে ঝাঁকুনি বাড়ে। দরকারি অংশে (চ্যাট, কেনাকাটা) অ্যাপ নিজে বাছাই করে নির্ভরযোগ্যতা যোগ করে — sequence নম্বর, ACK, শুধু জরুরি বার্তা আবার পাঠানো।

ফলো-আপ: “UDP-তে congestion control না থাকলে?” → অ্যাপকেই দায়িত্ব নিতে হয়; নইলে নেটওয়ার্ক ভরিয়ে নিজের আর অন্যের ক্ষতি। WebRTC-র মতো stack নিজস্ব congestion control চালায়।

আরও গভীর ফলো-আপ: “UDP সার্ভিসে নিরাপত্তার বিশেষ ঝুঁকি?” → উৎস-ঠিকানা জাল করা সহজ, তাই ছোট প্রশ্নে বড় উত্তর দেওয়া সার্ভিস amplification-এ অপব্যবহৃত হতে পারে; তাই rate limiting আর অচেনা ঠিকানায় বড় উত্তর না দেওয়া (QUIC-এ ৩ গুণের anti-amplification সীমা)।

প্র ২৩“Connection refused”, “connection timed out” আর “connection reset by peer” — তিনটির পেছনে নেটওয়ার্কে কী ঘটেছে? (মাঝারি)

উত্তর: Refused (ECONNREFUSED): গন্তব্য host জীবিত আর পৌঁছানো যায়, কিন্তু সেই port-এ কেউ শুনছে না — kernel SYN-এর উত্তরে RST দিয়েছে (বা firewall REJECT করেছে)। দ্রুত আসে। Timed out: SYN-এর কোনো উত্তরই আসেনি — firewall নিঃশব্দে DROP করছে, route নেই, host বন্ধ, বা server-এর accept queue ভরা; kernel কয়েকবার SYN আবার পাঠিয়ে হাল ছাড়ে (Linux-এ ডিফল্টে প্রায় দুই মিনিট)। Reset by peer: সংযোগ তৈরি হয়েছিল, পরে অপর পক্ষ (বা মাঝের LB/firewall) RST পাঠিয়েছে — process মরেছে, idle timeout, বা না-পড়া ডেটা রেখে close.

ফলো-আপ: “Read timeout আবার কী?” → সংযোগ ঠিক আছে, কিন্তু নির্দিষ্ট সময়ে উত্তরের বাইট আসেনি — server ধীর বা আটকে আছে। নিচের দুটি C উদাহরণ refused, read timeout আর connect timeout — তিনটিই loopback-এ দেখায়।

আরও গভীর ফলো-আপ: “Firewall-এ REJECT না DROP?” → ভেতরের নেটওয়ার্কে REJECT দ্রুত ব্যর্থতা দেয় (client অপেক্ষায় ঝোলে না, ডিবাগ সহজ); ইন্টারনেট-মুখী প্রান্তে অনেকে DROP রাখেন — অপ্রয়োজনীয় উত্তর না দিতে। দুটোরই যুক্তি আছে।

#include <arpa/inet.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/time.h>
static struct sockaddr_in at(int port) {
    struct sockaddr_in a = {0};
    a.sin_family = AF_INET; a.sin_port = htons(port);
    a.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
    return a;
}

int main(void) {
    struct sockaddr_in a = at(5999), b = at(6000);   /* nobody listens on 5999 */
    int c1 = socket(AF_INET, SOCK_STREAM, 0);
    int r = connect(c1, (struct sockaddr *)&a, sizeof a);
    printf("case 1 (no listener): connect=%d errno=%s\n", r, strerror(errno));

    int srv = socket(AF_INET, SOCK_STREAM, 0);       /* listens, never accepts or replies */
    bind(srv, (struct sockaddr *)&b, sizeof b); listen(srv, 8);
    int c2 = socket(AF_INET, SOCK_STREAM, 0);
    struct timeval tv = {0, 300000};                 /* 300 ms read timeout */
    setsockopt(c2, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof tv);
    printf("case 2 (silent server): connect=%d\n", connect(c2, (struct sockaddr *)&b, sizeof b));
    char buf[64];
    ssize_t n = recv(c2, buf, sizeof buf, 0);
    printf("case 2: recv=%zd errno=%s\n", n, errno == EAGAIN ? "EAGAIN (timed out after 300 ms)" : strerror(errno));
    return 0;
}

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

case 1 (no listener): connect=-1 errno=Connection refused
case 2 (silent server): connect=0
case 2: recv=-1 errno=EAGAIN (timed out after 300 ms)

প্রথম ক্ষেত্রে port 5999-এ কেউ নেই, তাই kernel SYN-এর উত্তরে সঙ্গে সঙ্গে RST দেয় — connect −1 আর ECONNREFUSED. দ্বিতীয় ক্ষেত্রে server listen করেছে কিন্তু কখনো accept বা উত্তর দেয় না; তবু connect সফল (0), কারণ handshake kernel নিজে সারে, অ্যাপের accept-এর অপেক্ষা করে না। তারপর SO_RCVTIMEO-এর ৩০০ ms পেরিয়ে recv ব্যর্থ হয় EAGAIN দিয়ে — এটিই “read timeout”. ইন্টারভিউতে এই পার্থক্য স্পষ্ট বলতে পারা জরুরি: refused মানে “ঠিকানা ঠিক, দরজায় কেউ নেই”, read timeout মানে “দরজা খুলেছে, কিন্তু ভেতরে কেউ সাড়া দিচ্ছে না”।

প্র ২৪Listen backlog কী? Accept queue ভরে গেলে client কী দেখে? SYN flood আর SYN cookie কীভাবে এর সাথে যুক্ত? (কঠিন)

উত্তর: Linux-এ দুটি সারি: SYN queue (অর্ধেক-খোলা, SYN-ACK পাঠানো হয়েছে) আর accept queue (handshake শেষ, অ্যাপের accept-এর অপেক্ষায়)। listen(fd, backlog)-এর backlog accept queue-র সীমা, যা net.core.somaxconn দিয়ে কাটা হয়। অ্যাপ যথেষ্ট দ্রুত accept না করলে queue ভরে, তখন Linux নতুন SYN বা শেষ ACK ফেলে দেয় — client দেখে connect timeout বা দীর্ঘ দেরি, refused নয়।

ফলো-আপ: “SYN flood কী, আর SYN cookie কীভাবে বাঁচায়?” → আক্রমণকারী জাল উৎস থেকে অসংখ্য SYN পাঠিয়ে SYN queue ভরায় (ধারণাগতভাবে)। SYN cookie-এ server কোনো অবস্থা না রেখে প্রয়োজনীয় তথ্য ISN-এর ভেতরে এনকোড করে পাঠায়; সত্যিকারের client-এর ACK এলে তবেই সংযোগ বানায়।

আরও গভীর ফলো-আপ: “Queue overflow কীভাবে ধরবেন?” → ss -ltn-এ LISTEN সারির Recv-Q (বর্তমান accept queue) আর Send-Q (সীমা), আর nstat-এ ListenOverflows/ListenDrops গণক। নিচের উদাহরণে backlog ১ দিয়ে ঠিক এই অবস্থা তৈরি করা হয়েছে।

#include <arpa/inet.h>
#include <errno.h>
#include <fcntl.h>
#include <poll.h>
#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>

int main(void) {
    struct sockaddr_in a = {0};
    a.sin_family = AF_INET; a.sin_port = htons(6100);
    a.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
    int srv = socket(AF_INET, SOCK_STREAM, 0);
    bind(srv, (struct sockaddr *)&a, sizeof a);
    listen(srv, 1);                       /* tiny backlog, and we never call accept() */

    for (int i = 1; i <= 4; i++) {
        int c = socket(AF_INET, SOCK_STREAM, 0);
        fcntl(c, F_SETFL, O_NONBLOCK);    /* non-blocking connect + poll = connect timeout */
        connect(c, (struct sockaddr *)&a, sizeof a);
        struct pollfd p = { .fd = c, .events = POLLOUT };
        int ready = poll(&p, 1, 300);     /* wait at most 300 ms */
        int err = 0; socklen_t len = sizeof err;
        getsockopt(c, SOL_SOCKET, SO_ERROR, &err, &len);
        printf("client %d: %s\n", i, ready == 0 ? "no answer in 300 ms -> connect timeout"
                                   : err ? "error" : "connected (waiting in accept queue)");
    }
    return 0;
}

একটি আসল রানের আউটপুট (কয়েকবার চালিয়েও একই):

client 1: connected (waiting in accept queue)
client 2: connected (waiting in accept queue)
client 3: no answer in 300 ms -> connect timeout
client 4: no answer in 300 ms -> connect timeout

Server কখনো accept ডাকে না, আর backlog মাত্র ১। Linux-এ accept queue-তে backlog + ১ = ২টি সংযোগ জায়গা পেয়েছে — client ১ আর ২ “connected”, যদিও অ্যাপ তাদের এখনো দেখেইনি। Client ৩ আর ৪-এর SYN kernel নিঃশব্দে ফেলে দিয়েছে; কোনো RST যায়নি, তাই poll-এর ৩০০ ms শেষ — client-এর চোখে এটি connect timeout, ঠিক firewall-এর DROP-এর মতো। আসল জীবনে এর মানে: সার্ভারের worker সব ব্যস্ত বা আটকে, অ্যাপ accept করতে পারছে না — refused আর timeout দেখে “সার্ভার বন্ধ” বনাম “সার্ভার ব্যস্ত” আলাদা করা যায়।

ইন্টারভিউতে প্রায়ই খাতা-কলমে মোটা দাগের হিসাব চাওয়া হয় — window আর RTT থেকে throughput, TIME-WAIT থেকে সংযোগের হার, Little-এর সূত্রে pool-এর আকার। নিচের হিসাবগুলো জোরে বলতে পারা অভ্যাস করুন:

// Back-of-the-envelope numbers interviewers like to see you compute out loud.
const f = (x, d = 1) => x.toLocaleString("en-US", { maximumFractionDigits: d });

// 1) One TCP connection is limited to window / RTT
const win = 65535, rtt = 0.2;                         // bytes (no window scaling), seconds
console.log(`1) window ${win} B, RTT ${rtt * 1000} ms -> max ${f(win * 8 / rtt / 1e6, 2)} Mbit/s`);
const link = 1e9;                                     // 1 Gbit/s
console.log(`   to fill 1 Gbit/s at that RTT the window must be BDP = ${f(link * rtt / 8 / 1e6)} MB`);

// 2) TIME-WAIT and ephemeral ports: one client IP -> one server IP:port
const ports = 60999 - 32768 + 1, tw = 60;             // Linux default range, TIME-WAIT seconds
console.log(`2) ${ports} ports / ${tw} s TIME-WAIT -> about ${f(ports / tw, 0)} new connections per second`);

// 3) Little's law for a connection pool: L = lambda * W
const rps = 2000, holdMs = 15;
console.log(`3) ${rps} req/s x ${holdMs} ms per DB call -> ${f(rps * holdMs / 1000, 0)} connections busy on average`);

// 4) Retry amplification when every layer retries
const layers = 3, tries = 3;
console.log(`4) ${layers} layers x ${tries} attempts each -> up to ${tries ** layers} calls hit the database per user request`);

// 5) Serialization delay of one full-size frame
for (const bps of [1e8, 1e9, 1e10])
  console.log(`5) 1500 B at ${bps / 1e9} Gbit/s -> ${f(1500 * 8 / bps * 1e6, 2)} microseconds`);

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

1) window 65535 B, RTT 200 ms -> max 2.62 Mbit/s
   to fill 1 Gbit/s at that RTT the window must be BDP = 25 MB
2) 28232 ports / 60 s TIME-WAIT -> about 471 new connections per second
3) 2000 req/s x 15 ms per DB call -> 30 connections busy on average
4) 3 layers x 3 attempts each -> up to 27 calls hit the database per user request
5) 1500 B at 0.1 Gbit/s -> 120 microseconds
5) 1500 B at 1 Gbit/s -> 12 microseconds
5) 1500 B at 10 Gbit/s -> 1.2 microseconds

(১) window scaling ছাড়া একটি TCP সংযোগ ৬৫৫৩৫ × ৮ ÷ ০.২ ≈ ২.৬২ Mbit/s-এর বেশি পারে না, link যত মোটাই হোক; ১ Gbit/s ভরাতে window লাগবে BDP = ১০⁹ × ০.২ ÷ ৮ = ২৫ MB. (২) Linux-এর ডিফল্ট ephemeral range ৩২৭৬৮–৬০৯৯৯-এ ২৮২৩২টি port; প্রতিটি ৬০ সেকেন্ড TIME-WAIT-এ আটকে থাকলে এক client IP থেকে একই server IP:port-এ সেকেন্ডে প্রায় ৪৭১টির বেশি নতুন সংযোগ টেকসইভাবে খোলা যায় না (tcp_tw_reuse না থাকলে) — তাই connection reuse. (৩) Little-এর সূত্র L = λW: ২০০০ × ০.০১৫ = গড়ে ৩০টি সংযোগ ব্যস্ত; pool এর চেয়ে কিছু বড় রাখুন, কারণ গড় নয়, চূড়াই আসল চাপ। (৪) তিন স্তরের প্রতিটি ৩ বার চেষ্টা করলে ৩³ = ২৭ — retry storm (প্র ৪৫)। (৫) ১৫০০ বাইটের frame-এর transmission delay link যত দ্রুত, তত কম — ১০ Gbit/s-এ মাত্র ১.২ µs, তাই data center-এ দেরির বড় অংশ সাধারণত queue আর software-এ।

৪ · HTTP, TLS আর ওয়েব — status code থেকে load balancer

রিভিশন: পর্ব ৩৬ · HTTP আর cookie, পর্ব ৩৭ · HTTP/2 আর HTTP/3, পর্ব ৩৮ · Cache আর CDN, পর্ব ৪৮ · TLS আর certificate, পর্ব ৫২ · Load balancer

প্র ২৫502, 503 আর 504-এর পার্থক্য কী? reverse proxy-র পেছনে কোনটি দেখলে কোথায় খুঁজবেন? (সহজ)

উত্তর: তিনটিই সাধারণত proxy বা load balancer-এর কথা, অ্যাপের নয়। 502 Bad Gateway: upstream থেকে বৈধ উত্তর পায়নি — সংযোগ refused বা reset, বা ভাঙা উত্তর; অ্যাপ মরেছে বা ভুল port. 503 Service Unavailable: সেবা এখন নিতে পারছে না — কোনো সুস্থ backend নেই, ভারে চাপা, বা রক্ষণাবেক্ষণ; Retry-After থাকতে পারে। 504 Gateway Timeout: upstream সময়মতো উত্তর দেয়নি — অ্যাপ বা তার পেছনের DB ধীর।

ফলো-আপ: “401 আর 403? 429?” → 401 — আপনি কে তা প্রমাণ হয়নি (লগইন লাগবে); 403 — চিনেছি, কিন্তু অনুমতি নেই; 429 — অনেক বেশি অনুরোধ, rate limit. 301/308 স্থায়ী আর 302/307 অস্থায়ী redirect; 307/308 method বদলাতে দেয় না।

আরও গভীর ফলো-আপ: “মাঝে মাঝে বিক্ষিপ্ত 502, অ্যাপের log-এ কোনো ত্রুটি নেই।” → প্রায়ই keep-alive-এর সময়সীমার অমিল — LB পুরোনো সংযোগে অনুরোধ পাঠানোর মুহূর্তেই backend সেটি বন্ধ করেছে (প্র ৪৬)। দৃশ্যটির পুরো তদন্ত পর্ব ৬২-এ।

প্র ২৬HTTP/2 আর HTTP/3 — ডেভেলপারের চোখে মূল পার্থক্য কী? (মাঝারি)

উত্তর: অর্থ (method, header, status) একই — বদলেছে তারের ওপরের রূপ। HTTP/2: binary frame, একটি TCP সংযোগে বহু stream, HPACK header compression; TLS-এর ভেতরে ALPN দিয়ে “h2” ঠিক হয়। HTTP/3: একই ধারণা QUIC-এর ওপর — stream-ভিত্তিক ক্ষতি-সামলানো, দ্রুত handshake, connection migration, আর QPACK. Server প্রথমবার HTTP/3 সমর্থনের খবর দেয় Alt-Svc header বা DNS-এর HTTPS রেকর্ডে।

ফলো-আপ: “Server push-এর কী হলো?” → বাস্তবে সুবিধা কম পাওয়া গেছে; প্রধান ব্রাউজারগুলো সমর্থন তুলে নিয়েছে, বিকল্প হিসেবে 103 Early Hints.

আরও গভীর ফলো-আপ: “কোন অবস্থায় HTTP/3-এর সুবিধা সবচেয়ে বেশি?” → উচ্চ ক্ষতি আর উচ্চ RTT-এর মোবাইল নেটওয়ার্কে আর ঘন ঘন নেটওয়ার্ক বদলানো যন্ত্রে; কম-ক্ষতির data center-এ পার্থক্য সামান্য, আর UDP-তে CPU খরচ কিছু বেশি।

প্র ২৭TLS 1.3-এর handshake ধাপে ধাপে বলুন — কী এনক্রিপ্ট হয়, কী খোলা থাকে? (মাঝারি)

উত্তর: ClientHello-তে client সমর্থিত cipher suite, একটি (EC)DHE public key-share আর SNI (কোন সাইট) পাঠায়। ServerHello-তে server নিজের key-share দেয় — দুই পক্ষ এখন একই গোপন চাবি বানাতে পারে। এরপর server-এর certificate, CertificateVerify (নিজের private key দিয়ে সই — প্রমাণ যে certificate-এর মালিক সে-ই) আর Finished — সব এনক্রিপ্ট হয়ে যায়। Client Finished পাঠিয়েই HTTP অনুরোধ পাঠাতে পারে — মোট ১ RTT (TLS 1.2-তে ২ RTT). RFC 8446 (২০১৮)।

ফলো-আপ: “নেটওয়ার্কের পর্যবেক্ষক কী দেখে?” → IP ঠিকানা, port, সময় আর আকার, আর সাধারণত SNI-তে সাইটের নাম; TLS 1.3-এ certificate আর দেখা যায় না। ECH SNI-ও লুকায়, তবে প্রচলন এখনো বাড়ছে।

আরও গভীর ফলো-আপ: “Forward secrecy কেন বাধ্যতামূলক?” → প্রতিটি সেশনের চাবি ক্ষণস্থায়ী DH থেকে; পরে server-এর private key চুরি হলেও আগে রেকর্ড করা ট্রাফিক খোলা যায় না। TLS 1.3 তাই RSA key transport বাদ দিয়েছে।

প্র ২৮Certificate chain কীভাবে যাচাই হয়? “ব্রাউজারে ঠিক আছে, কিন্তু curl বা অ্যাপ বলছে unable to get local issuer certificate” — কেন? (মাঝারি)

উত্তর: Client server-এর leaf certificate থেকে intermediate হয়ে নিজের trust store-এর কোনো root পর্যন্ত সইয়ের শিকল মেলায়; সাথে দেখে মেয়াদ, hostname (Subject Alternative Name-এ), ব্যবহারের অনুমতি, আর সম্ভব হলে revocation. সাধারণ ভুল: server শুধু leaf পাঠাচ্ছে, intermediate পাঠাচ্ছে না। ব্রাউজার অনেক সময় আগে দেখা intermediate cache থেকে বা নিজে ডাউনলোড করে শিকল পূর্ণ করে নেয়; curl, Java বা মোবাইল অ্যাপ তা করে না — তাই ব্যর্থ।

ফলো-আপ: “কীভাবে যাচাই করবেন?” → openssl s_client -connect example.com:443 -servername example.com -showcerts server আসলে কোন certificate-গুলো পাঠাচ্ছে দেখায়; সমাধান full chain (leaf + intermediate) পাঠানো।

আরও গভীর ফলো-আপ: “Revocation বাস্তবে কতটা কাজ করে?” → CRL বড় আর OCSP-তে গোপনীয়তা ও দেরির সমস্যা, তাই OCSP stapling, আর ছোট মেয়াদের certificate (ACME দিয়ে স্বয়ংক্রিয় নবায়ন) ঝুঁকি কমানোর বাস্তব পথ। ব্রাউজার public certificate-এ Certificate Transparency log-এর প্রমাণও চায়।

প্র ২৯CORS কী রক্ষা করে? Postman বা curl থেকে API চলে, ব্রাউজার থেকে কেন ব্লক হয়? (মাঝারি)

উত্তর: ব্রাউজারের same-origin policy এক origin-এর (scheme + host + port) পাতার JavaScript-কে অন্য origin-এর উত্তর পড়তে দেয় না — যাতে ক্ষতিকর সাইট আপনার লগইন-করা ব্যাংকের উত্তর পড়তে না পারে। CORS হলো server-এর পক্ষ থেকে সেই নিয়ম শিথিল করার উপায়: Access-Control-Allow-Origin header-এ কোন origin অনুমোদিত। এটি ব্রাউজার প্রয়োগ করে; curl বা Postman এই নিয়ম মানে না, তাই সেখানে চলে।

ফলো-আপ: “Preflight কী?” → সাধারণ নয় এমন অনুরোধে (যেমন PUT, Content-Type: application/json, নিজস্ব header) ব্রাউজার আগে OPTIONS পাঠিয়ে অনুমতি নেয়; server ঠিক উত্তর না দিলে আসল অনুরোধ যায়ই না।

আরও গভীর ফলো-আপ: “CORS কি API-র নিরাপত্তা?” → না; এটি ব্রাউজার-ব্যবহারকারীকে রক্ষা করে, server-কে নয়। API-র রক্ষা authentication আর authorization. Cookie-সহ অনুরোধে * চলে না — নির্দিষ্ট origin আর Access-Control-Allow-Credentials: true; আর অনুরোধের Origin অন্ধভাবে ফেরত লিখে দেওয়া বিপজ্জনক ভুল।

প্র ৩০Session cookie-তে Secure, HttpOnly আর SameSite — প্রতিটি কোন ঝুঁকি কমায়? (মাঝারি)

উত্তর: Secure — cookie শুধু HTTPS-এ যায়, তাই খোলা Wi-Fi-তে পড়া যায় না। HttpOnly — JavaScript (document.cookie) পড়তে পারে না, তাই XSS হলেও session চুরি কঠিন। SameSite — অন্য সাইট থেকে শুরু হওয়া অনুরোধে cookie যাবে কি না: Strict কখনো না, Lax শুধু উপরের-স্তরের সাধারণ navigation-এ, None সবসময় (তখন Secure বাধ্যতামূলক) — এটি CSRF কমায়।

ফলো-আপ: “SameSite না দিলে?” → অনেক আধুনিক ব্রাউজার এখন ডিফল্টে Lax ধরে; তবু স্পষ্ট লিখে দেওয়াই নিরাপদ।

আরও গভীর ফলো-আপ: “Cookie না token (Authorization header)?” → header-এ token স্বয়ংক্রিয়ভাবে যায় না, তাই CSRF-এর ঝুঁকি কম, কিন্তু JavaScript-এ রাখলে XSS-এ চুরি সহজ; cookie-তে উল্টো। দুই পথেই XSS প্রতিরোধ (output encoding, CSP) মূল কাজ।

প্র ৩১HTTP caching কীভাবে কাজ করে? Cache-Control, ETag আর 304 — CDN-এ কোনটি কী করে? (মাঝারি)

উত্তর: Cache-Control বলে কতক্ষণ “তাজা”: max-age=3600 (সবার জন্য), s-maxage (শুধু CDN-এর মতো shared cache), no-cache (রাখা যাবে, তবে প্রতিবার যাচাই করে), no-store (রাখাই যাবে না), private (শুধু ব্রাউজারে)। মেয়াদ শেষে cache If-None-Match: <ETag> দিয়ে জিজ্ঞেস করে; না বদলালে server শুধু 304 Not Modified দেয় — body ছাড়াই।

ফলো-আপ: “Deploy-এর পর ব্যবহারকারী পুরোনো JS পাচ্ছে।” → file-নামে content hash (app.3f9a1c.js) দিয়ে লম্বা max-age আর immutable, কিন্তু HTML-এ ছোট বা no-cache; দরকারে CDN purge.

আরও গভীর ফলো-আপ: “CDN-এ ব্যবহারকারীর ব্যক্তিগত পাতা অন্যজন দেখে ফেলল — কীভাবে?” → cache key-এ cookie বা ব্যবহারকারী-পরিচয় নেই, অথচ উত্তরটি ব্যক্তিগত ছিল আর private/no-store বসানো হয়নি; Vary আর সঠিক header জরুরি (পর্ব ৩৮)।

প্র ৩২L4 আর L7 load balancer-এর পার্থক্য কী? কোনটি কখন বেছে নেবেন? (মাঝারি)

উত্তর: L4 LB শুধু IP আর port দেখে প্রতিটি TCP/UDP সংযোগ একটি backend-এ দেয় — দ্রুত, protocol-নিরপেক্ষ, TLS না খুলেই; কিন্তু একটি দীর্ঘ সংযোগের ভেতরের অনুরোধগুলো ভাগ করতে পারে না। L7 LB HTTP পড়ে — path বা header দেখে routing (/api এক দলে, /static আরেক দলে), retry, header যোগ, TLS termination, প্রতি অনুরোধে ভাগ; দাম বেশি CPU আর জটিলতা।

ফলো-আপ: “gRPC (HTTP/2) সার্ভিসে L4 LB দিলে কী সমস্যা?” → একটি দীর্ঘ HTTP/2 সংযোগে সব অনুরোধ — সব একটি backend-এ যায়, নতুন pod অলস বসে থাকে; L7 (অনুরোধ-স্তরের) LB বা client-side balancing লাগে।

আরও গভীর ফলো-আপ: “Backend কীভাবে client-এর আসল IP জানবে?” → L7-এ X-Forwarded-For বা Forwarded header (শুধু বিশ্বস্ত proxy-র দেওয়াটা মানা); L4-এ PROXY protocol বা direct server return. Health check আর connection draining দুই ধরনেই লাগে।

৫ · Routing আর switching — network engineer-এর প্রশ্ন

রিভিশন: পর্ব ১২ · Switch আর STP, পর্ব ১৩ · VLAN আর trunk, পর্ব ১৭ · Subnetting আর VLSM, পর্ব ২২ · Routing table আর LPM, পর্ব ২৪ · OSPF, পর্ব ২৫ · BGP, পর্ব ৫২ · Leaf-spine আর ECMP

প্র ৩৩VLAN কেন? Access port আর trunk port-এর পার্থক্য, আর native VLAN কী? (সহজ)

উত্তর: VLAN একটি switch-কে কয়েকটি আলাদা broadcast domain-এ ভাগ করে — হিসাব বিভাগ, অতিথি Wi-Fi আর CCTV একই তারে থেকেও আলাদা নেটওয়ার্ক। Access port একটি VLAN-এর, যন্ত্র tag ছাড়া frame পাঠায়। Trunk port (switch-switch বা switch-router) অনেক VLAN বহন করে — প্রতিটি frame-এ ৪ বাইটের 802.1Q tag, যার ১২ বিটের VLAN ID (১–৪০৯৪ ব্যবহারযোগ্য)। Native VLAN-এর frame trunk-এ tag ছাড়া যায়।

ফলো-আপ: “দুই VLAN-এর যন্ত্র কথা বলবে কীভাবে?” → router বা L3 switch দিয়ে — inter-VLAN routing (router-on-a-stick বা SVI); মাঝখানে ACL বা firewall বসিয়ে নিয়ন্ত্রণ।

আরও গভীর ফলো-আপ: “Native VLAN-এর নিরাপত্তা-ঝুঁকি?” → দুই প্রান্তে native VLAN না মিললে ট্রাফিক ভুল VLAN-এ মেশে, আর double-tagging-এর মতো VLAN hopping-এর ধারণাগত ঝুঁকি; প্রতিরক্ষা: native VLAN-কে অব্যবহৃত VLAN-এ সরানো, ব্যবহারকারীর port-এ trunk-আলোচনা (DTP) বন্ধ।

প্র ৩৪Spanning Tree কী সমস্যা মেটায়? Root bridge কীভাবে বাছাই হয়? STP না থাকলে loop-এ কী ঘটে? (মাঝারি)

উত্তর: Redundancy-র জন্য switch-গুলোর মাঝে একাধিক পথ রাখলে L2-তে loop হয়; Ethernet frame-এ TTL নেই, তাই একটি broadcast অনন্তকাল ঘোরে আর গুণিত হয় — broadcast storm, MAC table টালমাটাল, কয়েক সেকেন্ডে নেটওয়ার্ক অচল। STP (802.1D) কিছু port block করে loop-মুক্ত একটি গাছ বানায়। Root bridge: সবচেয়ে ছোট bridge ID (priority, ডিফল্ট ৩২৭৬৮, তারপর MAC).

ফলো-আপ: “ডিফল্টে রাখলে সমস্যা কী?” → সবচেয়ে পুরোনো (ছোট MAC-এর) switch root হয়ে যেতে পারে — হয়তো কোণের একটি দুর্বল switch; তাই core switch-এ priority কমিয়ে root ঠিক করে দেওয়া হয়।

আরও গভীর ফলো-আপ: “Classic STP ধীর কেন, বিকল্প?” → port listening/learning পেরোতে ৩০–৫০ সেকেন্ড; RSTP (802.1w) সাধারণত কয়েক সেকেন্ড বা তারও কমে মেলে। Data center-এ আজ প্রায়ই L3 leaf-spine আর ECMP — L2 loop-এর সুযোগই কমানো হয়। Access port-এ PortFast + BPDU Guard.

প্র ৩৫OSPF আর BGP-র পার্থক্য কী? একটি প্রতিষ্ঠান কেন দুটোই চালায়? (মাঝারি)

উত্তর: OSPF একটি IGP — এক প্রতিষ্ঠানের ভেতরে, link-state: প্রত্যেক router পুরো মানচিত্র জানে আর Dijkstra-য় সবচেয়ে কম cost-এর পথ বের করে; দ্রুত মেলে, লক্ষ্য গতি। BGP একটি EGP — autonomous system-গুলোর মাঝে, path vector: প্রতিটি route-এর সাথে AS-এর তালিকা; সিদ্ধান্ত নেয় policy দিয়ে (কাকে কী বিজ্ঞাপন দেব, কার route পছন্দ), সবচেয়ে ছোট পথ সবসময় নয়; TCP port 179-এ চলে।

ফলো-আপ: “দুটো একসাথে কেন?” → OSPF ভেতরের যন্ত্রগুলো আর loopback-এ পৌঁছানোর পথ দেয়; BGP দুই ISP বা upstream-এর সাথে বাইরের route বিনিময় করে। iBGP-র next-hop-এ পৌঁছাতে নিচে IGP লাগে।

আরও গভীর ফলো-আপ: “OSPF-এ area কেন?” → বড় নেটওয়ার্কে প্রতিটি পরিবর্তনে সবার SPF চালানো আর LSDB-র আকার কমাতে; area 0 backbone, অন্য area-গুলো ABR দিয়ে যুক্ত, আর area-র সীমায় summarization.

প্র ৩৬BGP একই prefix-এর কয়েকটি route থেকে কোনটি বাছে? Route leak আর prefix hijack কী, আর প্রতিরক্ষা কী? (কঠিন)

উত্তর: সাধারণ ক্রমের মূল ধাপগুলো: বেশি local preference (নিজের AS-এর নীতি, বেরোনোর পথ ঠিক করে), তারপর ছোট AS path, তারপর origin, কম MED (প্রতিবেশী AS-এর ইঙ্গিত, ঢোকার পথ), eBGP-কে iBGP-র আগে, next-hop-এর কাছের IGP cost, শেষে টাই-ভাঙার নিয়ম। Vendor-ভেদে বাড়তি ধাপ আছে (যেমন Cisco-র weight) — এটি স্পষ্ট বলা ভালো।

ফলো-আপ: “Leak আর hijack?” → Route leak: কেউ এক provider থেকে শেখা route ভুল করে আরেক provider-কে বিজ্ঞাপন দেয় — ট্রাফিক ভুল পথে ঘোরে। Prefix hijack: কেউ অন্যের prefix (বা তার চেয়ে নির্দিষ্ট অংশ) নিজের বলে বিজ্ঞাপন দেয়; longest prefix match-এর কারণে আরও নির্দিষ্টটি জেতে।

আরও গভীর ফলো-আপ: “প্রতিরক্ষা?” → প্রতিটি customer session-এ prefix filter (IRR-ভিত্তিক), max-prefix সীমা, RPKI-র ROA দিয়ে origin যাচাই (ROV), আর নিজের prefix নজরদারি। RPKI origin যাচাই করে, পুরো পথ নয় — সেই সীমাও বলুন।

প্র ৩৭Longest prefix match কী? একটি static route আর একটি OSPF route — কোনটি জিতবে? (মাঝারি)

উত্তর: Routing table-এ গন্তব্যের সাথে মেলে এমন কয়েকটি prefix থাকলে সবচেয়ে লম্বা (সবচেয়ে নির্দিষ্ট) prefix জেতে — longest prefix match; 0.0.0.0/0 default route সবার সাথে মেলে, তাই শেষ ভরসা। Administrative distance (Cisco-র ডিফল্টে connected ০, static ১, eBGP ২০, OSPF ১১০) কাজে লাগে শুধু তখন, যখন একই prefix বিভিন্ন উৎস থেকে আসে। তাই OSPF-এর /24 আর static-এর /16 থাকলে /24-এর মধ্যের গন্তব্যে OSPF-ই জেতে।

ফলো-আপ: “একই prefix, একই উৎস, একই cost-এর দুটি পথ?” → ECMP — দুটোই ব্যবহার হয়, প্রতিটি flow hash দিয়ে একটি পথে।

আরও গভীর ফলো-আপ: “ECMP প্রতি প্যাকেটে না করে প্রতি flow-এ কেন?” → এক flow-এর প্যাকেট দুই পথে গেলে ভিন্ন দেরিতে ক্রম উল্টে যায়, TCP সেটিকে ক্ষতি ভেবে গতি কমায়। দাম: কয়েকটি বড় flow (elephant) একই পথে পড়লে ভার অসম। Hardware-এ LPM-এর জন্য TCAM বা trie (পর্ব ২২)।

// Longest prefix match, then ECMP: one flow -> always the same next hop.
const toInt = ip => ip.split(".").reduce((n, o) => n * 256 + Number(o), 0);
const table = [                      // prefix, next hop(s)
  ["0.0.0.0/0", ["isp"]],
  ["10.0.0.0/8", ["core"]],
  ["10.1.0.0/16", ["dc1-a", "dc1-b"]],  // two equal-cost paths (ECMP)
  ["10.1.2.0/24", ["rack7"]],
  ["10.1.2.128/25", ["firewall"]],
];
function lookup(dst) {
  let best = null;
  for (const [pfx, hops] of table) {
    const [net, len] = pfx.split("/"); const size = 2 ** (32 - Number(len));
    const match = Math.floor(toInt(dst) / size) === Math.floor(toInt(net) / size);
    if (match && (!best || Number(len) > best.len)) best = { pfx, len: Number(len), hops };
  }
  return best;
}
function fnv(s) { let h = 2166136261; for (const c of s) h = Math.imul(h ^ c.charCodeAt(0), 16777619) >>> 0; return h; }

for (const d of ["10.1.2.200", "10.1.2.5", "10.1.99.1", "10.9.9.9", "198.51.100.1"])
  console.log(`${d.padEnd(13)} -> ${lookup(d).pfx.padEnd(14)} via ${lookup(d).hops.join(" | ")}`);

console.log("ECMP for 10.1.99.1 (hash of the 5-tuple picks one path):");
for (const sport of [40001, 40002, 40003, 40001]) {
  const tuple = `192.0.2.10|10.1.99.1|tcp|${sport}|443`;
  const hops = lookup("10.1.99.1").hops;
  console.log(`  src port ${sport} -> ${hops[fnv(tuple) % hops.length]}`);
}

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

10.1.2.200    -> 10.1.2.128/25  via firewall
10.1.2.5      -> 10.1.2.0/24    via rack7
10.1.99.1     -> 10.1.0.0/16    via dc1-a | dc1-b
10.9.9.9      -> 10.0.0.0/8     via core
198.51.100.1  -> 0.0.0.0/0      via isp
ECMP for 10.1.99.1 (hash of the 5-tuple picks one path):
  src port 40001 -> dc1-a
  src port 40002 -> dc1-b
  src port 40003 -> dc1-a
  src port 40001 -> dc1-a

10.1.2.200 পাঁচটি prefix-এর সবকটির সাথেই মেলে (/0, /8, /16, /24 আর /25), কিন্তু সবচেয়ে লম্বা /25 জেতে — firewall. 10.1.2.5 /25-এর বাইরে (০–১২৭ অংশে), তাই /24. 198.51.100.1 শুধু default-এর সাথে মেলে। ECMP-অংশে একই গন্তব্যে চারটি flow: source port বদলালে hash বদলায় বলে flow ভাগ হয়, কিন্তু port 40001 দ্বিতীয়বারও dc1-a — একই 5-tuple সবসময় একই পথ, তাই ক্রম ঠিক থাকে। আসল router-এ hash হয় hardware-এ, আর কোন ঘরগুলো hash-এ ঢুকবে তা কনফিগারযোগ্য।

প্র ৩৮Subnetting speed-drill: 192.168.10.77/26-এর network, broadcast আর host-সংখ্যা মুখে মুখে বের করুন। কৌশলটি কী? (সহজ)

উত্তর: Block size পদ্ধতি (পর্ব ১৭): /26 মানে শেষ octet-এ ২ বিট network, mask 255.255.255.192, block size = ২৫৬ − ১৯২ = ৬৪. ৭৭-এর নিচের ৬৪-এর গুণিতক ৬৪ — network 192.168.10.64, পরের block ১২৮, তাই broadcast 192.168.10.127; host .65 থেকে .126 — ২৬ − ২ = ৬২টি।

ফলো-আপ: “10.20.30.200/21?” → /21 তৃতীয় octet-এ কাটে, block ৮; ৩০-এর নিচের ৮-এর গুণিতক ২৪ — network 10.20.24.0, broadcast 10.20.31.255, host ২১১ − ২ = ২০৪৬টি।

আরও গভীর ফলো-আপ: “/31 আর /32?” → /31-এ (RFC 3021) point-to-point link-এর দুই প্রান্তে দুটি ঠিকানাই ব্যবহারযোগ্য — network বা broadcast নেই; /32 একটি মাত্র host (loopback, host route). নিচের checker দিয়ে নিজের উত্তর মেলান।

// Subnetting speed-drill checker: network, broadcast, host range, usable hosts.
const toInt = ip => ip.split(".").reduce((n, o) => n * 256 + Number(o), 0);
const toIp = n => [24, 16, 8, 0].map(s => Math.floor(n / 2 ** s) % 256).join(".");

function info(cidr) {
  const [ip, p] = cidr.split("/"); const len = Number(p);
  const size = 2 ** (32 - len);                       // addresses in the block
  const net = Math.floor(toInt(ip) / size) * size;    // same as ip AND mask
  const bc = net + size - 1;
  const usable = len >= 31 ? size : size - 2;          // /31 (RFC 3021) and /32 are special
  return { net: toIp(net), bc: toIp(bc), first: toIp(len >= 31 ? net : net + 1),
           last: toIp(len >= 31 ? bc : bc - 1), usable, mask: toIp(2 ** 32 - size) };
}

for (const q of ["192.168.10.77/26", "10.20.30.200/21", "172.16.5.130/30", "203.0.113.9/31"]) {
  const r = info(q);
  console.log(`${q.padEnd(17)} mask ${r.mask.padEnd(15)} net ${r.net.padEnd(13)} bc ${r.bc.padEnd(14)} hosts ${r.first}-${r.last} (${r.usable})`);
}

// "Are these two hosts on the same subnet?" - the question behind every ARP-or-gateway decision
const same = (a, b, len) => info(`${a}/${len}`).net === info(`${b}/${len}`).net;
console.log("192.168.1.10 and 192.168.1.200 on /25 ->", same("192.168.1.10", "192.168.1.200", 25) ? "same subnet (ARP directly)" : "different (send to gateway)");
console.log("192.168.1.10 and 192.168.1.100 on /25 ->", same("192.168.1.10", "192.168.1.100", 25) ? "same subnet (ARP directly)" : "different (send to gateway)");

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

192.168.10.77/26  mask 255.255.255.192 net 192.168.10.64 bc 192.168.10.127 hosts 192.168.10.65-192.168.10.126 (62)
10.20.30.200/21   mask 255.255.248.0   net 10.20.24.0    bc 10.20.31.255   hosts 10.20.24.1-10.20.31.254 (2046)
172.16.5.130/30   mask 255.255.255.252 net 172.16.5.128  bc 172.16.5.131   hosts 172.16.5.129-172.16.5.130 (2)
203.0.113.9/31    mask 255.255.255.254 net 203.0.113.8   bc 203.0.113.9    hosts 203.0.113.8-203.0.113.9 (2)
192.168.1.10 and 192.168.1.200 on /25 -> different (send to gateway)
192.168.1.10 and 192.168.1.100 on /25 -> same subnet (ARP directly)

প্রথম দুই লাইন ওপরের মুখের হিসাবের সাথে হুবহু মেলে। /30-এ ৪টি ঠিকানার ২টি ব্যবহারযোগ্য — পুরোনো ধাঁচের point-to-point link. /31-এর লাইনে “bc” কলামটি শুধু block-এর শেষ ঠিকানা; RFC 3021-এ সেখানে broadcast নেই, দুটি ঠিকানাই host. শেষ দুই লাইন ইন্টারভিউর একটি প্রিয় প্রশ্নের উত্তর: /25-এ 192.168.1.0–127 এক subnet, 128–255 আরেক — তাই .10 থেকে .200-এ যেতে host ARP করে gateway-এর জন্য, আর .100-এর জন্য সরাসরি। কোডের Math.floor(ip / size) * size আসলে “ip AND mask”-এর সমান — block size দুইয়ের ঘাত বলে।

প্র ৩৯একটি অফিসের দুই তলায় ১২০ আর ৫০ জন, আর দুটি router-link — 192.168.50.0/24 থেকে VLSM-এ ভাগ করুন। (মাঝারি)

উত্তর: বড় থেকে ছোট বরাদ্দ: ১২০ জনে লাগে ১২৮-এর block (/25, ১২৬ host) → 192.168.50.0/25 (.1–.126); ৫০ জনে ৬৪-এর block (/26, ৬২ host) → 192.168.50.128/26 (.129–.190); দুটি link-এ /30 (২ host) → 192.168.50.192/30 আর 192.168.50.196/30. বাকি 192.168.50.200–.255 ভবিষ্যতের জন্য ফাঁকা।

ফলো-আপ: “বড় থেকে শুরু কেন?” → ছোট block আগে বসালে বড় block-এর সীমা (alignment) মেলাতে মাঝে ফাঁক নষ্ট হয়।

আরও গভীর ফলো-আপ: “১২০ জনের তলায় /25 দেওয়া কি বুদ্ধিমানের?” → মাত্র ৬টি বাড়তি ঠিকানা — বৃদ্ধি, printer, AP আর IoT-এর জন্য কম; বাস্তবে প্রায়ই প্রতিটি VLAN-এ /24 দিয়ে সহজ আর বৃদ্ধিযোগ্য নকশা রাখা হয়, private ঠিকানার অভাব নেই বলে। ইন্টারভিউতে এই trade-off বলাই অভিজ্ঞতার চিহ্ন।

৬ · Systems আর backend networking — socket থেকে Kubernetes

রিভিশন: পর্ব ৪১ · TCP socket, পর্ব ৪২ · UDP socket আর timeout, পর্ব ৪৩ · Concurrent server, পর্ব ৪৪ · select, poll, epoll, পর্ব ৫২ · Load balancer, পর্ব ৫৪ · Docker আর Kubernetes, পর্ব ৫৬ · পারফরম্যান্স; OS-এর দিক OS ইন্টারভিউ পাতায়

প্র ৪০একটি TCP server-এর socket-জীবন বলুন। Blocking আর non-blocking I/O-র পার্থক্য কী? (সহজ)

উত্তর: Server: socket → bind (ঠিকানা আর port) → listen (accept queue) → লুপে accept (প্রতিটি client-এর জন্য নতুন connected socket) → recv/send → close. Client: socket → connect. Blocking socket-এ recv ডেটা না আসা পর্যন্ত থ্রেড ঘুমায়; non-blocking-এ সঙ্গে সঙ্গে ফেরে — ডেটা না থাকলে EAGAIN, তখন অ্যাপ অন্য কাজ করে আর পরে আবার দেখে।

ফলো-আপ: “send সফল মানে কি অপর পক্ষ পেয়েছে?” → না; শুধু kernel-এর send buffer-এ কপি হয়েছে। অপর অ্যাপ পড়েছে কি না জানতে application-স্তরের উত্তর লাগে।

আরও গভীর ফলো-আপ: “Restart-এর পর bind ব্যর্থ: Address already in use — কেন?” → পুরোনো সংযোগ TIME-WAIT-এ সেই port ধরে আছে; server-এ bind-এর আগে SO_REUSEADDR. একাধিক process-এ একই port-এ শুনে kernel-কে ভার ভাগ করাতে SO_REUSEPORT.

প্র ৪১select, poll আর epoll-এর পার্থক্য কী? C10K সমস্যা কী ছিল? (মাঝারি)

উত্তর: তিনটিই এক থ্রেডে অনেক socket নজরে রাখে। select-এ fd-সংখ্যার সীমা (সাধারণত ১০২৪) আর প্রতিবার পুরো তালিকা kernel-এ কপি ও স্ক্যান; poll-এ সীমা নেই, কিন্তু খরচ এখনো O(মোট fd). epoll-এ আগ্রহের তালিকা kernel-এ একবার নিবন্ধিত, আর epoll_wait শুধু প্রস্তুত fd ফেরত দেয় — খরচ O(প্রস্তুত)। C10K — এক server-এ একসাথে দশ হাজার client — ১৯৯৯ সালে Dan Kegel-এর লেখায় আলোচিত; উত্তর এসেছে epoll/kqueue আর event-driven নকশায়।

ফলো-আপ: “Level-triggered আর edge-triggered?” → level: ডেটা থাকা পর্যন্ত বারবার জানায়; edge: নতুন ডেটা এলে একবার — তখন EAGAIN না পাওয়া পর্যন্ত পড়তেই হবে, নইলে ডেটা পড়ে থাকে আর আর কোনো খবর আসে না।

আরও গভীর ফলো-আপ: “আজ দশ লাখ সংযোগে সীমা কোথায়?” → fd-সীমা, প্রতি socket-এর buffer-মেমরি, conntrack টেবিল, আর client-পক্ষে ephemeral port; Windows-এ IOCP আর Linux-এ io_uring completion-ভিত্তিক বিকল্প।

প্র ৪২Connection pool কেন দরকার? Pool-এর আকার কীভাবে ঠিক করবেন? (মাঝারি)

উত্তর: প্রতিটি অনুরোধে DB বা অন্য সার্ভিসে নতুন সংযোগ মানে TCP handshake, প্রায়ই TLS, আর DB-তে authentication — কয়েক ms থেকে বহু ms; সাথে TIME-WAIT আর port-খরচ। Connection pool কিছু খোলা সংযোগ রেখে বারবার ব্যবহার করে। আকার শুরু করুন Little-এর সূত্রে: L = λ × W — ২০০০ অনুরোধ/সেকেন্ড × ১৫ ms = গড়ে ৩০টি ব্যস্ত সংযোগ (ওপরের হিসাব), তারপর চূড়া আর মাপা p99 দেখে সমন্বয়।

ফলো-আপ: “Pool যত বড় তত ভালো?” → না; DB-র নিজস্ব সীমা আছে, আর ৫০টি অ্যাপ-instance × ১০০ করে = ৫০০০ সংযোগ DB-কে ডুবিয়ে দিতে পারে। প্রায়ই ছোট pool আর অপেক্ষার সারি ভালো ফল দেয়; দরকারে মাঝখানে PgBouncer-এর মতো pooler.

আরও গভীর ফলো-আপ: “Pool থেকে নেওয়া সংযোগ মৃত হলে?” → firewall বা LB-এর idle timeout অলস সংযোগ নিঃশব্দে কেটে দেয়; pool-এ max idle time সেই timeout-এর চেয়ে কম রাখা, ব্যবহারের আগে বা পেছনে যাচাই, আর TCP keepalive.

প্র ৪৩একটি HTTP client-এ কোন কোন timeout বসাবেন? Timeout না দিলে কী হয়? (মাঝারি)

উত্তর: অন্তত তিনটি: connect timeout (সংযোগ তৈরি — সাধারণত ছোট, যেমন কয়েকশো ms থেকে কয়েক সেকেন্ড), read/idle timeout (দুই বাইটের মাঝে সর্বোচ্চ নীরবতা), আর পুরো অনুরোধের deadline. অনেক লাইব্রেরির ডিফল্ট “চিরকাল অপেক্ষা” বা খুব লম্বা — একটি ধীর upstream তখন আপনার সব থ্রেড বা সংযোগ আটকে রাখে, আর সমস্যা উজানে ছড়ায় (cascading failure).

ফলো-আপ: “Timeout-এর মান কীভাবে বাছবেন?” → upstream-এর মাপা p99 latency-র চেয়ে কিছু বেশি, আর ব্যবহারকারীর ধৈর্যের বাজেটের ভেতরে; অনুমানে নয়, মেট্রিক দেখে।

আরও গভীর ফলো-আপ: “Deadline propagation কী?” → উজানের অনুরোধে ৮০০ ms বাকি থাকলে ভাটির প্রতিটি কল সেই বাকি সময়টুকুই পায় — নইলে উজান হাল ছেড়ে দেওয়ার পরও ভাটিতে অর্থহীন কাজ চলতে থাকে (gRPC deadline এভাবেই কাজ করে)।

প্র ৪৪Retry কীভাবে নিরাপদে করবেন? Exponential backoff-এ jitter কেন? (মাঝারি)

উত্তর: শুধু অস্থায়ী ত্রুটিতে retry (timeout, সংযোগ ব্যর্থ, 503, 429 — Retry-After মেনে), স্থায়ী ত্রুটিতে নয় (400, 401, 404). প্রতিবার অপেক্ষা দ্বিগুণ (exponential backoff), একটি সর্বোচ্চ সীমাসহ; আর অপেক্ষা এলোমেলো করা (jitter) — নইলে একসাথে ব্যর্থ হাজারো client একই মুহূর্তে আবার আঘাত করে, সেবা উঠতেই আবার পড়ে যায় (thundering herd). সর্বোচ্চ চেষ্টার সংখ্যা সীমিত রাখুন।

ফলো-আপ: “Full jitter মানে?” → প্রতিবার অপেক্ষা ০ থেকে বর্তমান সীমার মধ্যে সম্পূর্ণ এলোমেলো; গড়ে অপেক্ষা কমে, আর চাপ সময়ে ছড়িয়ে যায়। নিচের কোডে তিনটি পরীক্ষাসহ দেখুন।

আরও গভীর ফলো-আপ: “Retry কোথায় করবেন — প্রতিটি স্তরে?” → না, একটি স্তরে (সাধারণত সবচেয়ে উজানে বা নির্দিষ্ট client-এ); প্রতিটি স্তরে করলে গুণিত হয় (প্র ৪৫)।

// Retry with exponential backoff + "full jitter", tested against a fake flaky call.
let seed = 12345;                                   // tiny deterministic RNG (MINSTD) for the demo
const rand = () => (seed = (seed * 48271) % 2147483647) / 2147483647;

function backoffDelays(attempts, base = 100, cap = 2000) {
  const out = [];
  for (let i = 0; i < attempts; i++) {
    const ceiling = Math.min(cap, base * 2 ** i);       // 100, 200, 400, 800, 1600, 2000...
    out.push([ceiling, Math.floor(rand() * ceiling)]);   // full jitter: random in [0, ceiling)
  }
  return out;
}

function callWithRetry(op, maxAttempts = 5) {
  const delays = backoffDelays(maxAttempts - 1);
  for (let attempt = 1; ; attempt++) {
    const r = op(attempt);
    if (r.ok) return `ok on attempt ${attempt}`;
    if (!r.retryable || attempt === maxAttempts) return `gave up on attempt ${attempt}: ${r.err}`;
    const [ceil, wait] = delays[attempt - 1];
    console.log(`  attempt ${attempt} failed (${r.err}); wait ${wait} ms (ceiling ${ceil})`);
  }
}

// Test 1: fails twice with 503, then succeeds
console.log(callWithRetry(a => a <= 2 ? { ok: false, retryable: true, err: "503" } : { ok: true }));
// Test 2: 400 Bad Request is not retryable -> stop at once
console.log(callWithRetry(() => ({ ok: false, retryable: false, err: "400" })));
// Test 3: always times out -> stop after maxAttempts
console.log(callWithRetry(() => ({ ok: false, retryable: true, err: "timeout" })));

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

  attempt 1 failed (503); wait 27 ms (ceiling 100)
  attempt 2 failed (503); wait 145 ms (ceiling 200)
ok on attempt 3
gave up on attempt 1: 400
  attempt 1 failed (timeout); wait 57 ms (ceiling 100)
  attempt 2 failed (timeout); wait 132 ms (ceiling 200)
  attempt 3 failed (timeout); wait 186 ms (ceiling 400)
  attempt 4 failed (timeout); wait 10 ms (ceiling 800)
gave up on attempt 5: timeout

সীমা (ceiling) প্রতিবার দ্বিগুণ — ১০০, ২০০, ৪০০, ৮০০ ms — কিন্তু আসল অপেক্ষা তার ভেতরে এলোমেলো; চতুর্থবার সীমা ৮০০ হলেও অপেক্ষা মাত্র ১০ ms এসেছে — full jitter-এ এটি স্বাভাবিক, আর হাজার client-এর ক্ষেত্রে ঠিক এটিই চাপ ছড়িয়ে দেয়। পরীক্ষা ১: দুইবার 503-এর পর তৃতীয় চেষ্টায় সফল। পরীক্ষা ২: 400 স্থায়ী ত্রুটি — retry-ই হয়নি। পরীক্ষা ৩: পাঁচবারের সীমায় থেমেছে, অনন্তকাল নয়। RNG-টি নির্দিষ্ট seed-এর, তাই পাতায় প্রতিবার একই সংখ্যা আসে; আসল কোডে Math.random() আর সত্যিকারের setTimeout/sleep থাকবে।

প্র ৪৫Idempotency কী, আর retry-র সাথে এর সম্পর্ক কী? Retry storm আর circuit breaker বুঝিয়ে বলুন। (কঠিন)

উত্তর: একটি কাজ idempotent যদি একবার আর কয়েকবার করার ফল একই হয়। HTTP-তে GET, PUT, DELETE সংজ্ঞায় idempotent; POST নয়। Timeout হলে আপনি জানেন না অনুরোধটি server-এ পৌঁছে কাজ হয়েছিল কি না — POST “৳৫০০ পাঠান” আবার পাঠালে দুবার টাকা কাটতে পারে। সমাধান: client প্রতিটি কাজের জন্য একটি অনন্য idempotency key পাঠায়, server key দেখে আগের ফল ফেরত দেয়, আবার করে না।

ফলো-আপ: “Retry storm?” → upstream ধীর হলে প্রতিটি স্তর retry করে ভার গুণিত করে — তিন স্তরে ৩ বার করে = ২৭ গুণ (ওপরের হিসাব); ভার বাড়ায় আরও ধীর, আরও retry. প্রতিরক্ষা: এক স্তরে retry, retry-বাজেট (যেমন মোট অনুরোধের ১০%-এর বেশি নয়), আর circuit breaker.

আরও গভীর ফলো-আপ: “Circuit breaker কীভাবে কাজ করে?” → ব্যর্থতার হার একটি সীমা ছাড়ালে “খোলা” অবস্থায় যায় — কিছুক্ষণ upstream-এ কল না পাঠিয়ে সঙ্গে সঙ্গে ব্যর্থ বা fallback দেয়; তারপর “আধা-খোলা” অবস্থায় অল্প কিছু পরীক্ষামূলক কল, সফল হলে আবার “বন্ধ”। ক্ষতিগ্রস্ত সেবাকে সেরে ওঠার সময় দেয়।

প্র ৪৬সার্ভিসগুলোর মাঝে keep-alive — load balancer-এর idle timeout আর backend-এর keep-alive timeout-এর সম্পর্ক কী হওয়া উচিত? (কঠিন)

উত্তর: LB আর backend-এর মাঝে সংযোগ পুনর্ব্যবহৃত হয়। যদি backend-এর keep-alive timeout LB-এর idle timeout-এর চেয়ে ছোট হয়, backend একটি অলস সংযোগ বন্ধ করার ঠিক মুহূর্তে LB সেটিতে নতুন অনুরোধ পাঠাতে পারে — অনুরোধ RST খায়, ব্যবহারকারী পায় বিক্ষিপ্ত 502. নিয়ম: যে পক্ষ সংযোগ পুনর্ব্যবহার করে (LB), অলস সংযোগ আগে সে-ই বন্ধ করুক — backend-এর timeout LB-এর চেয়ে বড় রাখুন।

ফলো-আপ: “বাস্তব উদাহরণ?” → অনেক cloud LB-র idle timeout ডিফল্টে প্রায় ৬০ সেকেন্ড, আর কিছু অ্যাপ-framework-এর server keep-alive ডিফল্ট মাত্র কয়েক সেকেন্ড (যেমন Node.js-এর http server-এ ৫ সেকেন্ড) — এই জুটিতে সমস্যাটি পরিচিত। নিজের সংস্করণের ডকুমেন্টেশনে মান মিলিয়ে নিন।

আরও গভীর ফলো-আপ: “TCP keepalive আর HTTP keep-alive কি একই?” → না। TCP keepalive অলস সংযোগে ছোট probe পাঠিয়ে দেখে অপর পক্ষ বেঁচে আছে কি না (Linux-এ ডিফল্টে দুই ঘণ্টা পরে শুরু, তাই প্রায় সবসময় কমিয়ে নিতে হয়); HTTP keep-alive মানে একই সংযোগে একাধিক অনুরোধ।

প্র ৪৭Microservice-এ service discovery কী? Client-side আর server-side discovery-র পার্থক্য কী? (মাঝারি)

উত্তর: Instance-গুলো ওঠে-নামে, ঠিকানা বদলায় — তাই “orders সার্ভিস এখন কোথায়?” প্রশ্নের স্বয়ংক্রিয় উত্তর লাগে: service discovery. Server-side: client একটি স্থির নাম বা VIP-এ পাঠায়, LB বা proxy ঠিক instance বাছে (Kubernetes Service, cloud LB). Client-side: client একটি registry (DNS, Consul, etcd) থেকে instance-তালিকা নিয়ে নিজেই বাছে আর balance করে (অনেক gRPC client). সাথে health check জরুরি — মৃত instance তালিকা থেকে সরানো।

ফলো-আপ: “শুধু DNS দিয়ে discovery-র সমস্যা?” → TTL আর cache-এর কারণে পরিবর্তন দেরিতে পৌঁছায়, আর অনেক client প্রথম ঠিকানাটিই ধরে বসে থাকে (প্র ৪৯)।

আরও গভীর ফলো-আপ: “Service mesh কী যোগ করে?” → প্রতিটি pod-এর পাশে একটি sidecar proxy (বা node-স্তরের proxy) discovery, retry, timeout, mTLS আর মেট্রিক সামলায় — কোড না বদলে নীতি এক জায়গায়; দাম বাড়তি hop, latency আর পরিচালনার জটিলতা।

প্র ৪৮Kubernetes-এ একটি pod http://orders-এ অনুরোধ পাঠালে প্যাকেট আসলে কোথায় যায়? ClusterIP কোন interface-এ থাকে? (কঠিন)

উত্তর: নামটি CoreDNS resolve করে Service-এর ClusterIP-তে — একটি virtual IP; iptables mode-এ এটি কোনো interface-এ বসানো নেই আর ping-এ সাড়া দেয় না (IPVS mode-এ একটি dummy interface-এ বসানো থাকে)। প্রতিটি node-এ kube-proxy (iptables, IPVS বা nftables mode-এ) নিয়ম বসিয়ে রাখে: ClusterIP:port-এ যাওয়া প্যাকেট DNAT হয়ে একটি সুস্থ pod-এর IP:port-এ যায়; conntrack মনে রাখে, তাই উত্তর ফেরার পথে উল্টো অনুবাদ হয়। নিচের stepper ধাপে ধাপে দেখায়।

ফলো-আপ: “Pod তালিকা কোথা থেকে আসে?” → Service-এর selector-এর সাথে মেলা আর readiness probe-এ উত্তীর্ণ pod-গুলো EndpointSlice-এ; kube-proxy সেটি দেখে নিয়ম হালনাগাদ করে।

আরও গভীর ফলো-আপ: “নতুন pod যোগ হলেও পুরোনো pod-এ ভার — কেন?” → balancing হয় সংযোগ-স্তরে; দীর্ঘস্থায়ী সংযোগ (HTTP/2, gRPC, DB pool) শুরুতেই একটি pod-এ বাঁধা পড়ে। সমাধান: L7 balancing, client-side balancing (headless Service), বা সংযোগের সর্বোচ্চ বয়স। কিছু CNI (যেমন Cilium) kube-proxy-র কাজ eBPF দিয়ে করে।

  1. ১ · DNSorders → ClusterIP
  2. ২ · pod থেকে বেরোনোveth → node
  3. ৩ · DNATkube-proxy-র নিয়ম
  4. ৪ · অন্য node-এCNI-র পথ
  5. ৫ · উত্তরconntrack উল্টায়
এই ধাপে
প্যাকেট (উৎস → গন্তব্য)
কে কাজ করছে
যা মনে রাখার
  1. নাম থেকে ClusterIP. pod A (10.244.1.5) orders খোঁজে। তার /etc/resolv.conf-এ nameserver CoreDNS-এর Service 10.96.0.10, আর search domain-এ <namespace>.svc.cluster.local ইত্যাদি। CoreDNS উত্তর দেয় orders.shop.svc.cluster.local → 10.96.12.34. ডিফল্ট ndots:5-এর কারণে বাইরের নামের জন্য অনেক বাড়তি প্রশ্ন যেতে পারে — পরিচিত latency-ফাঁদ।
  2. Pod থেকে বেরোনো. অ্যাপ connect(10.96.12.34:80) ডাকে, kernel একটি ephemeral port (42310) দেয়। প্যাকেট pod-এর network namespace থেকে veth জোড়া হয়ে node-এর namespace-এ আসে। 10.96.12.34 কোনো যন্ত্রের ঠিকানা নয় — iptables mode-এ এটি শুধু নিয়মের একটি চাবি।
  3. DNAT. Node 1-এ kube-proxy-র লেখা নিয়ম (iptables chain, IPVS virtual server বা nftables) 10.96.12.34:80 চিনে তিনটি সুস্থ endpoint-এর একটি বাছে — এখানে 10.244.2.7:8080 — আর গন্তব্য বদলে দেয়। conntrack এই জোড়া লিখে রাখে; একই সংযোগের পরের সব প্যাকেট একই pod-এ যায়।
  4. অন্য node-এ পৌঁছানো. 10.244.2.0/24 node 2-এর pod-পরিসর; CNI plugin route বা overlay (যেমন VXLAN) দিয়ে প্যাকেট পৌঁছে দেয়। pod-থেকে-pod ট্রাফিক সাধারণত NAT ছাড়া — Kubernetes-এর নেটওয়ার্ক-মডেলের শর্ত — তাই pod B উৎস হিসেবে আসল 10.244.1.5 দেখে।
  5. উত্তর ফেরা. pod B 10.244.2.7:8080 থেকে উত্তর দেয়। Node 1-এ conntrack রেকর্ড মিলিয়ে উৎস আবার 10.96.12.34:80 করে দেয়, তাই pod A-র socket নিজের পাঠানো ঠিকানা থেকেই উত্তর পায়। এই পুরো পথ conntrack -L (root লাগে) বা node-এ tcpdump দিয়ে দেখা যায়; ধারণাটি পর্ব ১৯-এর NAT আর পর্ব ৫৪-এর Kubernetes-এর মিলন।
প্র ৪৯DNS TTL-এর ফাঁদ: রেকর্ড বদলালেন, TTL ৬০ সেকেন্ড — তবু ঘণ্টা পরেও কিছু ট্রাফিক পুরোনো server-এ। কেন? (মাঝারি)

উত্তর: কয়েকটি কারণ একসাথে: (১) TTL কমানোর আগে পুরোনো বড় TTL-এ cache হওয়া উত্তর সেই পুরোনো মেয়াদ পর্যন্ত টেকে — তাই পরিবর্তনের অন্তত এক পুরোনো-TTL আগে TTL কমাতে হয়; (২) কিছু resolver বা অ্যাপ নিজের নিয়মে বেশি সময় cache রাখে (কিছু JVM-সেটিংয়ে দীর্ঘ বা স্থায়ী cache — নিজের সংস্করণের networkaddress.cache.ttl দেখুন); (৩) সবচেয়ে বড় কারণ — খোলা সংযোগ DNS মানে না: connection pool বা keep-alive সংযোগ পুরোনো IP-তেই থাকে, যতক্ষণ না বন্ধ হয়।

ফলো-আপ: “তাহলে নিরাপদ migration?” → আগে TTL কমানো, দুই server একসাথে চালু রাখা, পুরোনোটিতে ট্রাফিক শূন্যে না নামা পর্যন্ত drain, আর client-এ সংযোগের সর্বোচ্চ বয়স।

আরও গভীর ফলো-আপ: “TTL খুব কম (১–৫ সেকেন্ড) রাখলে ক্ষতি?” → প্রায় প্রতিটি অনুরোধে resolver-প্রশ্ন — latency বাড়ে, DNS-ভার বাড়ে, আর DNS সেবা বিঘ্নিত হলে প্রভাব সঙ্গে সঙ্গে সর্বত্র; cache-এর রক্ষাকবচ হারায়। Negative caching-ও মনে রাখুন (প্র ০৭)।

৭ · প্রকৌশলীর জন্য নিরাপত্তা — firewall, TLS, DDoS আর zero trust

রিভিশন: পর্ব ৪৬ · নিরাপত্তার ভিত্তি, পর্ব ৪৮ · TLS আর HTTPS, পর্ব ৪৯ · Firewall আর VPN, পর্ব ৫০ · আক্রমণ আর প্রতিরক্ষা, পর্ব ৫৪ · Security group আর network policy. সব প্রশ্ন প্রতিরক্ষার দিক থেকে; আক্রমণের ধারণা শুধু বোঝার জন্য।

প্র ৫০Stateless আর stateful firewall-এর পার্থক্য কী? একটি web server-এর জন্য ন্যূনতম নিয়ম-সেট বলুন। (সহজ)

উত্তর: Stateless firewall প্রতিটি প্যাকেট আলাদাভাবে দেখে — ফেরত ট্রাফিকের জন্যও আলাদা নিয়ম লাগে (যেমন cloud-এর network ACL). Stateful firewall সংযোগের অবস্থা মনে রাখে (Linux-এ conntrack) — ভেতর থেকে শুরু হওয়া সংযোগের উত্তর আপনিই চলতে দেয়। ন্যূনতম নিয়ম: ডিফল্ট নীতি drop (implicit deny); established/related অনুমতি; loopback অনুমতি; 80/443 সবার জন্য; SSH শুধু ব্যবস্থাপনা-নেটওয়ার্ক বা VPN থেকে; প্রয়োজনীয় ICMP; আর বাকি সব বন্ধ।

ফলো-আপ: “নিয়মের ক্রম কেন গুরুত্বপূর্ণ?” → বেশিরভাগ firewall প্রথম মেলা নিয়ম মানে; একটি চওড়া accept আগে বসলে পরের নির্দিষ্ট drop কখনো কাজ করে না।

আরও গভীর ফলো-আপ: “Egress filtering কেন?” → ভেতরের কোনো যন্ত্র আক্রান্ত হলে বাইরে ডেটা পাঠানো বা আক্রমণকারীর server-এ যোগাযোগ কঠিন হয়; server-এর বেরোনোর পথও শুধু দরকারি গন্তব্যে খোলা রাখা (egress filtering).

প্র ৫১“অফিসের নেটওয়ার্ক বা VPN-এর ভেতরে থাকলেই বিশ্বাসযোগ্য” — এই ধারণায় সমস্যা কী? Zero trust কী বদলায়? (মাঝারি)

উত্তর: পুরোনো দুর্গ-মডেলে প্রাচীর পেরোলেই সবকিছুতে প্রবেশ — একটি আক্রান্ত ল্যাপটপ বা চুরি যাওয়া VPN-পাসওয়ার্ড থেকে আক্রমণকারী ভেতরে পাশে পাশে ছড়াতে পারে (lateral movement). Zero trust-এ নেটওয়ার্কের অবস্থান বিশ্বাসের ভিত্তি নয়: প্রতিটি অনুরোধে পরিচয় (MFA-সহ), যন্ত্রের অবস্থা আর নীতি যাচাই হয়, আর প্রতিটি অ্যাপে আলাদা, ন্যূনতম প্রবেশাধিকার।

ফলো-আপ: “VPN কি তাহলে বাদ?” → না; site-to-site সংযোগে VPN এখনো স্বাভাবিক। কিন্তু ব্যবহারকারীর প্রবেশে “পুরো নেটওয়ার্কে ঢোকানো” VPN-এর বদলে প্রতিটি অ্যাপের সামনে পরিচয়-সচেতন proxy (ZTNA)-র দিকে প্রবণতা।

আরও গভীর ফলো-আপ: “সার্ভিস-থেকে-সার্ভিসে?” → mTLS: দুই পক্ষই certificate দেখায়, তাই ভেতরের নেটওয়ার্কেও এনক্রিপশন আর পরিচয় দুটোই থাকে; service mesh এটি স্বয়ংক্রিয় করে। Zero trust একটি পণ্য নয়, ধাপে ধাপে বাস্তবায়নের নীতি — এই কথাটি বলা ভালো।

প্র ৫২DDoS কত রকম, আর প্রতিটির প্রতিরক্ষা কোন স্তরে? (মাঝারি)

উত্তর: তিন ধরন। (১) Volumetric: link ভরিয়ে দেওয়া (প্রায়ই reflection/amplification-এ) — নিজের সার্ভারে কিছু করার নেই, link-ই ভরা; প্রতিরক্ষা upstream-এ: anycast-ভিত্তিক CDN বা scrubbing সেবা, ISP-এর সাথে RTBH/FlowSpec. (২) Protocol বা state-exhaustion: SYN flood-এ সংযোগ-টেবিল ভরানো — SYN cookie, conntrack আর LB-এর সীমা। (৩) Application-layer: বৈধ দেখতে দামি HTTP অনুরোধ — rate limiting, caching, WAF, challenge আর অটোস্কেলিং-এর সীমা।

ফলো-আপ: “আক্রমণ চলাকালে প্রথম কাজ?” → প্রকৃতি চেনা (bps না pps না rps, কোন port/path), upstream বা DDoS-সেবাকে জানানো, আর আগে থেকে তৈরি runbook মানা — চলার সময় নকশা করার সময় থাকে না।

আরও গভীর ফলো-আপ: “নিজের নেটওয়ার্ক যেন অন্যের ক্ষতির হাতিয়ার না হয়?” → উৎস-ঠিকানা যাচাই (ingress filtering, BCP 38), খোলা resolver বা অপ্রয়োজনীয় UDP সেবা বন্ধ রাখা — reflection-এর উপকরণ না হওয়া।

প্র ৫৩Cloud-এ একটি database server — নেটওয়ার্কের দিক থেকে least privilege কীভাবে প্রয়োগ করবেন? (মাঝারি)

উত্তর: DB থাকবে private subnet-এ, public IP ছাড়া। তার security group-এ ঢোকার অনুমতি শুধু অ্যাপ-সার্ভারের security group থেকে, শুধু DB-র port-এ — 0.0.0.0/0 কখনো নয়। ব্যবস্থাপনার প্রবেশ bastion, VPN বা cloud-এর session-সেবা দিয়ে, MFA-সহ আর log-সহ। DB-র নিজের user-ও ন্যূনতম অধিকারের (least privilege).

ফলো-আপ: “Security group আর network ACL একসাথে কেন?” → একটি stateful, instance-স্তরের; অন্যটি stateless, subnet-স্তরের — দুই স্তরের রক্ষা (defense in depth).

আরও গভীর ফলো-আপ: “Kubernetes-এ একই নীতি?” → ডিফল্টে সব pod সব pod-এর সাথে কথা বলতে পারে; NetworkPolicy দিয়ে default-deny আর প্রয়োজনীয় পথ খোলা — তবে CNI সেটি প্রয়োগ করলে তবেই কার্যকর।

প্র ৫৪HTTPS থাকলে কি MITM অসম্ভব? কোন ভুলে HTTPS-এর সুরক্ষা ভেঙে যায়? (মাঝারি)

উত্তর: সঠিকভাবে যাচাই করা TLS-এ মাঝের কেউ (খোলা Wi-Fi, ARP spoofing) ট্রাফিক পড়তে বা বদলাতে পারে না, কারণ তার কাছে সাইটের বৈধ certificate-এর private key নেই। সুরক্ষা ভাঙে মানুষের বা কোডের ভুলে: কোডে certificate যাচাই বন্ধ করা (verify=False, -k, “trust all” — production-এ কখনো নয়), প্রথম অনুরোধ HTTP-তে যাওয়া (তখন HTTPS-এ ওঠার আগেই নামানো যায়), আর ব্যবহারকারীর সতর্কবার্তা উপেক্ষা করে এগোনো।

ফলো-আপ: “প্রথম HTTP অনুরোধের ফাঁক কীভাবে বন্ধ?” → HSTS header — ব্রাউজার পরের বার থেকে সবসময় HTTPS; preload তালিকায় থাকলে প্রথমবার থেকেই।

আরও গভীর ফলো-আপ: “প্রতিষ্ঠানের firewall যে HTTPS খুলে দেখে, সেটি কীভাবে সম্ভব?” → যন্ত্রগুলোতে প্রতিষ্ঠানের নিজস্ব root CA বসানো থাকে (TLS interception); তাই আইনগত ও নীতিগত স্বচ্ছতা, ব্যতিক্রম-তালিকা (ব্যাংক, স্বাস্থ্য) আর proxy-র নিজের নিরাপত্তা জরুরি।

প্র ৫৫IDS আর IPS-এর পার্থক্য কী? Alert-এর ভিড়ে আসল ঘটনা আলাদা করবেন কীভাবে? (মাঝারি)

উত্তর: IDS ট্রাফিকের কপি দেখে সতর্ক করে — পথে বসে না, ভুল হলে ক্ষতি কম। IPS পথের মাঝে বসে সন্দেহজনক ট্রাফিক আটকায় — কার্যকর, কিন্তু false positive-এ বৈধ ট্রাফিকও কাটে। শনাক্তের দুই পথ: signature (পরিচিত ধরন — নির্ভুল, নতুনে অন্ধ) আর anomaly (স্বাভাবিক থেকে বিচ্যুতি — নতুন ধরে, ভুল সতর্কতা বেশি)।

ফলো-আপ: “Alert fatigue কমাবেন কীভাবে?” → সম্পদের গুরুত্ব আর প্রেক্ষাপট (কোন server, কোন ব্যবহারকারী) যোগ করা, ভুল সতর্কতা নিয়মিত ছাঁটা, একই ঘটনার alert একসাথে করা, আর প্রতিটি alert-এর সাথে কী করতে হবে তার runbook.

আরও গভীর ফলো-আপ: “Port scan-এর অনেক alert দেখলে?” → ইন্টারনেট-মুখী ঠিকানায় scan প্রায় অবিরাম পটভূমি-শব্দ; আসল প্রশ্ন — কোন খোলা সেবা উন্মুক্ত আর হালনাগাদ কি না, আর scan-এর পর সফল লগইন বা অস্বাভাবিক বেরোনো ট্রাফিক আছে কি না। নিজের প্রতিষ্ঠানের অনুমোদন ছাড়া অন্যের নেটওয়ার্কে scan নয়।

৮ · Linux কমান্ডে সাবলীলতা — কোন কমান্ড কী বলে

রিভিশন: পর্ব ০৬ · ip, ss, curl আর /proc/net, পর্ব ২০ · ping আর traceroute, পর্ব ৩৫ · dig, পর্ব ৪৯ · nftables, পর্ব ৫৫ · tcpdump আর পদ্ধতিগত তদন্ত

ইন্টারভিউতে প্রায়ই বলা হয় “এই আউটপুট পড়ুন” বা “কোন কমান্ড চালাবেন আর কী আশা করবেন?”। কমান্ড মুখস্থের চেয়ে জরুরি — প্রতিটি কমান্ড কোন প্রশ্নের উত্তর দেয়। নিচের উদাহরণ-আউটপুটগুলো “উদাহরণ” লেবেলযুক্ত, একটি সাধারণ Linux মেশিনের ধাঁচে বানানো, documentation-পরিসরের ঠিকানায়; আপনার মেশিনে সংখ্যা আলাদা হবে। পুরোনো ifconfig, netstat, route (net-tools) এখনো অনেক জায়গায় আছে, কিন্তু আধুনিক Linux-এ iproute2-র ip আর ss মান — দুটোই জানা ভালো, আর পার্থক্যটি বলতে পারা আরও ভালো।

প্রশ্নLinuxWindows-এ কাছাকাছি
আমার ঠিকানা, interface কি up?ip -br addr, ip -s linkipconfig /all
এই গন্তব্যে কোন পথে যাবে?ip route get 198.51.100.7Find-NetRoute, route print
পাশের যন্ত্রের MAC?ip neigharp -a
কে কোন port-এ শুনছে, কোন সংযোগ খোলা?ss -tulpn, ss -tannetstat -ano, Get-NetTCPConnection
নামটি কী resolve হয়, কে উত্তর দিল?dig, getent hostsResolve-DnsName, nslookup
HTTP-র কোন ধাপে সময় যাচ্ছে?curl -v, curl -wcurl.exe (Windows 10-এর ২০১৮-এর হালনাগাদ থেকে সাথেই আসে)
তারে আসলে কী যাচ্ছে?tcpdumppktmon, Wireshark
পথের কোথায় ক্ষতি বা দেরি?mtr, tracepathtracert, pathping
Firewall কী আটকাচ্ছে?nft list rulesetGet-NetFirewallRule

প্রথমে একটি ৩০ সেকেন্ডের quick-look — কোনো নতুন মেশিনে লগইন করে প্রথমেই যা দেখবেন। এটি এই পাতার নিজস্ব Linux container-এ চলে (বাইরের ইন্টারনেট নেই, তাই শুধু নিজের অবস্থা দেখা যায়):

# 30-second quick-look: addresses, routes, listening sockets, kernel limits
echo "== ip -br addr (interfaces) =="
command -v ip >/dev/null && ip -br addr || ls /sys/class/net
echo "== ip route (default gateway first) =="
command -v ip >/dev/null && ip route || cat /proc/net/route
echo "== route lookup for one destination =="
command -v ip >/dev/null && ip route get 198.51.100.7 | head -1
echo "== listening TCP sockets (ss -ltn) =="
perl -MIO::Socket::INET -e 'my $s=IO::Socket::INET->new(LocalAddr=>"127.0.0.1:8080",Listen=>5,ReuseAddr=>1) or die; sleep 2' &
sleep 0.3
command -v ss >/dev/null && ss -ltn || cat /proc/net/tcp
echo "== kernel limits that interviews ask about =="
echo "ephemeral ports : $(cat /proc/sys/net/ipv4/ip_local_port_range)"
echo "somaxconn       : $(cat /proc/sys/net/core/somaxconn)"
echo "tcp_fin_timeout : $(cat /proc/sys/net/ipv4/tcp_fin_timeout) s"
wait

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

== ip -br addr (interfaces) ==
lo               UNKNOWN        127.0.0.1/8 ::1/128
tap0             UNKNOWN        10.0.2.100/24 fd00::3468:5fff:fe76:82b8/64 fe80::3468:5fff:fe76:82b8/64
== ip route (default gateway first) ==
default via 10.0.2.2 dev tap0
10.0.2.0/24 dev tap0 proto kernel scope link src 10.0.2.100
== route lookup for one destination ==
198.51.100.7 via 10.0.2.2 dev tap0 src 10.0.2.100 uid 999
== listening TCP sockets (ss -ltn) ==
State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0      5          127.0.0.1:8080      0.0.0.0:*
== kernel limits that interviews ask about ==
ephemeral ports : 32768	60999
somaxconn       : 4096
tcp_fin_timeout : 60 s

ip -br addr: loopback আর একটি tap0 interface — private 10.0.2.100/24, সাথে একটি ULA (fd00::) আর একটি link-local (fe80::) IPv6 ঠিকানা (এগুলোর শেষাংশ container-এর MAC থেকে আসে, তাই প্রতিবার চালালে আলাদা হতে পারে); IPv6-এ এক interface-এ কয়েকটি ঠিকানা স্বাভাবিক (প্র ১২)। ip route-এর default via 10.0.2.2 হলো default gateway; ip route get একটি নির্দিষ্ট গন্তব্যের জন্য kernel আসলে কোন route, কোন interface আর কোন উৎস-ঠিকানা বাছবে তা দেখায় — অনুমানের চেয়ে নির্ভরযোগ্য। ss -ltn-এ perl-এর ছোট server 127.0.0.1:8080-এ — অর্থাৎ শুধু এই মেশিনের ভেতর থেকে পৌঁছানো যাবে (প্র ১০); LISTEN সারির Send-Q (৫) হলো backlog-সীমা, Recv-Q (০) এখন অপেক্ষমাণ সংযোগ (প্র ২৪)। শেষ তিন লাইন: ephemeral range ৩২৭৬৮–৬০৯৯৯ (ওপরের হিসাবের ২৮২৩২টি port), somaxconn ৪০৯৬ (backlog-এর ছাদ), আর tcp_fin_timeout ৬০ — এটি FIN-WAIT-2-এর সময়, TIME-WAIT-এর নয় (প্র ১৪-এর ফাঁদ)।

প্র ৫৬ss -ti-এর আউটপুট থেকে একটি সংযোগের স্বাস্থ্য কীভাবে পড়বেন? (মাঝারি)

উত্তর: ss -ti প্রতিটি TCP সংযোগের ভেতরের অবস্থা দেখায় — congestion algorithm, rtt, rto, cwnd, retransmission. উদাহরণ:

$ ss -tin dst 192.0.2.10        # উদাহরণ
State  Recv-Q Send-Q   Local Address:Port    Peer Address:Port
ESTAB  0      0        198.51.100.20:51514     192.0.2.10:443
	 cubic wscale:7,7 rto:236 rtt:36.2/4.1 mss:1448 pmtu:1500 cwnd:10 bytes_acked:1891
	 bytes_received:5120 send 3.2Mbps pacing_rate 6.4Mbps minrtt:35.9

rtt:36.2/4.1 — গড় RTT আর তার বিচ্যুতি (ms); rto:236 — Linux-এ RTO-র নিম্নসীমা ২০০ ms-এর কারণে এত বড়; mss:1448 — ১৪৬০ থেকে timestamp option-এর ১২ বাইট বাদ; cwnd:10 আর send 3.2Mbps ≈ ১০ × ১৪৪৮ × ৮ ÷ ০.০৩৬২ — window-সীমিত হার। retrans ঘর দেখা গেলে বা বাড়তে থাকলে ক্ষতি হচ্ছে।

ফলো-আপ: “ESTAB সারিতে Recv-Q বড় হতে থাকলে?” → kernel ডেটা পেয়েছে, অ্যাপ পড়ছে না — অ্যাপ ধীর বা আটকে; Send-Q বড় মানে অপর পক্ষ বা নেটওয়ার্ক নিচ্ছে না।

আরও গভীর ফলো-আপ: “সারা সিস্টেমের retransmission-হার?” → nstat -az TcpRetransSegs বা /proc/net/snmp; সময়ের সাথে হার দেখুন, মোট সংখ্যা নয়।

প্র ৫৭dig-এর আউটপুটের কোন অংশগুলো দেখবেন? NXDOMAIN আর SERVFAIL-এর পার্থক্য কী? (মাঝারি)

উত্তর: উদাহরণ:

$ dig example.com A            # উদাহরণ
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41270
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; ANSWER SECTION:
example.com.		287	IN	A	192.0.2.10

;; Query time: 3 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)

status — NOERROR (ঠিক আছে), NXDOMAIN (নামটি নেই — নিশ্চিত উত্তর), SERVFAIL (resolver উত্তর বের করতে পারেনি — authoritative অচল, DNSSEC যাচাই ব্যর্থ ইত্যাদি)। flags-এ aa থাকলে উত্তর সরাসরি authoritative server থেকে; না থাকলে এসেছে recursive resolver-এর মাধ্যমে (তার cache থেকে বা নতুন খুঁজে)। TTL ২৮৭ — cache-এ বাকি সময়; আবার চালালে কমতে দেখবেন। SERVER বলে কাকে জিজ্ঞেস করা হলো — এখানে systemd-resolved-এর স্থানীয় stub.

ফলো-আপ: “Resolver-এর cache এড়িয়ে আসল উত্তর দেখতে?” → dig @ns1.example.com example.com (authoritative-কে সরাসরি), বা dig +trace — root থেকে ধাপে ধাপে।

আরও গভীর ফলো-আপ: “dig কাজ করে, অথচ অ্যাপ নাম পায় না — কেন?” → dig সরাসরি DNS প্রশ্ন করে; অ্যাপ getaddrinfo দিয়ে /etc/nsswitch.conf মেনে চলে (/etc/hosts, search domain, IPv6-অগ্রাধিকার)। তাই অ্যাপের দৃষ্টিভঙ্গি দেখতে getent hosts example.com.

প্র ৫৮curl দিয়ে একটি HTTPS অনুরোধের সময় কীভাবে ভাগ করে দেখবেন — DNS, TCP, TLS আর server? (মাঝারি)

উত্তর: -w-এর timing ভ্যারিয়েবল প্রতিটি ধাপের শেষ-মুহূর্ত (শুরু থেকে, ক্রমযোগী) দেয়:

$ curl -s -o /dev/null -w 'dns=%{time_namelookup} tcp=%{time_connect} tls=%{time_appconnect} ttfb=%{time_starttransfer} total=%{time_total} code=%{http_code}\n' https://example.com/   # উদাহরণ
dns=0.012 tcp=0.048 tls=0.086 ttfb=0.388 total=0.402 code=200

বিয়োগ করে পড়ুন: DNS ১২ ms; TCP handshake ৪৮ − ১২ = ৩৬ ms (≈১ RTT); TLS ৮৬ − ৪৮ = ৩৮ ms (≈১ RTT — TLS 1.3-এর সাথে মেলে); তারপর প্রথম বাইট পর্যন্ত ৩৮৮ − ৮৬ = ৩০২ ms — নেটওয়ার্ক নয়, server-এর প্রক্রিয়াকরণই ধীর। -v দেখায় কোন IP-তে গেল, TLS সংস্করণ, ALPN (h2), certificate আর header.

ফলো-আপ: “LB-এর পেছনের একটি নির্দিষ্ট backend পরীক্ষা করতে, DNS না বদলে?” → curl --resolve example.com:443:192.0.2.11 https://example.com/ — নাম, SNI আর Host header ঠিক থাকে, শুধু IP বদলায়।

আরও গভীর ফলো-আপ: “-k দিয়ে চালালে চলে, ছাড়া চলে না।” → certificate যাচাই ব্যর্থ — শিকল অসম্পূর্ণ, মেয়াদ শেষ বা নাম মেলে না (প্র ২৮); -k সমাধান নয়, শুধু রোগনির্ণয়ের ইঙ্গিত।

প্র ৫৯tcpdump-এ একটি TCP handshake কেমন দেখায়? flag-গুলো পড়ুন। (মাঝারি)

উত্তর: নিজের অনুমোদিত সিস্টেমে, ছোট filter দিয়ে:

$ sudo tcpdump -ni eth0 -c 5 'tcp port 443 and host 192.0.2.10'     # উদাহরণ
10:15:01.100000 IP 198.51.100.20.51514 > 192.0.2.10.443: Flags [S], seq 1250000000, win 64240, options [mss 1460,sackOK,TS val 1 ecr 0,nop,wscale 7], length 0
10:15:01.136000 IP 192.0.2.10.443 > 198.51.100.20.51514: Flags [S.], seq 3800000000, ack 1250000001, win 65160, options [mss 1460,sackOK,TS val 9 ecr 1,nop,wscale 7], length 0
10:15:01.136100 IP 198.51.100.20.51514 > 192.0.2.10.443: Flags [.], ack 1, win 502, length 0
10:15:01.136500 IP 198.51.100.20.51514 > 192.0.2.10.443: Flags [P.], seq 1:518, ack 1, win 502, length 517
10:15:01.172600 IP 192.0.2.10.443 > 198.51.100.20.51514: Flags [.], ack 518, win 507, length 0

[S] SYN, [S.] SYN-ACK (বিন্দু মানে ACK), [.] শুধু ACK, [P.] ডেটা (PUSH), [F.] FIN, [R] RST. SYN থেকে SYN-ACK ৩৬ ms — এটিই RTT. Handshake-এর পর tcpdump আপেক্ষিক sequence দেখায় (ack 1); ৫১৭ বাইটের প্রথম ডেটা হলো TLS ClientHello. win 502 × ২৭ (wscale 7) ≈ ৬৪ KB.

ফলো-আপ: “SYN যাচ্ছে, উত্তর আসছে না — আর SYN-এর উত্তরে R আসছে — পার্থক্য?” → প্রথমটি DROP বা পথের সমস্যা (timeout), দ্বিতীয়টি port বন্ধ বা REJECT (refused) — প্র ২৩।

আরও গভীর ফলো-আপ: “ব্যস্ত server-এ নিরাপদে capture?” → সংকীর্ণ filter, -c বা -G/-W-এ সীমা, -s-এ snaplen ছোট, -w দিয়ে ফাইলে লিখে পরে Wireshark-এ; capture-এ ব্যক্তিগত তথ্য থাকতে পারে — অনুমতি আর সংরক্ষণ-নীতি মানা।

প্র ৬০mtr-এ মাঝের একটি hop-এ ৪২% loss, কিন্তু শেষ গন্তব্যে ০% — সমস্যা কোথায়? (মাঝারি)

উত্তর: সম্ভবত কোথাও নয়। উদাহরণ:

$ mtr -rwc 100 example.net      # উদাহরণ
HOST: laptop                    Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 192.168.0.1                0.0%   100    1.2   1.5   0.9   4.1   0.4
  2.|-- 10.20.0.1                  0.0%   100    4.8   5.3   3.9  12.0   1.1
  3.|-- 203.0.113.33              42.0%   100   18.1  19.0  17.2  25.3   1.3
  4.|-- 198.51.100.65              0.0%   100   21.4  21.9  20.8  30.2   1.6
  5.|-- 192.0.2.80                 0.0%   100   22.0  22.3  21.1  29.9   1.5

mtr প্রতিটি hop-কে TTL-শেষের ICMP উত্তর দিতে বাধ্য করে। Router-এর কাছে এই উত্তর তৈরি control plane-এর নিম্ন-অগ্রাধিকারের কাজ, প্রায়ই rate-limited; তাই hop ৩ অনেক উত্তর দেয়নি, কিন্তু তার ভেতর দিয়ে forwarding ঠিক চলছে — পরের hop আর গন্তব্যে ০%. আসল ক্ষতি হলে সেই hop থেকে শেষ পর্যন্ত সব hop-এ loss থাকে।

ফলো-আপ: “তাহলে আসল সমস্যা কীভাবে প্রমাণ করবেন?” → শেষ hop-এর loss আর latency দেখা, দুই দিক থেকেই mtr (পথ অপ্রতিসম হতে পারে), আর TCP-ভিত্তিক পরীক্ষা (mtr --tcp -P 443), কারণ কিছু নেটওয়ার্ক ICMP আর TCP আলাদাভাবে আচরণ করে।

আরও গভীর ফলো-আপ: “ISP-কে টিকেট দিতে কী জমা দেবেন?” → সময়-চিহ্নসহ কয়েকবারের mtr রিপোর্ট দুই দিক থেকে, আক্রান্ত উৎস-গন্তব্য, আর প্রভাব (কতজন, কী সেবা) — NOC-এর দৈনন্দিন কাজ।

প্র ৬১nft list ruleset-এর একটি আউটপুট পড়ে বলুন: 10.10.0.5 থেকে SSH চলবে? বাইরের যেকোনো ঠিকানা থেকে? (মাঝারি)

উত্তর: উদাহরণ:

$ sudo nft list ruleset         # উদাহরণ
table inet filter {
	chain input {
		type filter hook input priority filter; policy drop;
		ct state established,related accept
		ct state invalid drop
		iif "lo" accept
		ip protocol icmp accept
		meta l4proto ipv6-icmp accept
		tcp dport 22 ip saddr 10.10.0.0/24 accept
		tcp dport { 80, 443 } accept
	}
}

inet table IPv4 আর IPv6 দুটোই ধরে; input chain-এর নীতি drop — কোনো নিয়মে না মিললে বাদ। 10.10.0.5 থেকে নতুন SSH: tcp dport 22 ip saddr 10.10.0.0/24-এ মেলে — চলবে। বাইরের অন্য ঠিকানা থেকে SSH: কোনো নিয়মে মেলে না, নীতি drop — client timeout দেখবে, refused নয়। 80/443 সবার জন্য খোলা। IPv6-এ SSH-এর কোনো accept নেই, তাই IPv6-এ SSH বন্ধ — ইচ্ছাকৃত কি না জিজ্ঞেস করা ভালো প্রশ্ন।

ফলো-আপ: “Remote server-এ firewall বদলাতে গিয়ে নিজেকে আটকে ফেললে?” → আগে থেকে সাবধানতা: console বা out-of-band প্রবেশ হাতে রাখা, আর পরিবর্তনের সাথে স্বয়ংক্রিয় ফেরত (যেমন কয়েক মিনিট পরে পুরোনো ruleset ফিরিয়ে আনার একটি নির্ধারিত কাজ, নিশ্চিত হলে বাতিল)।

আরও গভীর ফলো-আপ: “Docker চালানো host-এ নিজের নিয়ম কাজ না করার কারণ?” → Docker নিজের NAT আর forward নিয়ম যোগ করে; publish করা port forward পথে যায়, host-এর input chain পেরোয় না — Docker-এর নির্দিষ্ট chain-এ নিয়ম দিতে হয়।

৯ · আচরণ আর কারিগরি মেশানো প্রশ্ন — outage, postmortem আর ঝুঁকিপূর্ণ পরিবর্তন

রিভিশন: পর্ব ৫৫ · পদ্ধতিগত তদন্ত, পর্ব ৫৭ · ক্যাপস্টোন; দৃশ্যভিত্তিক লম্বা তদন্ত পর্ব ৬২-এ

প্র ৬২“আপনার দেখা একটি outage-এর কথা বলুন।” — কীভাবে সাজাবেন? (মাঝারি)

উত্তর: STAR কাঠামো, কারিগরি বিবরণসহ: Situation — কী সিস্টেম, কী প্রভাব (“অফিসের অর্ধেক মানুষ ৪০ মিনিট ইন্টারনেট পাননি”)। Task — আপনার ভূমিকা। Action — কীভাবে শনাক্ত, কী অনুমান করলেন, কোন কমান্ডে প্রমাণ পেলেন, প্রথমে কীভাবে প্রভাব কমালেন (mitigation), পরে মূল কারণ কীভাবে ঠিক করলেন। Result — সংখ্যায় ফল আর কী শিখলেন, কী বদলালেন যাতে আর না ঘটে।

ফলো-আপ: “আপনি কী ভুল করেছিলেন?” → সৎভাবে নিজের অংশ বলুন, অন্যকে দোষ দেবেন না; কী শিখে প্রক্রিয়া বদলেছেন তা-ই আসল উত্তর।

আরও গভীর ফলো-আপ: “Mitigation আর root cause fix আলাদা কেন?” → আগে রক্তপাত থামানো (rollback, ট্রাফিক সরানো), তারপর শান্ত মাথায় মূল কারণ — চাপের মধ্যে “আসল সমাধান” খুঁজতে গিয়ে outage লম্বা করা সাধারণ ভুল। কাল্পনিক ঘটনা বানাবেন না; ছোট হলেও নিজের সত্যিকারের অভিজ্ঞতা (ল্যাব বা প্রজেক্টও চলে) ভালো।

প্র ৬৩Blameless postmortem কী, আর তাতে কী কী থাকে? (সহজ)

উত্তর: ঘটনার পর লিখিত পর্যালোচনা (postmortem), যার লক্ষ্য ব্যবস্থা উন্নত করা, ব্যক্তিকে শাস্তি নয় — কারণ মানুষ ভুল করবেই; প্রশ্ন হলো ব্যবস্থা কেন সেই ভুলকে outage হতে দিল। থাকে: সারাংশ আর প্রভাব (কতক্ষণ, কতজন), সময়রেখা, শনাক্তের পথ, মূল কারণ আর সহায়ক কারণ, কী ভালো কাজ করেছে, আর মালিক ও সময়সীমাসহ পদক্ষেপ।

ফলো-আপ: “Blameless কেন জরুরি?” → দোষারোপের সংস্কৃতিতে মানুষ তথ্য লুকায়, আর আসল দুর্বলতা অজানা থাকে।

আরও গভীর ফলো-আপ: “ভালো action item কেমন?” → নির্দিষ্ট আর যাচাইযোগ্য (“firewall পরিবর্তনে স্বয়ংক্রিয় rollback যোগ, দায়িত্বে X, দুই সপ্তাহে”), “সবাই আরও সাবধান হবে” নয়।

প্র ৬৪Production নেটওয়ার্কে একটি ঝুঁকিপূর্ণ পরিবর্তন (core switch-এর firmware, BGP নীতি বা firewall) কীভাবে করবেন? (মাঝারি)

উত্তর: পরিকল্পনা লিখিত: কী বদলাবে, কেন, কী ঝুঁকি, কীভাবে যাচাই, আর rollback-এর ধাপ — পরিবর্তনের আগে। ল্যাব বা একটি ছোট অংশে আগে পরীক্ষা, অনুমোদিত সময়ে (change window), out-of-band প্রবেশ হাতে রেখে, monitoring খোলা রেখে; ধাপে ধাপে, প্রতিটি ধাপের পর যাচাই। আগে-পরে অবস্থা রেকর্ড (routing table, BGP prefix-সংখ্যা, interface error).

ফলো-আপ: “Rollback-এর সিদ্ধান্ত কখন?” → আগে থেকে ঠিক করা মাপকাঠিতে (যেমন prefix-সংখ্যা প্রত্যাশার বাইরে, বা ১০ মিনিটে যাচাই সম্পূর্ণ না হলে) — তর্ক না করে ফেরা।

আরও গভীর ফলো-আপ: “স্বয়ংক্রিয়করণ কীভাবে সাহায্য করে?” → কনফিগারেশন version control-এ, পর্যালোচনা, স্বয়ংক্রিয় পরীক্ষা আর একই পদ্ধতিতে প্রয়োগ (network automation) — হাতে টাইপের ভুল কমে; কিছু vendor-এর “commit confirmed” ধরনের বৈশিষ্ট্য নিশ্চিত না করলে নিজেই আগের অবস্থায় ফেরে।

১০ · প্রস্তুতির পরিকল্পনা আর AI দিয়ে অনুশীলন

সময় কম হলে আপনার পদের সারি ধরে এগোন। প্রতিদিন: পর্বগুলোর TL;DR আর stepper, এই পাতার মিলিয়ে-থাকা প্রশ্নের জোরে উত্তর, আর একটি কমান্ড নিজের Linux, WSL বা VM-এ চালানো।

পদঅবশ্যই রিভিশন (পর্ব)এই পাতার প্রশ্নহাতে-কলমে
Network / system admin০৩, ০৬, ১২, ১৩, ১৭, ১৮, ১৯, ৩৫, ৪৯, ৫৫০৩–১২, ৩৩–৩৯, ৫০, ৫৩, ৫৬–৬১ip, dig, একটি nftables ruleset লেখা
NOC engineer০৫, ০৬, ২০, ২২, ২৫, ৫৫, ৫৬০৩, ১০, ১১, ২৩, ৩৫–৩৭, ৫৯–৬৩mtr পড়া, ticket লেখা অনুশীলন
Network engineer১২, ১৩, ১৫, ১৭, ২২–২৬, ৫২০৪, ১১, ৩৩–৩৯, ৫২subnetting ড্রিল প্রতিদিন ১০টি, ল্যাবে OSPF
SRE / DevOps২৯–৩২, ৩৫, ৩৮, ৪৪, ৪৮, ৫২, ৫৪, ৫৬১৩–২৪, ৩২, ৪০–৪৯, ৫৬–৬৪ss -ti, curl -w, tcpdump
Backend engineer২৭, ২৯, ৩১, ৩৬–৩৮, ৪১, ৪৪, ৪৮০২, ১৩, ১৯–২৩, ২৫–৩২, ৪০–৪৬, ৪৯retry-কোড, একটি ছোট socket server
Security analyst১৮, ১৯, ৪৬–৫০, ৫৫০৬, ০৯, ২৭–৩০, ৫০–৫৫, ৫৯, ৬১capture-এ handshake চেনা, ruleset পড়া

সংখ্যাভিত্তিক আর লিখিত প্রস্তুতির জন্য পর্ব ৫৮, পর্ব ৫৯ আর পর্ব ৬০; দৃশ্যভিত্তিক তদন্তের জন্য পর্ব ৬২.

AI দিয়ে প্রস্তুতি — কোথায় ভুল করে, কীভাবে যাচাই করবেন

AI ভালো mock-ইন্টারভিউয়ার হতে পারে, কিন্তু নেটওয়ার্কিংয়ে তার কিছু পরিচিত ভুল আছে — ইন্টারভিউতে সেই ভুল আপনার মুখে বেরোলে দায় আপনার।

AI-এর সাধারণ ভুলকেন সমস্যাকীভাবে যাচাই করবেন
Subnet-এর ভুল হিসাব (block-এর সীমা, host-সংখ্যায় −২ ভুলে যাওয়া, /31-কে ভুল বলা)ড্রিলে সরাসরি ধরা পড়েহাতে block-size পদ্ধতিতে আবার; ওপরের checker বা ipcalc
পুরোনো কমান্ড (ifconfig, netstat, iptables-কে একমাত্র পথ বলা)আধুনিক distro-তে নেই বা পুরোনো ধাঁচের শোনায়man ip, man ss, man nft; নিজের মেশিনে চালানো
এক vendor-এর কনফিগারেশনকে সার্বজনীন বলা (Cisco-র AD বা weight)“অন্য vendor-এ?” ফলো-আপে আটকে যাবেনপ্রতিটি দাবিতে জিজ্ঞেস: মান না vendor-এর ডিফল্ট?
অনিরাপদ firewall-পরামর্শ (“সব port খুলে দিন”, “certificate যাচাই বন্ধ করুন”)নিরাপত্তা ভাঙে; ইন্টারভিউতে লাল সংকেতন্যূনতম অধিকার: কে, কোথা থেকে, কোন port
বানানো RFC নম্বর বা সাল, ভুল ডিফল্ট মান (TIME-WAIT, keepalive, timeout)নির্দিষ্ট সংখ্যায় ফলো-আপে ধরা পড়েrfc-editor.org-এ RFC খোঁজা; sysctl দিয়ে নিজের kernel-এর মান দেখা

AI-কে mock-ইন্টারভিউয়ার বানাতে এমন একটি prompt দিন — উত্তর আপনি দেবেন, AI শুধু প্রশ্ন, ফলো-আপ আর মূল্যায়ন করবে:

তুমি একজন অভিজ্ঞ network/SRE ইন্টারভিউয়ার। আমি [পদের নাম, যেমন NOC engineer বা backend engineer] পদের জন্য প্রস্তুতি নিচ্ছি; ধরে নাও Linux (Ubuntu 24.04) আর সাধারণ cloud পরিবেশ। ১. আমাকে একবারে একটি করে নেটওয়ার্কিং প্রশ্ন করো — মৌলিক ধারণা, TCP/QUIC, HTTP/TLS, routing আর backend networking মিশিয়ে, সহজ থেকে কঠিনে। ২. আমি উত্তর দেওয়ার আগে নিজে উত্তর বলবে না। ৩. আমার উত্তরের পর ১–১০ নম্বর দাও, কোন অংশ ঠিক আর কোনটি ভুল বা অসম্পূর্ণ বলো, তারপর একটি ফলো-আপ আর একটি আরও গভীর ফলো-আপ প্রশ্ন করো। ৪. কোনো কমান্ড, ডিফল্ট মান বা RFC-র কথা বললে বলো সেটি কোন OS, কোন vendor বা কোন মানের অংশ, আর আমি কীভাবে নিজে যাচাই করতে পারি। ৫. Subnet বা throughput-এর হিসাব দিলে ধাপগুলো দেখাও, যাতে আমি হাতে মেলাতে পারি। ৬. নিশ্চিত না হলে স্পষ্ট বলো "নিশ্চিত নই"; কোনো তথ্য বানাবে না। নিরাপত্তার প্রশ্ন শুধু প্রতিরক্ষার দিক থেকে করবে। ৭. ১০টি প্রশ্নের পর আমার দুর্বল বিষয়গুলোর তালিকা দাও।

AI-এর উত্তর মুখস্থ করার আগে — চেকলিস্ট

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

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

ক্রমএকটি নেটওয়ার্কিং প্রশ্নের (“NAT কী?”) ভালো উত্তরের ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. এক বাক্যের সংজ্ঞা — private ঠিকানা আর port বদলে public ঠিকানা বসানো
  2. Mechanism — translation টেবিলে জোড়া লেখা, উত্তরে উল্টো বদল
  3. Trade-off — ঠিকানা বাঁচে, কিন্তু বাইরে থেকে নতুন সংযোগ আর P2P কঠিন
  4. বাস্তব উদাহরণ — বাড়ির router, mobile operator-এর CGNAT
  5. যাচাই — conntrack টেবিল বা দুই পাশে packet capture

(সহজ) একটি PC-র ঠিকানা 192.168.1.10/24, default gateway 192.168.1.1. সে 198.51.100.7-এ প্রথম প্যাকেট পাঠানোর আগে ARP দিয়ে কার MAC খুঁজবে?

  • 198.51.100.7-এর MAC
  • default gateway 192.168.1.1-এর MAC
  • কারও নয় — সরাসরি broadcast MAC-এ পাঠাবে
  • DNS server-এর MAC

(মাঝারি) একটি client 192.0.2.10:8443-এ connect করতেই সঙ্গে সঙ্গে ECONNREFUSED পেল। সবচেয়ে সম্ভাব্য ব্যাখ্যা কোনটি?

  • মাঝের firewall প্যাকেট নিঃশব্দে DROP করছে
  • server-এর accept queue ভরা
  • DNS resolve ব্যর্থ হয়েছে
  • host জীবিত, কিন্তু 8443-এ কোনো প্রোগ্রাম শুনছে না (বা REJECT নিয়ম)

(মাঝারি) একটি Linux server-এ ss -tan দেখাচ্ছে শত শত সংযোগ CLOSE-WAIT অবস্থায়, আর সংখ্যা বাড়ছেই। সবচেয়ে সম্ভাব্য কারণ?

  • অ্যাপ অপর পক্ষের বন্ধের পর নিজের socket close() করছে না
  • server আগে বন্ধ করছে, তাই TIME-WAIT জমছে
  • SYN flood আক্রমণ চলছে
  • net.ipv4.tcp_fin_timeout বেশি বড়

(কঠিন) একটি TCP সংযোগে window scaling বন্ধ, তাই সর্বোচ্চ window ৬৫৫৩৫ বাইট; RTT ১০০ ms, link ১ Gbit/s, কোনো ক্ষতি নেই। একটি সংযোগে সর্বোচ্চ প্রায় কত throughput?

  • প্রায় ১ Gbit/s
  • প্রায় ৬৫৫ kbit/s
  • প্রায় ৫.২৪ Mbit/s
  • প্রায় ৫২.৪ Mbit/s

(সহজ) একটি session cookie যেন পাতার JavaScript (document.cookie) পড়তে না পারে, আর XSS হলেও সহজে চুরি না হয় — কোন attribute?

  • Secure
  • SameSite=Strict
  • Max-Age=0
  • HttpOnly

(মাঝারি) একটি router-এর table: 10.0.0.0/8 → A, 10.1.0.0/16 → B, 10.1.4.0/22 → C, 0.0.0.0/0 → D. গন্তব্য 10.1.7.9-এর প্যাকেট কোন next hop-এ যাবে?

  • A (10.0.0.0/8)
  • C (10.1.4.0/22)
  • B (10.1.0.0/16)
  • D (default)

(সহজ) 192.168.10.77/26 ঠিকানাটি কোন subnet-এর, আর সেই subnet-এর broadcast ঠিকানা কী?

  • network 192.168.10.64, broadcast 192.168.10.127
  • network 192.168.10.0, broadcast 192.168.10.255
  • network 192.168.10.64, broadcast 192.168.10.95
  • network 192.168.10.76, broadcast 192.168.10.139

(মাঝারি) নিচের কোন HTTP অনুরোধ timeout-এর পর idempotency key ছাড়াই স্বয়ংক্রিয়ভাবে আবার পাঠানো সবচেয়ে নিরাপদ?

  • POST /payments (৳৫০০ পাঠানো)
  • POST /orders (নতুন অর্ডার)
  • GET /orders/42 (অর্ডারের অবস্থা দেখা)
  • PATCH /cart/7 (পরিমাণ ১ বাড়ানো)

(মাঝারি) mtr-এ hop ৩-এ ৪২% loss, কিন্তু hop ৪, ৫ আর শেষ গন্তব্যে ০% loss. সবচেয়ে যুক্তিসংগত ব্যাখ্যা কী?

  • hop ৩-এর link-এ ৪২% প্যাকেট সত্যিই হারাচ্ছে
  • hop ৩-এর router ICMP উত্তর rate-limit করছে; forwarding ঠিক আছে
  • গন্তব্য server ICMP আটকে রেখেছে
  • DNS ভুল ঠিকানা দিয়েছে

(কঠিন) Load balancer-এর idle timeout ৬০ সেকেন্ড, backend server-এর HTTP keep-alive timeout ৫ সেকেন্ড; মাঝে মাঝে বিক্ষিপ্ত 502 আসে, অ্যাপের log-এ ত্রুটি নেই। সবচেয়ে উপযুক্ত সমাধান?

  • LB-এর idle timeout ১২০ সেকেন্ড করা
  • LB আর backend-এর মাঝে keep-alive পুরো বন্ধ করা
  • LB-তে সব অনুরোধ ৩ বার retry চালু করা
  • backend-এর keep-alive timeout LB-এর idle timeout-এর চেয়ে বড় (যেমন ৬৫ সেকেন্ড) করা

শব্দকোষ

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

মনে রাখুন

  1. কাঠামো: সংজ্ঞা → mechanism → trade-off → বাস্তব উদাহরণ → যাচাইয়ের কমান্ড; না জানলে সৎভাবে বলুন আর কীভাবে খুঁজবেন তা বলুন।
  2. মৌলিক ধারণা: প্রতিটি hop-এ MAC বদলায়, IP থাকে (NAT ছাড়া); অন্য subnet-এ ARP হয় gateway-এর জন্য; DHCP-র প্রথম বার্তা broadcast; NAT ঠিকানা বাঁচায়, নিরাপত্তা দেয় stateful firewall.
  3. Transport: refused = RST, timeout = নীরবতা, reset = চলমান সংযোগে RST; TIME-WAIT আগে-বন্ধকারীর দিকে, CLOSE-WAIT অ্যাপের বাগ; একটি সংযোগ ≤ window ÷ RTT; QUIC UDP-র ওপর ossification এড়াতে।
  4. Web আর routing: 502/503/504 proxy-র ভাষা; CORS ব্রাউজার প্রয়োগ করে; LPM আগে, administrative distance শুধু একই prefix-এ; ECMP প্রতি flow-এ।
  5. Backend ও নিরাপত্তা: timeout সবসময়, retry শুধু অস্থায়ী ত্রুটিতে আর jitter-সহ, POST-এ idempotency key; খোলা সংযোগ DNS মানে না; default deny, least privilege আর zero trust.

পরের পর্বে: ধারণার প্রশ্ন শেষ, এবার পুরো দৃশ্য। পর্ব ৬২-এ “google.com লিখে Enter চাপলে কী হয়” শুরু থেকে শেষ, আর ধাপে ধাপে সমস্যা খোঁজার ইন্টারভিউ — কোর্সের শেষ পর্ব।

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

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