Cara mengkonfigurasi OS untuk merakit kembali segmen TCP

1

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?

sam
sumber
Penggunaan terminologi Anda ceroboh (misalnya lapisan IP hanya menangani IP, dan bukan "perakitan ulang segmen TCP" ). Berikan deskripsi atau contoh yang lebih baik tentang apa yang dikirim dan yang Anda terima.
serbuk kayu
Transport layer, mengirim data gambar JPEG dan menerima data gambar JPEG yang sama.
sam

Jawaban:

3

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.

Apakah ada cara untuk mengkonfigurasi OS untuk merakit kembali paket-paket ini saat diterima di port pada layer ini?

Tidak, Anda harus menghadapinya dengan benar di aplikasi Anda.

Steffen Ullrich
sumber