มีความมั่นใจว่าถ้าคุณส่ง 20 ไบต์ที่จุดเริ่มต้นของสตรีม TCP มันจะไม่มาถึงสอง 10 ไบต์ นี่เป็นเพราะสแต็ก TCP จะไม่ส่งเซกเมนต์ขนาดเล็กดังกล่าว: มีขนาด MTU ขั้นต่ำ อย่างไรก็ตามหากการส่งอยู่ที่ใดก็ได้ในช่วงกลางของกระแสการเดิมพันทั้งหมดจะปิด อาจเป็นไปได้ว่าโปรโตคอลสแต็กของคุณใช้ข้อมูล 10 ไบต์ในการกรอกกลุ่มและส่งออกและจากนั้นสิบไบต์ถัดไปจะไปยังส่วนอื่น
โปรโตคอลสแต็กของคุณแบ่งข้อมูลออกเป็นชิ้น ๆ และวางลงในคิว ขนาดของก้อนขึ้นอยู่กับพา ธ MTU หากคุณดำเนินการส่งและยังคงมีข้อมูลที่ค้างอยู่รอโพรโทคอลสแต็คโดยทั่วไปจะมองไปที่เซ็กเมนต์ซึ่งอยู่ที่ส่วนท้ายของคิวและดูว่ามีที่ว่างในเซ็กเมนต์นั้นเพื่อเพิ่มข้อมูลเพิ่มเติมหรือไม่ ห้องอาจมีขนาดเล็กเท่ากับหนึ่งไบต์ดังนั้นแม้แต่การส่งแบบสองไบต์ก็อาจแบ่งเป็นสอง
ในอีกด้านหนึ่งการแบ่งส่วนของข้อมูลหมายความว่าสามารถอ่านได้บางส่วน การดำเนินการรับอาจปลุกและรับข้อมูลเมื่อมีน้อยถึงหนึ่งเซ็กเมนต์ที่มาถึง ใน sockets API ที่มีการใช้งานอย่างกว้างขวางการรับสายสามารถขอได้ 20 ไบต์ แต่สามารถส่งคืนได้ด้วย 10 แน่นอนว่าชั้นการบัฟเฟอร์สามารถสร้างขึ้นได้ซึ่งจะบล็อกจนกว่าจะได้รับ 20 ไบต์หรือการเชื่อมต่อหยุดชะงัก ในโลก POSIX, API นั้นสามารถเป็นสตรีม I / O มาตรฐาน: คุณสามารถfdopen
ใช้ socket descriptor เพื่อรับFILE *
สตรีมและคุณสามารถใช้fread
มันเพื่อเติมบัฟเฟอร์ซึ่งคำขอเต็มจะพอใจกับการread
เรียกจำนวนมากตามที่ใช้ .
UDP ดาตาแกรมเฟรมข้อมูล การโทรส่งแต่ละครั้งจะสร้างดาตาแกรม (แต่ดูด้านล่างเกี่ยวกับการเปิดคอร์ก) อีกด้านหนึ่งได้รับดาตาแกรมเต็มรูปแบบ (และในซ็อกเก็ต API นั้นจะต้องระบุบัฟเฟอร์ที่มีขนาดใหญ่พอที่จะเก็บไว้มิฉะนั้นเดตาแกรมจะถูกตัดทอน) ดาต้าแกรมขนาดใหญ่ได้รับการแยกส่วนโดยการแยกส่วน IP และประกอบเข้ากับแอปพลิเคชันใหม่อย่างโปร่งใส หากส่วนใดขาดหายไปดาตาแกรมทั้งหมดจะหายไป ไม่มีวิธีการอ่านข้อมูลบางส่วนในสถานการณ์นั้น
มีส่วนขยายไปยังส่วนต่อประสานที่อนุญาตการดำเนินการหลายอย่างเพื่อระบุดาตาแกรมเดียว ใน Linux ซ็อกเก็ตสามารถ "corked" (ป้องกันไม่ให้ส่ง) ในขณะที่มันถูกคอร์กข้อมูลที่เขียนจะถูกรวบรวมเป็นหน่วยเดียว จากนั้นเมื่อซ็อกเก็ต "ไม่ได้เปิด" สามารถส่งดาตาแกรมเดียวได้