MK8 Network Protocol

From MK8
Revision as of 22:52, 26 December 2014 by Leseratte (talk | contribs)
Jump to navigation Jump to search

This page describes the network protocol used by Mario Kart 8. It is very incomplete at this moment.

General description

The Mario Kart 8 traffic starts with a name resolution. The loginserver (api-eu.olv.nintendo.net) has multiple IP addresses with a TTL of 60:

  • 54.72.185.220
  • 54.229.32.160
  • 54.246.156.135
  • 176.34.135.172

and maybe some more

First the game connects the Nintendoservers, while racing, all WiiUs communicate directly to each other.

All P2P packets have a header, a payload and a checksum

The P2P header

typedef struct udp_header_t
{
  /*00*/   u32		game_magic;	// always 32ab.9864
  /*04*/   u32		unknown_04;	// 
  /*08*/   u16		unknown_08;	// sequence id?
  /*0a*/   u16		unknown_0a;	// sequence id 2 or empty
  /*0c*/   u16		client_slot; 	// client slot (0 to b)
  /*0e*/   u16		data_length; 	// little endian, data length without header and checksum
  /*10*/   u32		unknown_10; 	// ?
  /*14*/   u32		unknown_14; 	// sequence id 3?
  /*18*/   u32		unknown_18; 	// ?
  /*1c*/   u32		unknown_1c; 	// always 0x00000000
}
__attribute__ ((packed)) udp_header_t;

After the header, there is some data (sometimes empty), and after the data there is a 16-byte-checksum which looks like a MD5 hash.

Record types

mkw:MKWii Network Protocol