网络数据包中哪些字段应该转换为网络字节序?

5
我知道主机和网络的字节序可能是不同的,但为什么字节顺序很重要呢?
我认为有两个原因:
1.对于路由器来检查IP头(例如地址),路由器只识别大端序(网络字节序)。 2.对于接收数据包的主机要识别数据包的字节序。由于接收方不知道发送方的字节顺序,如果不将字节顺序转换为网络字节序,则接收方无法知道数据包的字节顺序。
所以,对于以下字段,哪些字段应该转换为字节顺序,为什么?
1 TCP/UDP Header options, like MSS, timestamps
2 TCP/UDP header checksum
3 TCP sequence number
4 UDP/TCP data fields
1个回答

3

所有以二进制数据(不是ASCII码)形式发送/存储的字段,如果长度超过一个字节,则需要有明确定义的字节顺序。否则,就像你所说,接收方不知道如何解释发送方发送的内容。

针对你的具体问题,#1、#2和#3需要使用网络字节顺序。至于UDP/TCP有效负载中的字段(#4),那就由你决定了。建议使用网络字节顺序(大端序)以保持与几乎所有其他协议的一致性,但如果你正在定义一个协议,可以选择小端序。有些协议采用这种方式。


但我编写了一个程序,其中校验和(2个字节)未转换为网络字节顺序,它们可以被正确接受..... - user138126
对于数据字段,如果发送机器与接收机器具有不同的字节顺序,会发生什么? 如何处理不一致的问题? - user138126
如果发送和接收机器的字节顺序不同,并且协议没有规定一个规范的字节顺序,那么接收者将会把发送方发送的内容解释为垃圾数据。如何处理这种不一致性,就是在协议中选择和规定一个特定的字节顺序,否则就将所有内容都以文本数据而非二进制数据进行传输。 - Celada
文本数据仍存在字节顺序问题,不是吗?此外,如果字节顺序是一个问题,那么网站如何传递它们的网页呢?例如,如果Web服务器是大端字节序而客户端是小端字节序呢? - user138126
几乎任何编码(ASCII,UTF-8等)的文本数据都没有字节顺序问题,因为代码单元要么是单个字节,要么顺序已经定义好了。网站能够无需担心字节顺序就能提供网页,因为整个HTTP协议(请求、响应和头部)都是基于文本的。HTML也是基于文本的,所以这不是一个问题。但是图像是二进制的,当网站传递这些图像时,可能会出现问题,但是像PNG这样的图像格式总是强制规定它们的多字节字段的特定字节顺序,以避免这个问题。 - Celada

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