Ada beberapa jaminan bahwa jika Anda mengirim 20 byte di awal aliran TCP, itu tidak akan tiba sebagai dua buah 10 byte. Ini karena TCP stack tidak akan mengirim segmen sekecil itu: ada ukuran MTU minimum. Namun, jika pengiriman ada di mana saja di tengah aliran, semua taruhan dibatalkan. Bisa jadi stack protokol Anda membutuhkan 10 byte data untuk mengisi segmen dan mengirimkannya, dan kemudian sepuluh byte berikutnya pergi ke segmen lain.
Tumpukan protokol Anda memecah data menjadi potongan-potongan dan menempatkannya ke dalam antrian. Ukuran chunk didasarkan pada jalur MTU. Jika Anda melakukan operasi pengiriman, dan masih ada data yang antri menunggu, tumpukan protokol biasanya akan mengintip segmen yang berada di ujung antrian dan melihat apakah ada ruang di segmen itu untuk menambahkan lebih banyak data. Ruangan bisa sekecil satu byte, sehingga bahkan pengiriman dua byte dapat dipecah menjadi dua.
Di sisi lain, segmentasi data berarti bahwa mungkin ada pembacaan parsial. Operasi penerimaan berpotensi bangun dan mendapatkan data ketika sedikitnya satu segmen tiba. Dalam API soket yang diterapkan secara luas, panggilan terima dapat meminta 20 byte, tetapi bisa kembali dengan 10. Tentu saja, lapisan penyangga dapat dibangun di atasnya yang akan memblokir hingga 20 byte diterima, atau koneksi terputus. Di dunia POSIX, API itu bisa menjadi stream I / O standar: Anda bisa fdopen
deskriptor socket untuk memperoleh FILE *
stream, dan Anda bisa menggunakannya fread
untuk mengisi buffer sehingga permintaan penuh dipenuhi dengan sebanyak mungkin read
panggilan yang diperlukan .
Datagram UDP membingkai data. Setiap panggilan kirim menghasilkan datagram (tetapi lihat di bawah tentang penyumbatan). Sisi lain menerima datagram lengkap (dan, di API soket, ia harus menentukan buffer yang cukup besar untuk menahannya, atau datagram akan terpotong). Datagram besar terfragmentasi oleh fragmentasi IP, dan dirakit ulang secara transparan ke aplikasi. Jika ada fragmen yang hilang, seluruh datagram hilang; tidak ada cara untuk membaca sebagian data dalam situasi itu.
Ada ekstensi ke antarmuka yang memungkinkan beberapa operasi menentukan datagram tunggal. Di Linux, soket dapat "disumbat" (dicegah mengirim). Sementara itu disumbat, data tertulis dikumpulkan menjadi satu unit. Kemudian ketika soket "terbuka", satu datagram dapat dikirim.