读取tcp包乱序

时间:2018-03-02 13:44:15

标签: tcp network-programming

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

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

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

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

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

1 个答案:

答案 0 :(得分: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的示例。