Misteri Utama Koneksi TCP Broker Paket Jaringan: Mengungkap kebutuhan akan Triple Handshake

Pengaturan Koneksi TCP
Saat kita menjelajahi web, mengirim email, atau bermain game online, sering kali kita tidak memikirkan koneksi jaringan rumit di baliknya. Namun, langkah-langkah kecil inilah yang memastikan komunikasi stabil antara kami dan server. Salah satu langkah terpenting adalah pengaturan koneksi TCP, dan intinya 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 hal ini menjamin stabilitas dan keandalan koneksi, dan betapa pentingnya hal ini untuk transfer data. Dengan pemahaman yang lebih mendalam tentang jabat tangan tiga arah, kita akan memperoleh pemahaman yang lebih baik tentang mekanisme yang mendasari 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 pembuatan koneksi sebelum transmisi data. Proses pembentukan koneksi ini dilakukan dengan jabat tangan tiga arah.

 Jabat tangan tiga arah TCP

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

Awalnya, klien dan server DITUTUP. Pertama, server secara aktif mendengarkan port dan berada dalam status LISTEN, yang berarti server harus dimulai. 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 bidang "Nomor urut" pada header TCP. Pada saat yang sama, klien menetapkan posisi flag SYN ke 1 untuk menunjukkan bahwa paket keluar adalah paket SYN. Klien menunjukkan bahwa ia ingin membuat 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.

Paket SYN+ACK

Ketika server menerima paket SYN dari klien, server 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 di kolom "Nomor pengakuan" dan menyetel bit SYN dan ACK ke 1. Terakhir, server mengirimkan paket ke klien, yang tidak berisi data lapisan aplikasi (dan tidak ada data untuk server untuk mengirim). Saat ini, server dalam keadaan SYN-RCVD.

Paket ACK

Setelah klien menerima paket dari server, klien perlu melakukan optimasi berikut untuk merespons paket balasan akhir: Pertama, klien menyetel bit ACK dari header TCP paket balasan ke 1; Kedua, klien memasukkan nilai server_isn + 1 di kolom "Konfirmasi nomor jawaban"; Terakhir, klien mengirimkan paket ke server. Paket ini dapat membawa data dari klien ke server. Setelah menyelesaikan operasi ini, 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, namun dua jabat tangan pertama tidak. Ini adalah pertanyaan yang sering ditanyakan dalam wawancara. Setelah jabat tangan tiga arah selesai, kedua belah 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 jabat tangan? Bukan dua kali, empat kali?
Jawaban umumnya adalah, "Karena jabat tangan tiga arah menjamin kemampuan menerima dan mengirim." Jawaban ini benar, namun hanya alasan permukaan saja, tidak mengemukakan alasan utama. Berikut ini saya akan menganalisis alasan terjadinya jabat tangan rangkap tiga dari tiga aspek untuk memperdalam pemahaman kita tentang masalah ini.

Jabat tangan tiga arah dapat secara efektif menghindari inisialisasi koneksi yang berulang secara historis (alasan utama)
Jabat tangan tiga arah menjamin bahwa kedua belah 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 jabat tangan tiga arah adalah untuk menghindari kebingungan yang disebabkan oleh 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 sampai di host tujuan terlebih dahulu karena kemacetan jaringan dan alasan lainnya. Untuk menghindari hal ini, TCP menggunakan jabat tangan tiga arah untuk membuat koneksi.

jabat tangan tiga arah menghindari koneksi duplikat historis

Ketika klien mengirimkan beberapa paket pembuatan 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- Ketika klien menerima paket SYN + ACK, ia menentukan bahwa koneksi tersebut adalah koneksi historis (nomor urut kedaluwarsa atau batas waktu) 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 merupakan koneksi historis. Jabat tangan tiga arah memungkinkan klien untuk menentukan apakah koneksi saat ini merupakan koneksi historis berdasarkan konteks ketika siap untuk mengirim paket ketiga:

1- Jika itu adalah koneksi historis (nomor urut kedaluwarsa atau batas waktu habis), paket yang dikirim melalui 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 karena TCP menginisialisasi koneksi untuk mencegah koneksi historis.

Alasan keempat: 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 tersebut melakukan hal berikut:

Penerima dapat menghilangkan duplikat data dan memastikan keakuratan data.

Penerima dapat menerima paket dalam 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 membuat koneksi TCP, klien mengirimkan paket SYN dengan nomor urut awal dan mengharuskan server membalas dengan paket ACK yang menunjukkan keberhasilan penerimaan paket SYN klien. Kemudian, server mengirimkan paket SYN dengan nomor urut awal ke klien dan menunggu klien membalas, untuk selamanya, untuk memastikan bahwa nomor urut awal disinkronkan dengan andal.

Sinkronkan nomor seri awal kedua belah pihak

Meskipun jabat tangan empat arah juga memungkinkan untuk menyinkronkan nomor urut awal kedua belah pihak dengan andal, langkah kedua dan ketiga dapat digabungkan menjadi satu langkah, sehingga menghasilkan jabat tangan tiga arah. Namun kedua jabat tangan tersebut hanya dapat menjamin bahwa nomor urut awal salah satu pihak berhasil diterima oleh pihak lainnya, namun tidak ada jaminan bahwa nomor urut awal kedua belah pihak dapat dipastikan. Oleh karena itu, jabat tangan tiga arah adalah pilihan terbaik untuk memastikan stabilitas dan keandalan koneksi TCP.

Alasan keempat: Hindari Membuang-buang Sumber Daya
Jika hanya terjadi “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 pengakuan ACK untuk membuat sambungan. Oleh karena itu, server hanya dapat secara proaktif membuat sambungan setelah menerima setiap permintaan SYN. Hal ini mengarah pada hal berikut:

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

Retensi pesan: Karena kurangnya jabat tangan ketiga, server tidak memiliki cara untuk mengetahui apakah klien menerima pengakuan ACK dengan benar untuk membuat sambungan. Akibatnya, jika pesan tersangkut di jaringan, klien akan terus mengirimkan permintaan SYN berulang kali, menyebabkan server terus membuat sambungan baru. Hal ini akan meningkatkan kemacetan dan penundaan jaringan serta berdampak negatif terhadap kinerja jaringan secara keseluruhan.

Hindari membuang-buang sumber daya

Oleh karena itu, untuk menjamin stabilitas dan keandalan koneksi jaringan, TCP menggunakan jabat tangan tiga arah untuk membuat koneksi guna menghindari terjadinya masalah tersebut.

Ringkasan
ItuPialang Paket JaringanPembuatan koneksi TCP dilakukan dengan jabat tangan tiga arah. Selama jabat tangan tiga arah, klien pertama-tama mengirimkan paket dengan flag SYN ke server, menunjukkan bahwa ia ingin membuat sambungan. Setelah menerima permintaan dari klien, server membalas paket dengan flag SYN dan ACK ke klien, 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 pihak berada dalam keadaan ESTABLISHED dan dapat mulai saling mengirim data.

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


Waktu posting: 08 Januari 2025