为什么网络字节顺序被定义为big-endian?

Nej*_*eji 83 networking network-protocols endianness tcp-ip

正如标题中所写,我的问题是,为什么TCP/IP在传输数据时使用大端编码而不是替代的小端方案?

Ani*_*han 71

RFC1700声明必须如此.(并将网络字节顺序定义为big-endian).

互联网协议文档中的惯例是以十进制表示数字,以"big-endian"顺序[COHEN]表示数据.也就是说,字段从左到右描述,左边是最重要的八位字节,右边是最不重要的八位字节.

他们的参考是

On Holy Wars and a Plea for Peace 
Cohen, D. 
Computer
Run Code Online (Sandbox Code Playgroud)

摘要可以在IEN-137IEEE页面上找到.


摘要:

选择哪种方式并没有太大的区别.订单的商定比订立商定的订单更重要.

它的结论是,big-endian和little-endian方案都是可能的.没有更好/更差的方案,只要它在整个系统/协议中是一致的,任何一个都可以用来代替另一个.

  • @Anirudh,这个"答案"正在避免这个问题.问题是要求选择bigendian而不是替代选择的根本原因([s](https://en.wikipedia.org/wiki/Endianness#Middle-endian)).Re"*选择哪种方式并没有太大的区别*",这是错误的,因为实际上它很重要,因为性能很重要(而且这种标准在网络通信的最底层是根深蒂固的). (9认同)
  • @Pacerier在性能方面没有区别,这是链接文章详细讨论的内容. (2认同)
  • 存在显着差异。由于出于性能原因,许多网络协议解析器都是用 C 或其派生语言编写的,因此在 Intel/AMD/little endian 计算机上进行 Little Endian 编码意味着将“void *”简单地转换为“struct *”。如果需要转换,则需要在每个字段上调用“htonl、htons、ntohl、ntohs”并固有地创建一个副本。 (2认同)