具有网络字节顺序的大小端系统

时间:2016-01-27 05:28:43

标签: networking tcp

最近,我正在研究TCP / IP,并尝试了解Big,Little Endian和Network Byte Order之间的关系。我希望有人指出我的理解是否存在问题。

前提:

  1. 假设存储地址依次从左向右增加。

  2. 为简单起见,使用十进制不二进制,例如,12表示十二,它需要两个字节:1取一个字节,2取一个字节。

  3. 假设A是Big endian机器而B是Little endian机器。

  4. TCP提供的网络字节顺序为Big Endian。

  5. 全部按系统默认设置,无需转换其他操作。

  6. 以下是我的理解(我会给出序列号,如果有问题可以指出号码):

    1. 在A中,数字12(如前面2中所述)存储形式是12(较低地址是1,较高地址是2)。在B中,存储形式为21(较低地址为2,较高地址为1)

    2. 网络字节顺序是Big endian,因此当机器向网络发送数据时,它将首先发送较低地址的数据,然后发送较高地址的数据。类似地,从网络接收数据的机器将认为首先接收的数据是高位数据(默认情况下)。是吗?

    3. A发送数据12到B. A首先发送低位地址数据1,然后发送2. B接收1,B认为1是高位数据,所以它将1存储在更高的地址并存储低位地址为2,即21.当B从存储器读取接收到的数据时,它是12.没有问题。

    4. B将数据12发送到A.类似地,B将首先发送低位地址数据为2,然后发送1. A接收2并认为2是高位数据,所以A存储2位于较低地址并存储高位地址为1,即21.当A从存储器读取接收到的数据时为21.有问题原因12是正确的数字而不是21。

    5. 通过以上讨论,Big Endian将数据发送到Little Endian就可以了,但Little Endian将数据发送到Big Endian会导致问题。是吗?

0 个答案:

没有答案