为什么网络字节顺序被定义为大端序?

108

如题所述,我的问题是,为什么在传输数据时TCP/IP使用大端编码而不是另一种小端方案?


57
尽管此页面已关闭,但它仍然相当有帮助。 - Goaler444
7
此产品指南大端序(Big Endian)链接下:网络通常使用大端序,因此在以共同格式发送信息时称为网络顺序。历史上和现在,电话网络使用大端序;这样做可以在组合电话号码时进行路由。 [...] 可以推测早期计算机网络依赖于当时的电话网络,剩下的就是历史了... - atravers
1
在“标准”被创建的时候,大多数服务器都是大端字节序。现在情况正好相反,但由于向后兼容性,我们无法更改TCP/IP协议。新协议可以使用小端字节序。 - Bernardo Ramos
如果你正在考虑在全新的网络协议中使用小端序,那么这篇文章可能会引起你的兴趣——人类在不同格式或系统之间切换是一项充满风险的任务。 - atravers
1个回答

91

RFC1700明确规定了网络字节顺序应该是大端序(big-endian)。在互联网协议的文档中,通常使用十进制来表示数字,并以大端序的方式呈现数据[COHEN]。也就是说,字段从左到右描述,最高有效字节在左边,最低有效字节在右边。

他们提到的参考文献为:

On Holy Wars and a Plea for Peace 
Cohen, D. 
Computer

摘要可以在 IEN-137这个 IEEE 页面找到。


概括:

选择哪种方式没有太大区别。重要的是要达成一致的顺序,而不是选择哪个顺序。

它得出结论:大端和小端方案都是可能的。没有更好/更差的方案,只要在整个系统/协议中保持一致,就可以使用任何一种方案来替代另一种方案。


1
RFC 3232似乎表明“RFC1700已过时”,但没有提供任何替代方案。 - M.M
25
@Anirudh,这个“答案”回避了问题。问题是要求说明为什么选择大端序而不是另一种方式(中间序)。关于“选择哪种方式并不会有太大的差别”,这是错误的,因为实际上它很重要,因为性能很重要(而且这样的标准已经深入到网络通信的底层)。 - Pacerier
5
在性能方面不会有任何差异,这正是链接论文详细讨论的内容。 - Anirudh Ramanathan
2
有一个显著的区别。由于许多网络协议解析器出于性能原因是使用C或其衍生物编写的,因此在Intel/AMD/little endian计算机上具有little endian编码意味着可以将“void *”简单地转换为“struct *”。如果需要进行转换,则需要对每个字段调用“htonl、htons、ntohl、ntohs”,这本质上创建了一份副本。 - Pierre-Luc Bertrand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接