读取tcp包乱序

问题描述 投票:0回答:1

网页游戏被迫使用tcp。但是当你不关心旧数据包时,由于实时限制,tcp行阻塞行为是荒谬的。

虽然我知道在客户端肯定没有什么可以做的,但我想知道服务器端是否有解决方案。

实际上,在服务器上你按顺序获得数据包并且如果行为错误的数据包t + 42已经丢失,那么即使数据包t + 43,t + 44已经在你的接收缓冲区中已经很好地等待,也会等待。

由于我们讨论的是本地数据,从技术上讲应该可以检索它。

那么有没有人知道如何进行这项壮举?如何从这些讨厌的内核空间守护进程中保存这些宝贵的数据?

tcp network-programming
1个回答
0
投票

TCP guarantees that the data arrives in order and re-transmits lost packets. TCP Man Page

鉴于此,只有一种方法可以根据您所声明的约束来实现您想要的结果,那就是破解服务器端的TCP协议(假设您无法控制Client WebSocket行为)。最简单的相对术语是打开原始套接字,实现自己的简单TCP握手(客户端Syns时的Syn-Ack),然后从管理自己的TCP头的套接字读取和写入。您的自定义实现需要跟踪收到的序列号并确认您希望客户端忘记的所有序列号。

您可以通过使此程序成为原始程序的代理来减少工作量。

TCP原始套接字here的示例。

© www.soinside.com 2019 - 2024. All rights reserved.