Baud

バイトの中身を、動きで見る。

UART・SPI・I2C・TCP・DNS など、データを運ぶプロトコルを、コマ送りできるアニメーションで図解します。ビットが線を流れ、バイトに組み上がり、意味を持つまでを目で追えます。

下のカードはすべて動いています。開くと、フィールドごとにコマ送りできます。

シリアル・バス

線の上のビット。スタートビット、クロック、アドレス、応答。

TX00001001010100101101データ 'H' (0x48)データ 'i' (0x69)2 バイト目の受信70615140312010010x69105 'i'

UART

開く

線 2 本、クロックなし。スタートビットとストップビットで包んだバイト。

8N1async2 wires
CS#SCKMOSIMISO10011111111011110100000000011000コマンド 0x9F(…メーカー ID 0xE…メモリ種別 0x40…容量コード 0x18…MOSIMISOMOSI → ダミー70605040302010000x000MISO ← フラッシュの返答70605041312010000x1824

SPI

開く

線 4 本、共有クロック、両方向へ同時に流れるデータ。

4 wiresfull duplexsync
SCLSDA110100000011101010110100010011010001アドレス 0x…レジスタ 0x7…アドレス 0x…データ 0x68…4 バイト目: 読んだデータ70615140312010000x68104

I2C

開く

共有の 2 本線、7 ビットアドレス、バイトごとの応答。

2 wiresaddressedACK
CAN0001001000110000011011011110101011010001011011011101011111111識別子 0x123DLC…データ …データ …CRC-15 = 0x0B6EEOF(…データ 1 バイト目71605140312110010xAD173

CAN

開く

2 本線のバス。ID が小さい方が勝ち、すべてのフレームに CRC が付く。

differentialarbitrationCRC-15
MIDI000001001100011110010001001101ステータス 0x90ノート 0x3C(C4)ベロシティ 0x643 バイト目70615140302110000x64100

MIDI

開く

31,250 baud のシリアル線を流れる、3 バイトの音楽メッセージ。

31250 baud3 bytesUART
Modbus RTU 要求・レジスタ 2 つの読み出し0010000000103000000110000000000000000000000000000000200000010C4110001000B00001011スレーブア…ファンクシ…開始アドレス個数CRC-16

Modbus RTU

開く

工場の定番。アドレス、ファンクションコード、データ、CRC。RS-485 の上で。

RS-485master/slaveCRC-16

ネットワーク層

ヘッダの上にヘッダが重なる。Ethernet フレームから TCP まで。

Ethernet II ヘッダ・14 バイト081600000000001A000110102B001010113C001111004D010011015E010111103C001111002200100010FB11111011AA1010101001000000012000100000080000100000000000004501000101000000000000000000002C001011001C000111004601000110宛先 MAC送信元 MACEtherTypeペイロード(先頭)

Ethernet II

開く

ローカルネットワーク上のあらゆるものを運ぶフレーム。MAC、種別、ペイロード。

L2MACCRC-32
ノート PC192.168.1.20ルータ192.168.1.1ARP requestto FF:FF:FF:FF:FF:FFARP replyunicastIP packetdst MAC 00:1A:...cache: empty192.168.1.1 = 00:1A:2B:3C:4D:5E

ARP

開く

ホストが IP アドレスから、必要な MAC アドレスを知る方法。

L2.5broadcast28 bytes
IPv4 ヘッダ・20 バイト04812164501000101000000000000000000002C001011001C000111004601000110400100000000000000004001000000060000011020001000009710010111C011000000A81010100001000000011400010100CB11001011000000000071011100013200110010バージ…ヘッダ…DSCPECN全長識別子フラグフラグメントオフセットTTLプロトコルヘッダチェックサム送信元アドレス宛先アドレス

IPv4

開く

パケットをインターネット中に届ける 20 バイトのヘッダ。

L320 bytesTTL
UDP データグラム・8 バイトのヘッダ + 29 バイトのデータ08162432D411010100310011000100000000003500110101000000000025001001012C001011009C10011100AB10101011CD11001101010000000100000000000000000000010000000100000000000000000000000000000000000000000000000000000000000007000001116501100101780111100061011000016D0110110170011100006C011011006501100101030000001163011000116F011011116D0110110100000000000000000000010000000100000000000100000001送信元ポート宛先ポート長さチェックサムデータ(DNS クエリ)

UDP

開く

最小のトランスポート。ポートとチェックサムだけ。

L48 bytesconnectionless
クライアント192.168.1.20:51234サーバ203.0.113.50:80SYNseq=1000SYN, ACKseq=5000 ack=1001ACKseq=1001 ack=5001PSH, ACKseq=1001 ack=5001 len=100ACKseq=5001 ack=1101CLOSEDLISTENSYN_SENTSYN_RCVDESTABLISHEDESTABLISHED

TCP

開く

番号付きのセグメントと確認応答で作る、信頼できるバイトストリーム。

L4reliablehandshake

アプリケーション層

パケットが届いたあと、プログラム同士が交わす言葉。