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:

  1. SIN dari klien
  2. SYN-ACK dari server
  3. 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
  • telnet atau 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:

  • SYN
  • SYN, ACK
  • ACK

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:

  1. jabat tangan TCP
  2. Jabat tangan TLS
  3. 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.