วิธีกำหนดค่าระบบปฏิบัติการเพื่อรวบรวม TCP เซกเมนต์อีกครั้ง


1

ฉันมีแอปพลิเคชันที่อ่านข้อมูล TCP จากซ็อกเก็ต อุปกรณ์ส่งกำลังส่งข้อมูลทั้งหมด 1,400 ไบต์ไปยังซ็อกเก็ตของเซิร์ฟเวอร์ที่ปลายอีกด้านหนึ่ง แพ็กเก็ตกำลังได้รับการแบ่งส่วน / แยกส่วนเป็น 1024 ส่วนไบต์และ 376 ไบต์ส่วน ในการรับข้อมูลอย่างถูกต้องทางแอปพลิเคชันของฉันฉันต้องอ่านซ็อกเก็ตสองครั้งและรวบรวมแพ็คเก็ตที่ระดับแอปพลิเคชันซึ่งอาจมีปัญหากับการรับส่งข้อมูลจำนวนมาก

จากทุกสิ่งที่ฉันได้อ่านการประกอบ TCP เซกเตอร์ใหม่จะถูกจัดการบน IP Layer ฉันใช้ Windows Server 2012 และแอปพลิเคชันของฉันใช้ Winsock มีวิธีกำหนดค่าระบบปฏิบัติการให้รวบรวมแพ็กเก็ตเหล่านี้อีกครั้งเมื่อได้รับบนพอร์ตในเลเยอร์นี้หรือไม่?


การใช้คำศัพท์ของคุณนั้นไม่เป็นระเบียบ (เช่นเลเยอร์ IP จัดการเฉพาะ IP และไม่ใช่"การประกอบใหม่ของ TCP เซ็กเมนต์" ) ให้คำอธิบายหรือตัวอย่างที่ดีกว่าเกี่ยวกับสิ่งที่คุณได้รับ
ขี้เลื่อย

Transport layer ส่งข้อมูลภาพ JPEG และรับข้อมูลภาพ JPEG เดียวกัน
sam

คำตอบ:


3

TCP เป็นโปรโตคอลสตรีมมิงและไม่ใช่โปรโตคอลข้อความ สแต็ก TCP ในระบบปฏิบัติการช่วยให้มั่นใจว่าข้อมูลได้รับการส่งต่อไปยังแอปพลิเคชันในลำดับที่ถูกต้องและไม่มีการสูญเสียข้อมูลและไม่มีการทำซ้ำข้อมูล มันไม่สนใจที่จะรักษาขอบเขตของแพ็กเก็ตใด ๆ เนื่องจากฉันบอกว่า TCP เป็นโปรโตคอลสตรีม นอกจากนี้ผู้ส่งมีอิสระในการแบ่งการเขียนหนึ่งครั้งเป็นหลาย ๆ แพ็คเก็ตหรือรวมหลายการเขียนลงในแพ็คเก็ตเดียว มันจะทำการแยกเพื่อปรับขนาดแพ็คเก็ตให้กับ MTU / PMTU เพื่อหลีกเลี่ยงการกระจายตัวของแพ็คเก็ตในระหว่างการจัดส่งและมันจะรวมกันเพื่อลดค่าใช้จ่ายในการจัดส่ง

ดังนั้นแอปพลิเคชันไม่ควรพึ่งพาขอบเขตของข้อความโดยปริยายเนื่องจากวิธีที่แอปพลิเคชันที่ส่งได้เขียนข้อมูล แต่ต้องใช้ขอบเขตข้อความที่ชัดเจน (ระดับแอปพลิเคชัน) แทน

มีวิธีกำหนดค่าระบบปฏิบัติการให้รวบรวมแพ็กเก็ตเหล่านี้อีกครั้งเมื่อได้รับบนพอร์ตในเลเยอร์นี้หรือไม่?

ไม่ได้คุณต้องจัดการกับมันอย่างถูกต้องในใบสมัครของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.