まず問題。TCPコネクション確立方式である3ウェイハンドシェイクを表す図はどれか。(H22NW午前玉14)

sway
正解はそれほど難しくないでしょう。
参考までに、実際のパケットを見てみましょう。
3wayハンドシェーク
これは、192.168.1.1のPCからWebサーバ(203.0.113.1)にgazou.pngファイルを取得したHTTP通信です。
4行目のHTTP通信の前に、3wayハンドシェークが行われていることが分かります。
前置きが長くなりましたが、さきほどの答えはアです。
女性ハテナ

さて、なぜこんな面倒なことをするの?
3ウェイハンドシェイクをしなくても、通信はできますよね。
現にUDPはこれがありません。

かなりざっくりいうと、信頼性を向上させるためである。
TCPはUDPと違ってコネクション型なので、通信の前にコネクションを確立する。これが3ウェイハンドシェイクのフェーズである。セキュリティを高めるためにやっているわけではない。パケットをキャプチャすればこれらの情報を簡単に入手できるからだ(セキュリティの意味がないわけではない)。
一方的な通信を受け入れるのではなく、両者で確認メッセージを送り、しかも番号の整合性もチェックすることで、不正な通信を排除し、整合性の高い通信を可能にする。

◆シーケンス番号と確認応答番号
試験にあまり細かいのは出ませんが、両者の例は以下です。
、 SYN
 シーケンス番号 1000 確認応答番号 0 (Length 0)
※確認応答番号は存在しないと考えた方がいい。ただ、値としては0が入る。
□ SYN+ACK
 シーケンス番号 2000 確認応答番号 1001 (Length 0)
→ ACK
 シーケンス番号 1001 確認応答番号 2001 (Length 0)

(1)シーケンス番号
各端末(PCやサーバ)が、自分で管理しているパケットの通番です。送信側と受信側で異なる番号を使います。ただ、基本的には受け取ったパケットの確認応答番号がそのままシーケンス番号になります。
※なお,シーケンス番号は0からではなく、ランダムな値から開始されることがあります。
(2)確認応答番号
は、受け取ったシーケンス番号にLengthを加えたものになる。意味は、「次に送信するシーケンス番号を伝える」ことである。
・3ウェイハンドシェイクが終わった後の実際の通信では、以下のようにLengthの値が各番号に付加される。
、 ACK 
 シーケンス番号 1100 確認応答番号 2100 (Length 5)
□ ACK 
 シーケンス番号 2100 確認応答番号 1105 (Length 4)
→ ACK
 シーケンス番号 1105 確認応答番号 2104 (Length 6)

ただ、3ウェイハンドシェイクのLengthは0であるが、1を加える。なので、「受信したシーケンス番号+1」が確認応答番号です。
では問題。以下のa、b cに当てはまる数字を答えよ。
キャプチャ
※確認応答番号は存在しないと考えた方がいい。ただ、何かを入れないとデータにならないので、値としては0が入る。
さて、正解は以下である。
a:1001、b:1001、c:20013way
偽装したパケットであれば、シーケンス番号を知らないから、正しいのACKを返せない。

過去問(R1NW午後玉2)をみてみましょう。
DoS攻撃の内容になっているので、若干仕組みは異なりますが、キーワードは同じです。
SYNパケットの情報などを基に計算した値を、TCPヘッダ中の【 イ 】番号にセットして、SYN/ACKパケットを返送する。
受信したACKパケットの情報などを基に計算し、TCPヘッダ中の【 ウ 】番号の値が計算値に【 エ 】を加えた値と一致するかどうかをチェックする。
▼解答例 
イですが、確認応答番号は、受信したシーケンス番号+1と決められています。自ら決めることはできません。今回は、自分で計算した値を入れているので、シーケンス番号です。

イ:シーケンス  ウ:確認応答  エ:1

◆セッションの終了
女性腕組み

たしかTCPの場合、接続の開始だけでなく、接続を終了するときも同じような処理をするんですよね?
そうですね。
過去問(H19秋SW午後1問1)を見てみましょう。このように、FIN、ACK、FIN、ACKの流れでコネクションを終了します。
ネットワークスペシャリスト_3ウエイハンドシェーク

実際には、FIN+ACK、ACK、FIN+ACK、ACKの4段階で送られます。
具体的にみていきましょう。サーバでは、通信が完了すると、PCに対してセッションを終了していいかというパケット(FIN+ACK)を送ります( 法PCでは、通信を受け取ったことを了承するACKを送ります(◆法次に、PCからもサーバに対してセッションを終了するパケット(FIN+ACK)を送ります()。サーバからの応答(ACK)が届き(ぁ法▲札奪轡腑鵑終了します。

以下は、Wiresharkのパケットです。サーバからのデータ通信が終わった後、サーバからFIN、ACKパケットが送られ、終了処理が始まります。
aaa

補足ですが、終了処理にはFINとRST(RESETの意味)の2つがあります。
FIN
 正常に終了する。3ウェイハンドシェイクの手順を踏んで確認応答も行う。
RST
 強制終了。確認応答を行わない。RSTを受信したホストは、その段階でコネクション情報を破棄する。たとえば、ブラウザを「X」で閉じてもRSTを送る。

スポンサードリンク