Rumah  >  Artikel  >  Java  >  Penemubual: Bagaimanakah Socket TCP memutuskan sambungan?

Penemubual: Bagaimanakah Socket TCP memutuskan sambungan?

Java后端技术全栈
Java后端技术全栈ke hadapan
2023-08-17 16:10:101820semak imbas
  • foroWord

  • What adalah soket?

    Tiga kali Dalam fungsi soket manakah jabat tangan berlaku
  • Bagaimanakah Socket TCP diputuskan
      Apabila ia datang ke Internet, semua orang pasti akan memikirkan TCP, UDP, HTTP, tiga pemegang-empat? -wave, dsb. Tetapi apabila bercakap tentang Socket, semua orang mungkin sedikit keliru. Mereka hanya tahu bahawa ia akan digunakan dalam rangkaian, tetapi apakah sebenarnya Socket Apa itu? Mengapa rangkaian tidak dapat dipisahkan daripada Socket? Apa itu Socket? muncul? "
    • Soket sebenarnya adalah produk antara lapisan aplikasi dan lapisan pengangkutan. Ia merangkumi banyak operasi kompleks lapisan pengangkutan ke dalam beberapa antara muka mudah. ​​Lapisan aplikasi memanggil ini untuk merealisasikan komunikasi proses dalam rangkaian. Soket ialah alat untuk membangunkan komunikasi pelabuhan, dan ia adalah tahap yang lebih rendah.

    Soket sebenarnya serupa dengan mesin basuh pinggan mangkuk Fungsinya adalah untuk mencuci pinggan mangkuk (komunikasi rangkaian, anda mungkin perlu mencuci pinggan mangkuk secara manual (memanggil pelbagai API secara manual antara lapisan pengangkutan dan lapisan aplikasi) , tetapi dengannya. anda hanya perlu mengklik suis dan melaraskan tempoh (API dirangkumkan, anda tidak memerlukannya, tetapi tanpanya, basuh pinggan mangkuk (interaksi antara lapisan aplikasi dan lapisan pengangkutan) akan menjadi sangat rumit.
    • Komunikasi rangkaian yang lengkap mesti melalui kabel rangkaian dan kad rangkaian lapisan pengangkutan fizikal Protokol IP lapisan pengangkutan rangkaian boleh mengetahui mesin untuk menghantar data, tetapi ia akan berjalan secara berbeza dalam proses sistem komputer, bagaimana untuk mengenal pasti proses data rangkaian dalam kad rangkaian adalah untuk Socket ini sebenarnya?

      Soket ialah "pengkapsulan protokol TCP/IP atau UDP/IP" sebenarnya adalah antara muka panggilan. Melalui antara muka ini, apabila kami membangunkan aplikasi rangkaian, kami tidak perlu risau tentang cara lapisan asas dilaksanakan, mengurangkan kesukaran pembangunan.

      Proses berjalan soket

      berdasarkan TCP

      Penemubual: Bagaimanakah Socket TCP memutuskan sambungan?

      Server

        bermakna soket bawah
      • menjanakan fail The soket
      • bind(): Port dan alamat yang digunakan untuk mengikat perkhidmatan biasanya ditetapkan di sini kerana ia perlu dinyatakan apabila pelanggan menyambung
      • listen(): Selepas pengikatan selesai, listen akan memantau paket data port ini
      • accept(): bersamaan dengan suis, menunjukkan bahawa saya bersedia untuk menerima permintaan, tetapi ia akan disekat sehingga sambungan pelanggan berjaya
      • baca (): Baca kandungan dihantar oleh pelanggan
      • write(): Pelanggan menulis data yang akan dikembalikan
        tutup(): Putuskan sambungan,
      • "lambai empat kali"

      • socket(): bermaksud mencipta soket, dan lapisan bawah akan menghasilkan deskriptor fail untuk mewakili soket
      • connet(): bermaksud menyambung ke alamat yang ditentukan Sebelum itu, Akan membuat portnya sendiri secara rawak, tcp's
        "Jabatan tangan tiga hala bermula di sini"
      • write(): pelanggan menulis data yang akan dihantar
      • 🎜read(): pelanggan membaca pelayan Data yang dikembalikan 🎜🎜🎜(🎜tutup : putuskan sambungan, 🎜"Lambai empat kali"🎜, hantar maklumat pemutusan sambungan kepada pelanggan🎜🎜. pelayan. Dan ia akan menerima permintaan pelanggan selepas memanggil kaedah Recvfrom(), dan akan menyekat sehingga maklumat diterima Bagaimana Socket TCP mewujudkan sambungan jabat tangan tiga hala yang terkenal
      Penemubual: Bagaimanakah Socket TCP memutuskan sambungan?
      • Jabatan tangan pertama: Proses TCP A mencipta blok kawalan penghantaran TCB, dan kemudian menghantar segmen permintaan sambungan kepada B. Kemudian tetapkan bit penyegerakan SYN kepada 1 dan pilih nombor jujukan awal seq=x Pada masa ini, klien A memasuki keadaan SYN-SENT (penyegerakan dihantar).
      • Jabatan tangan kedua: B menerima segmen permintaan sambungan Jika ia bersetuju untuk mewujudkan sambungan, ia menghantar pengesahan kepada A. Dalam segmen mesej pengesahan, bit penyegerakan SYN=1, bit pengesahan ACK=1, nombor pengesahan ack=x+1, dan nombor jujukan awal seq=y juga dipilih untuk dirinya sendiri Pada masa ini, pelayan B masuk keadaan SYN-RCVID.
      • Jabatan ketiga: Selepas A menerima pengesahan B, ia kemudian menghantar pengesahan kepada B. Mesej pengesahan ACK=1, nombor pengesahan ack=y+1. Pada masa ini A memasuki keadaan ESTAB-LISHED. Apabila B menerima pengesahan A, ia juga memasuki keadaan ESTAB-LISHED. Sambungan diwujudkan

      Di mana fungsi soket jabat tangan tiga hala berlaku

      Penemubual: Bagaimanakah Socket TCP memutuskan sambungan?
      • Apabila pelanggan memanggil SYN, permintaan sambungan dicetuskan dan isyarat sambungan pelayan. Pada masa ini sambung memasuki keadaan menyekat;
      • Pelayan memantau permintaan sambungan, iaitu, menerima SYN, memanggil fungsi terima untuk menerimanya, dan memasuki keadaan menyekat untuk menggunakan fungsi soket, ikat dan dengar; dan kemudian mengembalikan isyarat syn dan ack yang berkaitan
      • Pelanggan menerima maklumat daripada pelayan Pada masa ini, sambungan selesai, keadaan menyekat dilepaskan dan Isyarat ack dihantar ke pelayan
      • Pelayan menerima ack, menerima penyekatan, dan melengkapkan sambungan

      selepas itu, connect() telah dilaksanakan menghantar data kepada pelanggan.

      Bagaimana Socket TCP memutuskan sambungan?

      Penemubual: Bagaimanakah Socket TCP memutuskan sambungan?
      • Gelombang pertama: A pertama menghantar segmen mesej keluaran sambungan, bit kawalan penamatan FIN=1 dalam pengepala segmen, nombor urutan seq=u (sama dengan hadapan A Nombor jujukan terakhir data yang dihantar ditambah sebanyak 1); kemudian A memasuki keadaan FIN-WAIT-1 (menamatkan menunggu 1) dan menunggu pengesahan B.
      • Gelombang kedua: Selepas B menerima segmen mesej keluaran sambungan A, ia segera menghantar segmen mesej pengesahan, nombor pengesahan ack=u+1, nombor urutan seq=v (sama dengan nombor urutan terakhir data dihantar oleh B sebelum Tambah 1);
      • Gelombang ketiga: A memasuki keadaan FIN-WAIT-2 (penamatan tunggu 2) selepas menerima segmen mesej pengesahan B, dan terus menunggu untuk B menghantar segmen mesej keluaran sambungan
        • Jika B Apabila tiada lagi data untuk dihantar, B akan menghantar segmen mesej keluaran sambungan ke A. Bit kawalan penamatan FIN=1 dalam pengepala segmen, nombor jujukan seq=w (sesetengah data mungkin dihantar dalam keadaan separuh tertutup ), dan nombor pengesahan ack=u+ 1. Pada masa ini, B memasuki keadaan LAST-ACK (pengesahan terakhir) dan menunggu pengesahan A.
      • Gelombang keempat: A menerima segmen mesej keluaran sambungan B dan menghantar pengesahan Bit pengesahan dalam segmen pengesahan ialah ACK=1, nombor pengesahan ack=w+1, dan nombor urutan seq=u+. 1; kemudian A Masukkan keadaan TIME-WAIT (masa menunggu). Apabila B menerima segmen pengesahan sekali lagi, B memasuki keadaan TUTUP.

      Kenapa tunggu 2MSL selepas gelombang keempat

      Pertama sekali, masa 2MSL bermula dari masa pelanggan (A) menerima FIN dan menghantar ACK. Jika dalam masa TIME-WAIT, kerana ACK klien (A) tidak dihantar ke pelayan (B), klien (A) menerima mesej FIN yang dihantar semula oleh pelayan (B), maka masa 2MSL akan Tetapkan semula. Sebab menunggu 2MSL adalah seperti berikut

      • 1. Paket data sambungan asal hilang
        • Jika B tidak menerima ACK sendiri, ia akan tamat masa dan menghantar semula FiN FIN sekali lagi dan akan menghantar ACK lagi
        • Jika B menerima ACKnya, dia tidak akan menghantar sebarang mesej lagi

      Selepas gelombang terakhir, A tidak tahu sama ada B telah menerima mesejnya. Termasuk ACK, yang mana antara dua situasi di atas, A perlu menunggu, untuk mengambil ini "Nilai maksimum masa menunggu dalam dua situasi untuk menghadapi senario kes terburuk", senario kes terburuk ialah: kemandirian maksimum masa mesej ACK destinasi (MSL) + Masa kelangsungan hidup maksimum (MSL) mesej FIN masuk. Ini betul-betul 2MSL, yang merupakan masa yang cukup untuk menyebabkan paket data bersambung asal hilang dalam rangkaian.

      • 2. Pastikan ACK boleh diterima oleh pelayan untuk menutup sambungan dengan betul

      Sebab ACK ini mungkin hilang, yang akan menyebabkan pelayan tidak menerima mesej pengesahan FIN-ACK. Andaikan bahawa pelanggan tidak menunggu 2MSL, tetapi melepaskan penutupan terus selepas menghantar ACK Sebaik sahaja ACK hilang, pelayan tidak boleh memasuki keadaan sambungan tertutup seperti biasa.

Atas ialah kandungan terperinci Penemubual: Bagaimanakah Socket TCP memutuskan sambungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:Java后端技术全栈. Jika ada pelanggaran, sila hubungi admin@php.cn Padam