Sebelum TCP mengirimkan data aplikasi, TCP harus menetapkan status di kedua ujung koneksi. Proses pengaturan tersebut adalah jabat tangan tiga arah TCP. Hal ini terjadi begitu cepat sehingga sebagian besar pengguna tidak menyadarinya, namun ketika situs web terasa lambat, port tampak tertutup, atau firewall merusak aplikasi dengan cara yang aneh, jabat tangan sering kali menjadi awal mula cerita.
Jabat Tangan Tiga Arah TCP
Ketiga paket tersebut adalah:
- SIN dari klien
- SYN-ACK dari server
- AKHIR dari klien
Setelah itu, koneksi dibuat dan transfer data normal dimulai.
Penjelasan Langkah demi Langkah
1. Klien mengirimkan SYN
Klien mengatakan, "Saya ingin memulai koneksi, dan ini nomor urut awal saya."
2. Server membalas dengan SYN-ACK
Server mengetahui nomor urut klien dan mengirimkan kembali nomor urut awalnya.
3. Klien mengirimkan ACK
Klien mengetahui nomor urut server. Pada titik ini kedua belah pihak sepakat mengenai keadaan dasar yang diperlukan untuk pertukaran data yang andal.
Mengapa TCP Membutuhkan Jabat Tangan
Jabat tangan bukan sekedar upacara. Ini memecahkan masalah protokol nyata:
- mengonfirmasi kedua titik akhir dapat mengirim dan menerima
- menegosiasikan pelacakan urutan awal
- mencegah paket tertunda dari sesi lama disalahartikan sebagai lalu lintas saat ini
- menetapkan keadaan yang diperlukan untuk penyampaian yang dapat diandalkan
Tanpa pengaturan ini, TCP tidak dapat memberikan perilaku streaming yang teratur dan andal seperti yang diharapkan oleh aplikasi.
Mengapa TCP Menggunakan Tiga Langkah, Bukan Dua
Pertukaran dua langkah tidak akan sepenuhnya membuktikan bahwa kedua belah pihak siap untuk mengirimkan dan mengakui nomor urut satu sama lain. Paket ketiga mengonfirmasi balasan server telah diterima dan status koneksi disinkronkan di kedua arah.
Itulah sebabnya jabat tangan bersifat "tiga arah" dan bukan sekadar pasangan permintaan-respons.
Apa Yang Terjadi Jika Jabat Tangan Gagal
Kegagalan jabat tangan biasanya terbagi dalam beberapa pola yang dapat dikenali.
SYN terkirim, tidak ada balasan
Kemungkinan penyebabnya:
- host tujuan sedang down
- Firewall menjatuhkan paket secara diam-diam
- IP atau port salah
- masalah perutean di jalur
Gejala umum:
- batas waktu koneksi habis
- browser berputar sebentar, lalu gagal
telnetatau aplikasi klien hang sebelum menyerah
SYN terkirim, RST dikembalikan
Kemungkinan penyebabnya:
- pelabuhan ditutup
- layanan tidak mendengarkan
- firewall dikonfigurasi untuk menolak, bukan menjatuhkan
Gejala umum:
- langsung "koneksi ditolak"
SYN dan SYN-ACK muncul, lalu sesi mati
Kemungkinan penyebabnya:
- perutean asimetris
- masalah firewall stateful
- perangkat NAT rusak
- kesalahan konfigurasi penyeimbang beban
- produk keamanan berbasis host mengganggu setelah penerimaan awal
Seperti Apa Jabat Tangan di Wireshark
Jika Anda menangkap lalu lintas di Wireshark, permulaan TCP yang sehat biasanya terlihat seperti:
SYNSYN, ACKACK
Jika Anda hanya melihat paket SYN dikirim ulang berulang kali, balasan server tidak akan pernah kembali. Jika Anda melihat RST, target secara aktif menolak koneksi. Visibilitas itulah yang menyebabkan pengambilan paket sangat berguna untuk pemecahan masalah jaringan.
Mengapa Jabat Tangan Penting untuk Kinerja
Setiap koneksi TCP dimulai dengan setidaknya satu perjalanan bolak-balik sebelum aliran data dimulai.
Jika latensi 100 ms:
- biaya jabat tangan sekitar satu kali perjalanan pulang pergi
- TLS menambahkan lebih banyak negosiasi setelah itu
- koneksi berumur pendek terasa lebih lambat
Inilah salah satu alasan penyetelan performa modern memperhatikan penggunaan kembali koneksi, perilaku HTTP tetap hidup, CDN, dan protokol seperti HTTP/2 dan HTTP/3.
Jabat Tangan TCP dan TLS Bukanlah Hal yang Sama
Ini adalah sumber kebingungan yang umum.
- jabat tangan TCP membangun koneksi transportasi.
- Jabat tangan TLS menegosiasikan enkripsi dan kepercayaan sertifikat di atas koneksi itu.
Jadi ketika Anda membuka situs web HTTPS, sistem biasanya melakukan:
- jabat tangan TCP
- Jabat tangan TLS
- Permintaan dan respons HTTP
Jika situs lambat untuk "mulai memuat", penundaannya mungkin terjadi pada lapisan jabat tangan mana pun.
Hubungan dengan Pemindaian Port
Banyak pemindai mengandalkan perilaku jabat tangan:
- SYN-ACK sering kali berarti port terbuka
- Pertama biasanya berarti tertutup
- tidak ada tanggapan sering kali berarti disaring atau dihilangkan
Hal ini menjadikan jabat tangan penting tidak hanya untuk jaringan, tetapi juga untuk enumerasi dan pengujian keamanan.
Serangan Banjir SYN
Banjir SYN menyalahgunakan jabat tangan dengan mengirimkan paket SYN dalam jumlah besar tanpa menyelesaikan ACK akhir. Server mengalokasikan sumber daya untuk banyak sesi setengah terbuka dan bisa kewalahan.
Mitigasi umum:
- kue SYN
- pembatasan tarif
- penyaringan hulu
- perlindungan firewall
- penyetelan penyeimbang beban
Pembongkaran Koneksi Berbeda
Memulai sesi menggunakan jabat tangan tiga arah. Menutupnya biasanya menggunakan proses berbeda yang melibatkan paket FIN dan ACK di kedua arah.
Pembongkaran itu penting saat men-debug soket yang tersangkut TIME_WAIT atau CLOSE_WAIT, tetapi terpisah dari jabat tangan koneksi awal.
Intinya
Jabat tangan TCP adalah permulaan tiga langkah untuk komunikasi TCP yang andal:
- SIN
- SYN-ACK
- AKHIR
Ini penting karena setiap permintaan web, sesi SSH, koneksi database, atau panggilan API yang dibangun di TCP bergantung padanya. Jika koneksi terputus, ditolak, atau terasa lambat sebelum data dipindahkan, jabat tangan adalah salah satu tempat pertama yang harus diselidiki.