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

Pengaturan Koneksi TCP
Saat kita menjelajah web, mengirim email, atau bermain game online, kita sering tidak memikirkan koneksi jaringan yang rumit 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.

Artikel ini akan membahas prinsip, proses, dan pentingnya three-way handshake secara terperinci. Langkah demi langkah, kami akan menjelaskan mengapa three-way handshake diperlukan, bagaimana hal itu memastikan stabilitas dan keandalan koneksi, dan seberapa pentingnya hal itu untuk transfer data. Dengan pemahaman yang lebih mendalam tentang three-way handshake, 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 transportasi berorientasi koneksi, yang mengharuskan pembentukan 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 pada setiap koneksi.

Awalnya, klien dan server dalam kondisi TERTUTUP. Pertama, server secara aktif mendengarkan pada 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

Saat klien memulai koneksi, ia membuat nomor urut awal acak (client_isn) dan menempatkannya di kolom "Nomor urut" pada header TCP. Pada saat yang sama, klien menyetel posisi tanda SYN ke 1 untuk menunjukkan bahwa paket yang 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 di kolom "Nomor seri" pada header TCP. Selanjutnya, server memasukkan client_isn + 1 di kolom "Nomor pengakuan" dan menetapkan bit SYN dan ACK menjadi 1. Terakhir, server mengirimkan paket ke klien, yang tidak berisi data lapisan aplikasi (dan tidak ada data untuk dikirim oleh server). Saat ini, server berada dalam status SYN-RCVD.

Paket ACK

Setelah klien menerima paket dari server, klien perlu melakukan pengoptimalan berikut untuk menanggapi paket balasan terakhir: 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 mengirim 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 diizinkan untuk membawa data, tetapi dua jabat tangan pertama tidak. Ini adalah pertanyaan yang sering diajukan 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 harus berjabat tangan tiga kali? Bukan dua kali, melainkan empat kali?
Jawaban yang umum adalah, "Karena jabat tangan tiga arah menjamin kemampuan untuk menerima dan mengirim." Jawaban ini benar, tetapi itu 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 pihak telah menerima nomor urut awal yang andal.
Jabat tangan tiga arah menghindari pemborosan sumber daya.

Alasan 1: Hindari Duplikasi Gabungan Historis
Singkatnya, alasan utama untuk three-way handshake adalah untuk menghindari kebingungan yang disebabkan oleh inisialisasi koneksi duplikat yang 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 three-way handshake untuk membuat koneksi.

jabat tangan tiga arah menghindari koneksi duplikat historis

Ketika klien mengirim 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- Ketika klien menerima paket SYN + ACK, ia menentukan bahwa koneksi tersebut adalah koneksi historis (nomor urut kedaluwarsa atau batas waktu) sesuai dengan 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 klien siap mengirim paket ketiga:

1- Jika ini merupakan koneksi historis (nomor urut kedaluwarsa atau batas waktu habis), 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 membuat koneksi TCP, 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 ke klien dan menunggu klien untuk membalas, sekali dan 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. Akan tetapi, kedua jabat tangan tersebut hanya dapat menjamin bahwa nomor urut awal satu pihak berhasil diterima oleh pihak lain, tetapi tidak ada jaminan bahwa nomor urut awal kedua belah pihak dapat dikonfirmasi. Oleh karena itu, jabat tangan tiga arah merupakan pilihan terbaik untuk memastikan stabilitas dan keandalan koneksi TCP.

Alasan 3: Menghindari Pemborosan Sumber Daya
Jika hanya ada "two-handshake", saat 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 handshake ketiga, server tidak dapat menentukan apakah klien menerima pengakuan ACK untuk membuat koneksi. Oleh karena itu, server hanya dapat secara proaktif membuat koneksi setelah menerima setiap permintaan SYN. ​​Hal ini mengarah pada hal berikut:

Pemborosan sumber daya: Jika permintaan SYN klien diblokir, yang mengakibatkan transmisi berulang dari beberapa paket SYN, server akan membuat beberapa koneksi tidak valid yang redundan setelah menerima permintaan. 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 membuat koneksi. Akibatnya, jika pesan macet 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 mengirim 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 ke klien, yang menunjukkan bahwa permintaan koneksi diterima, dan mengirimkan nomor urut awalnya sendiri. Akhirnya, klien membalas dengan tanda ACK ke server untuk menunjukkan bahwa koneksi telah berhasil dibuat. Dengan demikian, kedua pihak berada dalam status 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 pada koneksi historis, dan memastikan bahwa kedua pihak dapat menerima dan mengirim data.


Waktu posting: 08-Jan-2025