IPパケットに載せられて運ばれるもの、UDP/TCPとその上位プロトコル:はじめての車載イーサネット(4)(3/5 ページ)
今回は、このIPパケットに載せられて送られるトランスポートレイヤー(第4層)に相当するTCPセグメント/UDPデータグラムの構造や振る舞い、そして車載イーサネットで用いられる上位プロトコルを紹介していきたいと思います。
TCPの振る舞いとヘッダ構造
一方、TCPはコネクションオリエンテッドコミュニケーション、つまり電話です。従って、電話をかける(コネクションを確立する)、話をする(データ転送を行う)、電話を切る(コネクションを解消する)の3つのフェーズがあり、かつ、それぞれのやりとりにおいて常に相づち(アクノリッジ、確認応答)を返していきます。
そのため、制御情報も多くヘッダも複雑です。今回は、その3つのフェーズをシーケンス番号、確認応答(アクノリッジ)番号とACK、SYN、FINの3つのコントロールビットを使って簡単に説明していきます(図4参照)。
ここでのポイントは下記の通りです。
- コネクション確立の際にはSYNビットをON、コネクション解放の際にはFINビットをONにする
- SYNまたはFINを受け付けたことを知らせる際(アクノリッジ)には、SYNまたはFINと同時に受信したシーケンス番号に1を足した値を確認応答番号として送る
- データを受信したことを知らせる際には、データと同時に受信したシーケンス番号に受信したデータのバイト数を足した値を確認応答番号として送る(例:シーケンス番号が970で30バイトのデータを受信したら1000が確認応答番号)
- アクノリッジ受信側は上記のルールに合致しているかをチェック。合致していない、または規定の時間内にアクノリッジが返ってこない場合には、異常と見なしてリトライを行う
では、以下の例を見ていきましょう(図5参照)。
(1)コネクションの確立
コネクションは双方向に確立します。この例では、ECU A がシーケンス番号とSYNをセットした「コネクション確立要求」セグメントを送信します。図5内にもあるように、SYNとともに送るシーケンス番号は最初のシーケンス番号で、送る側が無作為に決めた数字です。これを基に以降の通信が進んでいきます。
(2)アクノリッジとコネクション確立要求
続いてECU Bでは、受け取った「コネクション確立要求」セグメントを受け入れ、それを示す「アクノリッジ(確認応答、ACK)」とそれが何に対する応答であるかを示す確認応答番号(受信シーケンス番号+1)を送るとともに、自らも「コネクション確立要求」を送るべくSYNと(最初の)シーケンス番号をセットした「アクノリッジ+コネクション確立要求」セグメントを送り出します。
(3)アクノリッジ確認とアクノリッジ送信
ECU Aは受信したセグメントの中にACKと自らが送ったシーケンス番号(1300)+1の確認応答番号を確認することで、自らのコネクション確立要求が受け入れられたことを理解します。またSYNがセットされていることから、ECU Bからも「コネクション確立要求」があり、それを受け入れたことを示すための「アクノリッジ」を、ACKと確認応答番号(受信したシーケンス番号3500+1)をセットして送信します。もちろんそれを受信したBも同様にACKと確認応答番号をチェックし、自らの「コネクション確立要求」が受け入れられたと理解します。
この3回のやりとりで双方向のコネクションを確立する方法を「スリーウェイハンドシェイク(Three way hand shaking)」とよびます。
続いて行われるのはデータ転送です(図6参照)。
Copyright © ITmedia, Inc. All Rights Reserved.