Persediaan Sambungan TCP
Apabila kita melayari web, menghantar e-mel atau bermain permainan dalam talian, kita sering tidak memikirkan tentang sambungan rangkaian yang kompleks di sebaliknya. Walau bagaimanapun, langkah-langkah yang kelihatan kecil inilah yang memastikan komunikasi yang stabil antara kita dan pelayan. Salah satu langkah yang paling penting ialah persediaan sambungan TCP, dan terasnya ialah jabat tangan tiga hala.
Artikel ini akan membincangkan prinsip, proses dan kepentingan jabat tangan tiga hala secara terperinci. Langkah demi langkah, kami akan menerangkan mengapa jabat tangan tiga hala diperlukan, bagaimana ia memastikan kestabilan dan kebolehpercayaan sambungan, dan betapa pentingnya ia untuk pemindahan data. Dengan pemahaman yang lebih mendalam tentang jabat tangan tiga hala, kita akan memperoleh pemahaman yang lebih baik tentang mekanisme asas komunikasi rangkaian dan pandangan yang lebih jelas tentang kebolehpercayaan sambungan TCP.
Proses Jabat Tangan Tiga Hala TCP dan Peralihan Keadaan
TCP ialah protokol pengangkutan berorientasikan sambungan, yang memerlukan pembentukan sambungan sebelum penghantaran data. Proses pembentukan sambungan ini dilakukan melalui jabat tangan tiga hala.
Mari kita lihat dengan lebih dekat paket TCP yang dihantar dalam setiap sambungan.
Pada mulanya, kedua-dua klien dan pelayan DITUTUP. Pertama, pelayan secara aktif mendengar pada port dan berada dalam keadaan DENGAR, yang bermaksud pelayan mesti dimulakan. Seterusnya, klien bersedia untuk mula mengakses halaman web. Ia perlu mewujudkan sambungan dengan pelayan. Format paket sambungan pertama adalah seperti berikut:
Apabila klien memulakan sambungan, ia menjana nombor jujukan awal rawak (client_isn) dan meletakkannya dalam medan "Nombor jujukan" pada pengepala TCP. Pada masa yang sama, klien menetapkan kedudukan bendera SYN kepada 1 untuk menunjukkan bahawa paket keluar adalah paket SYN. Klien menunjukkan bahawa ia ingin mewujudkan sambungan dengan pelayan dengan menghantar paket SYN pertama ke pelayan. Paket ini tidak mengandungi data lapisan aplikasi (iaitu, data yang dihantar). Pada ketika ini, status klien ditanda sebagai SYN-SENT.
Apabila pelayan menerima paket SYN daripada klien, ia akan memulakan nombor sirinya sendiri (server_isn) secara rawak dan kemudian meletakkan nombor tersebut dalam medan "Nombor siri" pada pengepala TCP. Seterusnya, pelayan memasukkan client_isn + 1 dalam medan "Nombor pengesahan" dan menetapkan kedua-dua bit SYN dan ACK kepada 1. Akhir sekali, pelayan menghantar paket tersebut kepada klien, yang tidak mengandungi data lapisan aplikasi (dan tiada data untuk dihantar oleh pelayan). Pada masa ini, pelayan berada dalam keadaan SYN-RCVD.
Sebaik sahaja klien menerima paket daripada pelayan, ia perlu melakukan pengoptimuman berikut untuk bertindak balas terhadap paket balasan akhir: Pertama, klien menetapkan bit ACK bagi pengepala TCP paket balasan kepada 1; Kedua, klien memasukkan nilai server_isn + 1 dalam medan "Sahkan nombor jawapan"; Akhir sekali, klien menghantar paket ke pelayan. Paket ini boleh membawa data daripada klien ke pelayan. Setelah selesai operasi ini, klien akan memasuki keadaan ESTABLISHED.
Sebaik sahaja pelayan menerima paket balasan daripada klien, ia juga akan bertukar kepada keadaan ESTABLISHED.
Seperti yang anda dapat lihat daripada proses di atas, apabila melakukan jabat tangan tiga hala, jabat tangan ketiga dibenarkan untuk membawa data, tetapi dua jabat tangan pertama tidak. Ini adalah soalan yang sering ditanya dalam temu bual. Setelah jabat tangan tiga hala selesai, kedua-dua pihak memasuki keadaan TERBUKA, menunjukkan bahawa sambungan telah berjaya diwujudkan, di mana klien dan pelayan boleh mula menghantar data antara satu sama lain.
Mengapa berjabat tangan tiga kali? Bukan dua kali, empat kali?
Jawapan lazimnya ialah, "Kerana jabat tangan tiga hala menjamin keupayaan untuk menerima dan menghantar." Jawapan ini betul, tetapi ia hanyalah sebab luaran, tidak mengemukakan sebab utama. Berikutnya, saya akan menganalisis sebab-sebab jabat tangan tiga hala daripada tiga aspek untuk memperdalam pemahaman kita tentang isu ini.
Jabat tangan tiga hala boleh mengelakkan permulaan sambungan berulang secara berkesan (sebab utama)
Jabat tangan tiga hala menjamin bahawa kedua-dua pihak telah menerima nombor urutan awal yang boleh dipercayai.
Jabat tangan tiga hala mengelakkan pembaziran sumber.
Sebab 1: Elakkan Gabungan Duplikat Sejarah
Secara ringkasnya, sebab utama jabat tangan tiga hala adalah untuk mengelakkan kekeliruan yang disebabkan oleh permulaan sambungan pendua yang lama. Dalam persekitaran rangkaian yang kompleks, penghantaran paket data tidak selalunya dihantar ke hos destinasi mengikut masa yang ditetapkan, dan paket data lama mungkin tiba di hos destinasi terlebih dahulu kerana kesesakan rangkaian dan sebab-sebab lain. Untuk mengelakkan ini, TCP menggunakan jabat tangan tiga hala untuk mewujudkan sambungan.
Apabila klien menghantar berbilang paket penubuhan sambungan SYN secara berturut-turut, dalam situasi seperti kesesakan rangkaian, perkara berikut mungkin berlaku:
1- Paket SYN lama tiba di pelayan sebelum paket SYN terkini.
2- Pelayan akan membalas paket SYN + ACK kepada klien selepas menerima paket SYN lama.
3- Apabila klien menerima paket SYN + ACK, ia menentukan bahawa sambungan tersebut adalah sambungan sejarah (nombor jujukan tamat tempoh atau tamat masa) mengikut konteksnya sendiri, dan kemudian menghantar paket RST ke pelayan untuk membatalkan sambungan.
Dengan sambungan dua jabat tangan, tiada cara untuk menentukan sama ada sambungan semasa adalah sambungan sejarah. Jabat tangan tiga hala membolehkan klien menentukan sama ada sambungan semasa adalah sambungan sejarah berdasarkan konteks apabila ia bersedia untuk menghantar paket ketiga:
1- Jika ia merupakan sambungan sejarah (nombor jujukan tamat tempoh atau tamat masa), paket yang dihantar oleh jabat tangan ketiga ialah paket RST untuk membatalkan sambungan sejarah.
2- Jika ia bukan sambungan sejarah, paket yang dihantar untuk kali ketiga ialah paket ACK, dan kedua-dua pihak yang berkomunikasi berjaya mewujudkan sambungan tersebut.
Oleh itu, sebab utama TCP menggunakan jabat tangan tiga hala adalah kerana ia memulakan sambungan untuk mengelakkan sambungan sejarah.
Sebab 2: Untuk menyegerakkan nombor jujukan awal kedua-dua pihak
Kedua-dua belah protokol TCP mesti mengekalkan nombor jujukan, yang merupakan faktor utama untuk memastikan penghantaran yang boleh dipercayai. Nombor jujukan memainkan peranan penting dalam sambungan TCP. Ia melakukan perkara berikut:
Penerima boleh menghapuskan data pendua dan memastikan ketepatan data.
Penerima boleh menerima paket mengikut urutan nombor jujukan untuk memastikan integriti data.
● Nombor jujukan boleh mengenal pasti paket data yang telah diterima oleh pihak yang satu lagi, membolehkan penghantaran data yang andal.
Oleh itu, setelah mewujudkan sambungan TCP, klien menghantar paket SYN dengan nombor jujukan awal dan memerlukan pelayan untuk membalas dengan paket ACK yang menunjukkan penerimaan paket SYN klien yang berjaya. Kemudian, pelayan menghantar paket SYN dengan nombor jujukan awal kepada klien dan menunggu klien membalas, sekali gus, untuk memastikan nombor jujukan awal disegerakkan dengan andal.
Walaupun jabat tangan empat hala juga boleh disegerakkan dengan andal nombor jujukan awal kedua-dua pihak, langkah kedua dan ketiga boleh digabungkan menjadi satu langkah, menghasilkan jabat tangan tiga hala. Walau bagaimanapun, kedua-dua jabat tangan hanya boleh menjamin bahawa nombor jujukan awal satu pihak berjaya diterima oleh pihak yang satu lagi, tetapi tiada jaminan bahawa nombor jujukan awal kedua-dua pihak boleh disahkan. Oleh itu, jabat tangan tiga hala adalah pilihan terbaik untuk diambil bagi memastikan kestabilan dan kebolehpercayaan sambungan TCP.
Sebab 3: Elakkan Pembaziran Sumber
Jika hanya terdapat "dua jabat tangan", apabila permintaan SYN klien disekat dalam rangkaian, klien tidak dapat menerima paket ACK yang dihantar oleh pelayan, jadi SYN akan dihantar semula. Walau bagaimanapun, memandangkan tiada jabat tangan ketiga, pelayan tidak dapat menentukan sama ada klien menerima pengakuan ACK untuk mewujudkan sambungan. Oleh itu, pelayan hanya boleh mewujudkan sambungan secara proaktif selepas menerima setiap permintaan SYN. Ini membawa kepada perkara berikut:
Pembaziran sumber: Jika permintaan SYN klien disekat, mengakibatkan penghantaran berulang pelbagai paket SYN, pelayan akan mewujudkan pelbagai sambungan tidak sah yang berlebihan selepas menerima permintaan. Ini membawa kepada pembaziran sumber pelayan yang tidak perlu.
Pengekalan mesej: Disebabkan kekurangan jabat tangan ketiga, pelayan tidak mempunyai cara untuk mengetahui sama ada klien telah menerima pengakuan ACK dengan betul untuk mewujudkan sambungan. Akibatnya, jika mesej tersekat dalam rangkaian, klien akan terus menghantar permintaan SYN berulang kali, menyebabkan pelayan sentiasa mewujudkan sambungan baharu. Ini akan meningkatkan kesesakan dan kelewatan rangkaian serta menjejaskan prestasi rangkaian keseluruhan secara negatif.
Oleh itu, bagi memastikan kestabilan dan kebolehpercayaan sambungan rangkaian, TCP menggunakan jabat tangan tiga hala untuk mewujudkan sambungan bagi mengelakkan berlakunya masalah ini.
Ringkasan
YangBroker Paket RangkaianPenubuhan sambungan TCP dilakukan dengan jabat tangan tiga hala. Semasa jabat tangan tiga hala, klien terlebih dahulu menghantar paket dengan bendera SYN ke pelayan, menunjukkan bahawa ia ingin mewujudkan sambungan. Selepas menerima permintaan daripada klien, pelayan membalas paket dengan bendera SYN dan ACK kepada klien, menunjukkan bahawa permintaan sambungan diterima, dan menghantar nombor jujukan awalnya sendiri. Akhir sekali, klien membalas dengan bendera ACK kepada pelayan untuk menunjukkan bahawa sambungan telah berjaya diwujudkan. Oleh itu, kedua-dua pihak berada dalam keadaan ESTABLISHED dan boleh mula menghantar data antara satu sama lain.
Secara amnya, proses jabat tangan tiga hala untuk penubuhan sambungan TCP direka bentuk untuk memastikan kestabilan dan kebolehpercayaan sambungan, mengelakkan kekeliruan dan pembaziran sumber ke atas sambungan sejarah, dan memastikan kedua-dua pihak dapat menerima dan menghantar data.
Masa siaran: 8 Jan-2025






