Misteri Utama Koneksi TCP Network Packet Broker: Mengungkap Kebutuhan Triple Handshake

Pengaturan Koneksi TCP
Saat menjelajahi web, mengirim email, atau bermain game online, kita sering kali tidak memikirkan koneksi jaringan yang rumit di baliknya. Namun, langkah-langkah kecil inilah yang memastikan komunikasi yang stabil antara kita dan server. Salah satu langkah terpenting adalah pengaturan koneksi TCP, dan inti dari proses ini adalah jabat tangan tiga arah.

Artikel ini akan membahas prinsip, proses, dan pentingnya jabat tangan tiga arah secara detail. Langkah demi langkah, kami akan menjelaskan mengapa jabat tangan tiga arah diperlukan, bagaimana jabat tangan tiga arah memastikan stabilitas dan keandalan koneksi, serta betapa pentingnya jabat tangan tiga arah untuk transfer data. Dengan pemahaman yang lebih mendalam tentang jabat tangan tiga arah, kita akan memperoleh pemahaman yang lebih baik tentang mekanisme dasar komunikasi jaringan dan gambaran yang lebih jelas tentang keandalan koneksi TCP.

Proses Jabat Tangan Tiga Arah TCP dan Transisi Status
TCP adalah protokol transport berorientasi koneksi, yang mengharuskan pembentukan koneksi sebelum transmisi data. Proses pembentukan koneksi ini dilakukan melalui jabat tangan tiga arah.

 Jabat tangan tiga arah TCP

Mari kita lihat lebih dekat paket TCP yang dikirim pada setiap koneksi.

Awalnya, baik klien maupun server dalam kondisi TERTUTUP. Pertama, server secara aktif mendengarkan pada suatu port dan berada dalam status LISTEN, yang berarti server harus dijalankan. Selanjutnya, klien siap untuk mulai mengakses halaman web. Klien perlu membuat koneksi dengan server. Format paket koneksi pertama adalah sebagai berikut:

 Paket SYN

Ketika klien memulai koneksi, ia menghasilkan nomor urut awal acak (client_isn) dan menempatkannya di kolom "Nomor urut" pada header TCP. Pada saat yang sama, klien menetapkan posisi tanda SYN ke 1 untuk menunjukkan bahwa paket yang keluar adalah paket SYN. ​​Klien menunjukkan keinginannya untuk membuat koneksi dengan server dengan mengirimkan paket SYN pertama ke server. Paket ini tidak berisi data lapisan aplikasi (yaitu, data terkirim). Pada titik ini, status klien ditandai sebagai SYN-SENT.

Paket SYN+ACK

Ketika server menerima paket SYN dari klien, server akan menginisialisasi nomor serinya sendiri (server_isn) secara acak, lalu memasukkan nomor tersebut ke kolom "Nomor seri" pada header TCP. Selanjutnya, server memasukkan client_isn + 1 ke kolom "Nomor konfirmasi" dan menetapkan bit SYN dan ACK ke 1. Terakhir, server mengirimkan paket ke klien, yang tidak berisi data lapisan aplikasi (dan tidak ada data yang perlu dikirim oleh server). Saat ini, server berada dalam status SYN-RCVD.

Paket ACK

Setelah klien menerima paket dari server, klien perlu melakukan optimasi berikut untuk merespons paket balasan terakhir: Pertama, klien menetapkan bit ACK pada header TCP paket balasan ke 1; Kedua, klien memasukkan nilai server_isn + 1 pada kolom "Konfirmasi nomor jawaban"; Terakhir, klien mengirimkan paket ke server. Paket ini dapat membawa data dari klien ke server. Setelah operasi ini selesai, klien akan memasuki status ESTABLISHED.

Setelah server menerima paket balasan dari klien, server juga beralih ke status ESTABLISHED.

