5

ホストとネットワークのエンディアンが異なる可能性があることは知っていますが、なぜバイトオーダーが重要なのですか?

私は2つの理由があると思います:

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
4

1 に答える 1

3

1 バイトよりも長いバイナリ データ (特に ASCII ではない) として送信/格納されるすべてのフィールドは、明確に定義されたバイト順を持つ必要があります。そうしないと、あなたが示したように、受信者は送信者が送信したものを解釈する方法を知りません。

特定の質問に対する答えは、#1、#2、および #3 がネットワーク バイト順である必要があるということです。UDP/TCP ペイロード (#4) のフィールドについては、あなた次第です。他のほぼすべてのプロトコルとの一貫性を保つために、ネットワーク バイト オーダー (ビッグ エンディアン) が推奨されますが、プロトコルを定義している場合は、必要に応じてリトル エンディアンを選択できます。持っている人もいます。

于 2013-03-22T01:42:19.920 に答える