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

use*_*126 5 networking network-programming tcp

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

我认为有两个原因:

1 路由器检查ip头(类似地址),路由器只识别big-endian order(网络字节顺序) 2 接收主机识别数据包的字节顺序。由于接收主机不知道发送主机的字节顺序,如果字节顺序不转换为网络字节顺序,它不知道数据包字节顺序。

我对吗?

那么对于以下字段,应该转换为字节顺序,为什么?

1 TCP/UDP Header options, like MSS, timestamps
2 TCP/UDP header checksum
3 TCP sequence number
4 UDP/TCP data fields
Run Code Online (Sandbox Code Playgroud)

Cel*_*ada 3

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

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