【问题标题】:what kind of fields in network packets should be converted to network byte order网络数据包中什么样的字段应该转换为网络字节序
【发布时间】:2013-03-20 14:38:12
【问题描述】:

我知道主机和网络上的字节序可能不同 但为什么字节顺序很重要?

我认为有两个原因:

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

【问题讨论】:

    标签: networking tcp network-programming


    【解决方案1】:

    每个作为二进制数据(尤其不是 ASCII)发送/存储且长度超过单个字节的字段都需要具有明确定义的字节顺序。否则,正如您所指出的,接收方不知道如何解释发送方发送的内容。

    您的具体问题的答案是 #1、#2 和 #3 需要按网络字节顺序排列。至于 UDP/TCP 有效负载 (#4) 中的字段,这取决于您。建议使用网络字节顺序(大端),以便与几乎所有其他协议保持一致,但如果您正在定义协议,那么您可以根据需要选择小端。有些有。

    【讨论】:

    • 但是我写了一个程序,其中校验和(2字节)没有转换为网络字节顺序,它们可以被正确接受.....
    • 对于数据字段,如果发送机器和接收机器的字节顺序不同,会发生什么?以及如何处理不一致的问题?
    • 如果发送和接收机器没有相同的字节顺序并且协议没有强制规范字节顺序,那么接收方会将发送方发送的内容解释为垃圾。而处理不一致的方法是在协议中选择并强制指定特定的字节顺序,或者将所有内容都作为文本数据而不是二进制数据进行传输。
    • 文本数据还是有字节序问题,不是吗?此外,如果字节顺序有问题,那么网站如何传递他们的网页?例如,如果 Web 服务器是 big-endian 而客户端是 little-endian?
    • 几乎任何编码(ASCII、UTF-8 等)的文本数据都没有字节顺序问题,因为代码单元是单个字节或者顺序是明确定义的。网站能够交付网页而不用担心字节顺序,因为整个 HTTP 协议(​​请求、响应和标头)都是基于文本的。 HTML 也是基于文本的,所以这不是问题。虽然图像是二进制的,当网站提供这些时,这可能是个问题,除了 PNG 等图像格式总是要求其多字节字段使用特定的字节顺序以避免这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多