Setiap kali Anda membuka website, mengirim email, atau download file — ada "jabat tangan" yang terjadi di belakang layar antara komputer Anda dan server. Proses ini disebut three-way handshake, dan tanpanya, tidak ada data yang bisa dikirim.
Analogi: Telepon vs Chat vs Surat
Three-way handshake paling mudah dipahami lewat analogi menelepon seseorang:
Anda menelepon teman dan berkata "Halo, ini Andi, bisa bicara sebentar?" — Anda memulai koneksi dan menunggu respons. Di TCP, ini disebut paket SYN (synchronize).
Teman Anda menjawab "Iya bisa, kamu dengar saya juga?" — Dia mengonfirmasi permintaan Anda DAN memastikan jalur komunikasi dua arah. Di TCP, ini adalah paket SYN-ACK.
Anda menjawab "Dengar jelas, oke kita mulai" — sekarang kedua pihak yakin bahwa jalur komunikasi berfungsi di kedua arah. Di TCP, ini adalah paket ACK (acknowledge).
Tanpa ketiga langkah ini, tidak ada jaminan bahwa kedua pihak siap berkomunikasi. Bandingkan dengan mengirim surat (UDP) — Anda langsung kirim tanpa tahu apakah penerima ada di rumah. Cepat? Iya. Tapi tidak ada jaminan sampai.
Proses Teknis Three-Way Handshake
Secara teknis, three-way handshake melibatkan pertukaran sequence number dan TCP flags. Ini yang terjadi di balik layar:
| Langkah | Pengirim | TCP Flag | Sequence Number | Ack Number | Penjelasan |
|---|---|---|---|---|---|
| 1. SYN | Client | SYN=1 | seq=100 (ISN) | - | Client memilih ISN (Initial Sequence Number) acak dan mengirim permintaan koneksi |
| 2. SYN-ACK | Server | SYN=1, ACK=1 | seq=300 (ISN) | ack=101 | Server memilih ISN sendiri, ACK = client_seq + 1 untuk konfirmasi |
| 3. ACK | Client | ACK=1 | seq=101 | ack=301 | Client konfirmasi dengan ACK = server_seq + 1. Koneksi terbuka! |
TCP Flags — Bahasa Isyarat Paket Data
TCP menggunakan "bendera" (flags) dalam setiap paket untuk menandai tujuan paket tersebut. Seperti lampu lalu lintas — setiap warna punya arti berbeda:
| Flag | Nama Lengkap | Fungsi | Analogi |
|---|---|---|---|
| SYN | Synchronize | Memulai koneksi baru | Mengetuk pintu — "permisi, mau masuk" |
| ACK | Acknowledge | Konfirmasi penerimaan | Mengangguk — "iya, saya terima" |
| FIN | Finish | Menutup koneksi secara sopan | Berjabat tangan pamit — "saya selesai" |
| RST | Reset | Memutus koneksi paksa | Banting telepon — "percakapan selesai SEKARANG" |
| PSH | Push | Kirim data segera tanpa buffer | Teriak "URGENT!" — langsung diproses |
| URG | Urgent | Menandai data prioritas tinggi | Lampu darurat — "ini penting, baca duluan" |
Four-Way Termination — Cara TCP Menutup Koneksi
Kalau membuka koneksi butuh 3 langkah, menutup koneksi butuh 4 langkah. Kenapa? Karena kedua pihak harus mengonfirmasi bahwa mereka sudah selesai mengirim data:
Proses ini memastikan tidak ada data yang hilang saat koneksi ditutup. Berbeda dengan RST (reset) yang memutus paksa tanpa konfirmasi — seperti langsung tutup telepon tanpa bilang "bye".
SYN Flood Attack — Ketika Handshake Disalahgunakan
Three-way handshake punya kelemahan: server harus menyimpan state untuk setiap koneksi yang belum selesai (half-open). Attacker bisa mengeksploitasi ini:
Attacker mengirim ribuan paket SYN dengan IP palsu (spoofed). Server membalas SYN-ACK ke IP palsu yang tidak pernah merespons ACK. Server kehabisan memori menyimpan half-open connections.
Bayangkan seseorang menelepon restoran ratusan kali untuk reservasi dengan nama palsu. Semua meja "dipesan" tapi tidak ada yang datang. Pelanggan asli tidak kebagian meja.
Server tidak menyimpan state saat terima SYN. Sebaliknya, server meng-encode informasi koneksi ke dalam sequence number SYN-ACK. Saat ACK datang, server bisa merekonstruksi state dari angka tersebut.
Troubleshooting dengan Three-Way Handshake
Memahami handshake membantu Anda men-diagnosa masalah koneksi. Berikut status TCP yang sering ditemui:
| Status | Artinya | Masalah Umum | Solusi |
|---|---|---|---|
| SYN_SENT | Client sudah kirim SYN, belum dapat respons | Firewall memblokir, server mati, port salah | Cek firewall, pastikan port terbuka, coba telnet/nmap |
| SYN_RECEIVED | Server terima SYN, sudah kirim SYN-ACK | Client tidak balas ACK (firewall/NAT) | Cek firewall client, pastikan routing benar |
| ESTABLISHED | Koneksi berhasil terbuka | Tidak ada masalah — ini yang diharapkan | - |
| TIME_WAIT | Koneksi ditutup, menunggu paket terakhir | Banyak TIME_WAIT = koneksi terlalu sering buka-tutup | Tuning TCP timeout, gunakan connection pooling |
| CLOSE_WAIT | Remote sudah FIN, lokal belum tutup | Aplikasi tidak properly close socket | Fix bug di aplikasi — harus close() socket setelah selesai |
# Windows — lihat semua koneksi TCP
netstat -an | findstr ESTABLISHED
netstat -an | findstr SYN_SENT
netstat -an | findstr TIME_WAIT
# Linux — lebih detail dengan ss
ss -tan state established
ss -tan state syn-sent
ss -tan state time-wait
# Hitung koneksi per status
ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn
Uji Pengetahuan TCP Anda
Three-way handshake adalah salah satu topik favorit di Network Quiz CekIPSaya. Coba jawab soal tentang TCP flags, sequence number, dan SYN flood — dari level Basic sampai Professional!
FAQ — Pertanyaan yang Sering Ditanyakan
Kesimpulan
Three-way handshake adalah fondasi dari setiap koneksi TCP — dari browsing web hingga transfer file. Prosesnya sederhana (SYN → SYN-ACK → ACK) tapi sangat penting untuk menjamin komunikasi yang reliable. Memahaminya membantu Anda melakukan troubleshooting jaringan dan memahami serangan seperti SYN flood. Cek koneksi jaringan Anda di Speed Test CekIPSaya.