Seperti yang dapat Anda lihat dari proses di atas, saat melakukan jabat tangan tiga arah, jabat tangan ketiga diperbolehkan membawa data, tetapi dua jabat tangan pertama tidak. Pertanyaan ini sering diajukan dalam wawancara. Setelah jabat tangan tiga arah selesai, kedua belah pihak memasuki status ESTABLISHED, yang menunjukkan bahwa koneksi telah berhasil dibuat. Setelah itu, klien dan server dapat mulai saling mengirim data.

Kenapa harus tiga kali jabat tangan? Bukan dua kali, tapi empat kali?
Jawaban yang umum adalah, "Karena jabat tangan tiga arah menjamin kemampuan untuk menerima dan mengirim." Jawaban ini benar, tetapi hanya alasan permukaan, tidak mengemukakan alasan utama. Berikut ini, saya akan menganalisis alasan jabat tangan tiga arah dari tiga aspek untuk memperdalam pemahaman kita tentang masalah ini.

Jabat tangan tiga arah secara efektif dapat menghindari inisialisasi koneksi yang berulang secara historis (alasan utama)
Jabat tangan tiga arah menjamin bahwa kedua belah pihak telah menerima nomor urut awal yang andal.
Jabat tangan tiga arah menghindari pemborosan sumber daya.

Alasan 1: Hindari Duplikat Gabungan Historis
Singkatnya, alasan utama penggunaan jabat tangan tiga arah adalah untuk menghindari kebingungan akibat inisialisasi koneksi duplikat yang lama. Dalam lingkungan jaringan yang kompleks, transmisi paket data tidak selalu terkirim ke host tujuan sesuai dengan waktu yang ditentukan, dan paket data lama mungkin tiba di host tujuan terlebih dahulu karena kemacetan jaringan dan alasan lainnya. Untuk menghindari hal ini, TCP menggunakan jabat tangan tiga arah untuk membangun koneksi.

jabat tangan tiga arah menghindari koneksi duplikat historis

Ketika klien mengirimkan beberapa paket pembentukan koneksi SYN secara berurutan, dalam situasi seperti kemacetan jaringan, hal berikut mungkin terjadi:

1- Paket SYN lama tiba di server sebelum paket SYN terbaru.
2- Server akan membalas paket SYN + ACK ke klien setelah menerima paket SYN lama.
3- Saat klien menerima paket SYN + ACK, ia menentukan bahwa koneksi tersebut adalah koneksi historis (nomor urut kedaluwarsa atau batas waktu) sesuai konteksnya sendiri, lalu mengirimkan paket RST ke server untuk membatalkan koneksi.

Dengan koneksi dua-jabat tangan, tidak ada cara untuk menentukan apakah koneksi saat ini merupakan koneksi historis. Jabat tangan tiga arah memungkinkan klien untuk menentukan apakah koneksi saat ini merupakan koneksi historis berdasarkan konteks saat siap mengirim paket ketiga:

1- Jika ini merupakan koneksi historis (nomor urut telah kedaluwarsa atau batas waktu), paket yang dikirim oleh jabat tangan ketiga adalah paket RST untuk membatalkan koneksi historis.
2- Jika bukan koneksi historis, paket yang dikirim untuk ketiga kalinya adalah paket ACK, dan kedua pihak yang berkomunikasi berhasil membuat koneksi.

Oleh karena itu, alasan utama TCP menggunakan jabat tangan tiga arah adalah untuk menginisialisasi koneksi guna mencegah koneksi historis.

Alasan 2: Untuk menyinkronkan nomor urut awal kedua belah pihak
Kedua sisi protokol TCP harus mempertahankan nomor urut, yang merupakan faktor kunci untuk memastikan transmisi yang andal. Nomor urut memainkan peran penting dalam koneksi TCP. Nomor urut melakukan hal berikut:

Penerima dapat menghilangkan data duplikat dan memastikan keakuratan data.

Penerima dapat menerima paket berdasarkan urutan nomor urut untuk memastikan integritas data.

● Nomor urut dapat mengidentifikasi paket data yang telah diterima oleh pihak lain, sehingga memungkinkan transmisi data yang andal.

