The information in this article applies to:
SUMMARYThis article covers some basic concepts and tips needed for reading SPX traces. The trace analysis is done with Network Monitor, so you may see different results with Network General Sniffer. MORE INFORMATION
SPX is connection-oriented network protocols that ride on top of IPX.
Programs that need connection oriented data connection can use this
protocol.
SPX HeaderThe SPX header is 12 bytes long. A packet type of 0x5 in the IPX packet indicates that the packet uses SPX for transport.SPX header has the following fields:
Connection ControlConnection Control is equivalent to the TCP flags in functionality. Connection control controls the bi-directional flow of data, congestion control, and so forth. The connection control field can have the following values. These values can be logical or together to set multiple flags.End-of-Message (0x10): Indicates the end of message to the transmission partner. Because SPX is a message-based transport protocol, the sending side sets this flag to indicate the message is complete. After the receiving side gets this packet, it will pass the data in the message buffer to the application above. This flag is also set during a session disconnection. Acknowledgment required (0x40): Data has been sent and acknowledgment is required. This is an indication to the transmission partner that an acknowledgment is needed for this packet before more data can be sent. System Packet (0x80): This is an acknowledgment packet. It is used internally by the SPX protocol to confirm if the session partner is up and running on an idle session. DataStream TypeThis field indicates the type of data contained within the packet. It can be set to a defined number by the application through Winsock. The main purpose of this field is to provide a mechanism for graceful session disconnection. By default, it has one of the following values:End-of-Connection (0xFE): Generated to indicate that a session partner wishes to terminate a session End-of-Connection (0xFF): Transmitted upon receipt of an End-of-Connection request. Source and Destination Connection IDThese are two bytes fields, they are used to de-multiplex SPX sessions over a single socket at the IPX level. Because the sender does not know the destination connection ID during the initial connection, the destination connection ID will be set to 0XFFFF.Sequence NumberSequence number is a 2 byte field that contains the count of data packets transmitted. This number will increase only after receiving an acknowledgment for a data packet transmitted.Acknowledge NumberThe acknowledge number field indicates the value of the sequence number expected in the next SPX packet from the SPX partner.Allocation NumberThe allocation number field indicates the number of receive buffers available at a workstation. Normally, you should see the allocation number larger then the acknowledge number. The number of free buffers available is calculated as Window size.
This field is used as a flow control mechanism. When the receiving side sends an allocation number that is lower than the acknowledgment number, the sender should not send any more data and wait until the receiving side sends a packet with an allocation number greater than the acknowledge number. Example of Establishing a ConnectionThe Network Monitor trace shown below shows the sequence for a successful session initialization. Notice that the destination connection ID is set to 0xFFFF, and the allocation number is 0xFFFF. This sequence of packets is called an SPX handshake.SPX: ConCtrl = 0xC0, DtaStrm = 0x00, 0xE8A2 -> 0xFFFF, Seq = 0, Ack = 0, Alloc = 65535 SPX: ConCtrl = 0x80, DtaStrm = 0x00, 0x9774 -> 0xE8A2, Seq = 0, Ack = 0, Alloc = 3 Example of Normal Data FlowThe Network Monitor trace shown below, shows a successful data transmission. Notice, how the Seq and ACK relate, also notice that the allocation number (Alloc) is always more than the ACK.SPX: ConCtrl = 0x80, DtaStrm = 0x00, 0xE8A2 -> 0x9774, Seq = 7, Ack = 8, Alloc = 9 SPX: ConCtrl = 0x50, DtaStrm = 0x00, 0x9774 -> 0xE8A2, Seq = 8, Ack = 7, Alloc = 10 SPX: ConCtrl = 0x80, DtaStrm = 0x00, 0xE8A2 -> 0x9774, Seq = 7, Ack = 9, Alloc = 10 SPX: ConCtrl = 0xC0, DtaStrm = 0x00, 0x9774 -> 0xE8A2, Seq = 9, Ack = 7, Alloc = 10 Example of a Graceful Session ClosedThe Network Monitor trace shown below shows a successful session termination sequence. Notice that the DtaStrm field is set to indicate the end of connection request and response.SPX: ConCtrl = 0x50, DtaStrm = End of Connection Req., 0xE8A2 -> 0x9774, Seq = 10, Ack = 10, Alloc = 12 SPX: ConCtrl = 0x00, DtaStrm = End of Connection Resp., 0x9774 -> 0xE8A2, Seq = 10, Ack = 11, Alloc = 14 General Tips for Reading SPX TracesThe tips below can be helpful to narrow down problems.
Limitations of the SPX protocolAlthough SPX provides a connection-oriented transport, SPX does have several limitations.
Additional query words: Novell NWLnkSPX SQL Exchange
Keywords : kbnetwork kbhowto ntprotocol NTSrvWkst |
Last Reviewed: January 26, 1999 © 2000 Microsoft Corporation. All rights reserved. Terms of Use. |