0

这是我很久以前一直试图解决的一个问题。这并没有达到特定的语言,尽管它对于某些具有指定字节顺序的 VM 的人来说并不是真正有益的。我知道,就像 99.9999% 使用套接字使用 TCP/IP 发送数据的人一样,该协议为传输元素指定了字节序,例如目标地址、端口等。我不知道的是它是否要求有效负载采用特定格式以防止不兼容

例如,假设我开发了一个不是表示层的协议,并且由于现在小端设备的巨大优势,我决定使其成为小端(例如玩家的位置等被传输以小端序)。例如,用于游戏引擎的网络模块,其中延迟很重要,字节转换将花费大量时间。当然,地址、端口和所有与协议相关的数据将在大端中指定,这是强制性的,我说的是有效负载,仅此而已。

该协议是否可以在大端机器上开箱即用(根据需要翻译内容,当然,一旦接收到传输)?或者,由于数据的顺序不同,IP 协议或类似的校验和是否会计算错误,如果不使用 raw_sockets,程序员就无法控制它们?

由于整个解释可能会产生误导,请随时要求澄清。

非常感谢。

4

2 回答 2

5

我不知道的是它是否需要有效负载采用特定格式以防止不兼容。

它没有,也没有办法说出来。对于 TCP,它只是一个字节流。由应用程序协议决定字节顺序,并由每一端的实现者来正确实现它。有使用大端的约定,但没有强制要求。

于 2013-02-12T23:07:02.430 回答
1

应用层协议规定了它们自己的字节顺序。但是,按照惯例,多字节整数值应按网络字节顺序(大端)发送,以实现跨平台的一致性,例如通过使用平台提供的hton...()(主机到网络)和ntoh...()(网络到主机)函数您的代码中的实现。在 little-endian 系统上,它们会进行必要的字节交换。在大端系统上,它们是无操作的。这些函数提供了一个抽象层,因此代码不必担心这一点。

于 2013-02-12T23:13:49.897 回答