Three-Way Handshake
থ্রি-ওয়ে হ্যান্ডশেক
TCP connection খোলার SYN, SYN-ACK, ACK — তিন ধাপের বিনিময়, যেখানে দুই পক্ষ initial sequence number sync করে।
Connection খোলার তিন ধাপ; আসল কাজ দুই পক্ষের initial sequence number (ISN) sync করা:
client server
│ ─── SYN, seq=x ────────▶ │
│ ◀── SYN+ACK, seq=y ───── │
│ ack=x+1 │
│ ─── ACK, ack=y+1 ──────▶ │
│ ESTABLISHED │
কেন দুই-ধাপ নয় — পুরনো duplicate SYN দেরিতে এলে server connection ধরে নেবে, অথচ client জানেই না; তৃতীয় ACK ছাড়া server ESTABLISHED হয় না। আর দুই দিকের ISN আলাদা — random, predictable ISN-এর পুরনো security hole বন্ধ করতে।
Handshake-এর সাথেই negotiate হয় — MSS, window scale, SACK-permitted। TLS-এর ClientHello এই ESTABLISHED connection- এই চলে।
SYN flood — attacker SYN পাঠিয়ে শেষ ACK বাদ দিলে server-এর half-open queue ভরে যায়; syncookies state-টা sequence number- এ encode করে queue-ই বাদ দেয়।
tcpdump -i any -nn 'tcp[tcpflags] & tcp-syn != 0'