什么是 ATP(AppleTalk 交易协议)?
ATP 代表 AppleTalk 事务协议。它是由 Apple Inc. 开发的称为“AppleTalk”的一系列网络协议的一部分。它是一种传输层协议,可让您通过网络传输少量数据。它在客户端-服务器设置中提供了一种无错误且可靠的通信方式。它执行大多数传输层功能,如分段、数据包排序等。
ATP 在类似于客户端-服务器架构的架构之上工作。有一个请求者向另一个端点发出请求,称为响应者。响应者执行必要的操作并返回响应。
ATP 中的交易:
下图描述了事务是如何发生的:
- 请求者调用 ATP 接口。然后,该接口使用 ATP 驱动程序与响应者的 ATP 驱动程序建立专用连接。
- 响应者端的驱动程序调用响应者应用程序,该应用程序处理传入的请求并返回要发送回请求者的响应。
- 为了发送响应,响应者调用其 ATP 接口,该接口使用预先建立的连接将响应发送回请求者。
如前所述,ATP 可用于发送少量数据。请求者和响应者都可以传输的数据量是有限制的。对于请求者,可以传输的数据为 578 字节,对于响应者,限制为 4624 字节。
ATP 交易的类型:
有两种类型的 ATP 交易:
- At-Least-Once Transactions :在 ALO 事务中,保证响应者将至少收到一次发送给它的所有请求。它不保证不会再次向响应者发送相同的请求。
- eXactly-Once 事务:在 XO 事务中,保证响应者将收到发送给它的所有请求恰好一次。它保证响应者已经收到一次的请求不会再次发送。
要使用的事务的性质由请求所需的处理类型决定。如果多次执行同一个请求很可能导致获得的结果出现某种不一致,那么就使用 XO 事务。如果请求的多次执行不太可能导致问题,则使用 ALO 事务。
ATP 数据包格式:
一个 ATP 数据包由一个 ATP 标头和后面的数据组成。 ATP 标头的大小为 8 个字节。整个数据包存储在 DDP(数据报传递协议)数据报内,并作为数据链路层帧传输。
以下是 ATP 数据包的结构:
数据部分跟随在 ATP 标头之后,根据数据包是由请求方还是响应方发送,该标头最多可达 578 字节或最多 4624 字节。
以下是ATP 标头字段的详细说明:
控制信息字节:
它用于存储有关请求/响应的控制相关信息,例如事务类型、此数据包是否是最后一个接收的数据包等。控制信息字节存储以下信息 -Bit No. Description 0 Specifies whether to use the DDP checksum or not. 1 Specifies whether the transaction ID has been assigned for this request or not 2 Specifies whether this request uses an extended parameter block or not 3 Specifies whether the current packet is to be retransmitted immediately or not. 4 Specifies whether this is the last packet of the response (end-of-message) or not. 5 Specifies whether the current request is an exactly-once transaction or an at-least-once (AO) transaction.
位图/序列号:
位图/序列号大小为 8 位。 ATP 以其在数据传输过程中提供的可靠性而闻名。它保证请求者将收到响应其请求而发送给它的所有数据包。为此,它需要跟踪请求者已收到哪些数据包以及尚未收到哪些数据包。 ATP 使用的方法是为响应发送的所有数据包分配序列号,并将响应的最后一个数据包标记为“消息结束”(由 ATP 中控制信息字节的第 4 位表示标题)。请求者在收到所有数据包后组装,检查ATP头的序列号和控制信息字节,判断是否收到所有数据包。如果不是,则接收端的 ATP 驱动程序启动丢失数据包的重传。
交易编号:
事务 ID 用于将每个请求与其对应的响应相关联。它的大小为 16 位。请求者可以在任何给定时间发出多个请求。事务 ID 帮助 ATP 跟踪所有发出的请求,并确保为每个请求传递的响应是正确的。它由 ATP 标头的第 3 和第 4 个字节携带。
用户数据:
ATP 标头的最后 4 个字节不被 ATP 使用。它们保留供请求者和响应者应用程序使用。 ATP 驱动程序支持预定义函数,可让您将这些标头的值设置为您想要的值。
下表总结了作为 ATP 标头一部分的字段: Byte No. Field Stored Size (Bits) Description 1 Control Information 8 Is used to store control-related information about a request/response like the type of transaction, whether this packet is the last packet to be received or not etc. 2 Transaction Bitmap/ ATP Sequence Number 8 It is used to find the sequence number of the current packet if the packet was sent in response to a request(called ATP sequence number). In case the current packet is a request, it represents the number of buffers supported by the application (called Transaction Bitmap). 3-4 Transaction ID 16 It stores the transaction ID of every request. It is used by the responder to keep track of all the requests. 5-8 User Data 32 Carries application-specific information like checksum etc.