Now that we have seen how Verse commands are formed, it is time to describe the particulars of how they are actually transmitted over a network between machines. This involves the creation of packets which are sent and received using UDP/IP.
Verse always uses custom datagrams sent using UDP/IP as its transport mechanism. This is a core part of this specification; you cannot just re-implement Verse to use e.g. TCP/IP and expect things to work; there is a tight coupling between the transport mechanism and the command format (see Section 3.6). Also, because Verse is designed and optimized for real-time performance, an area where TCP/IP has inherent problems, such a re-implementation is not recommended.
The default port used by Verse is 4950. This is the port a host will listen to, and also the port a client will try to connect to if the supplied host address does not include an alternative number.
Once a client has connected to a host, it will be assigned a new port to use for further communication by the host; in practice the default port is only used for the initial connection-establishment traffic.
Packets are built by simply encoding commands, end-to-end, and pre-pending a 32-bit header. There is no padding between commands, and also no information in the header about which commands are contained in the packet. Since commands do not have much of a header either, specifically they do not have a length indicator, to decode a packet it is necessary to decode and interpret each command sequentially until the end of the packet is reached.
In order to reduce the overhead caused by the Internet Protocol's fragmentation handling, the reference implementation of the Verse protocol will not emit packets larger than ~1,500 bytes. This limit has been chosen because it is the maximum transferable unit (MTU) size of Ethernet, and the code simply assumes that the world is an Ethernet.