Oleh karena itu, setelah koneksi TCP terbentuk, klien mengirimkan paket SYN dengan nomor urut awal dan meminta server untuk membalas dengan paket ACK yang menunjukkan penerimaan paket SYN klien yang berhasil. Kemudian, server mengirimkan paket SYN dengan nomor urut awal tersebut kepada klien dan menunggu balasan klien, sekali untuk selamanya, guna memastikan bahwa nomor urut awal tersinkronisasi dengan baik.

Sinkronkan nomor seri awal kedua belah pihak

Meskipun jabat tangan empat arah juga memungkinkan sinkronisasi nomor urut awal kedua pihak secara andal, langkah kedua dan ketiga dapat digabungkan menjadi satu langkah, menghasilkan jabat tangan tiga arah. Namun, kedua jabat tangan ini hanya dapat menjamin bahwa nomor urut awal satu pihak berhasil diterima oleh pihak lain, tetapi tidak ada jaminan bahwa nomor urut awal kedua pihak dapat dikonfirmasi. Oleh karena itu, jabat tangan tiga arah merupakan pilihan terbaik untuk memastikan stabilitas dan keandalan koneksi TCP.

Alasan 3: Hindari Pemborosan Sumber Daya
Jika hanya ada "dua jabat tangan", ketika permintaan SYN klien diblokir di jaringan, klien tidak dapat menerima paket ACK yang dikirim oleh server, sehingga SYN akan dikirim ulang. Namun, karena tidak ada jabat tangan ketiga, server tidak dapat menentukan apakah klien menerima konfirmasi ACK untuk membuat koneksi. Oleh karena itu, server hanya dapat membuat koneksi secara proaktif setelah menerima setiap permintaan SYN. ​​Hal ini menyebabkan hal berikut:

Pemborosan sumber daya: Jika permintaan SYN klien diblokir, yang mengakibatkan transmisi berulang beberapa paket SYN, server akan membuat beberapa koneksi tidak valid yang redundan setelah menerima permintaan tersebut. Hal ini menyebabkan pemborosan sumber daya server yang tidak perlu.

Retensi pesan: Karena tidak adanya jabat tangan ketiga, server tidak dapat mengetahui apakah klien telah menerima konfirmasi ACK untuk membuat koneksi dengan benar. Akibatnya, jika pesan tertahan di jaringan, klien akan terus mengirimkan permintaan SYN berulang kali, yang menyebabkan server terus-menerus membuat koneksi baru. Hal ini akan meningkatkan kemacetan dan penundaan jaringan, serta berdampak negatif pada kinerja jaringan secara keseluruhan.

Hindari pemborosan sumber daya

Oleh karena itu, untuk memastikan stabilitas dan keandalan koneksi jaringan, TCP menggunakan jabat tangan tiga arah untuk membangun koneksi guna menghindari terjadinya masalah ini.

Ringkasan
ItuBroker Paket JaringanPembentukan koneksi TCP dilakukan dengan jabat tangan tiga arah. Selama jabat tangan tiga arah, klien pertama-tama mengirimkan paket dengan tanda SYN ke server, yang menunjukkan bahwa ia ingin membuat koneksi. Setelah menerima permintaan dari klien, server membalas paket dengan tanda SYN dan ACK kepada klien, yang menunjukkan bahwa permintaan koneksi diterima, dan mengirimkan nomor urut awalnya sendiri. Terakhir, klien membalas dengan tanda ACK ke server untuk menunjukkan bahwa koneksi telah berhasil dibuat. Dengan demikian, kedua belah pihak berada dalam status ESTABLISHED dan dapat mulai saling mengirim data.

Secara umum, proses jabat tangan tiga arah untuk pembentukan koneksi TCP dirancang untuk memastikan stabilitas dan keandalan koneksi, menghindari kebingungan dan pemborosan sumber daya atas koneksi historis, dan memastikan bahwa kedua pihak dapat menerima dan mengirim data.


Waktu posting: 08-Jan-2025