读取tcp包乱序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读取tcp包乱序相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

答案

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的示例。

以上是关于读取tcp包乱序的主要内容,如果未能解决你的问题,请参考以下文章

MySQL java jdbc MySQLNonTransientConnectionException:得到的数据包乱序

调用 MySQL 存储过程时出现数据包乱序错误

错误:数据包乱序。得到:1 预期:0

PDOException:数据包乱序。预期 0 收到 1. 数据包大小=23

分析RTP流丢包乱序

我在连接到数据库时遇到错误使用节点包 mysql v2.16.0 错误:数据包乱序。得到:80 预期:0