CCNxとの戯れ(その3)

Content Objectパケットの詳細解析

はじめに

こちらの(その3)では、Interestに対して返ってくるContent Objectを観察してみます。

Content Object packet overview

Fixed Headerの解析

Fixed headerについてはinterestと似た形なので、以下と対応を取ることで、それぞれの値の意味がわかります。

Fixed Header Format

1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +---------------+---------------+---------------+---------------+
   |    Version    |  PT_CONTENT   |         PacketLength          |
   +---------------+---------------+---------------+---------------+
   |            Reserved           |     Flags     | HeaderLength  |
   +---------------+---------------+---------------+---------------+

ヘッダ長が20バイトなので、12バイトのオプションヘッダが続いていることがわかります。

Option Headerの解析

このHop-by-Hop TLV headersについては以下のように読むことができます。

Cache Time header

Cache Time Header Format

1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +---------------+---------------+---------------+---------------+
   |         T_CACHETIME           |               8               |
   +---------------+---------------+---------------+---------------+
   /                                                               /
   /                    Recommended Cache Time                     /
   /                                                               /
   +---------------+---------------+---------------+---------------+

Message TLVの解析

Message TLV

次に来るのがContent ObjectのMessage TLVになります。

Message TLV Format

1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +---------------+---------------+---------------+---------------+
   |         MessageType           |         MessageLength         |
   +---------------+---------------+---------------+---------------+
   | Name TLV                                                      |
   +---------------+---------------+---------------+---------------+
   / Optional PayloadType TLV                                      /
   +---------------------------------------------------------------+
   / Optional ExpiryTime TLV                                       /
   +---------------------------------------------------------------+

Name TLVの解析

Name TLV

次に名前を示すName TLVが来ます。interestで要求された名前を返しているので、全く同じデータになります。

ExpiryTime TLVの解析

Expiry Time TLV

次に来るのが Optional ExpiryTime TLVで、値は以下のように解釈できます。

EndChunkNumberの解析

End Chunk Number

また続くEndChunkNumberもinternet draftに記載されているものです。下の図と照合することで、次の値であることがわかります。

これで最終チャンクが0番であり、全体のパケット数が1となり、チャンク番号が0番であるこのパケットが最終であることがわかります。

End Chunk Number Format

1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +---------------+---------------+---------------+--------------+
   |         T_ENDCHUNK            |             Length           |
   +---------------+---------------+---------------+--------------+
   |     variable length integer   /
   +---------------+---------------+

Payloadの解析

Payload

最後にペイロードとしてファイルデータが入っています。以下のように解釈できます。

Payload Format

1                  2                  3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +---------------+---------------+---------------+---------------+
   |          T_PAYLOAD          |            Length            |
   +---------------+---------------+---------------+---------------+
   /                        Payload Contents                      /
   +---------------+---------------+---------------+---------------+

まとめ

ここまででContent Objectパケットの中身をみてきました。