当前位置: 技术问答>linux和unix
网络数据大小端问题
来源: 互联网 发布时间:2017-01-29
本文导语: 为什么socket编程中像端口 ip地址都需要转换为网络大端数据(hton pton),那为什么发送的数据就不需要转换呢? 譬如我发送一个int类型的数据? | 当然是需要的,只是所有的数据都被当成char[...
为什么socket编程中像端口 ip地址都需要转换为网络大端数据(hton pton),那为什么发送的数据就不需要转换呢?
譬如我发送一个int类型的数据?
譬如我发送一个int类型的数据?
|
当然是需要的,只是所有的数据都被当成char[]来处理,没有办法去判断类型啊。
如果你传了int就要自己做转换了。
如果你传了int就要自己做转换了。
|
其实这样的:
tcp/ip协议栈的实现里面把包看成是大端存储的,所以他把收到的东西按大端来解释。
但是,要注意到,协议的每一层只关注相应的报文段,比如,ip层关心ip头,tcp关注tcp头。转发你的包的路由器只关心下面三层,传输过程和你的机器协议栈解析包的过程中没人关心你的数据段(非协议头)是什么字节序。
关心数据段存储字节序的是你的应用程序,而你的应用程序对大下端的理解是由处理器决定的。所以说,只要收发两端的处理器对大小端的理解相同,就没有问题。
tcp/ip协议栈的实现里面把包看成是大端存储的,所以他把收到的东西按大端来解释。
但是,要注意到,协议的每一层只关注相应的报文段,比如,ip层关心ip头,tcp关注tcp头。转发你的包的路由器只关心下面三层,传输过程和你的机器协议栈解析包的过程中没人关心你的数据段(非协议头)是什么字节序。
关心数据段存储字节序的是你的应用程序,而你的应用程序对大下端的理解是由处理器决定的。所以说,只要收发两端的处理器对大小端的理解相同,就没有问题。