Saya memiliki aplikasi yang membaca data TCP dari soket. Perangkat pengirim mengirimkan 1400 byte data penuh ke soket server di ujung lainnya. Di suatu tempat di sepanjang jalan, paket semakin tersegmentasi / terfragmentasi menjadi segmen 1024 byte dan segmen 376 byte. Untuk menerima data dengan benar di sisi aplikasi saya, saya harus membaca soket dua kali dan mengumpulkan paket di tingkat aplikasi, yang dapat memiliki masalah dengan banyak lalu lintas.
Dari semua yang saya baca, perakitan kembali segmen TCP ditangani pada IP Layer. Saya menjalankan Windows Server 2012 dan aplikasi saya menggunakan Winsock. Apakah ada cara untuk mengkonfigurasi OS untuk merakit kembali paket-paket ini saat diterima di port pada layer ini?
windows
networking
tcp
packet
sam
sumber
sumber
Jawaban:
TCP adalah protokol streaming dan bukan protokol pesan. Tumpukan TCP dalam OS memastikan bahwa data diteruskan ke aplikasi dalam urutan yang benar dan tidak ada kehilangan data dan tidak ada duplikasi data yang dilakukan. Itu tidak peduli tentang menjaga batas-batas paket karena seperti yang saya katakan TCP adalah protokol aliran. Selain itu, pengirim bebas untuk membagi satu penulisan menjadi beberapa paket atau menggabungkan beberapa penulisan menjadi satu paket. Itu akan melakukan pemisahan untuk menyesuaikan ukuran paket ke MTU / PMTU untuk menghindari fragmentasi paket selama pengiriman dan itu menggabungkan untuk mengurangi overhead pengiriman.
Dengan demikian aplikasi tidak boleh bergantung pada batas-batas pesan implisit karena bagaimana aplikasi pengiriman telah menulis data tetapi batas-batas pesan eksplisit (tingkat aplikasi) harus digunakan.
Tidak, Anda harus menghadapinya dengan benar di aplikasi Anda.
sumber