Skip to content

Packet types

Aleksi edited this page Aug 23, 2020 · 5 revisions

This is a list of the different packet types, along with their explanations. C->S: client to server, S->C: server to client, BIDI: bidirectional (i.e. both)

  • [C->S] 0x05 ID_OPEN_CONNECTION_REQUEST_1: A client wants to initiate a new connection with the server. These packets contain a long padding of zero bytes, which RakNet uses as a mechanism for path MTU (maximum transmission unit, maximum packet length) discovery. If a connection can't be established with a long padding, RakNet will try to downgrade to a smaller MTU.
  • [S->C] 0x06 ID_OPEN_CONNECTION_REPLY_1: The server responds to a client's connection attempt, indicating that the client should continue.
  • [C->S] 0x07 ID_OPEN_CONNECTION_REQUEST_2: A client responds to the server, telling what IP address it is connecting to as well as indicating version-specific "capabilities".
  • [S->C] 0x08 ID_OPEN_CONNECTION_REPLY_2: The server responds to the client, informing the client of its own capabilities.
  • [C->S] 0x09 ID_CONNECTION_REQUEST: The client transitions into "reliable" communication mode, which means that it will expect acknowledgement packets from the server (except for ID_PHYSICS packets). The packet contains a "password" which is used to identify whether the client is Roblox Player or Studio.
  • [S->C] 0x10 ID_CONNECTION_ACCEPTED: The server acknowledges the client's connection.
  • [C->S] 0x13 ID_NEW_INCOMING_CONNECTION: The last RakNet internal handshake packet. The client informs the server that it has established and confirmed a new connection, with the server.
  • [BIDI] 0x15 ID_DISCONNECTION_NOTIFICATION: Notifies the client or server of a disconnection, indicating a specific reason.
  • [BIDI] 0x00 ID_CONNECTED_PING/0x01 ID_CONNECTED_PONG: RakNet internal packets transmitted periodically after the initial handshake. They are used to detect lost connections and measure network latency.
  • [C->S] 0x90 ID_PROTOCOL_SYNC: The first Roblox-specific packet. The client sends to the server basic information about the user who is about to join, and a key which is to be used for signing LocalScripts. The client also requests the values of several FFlags. This packet is encrypted with AES using a static key.
  • [C->S] 0x8F ID_PLACEID_VERIFICATION: Exact purpose unknown. I believe this is used for checking if the user is allowed to teleport from the specified place.
  • [C->S] 0x8A ID_SUBMIT_TICKET: The client sends authentication data to the server, to tell the server which user is joining. The packet also contains several obfuscation measures to prevent bots and cheaters from spoofing it or pretending to join on a different platform. The packet is encrypted using a dynamically derived key.
  • [C->S] 0x8F ID_PREFERRED_SPAWN_NAME: Probably used by TeleportService::TeleportToSpawnByName.
  • [S->C] 0x93 ID_DICTIONARY_FORMAT: The server sends FFlag values to the client. Note that this packet is sent regardless of whether ID_PROTOCOL_SYNC is sent.
  • [S->C] 0x97 ID_NEW_SCHEMA: The server tells the client about the network schema, that is, all classes, properties and events as well an enum types. This packet is compressed using Zstd.
  • [BIDI] 0x9B ID_LUAU_CHALLENGE: The server sends Luau bytecode to the client to be executed. The client responds with an integer value returned from the bytecode. This packet is used to prevent botting.
  • [S->C] 0x81 ID_SET_GLOBALS: The server tells the client about basic policies on the game, such as whether Streaming is enabled or third party asset sales should be permitted. The server also assigns a PeerId to the client and tells it about the internal IDs of replicated services (top replication containers).
  • [BIDI] 0x85 ID_PHYSICS: This packet is sent with a timestamp header, which Sala transparently ignores. These packets replicate the CFrame, linear and angular velocities of parts and assemblies.
  • [BIDI] 0x86 ID_TOUCH: Replicates a Touched/TouchEnded event.
  • [S->C] 0x8D ID_CLUSTER: Sends a cluster of Terrain to the client.
  • [S->C] 0x87 ID_CHAT_ALL: Replicates a Chatted event.
  • [C->S] 0x96 ID_REQUEST_STATS: The client requests performance stats from the server, for the developer console.
  • [S->C] 0x98 ID_KICK_MESSAGE: The server tells the client it was kicked, specifying a kick message.
  • [BIDI] 0x83 ID_DATA: These packets are containers of smaller packets which handle the rest of replication.
    • [BIDI] 0x05 ID_REPLIC_PING: Sent by both the client and server. Used to measure the ping time that is shown in Performance stats. The client also reports FPS and other stats through these packets.
    • [BIDI] 0x06 ID_REPLIC_PONG: Response to ID_REPLIC_PING, indicating when the ping packet was received.
    • [BIDI] 0x02 ID_REPLIC_NEW_INSTANCE: Replicates a new instance that has been inserted as a descendant of one of the top replication containers. The packets contain the network ID, class, properties and parent ID of the instance.
    • [BIDI] 0x01 ID_REPLIC_DELETE_INSTANCE: Replicates an instance deletion. When sent by the client, it requests an instance to be deleted.
    • [BIDI] 0x03 ID_REPLIC_PROP: Replicates a property being changed (including Parent). May include a version to prevent race conditions (?).
    • [BIDI] 0x07 ID_REPLIC_EVENT: Replicates an event being fired.
    • [BIDI] 0x0B ID_REPLIC_JOIN_DATA: A Zstd-compressed container of new instances, similar to ID_REPLIC_NEW_INSTANCE. The difference is that ID_REPLIC_JOIN_DATA sends a snapshot of instances when the player joins, and ID_REPLIC_NEW_INSTANCE replicates changes to those instances and their children after the snapshot has been made.
    • [BIDI] 0x09 ID_REPLIC_ROCKY: Various anti-cheat measures.
    • [C->S] 0x0A ID_REPLIC_CFRAME_ACK: Indicates that a CFrame property change has been acknowledged by the client. This is to prevent race conditions (?).
    • [C->S] 0x0C ID_REPLIC_UPDATE_CLIENT_QUOTA: The client tells the server when its allocated memory quota for streaming changes.
    • [S->C] 0x0D ID_REPLIC_STREAM_DATA: The server sends the client a nearby region when streaming is enabled, similarly to ID_REPLIC_JOIN_DATA.
    • [S->C] 0x0E ID_REPLIC_REGION_REMOVAL: A region of instances is removed due to exiting the player's streaming radius.
    • [S->C] 0x0F ID_REPLIC_INSTANCE_REMOVAL: Unkown usage. Seems to be related to Streaming.
    • [S->C] 0x10 ID_REPLIC_TAG: Tag 12 indicates that ReplicatedFirst replication is finished. Tag 13 indicates that join data snapshot replication is finished
    • [S->C] 0x11 ID_REPLIC_STATS: The server sends developer console performance stats to the client when the developer console is opened.
    • [C->S] 0x12 ID_REPLIC_HASH: The client periodically sends hashes of memory regions to the server in order to prevent cheating.
    • [S->C] 0x13 ID_REPLIC_ATOMIC: Ends an atomic replication transfer, setting the the Parent property of the transferred root instance to a non-nil value.
    • [S->C] 0x14 ID_REPLIC_STREAM_DATA_INFO: Sends a value with an unknown purpose, indicating something about a streamed region.