关于网络字节流与网络字节序的关系的理解

网络字节流:

网络中的数据是按照字节,一个一个传输过来的,这就是网络字节流。先传输到达的字节会写入到内存低地址,之后的字节依次到达,写入的内存地址也依次递增。这就网络字节到达以后写入的规则。

大端(高位在低地址)机器与小端(低位在低地址)机器:

这两个概念说的是机器如果理解内存中的数据,比如一个4字节的整型数值0x01020304,在机器内存中地址从低到高有4个字节数据排列如下:

大端机器 : [0x01,0x02,0x03,0x04]

小端机器:[0x04,0x03,0x02,0x01]

换个角度思考:如果机器内存中地址从低到高有4个字节数据 [0x01,0x02,0x03,0x04],若是在大端机器中,这四个字节表示0x01020304。若是在小端机器中,这四个字节表示0x04030201。这是完全两个不同的数值。

网络字节序(大端,高位在低地址):

字节序其实说的意思是如何理解写在内存的数据。比如要从内存中读取4个字节,这4个字节在内存中地址从低到高依次为[0x01,0x02,0x03,0x04]。当要把它理解成一个整型数值,这就要考虑字节序的问题了。因为网络字节流传输过来是按大端传输的,所以这4个字节中最先传输过来的要理解成数值的最高位的那个字节。也就是网络本身想传输的那个数是0x01020304,而且在内存中地址从低到高的排列是[0x01,0x02,0x03,0x04]。那么对于不同的机器,要想正确理解成0x01020304,就需要根据自己的主机序进行转换了。因为在不同的字节序的主机,0x01020304的表示是不同的,在大端机器中内存地址从低到高依次存放[0x01,0x02,0x03,0x04],而在小端机器中内存地址从低到高依次存放[0x04,0x03,0x02,0x01],所以对于小端机器来说,必须要把从网络中传输过来的数据颠倒一下,才能正确理解网络本身要传输的数值。

你可能感兴趣的:(网络编程,wireshark)