Pengaturan Koneksi TCP
Saat kita menjelajahi web, mengirim email, atau bermain game online, kita seringkali tidak memikirkan koneksi jaringan yang kompleks di baliknya. Namun, langkah-langkah yang tampaknya kecil inilah yang memastikan komunikasi yang stabil antara kita dan server. Salah satu langkah terpenting adalah pengaturan koneksi TCP, dan inti dari ini adalah jabat tangan tiga arah (three-way handshake).
Artikel ini akan membahas prinsip, proses, dan pentingnya jabat tangan tiga arah secara detail. Langkah demi langkah, kita akan menjelaskan mengapa jabat tangan tiga arah diperlukan, bagaimana hal itu memastikan stabilitas dan keandalan koneksi, dan seberapa pentingnya hal itu untuk transfer data. Dengan pemahaman yang lebih dalam tentang jabat tangan tiga arah, kita akan memperoleh pemahaman yang lebih baik tentang mekanisme dasar komunikasi jaringan dan pandangan yang lebih jelas tentang keandalan koneksi TCP.
Proses Jabat Tangan Tiga Arah TCP dan Transisi Status
TCP adalah protokol transport berorientasi koneksi, yang memerlukan pembentukan koneksi sebelum transmisi data. Proses pembentukan koneksi ini dilakukan melalui jabat tangan tiga arah.
Mari kita perhatikan lebih detail paket TCP yang dikirim dalam setiap koneksi.
Awalnya, baik klien maupun server dalam keadaan TERTUTUP. Pertama, server secara aktif mendengarkan pada sebuah port dan berada dalam keadaan MENDENGAR, yang berarti server harus sudah dimulai. Selanjutnya, klien siap untuk mulai mengakses halaman web. Klien perlu membangun koneksi dengan server. Format paket koneksi pertama adalah sebagai berikut:
Ketika klien memulai koneksi, ia menghasilkan nomor urutan awal acak (client_isn) dan menempatkannya di bidang "Nomor urutan" pada header TCP. Pada saat yang sama, klien mengatur posisi flag SYN menjadi 1 untuk menunjukkan bahwa paket keluar adalah paket SYN. Klien menunjukkan bahwa ia ingin membangun koneksi dengan server dengan mengirimkan paket SYN pertama ke server. Paket ini tidak berisi data lapisan aplikasi (yaitu, data yang dikirim). Pada titik ini, status klien ditandai sebagai SYN-SENT.
Ketika sebuah server menerima paket SYN dari klien, server tersebut secara acak menginisialisasi nomor serinya sendiri (server_isn) dan kemudian memasukkan nomor tersebut ke dalam kolom "Nomor seri" pada header TCP. Selanjutnya, server memasukkan client_isn + 1 ke dalam kolom "Nomor pengakuan" dan mengatur bit SYN dan ACK menjadi 1. Terakhir, server mengirimkan paket tersebut ke klien, yang tidak berisi data lapisan aplikasi (dan tidak ada data yang perlu dikirim oleh server). Pada saat ini, server berada dalam keadaan SYN-RCVD.
Setelah klien menerima paket dari server, klien perlu melakukan optimasi berikut untuk menanggapi paket balasan akhir: Pertama, klien mengatur bit ACK pada header TCP paket balasan menjadi 1; Kedua, klien memasukkan nilai server_isn + 1 pada kolom "Nomor jawaban konfirmasi"; 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 Anda lihat dari proses di atas, saat melakukan three-way handshake, handshake ketiga diperbolehkan membawa data, tetapi dua handshake pertama tidak. Ini adalah pertanyaan yang sering diajukan dalam wawancara. Setelah three-way handshake selesai, kedua pihak memasuki status ESTABLISHED, yang menunjukkan bahwa koneksi telah berhasil dibuat, di mana klien dan server dapat mulai mengirim data satu sama lain.
Mengapa tiga kali jabat tangan? Bukan dua kali, tapi empat kali?
Jawaban 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 di balik jabat tangan tiga arah dari tiga aspek untuk memperdalam pemahaman kita tentang masalah ini.
Proses jabat tangan tiga arah dapat secara efektif menghindari inisialisasi koneksi yang berulang secara historis (alasan utamanya).
Proses jabat tangan tiga arah menjamin bahwa kedua pihak telah menerima nomor urut awal yang dapat diandalkan.
Jabat tangan tiga arah menghindari pemborosan sumber daya.
Alasan 1: Hindari Penggabungan Duplikat Historis
Singkatnya, alasan utama dari jabat tangan tiga arah adalah untuk menghindari kebingungan yang disebabkan oleh inisialisasi koneksi duplikat lama. Dalam lingkungan jaringan yang kompleks, transmisi paket data tidak selalu dikirim 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.
Ketika klien mengirimkan beberapa paket pembentukan koneksi SYN secara berurutan, dalam situasi seperti kemacetan jaringan, hal berikut dapat 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. Ketika klien menerima paket SYN + ACK, klien menentukan bahwa koneksi tersebut adalah koneksi historis (nomor urutan kedaluwarsa atau waktu habis) sesuai dengan konteksnya sendiri, dan kemudian mengirimkan paket RST ke server untuk membatalkan koneksi.
Dengan koneksi dua-jabat tangan, tidak ada cara untuk menentukan apakah koneksi saat ini adalah koneksi historis. Jabat tangan tiga arah memungkinkan klien untuk menentukan apakah koneksi saat ini adalah koneksi historis berdasarkan konteks ketika siap untuk mengirim paket ketiga:
1- Jika ini adalah koneksi historis (nomor urutan kedaluwarsa atau waktu habis), paket yang dikirim oleh jabat tangan ketiga adalah paket RST untuk membatalkan koneksi historis tersebut.
2. Jika bukan koneksi historis, paket yang dikirim untuk ketiga kalinya adalah paket ACK, dan kedua pihak yang berkomunikasi berhasil membangun 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 urutan awal kedua belah pihak
Kedua sisi protokol TCP harus mempertahankan nomor urutan, yang merupakan faktor kunci untuk memastikan transmisi yang andal. Nomor urutan memainkan peran penting dalam koneksi TCP. Nomor urutan melakukan hal-hal berikut:
Penerima dapat menghilangkan data duplikat dan memastikan keakuratan data.
Penerima dapat menerima paket sesuai 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 membangun koneksi TCP, klien mengirimkan paket SYN dengan nomor urutan awal dan meminta server untuk membalas dengan paket ACK yang menunjukkan keberhasilan penerimaan paket SYN klien. Kemudian, server mengirimkan paket SYN dengan nomor urutan awal ke klien dan menunggu balasan dari klien, sekali dan untuk selamanya, untuk memastikan bahwa nomor urutan awal tersinkronisasi dengan andal.
Meskipun jabat tangan empat arah juga memungkinkan untuk menyinkronkan nomor urutan awal kedua pihak secara andal, langkah kedua dan ketiga dapat digabungkan menjadi satu langkah, menghasilkan jabat tangan tiga arah. Namun, kedua jabat tangan tersebut hanya dapat menjamin bahwa nomor urutan awal satu pihak berhasil diterima oleh pihak lain, tetapi tidak ada jaminan bahwa nomor urutan awal kedua pihak dapat dikonfirmasi. Oleh karena itu, jabat tangan tiga arah adalah 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 telah menerima pengakuan ACK untuk membangun koneksi. Oleh karena itu, server hanya dapat secara proaktif membangun koneksi setelah menerima setiap permintaan SYN. Hal ini menyebabkan hal-hal berikut:
Pemborosan sumber daya: Jika permintaan SYN klien diblokir, yang mengakibatkan pengiriman berulang beberapa paket SYN, server akan membuat beberapa koneksi tidak valid yang berlebihan setelah menerima permintaan tersebut. Hal ini menyebabkan pemborosan sumber daya server yang tidak perlu.
Retensi pesan: Karena tidak adanya jabat tangan ketiga, server tidak memiliki cara untuk mengetahui apakah klien telah menerima pengakuan ACK dengan benar untuk membangun koneksi. Akibatnya, jika pesan tersangkut di jaringan, klien akan terus mengirimkan permintaan SYN berulang kali, menyebabkan server terus-menerus membangun koneksi baru. Hal ini akan meningkatkan kemacetan dan penundaan jaringan serta berdampak negatif pada kinerja jaringan secara keseluruhan.
Oleh karena itu, untuk memastikan stabilitas dan keandalan koneksi jaringan, TCP menggunakan proses jabat tangan tiga arah untuk membangun koneksi guna menghindari terjadinya masalah-masalah tersebut.
Ringkasan
ItuBroker Paket JaringanPembentukan koneksi TCP dilakukan dengan jabat tangan tiga arah. Selama jabat tangan tiga arah, klien pertama-tama mengirimkan paket dengan flag SYN ke server, yang menunjukkan bahwa ia ingin membangun koneksi. Setelah menerima permintaan dari klien, server membalas paket dengan flag SYN dan ACK ke klien, yang menunjukkan bahwa permintaan koneksi diterima, dan mengirimkan nomor urutan awalnya sendiri. Terakhir, klien membalas dengan flag ACK ke server untuk menunjukkan bahwa koneksi telah berhasil dibangun. Dengan demikian, kedua pihak berada dalam keadaan ESTABLISHED dan dapat mulai mengirim data satu sama lain.
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






