Skip to content

Transaction Pairing #5

@SkyLake-git

Description

@SkyLake-git

java editionで開発されたラグ補償の必要がなくなる新しいアンチチートシステムらしいので、
導入してみようと思ったのですがTCPでパケットの順序が保証されることを利用したものらしく
UDPのmcbeで使用できるかわからないです(UDPはパケットの順序が保証されない)

詳細(hypixel):
https://hypixel.net/threads/tldr-why-reach-is-harder-to-detect-than-you-think-how-to-detect-it.4878543/

さて、サーバーがクライアントにパケットを送信してから、クライアントが実際にそれを受信するまでに遅延があることは分かっています。この遅延は大規模な非同期を引き起こし、偽旗を立てずに生の距離を取得することが不可能になります。

これを解決するために、賢いアンチチートの開発者は「トランザクションペアリング」または「トランザクションサンドウィッチング」と呼ばれるシステムを使うことにしました。「トランザクション」とは、単に同期確認パケットで、メインスレッドで送られ、クライアントに何か(テレポート先、速度測定、レンダーエンティティなど)するように伝えるのではなく、単に同様の情報をパケットで返信するように伝えることを意味します。

トランザクションのペアリングが機能する方法は、各ティック開始時と終了時にトランザクションパケットを送信することです。サーバーが両方のトランザクションを受信すると、素晴らしい! これがペアリングです。トランザクションは同期で、Minecraft は TCP プロトコルを使用しているので、パケットの順番が保証されています。つまり、2つのトランザクションの間に送信されたすべてのパケットが受信されたと論理的に仮定することができるのです。つまり、クライアントバインドのパケットがいつクライアントに到着したかを正確に知ることができるのです。クライアントからサーバーへの遅延は、何も混乱しないし、プレイヤーの行動を変更するような他のパケットを持っていないため、関係ありません。

トランザクションが分割された場合はどうなりますか?これは少し複雑ですが、通常、前トランザクションだけを受け取り、後トランザクションを受け取らない場合、免除したり、2つの可能な場所からレイトレースしたり、その他の寛容さを追加することができます。また、いくつかの分割されたトランザクションが近くにある場合、そして確かに順序を無視して送信されたトランザクションをキックするかもしれない(これは高いパケットロスでのみ発生し、他のチェックで偽陽性を引き起こす可能性がある。ほとんどのbadpacketsチェックは、パケット順序が知られていて強制されているという仮定で作られている。)。

より正確なリーチチェックは、攻撃クライアントがターゲットエンティティを見た場所を正確に特定するために、補間と呼ばれるプロセスに加えてトランザクションペアリングを使用します。

(deeplで翻訳しました)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions