ネットワークスペシャリスト - SE娘の剣 -

ネットワークスペシャリストの試験対策サイトです。
ネスペ試験の合格体験談、合格のコツ、過去問解説、基礎知識などの情報を掲載します。

カテゴリ: 9.トランスポート層(L4)

レイヤのプロトコルには2種類があります
TCPの通信:HTTP、DNS、FTPなど
UDPの通信:SMTP、DHCPなど
)TCP/UDPを使わない通信:ICMP、GRE、ESPなど。ポート番号の概念はありません。

女性直立

TCPはTransmission Control Protocolとう名前のとおり、伝送(Transmission)を”制御(Control)”するプロトコルである。
TCPの特徴
・コネクション型通信。
・再送制御、順序制御などの機能を持つ。
(順序制御はTCPヘッダの中のSequence numberで管理しているので確認してほしい)
・過去問では、TCPのフロー制御に関して、「確認応答がない場合は再送処理によって
データ回復を行う(H18NW午前 問21)」と述べている。
・その分、UDPに比べて速度が遅い。ストリーミングなどの高速な通信にはUDPが向く。

具体的なアプリケーション
・UDPの例
 DNS(問合せ)、SNMP、DHCP、TFTP、NTPなど
※ストリーム配信でもUDPを使うが、使用するプロトコルは様々である

・TCPの例
HTTP、SMTP、POP3、SSH、FTP、Telnet、DNS(ゾーン転送)など

フレームを見てみよう
tcp
UDPと比べると、その違いは一目瞭然である。
http://nw.seeeko.com/archives/50284111.html

その他
TCPの通信では、ひっきりなしにACKを返している。1パケット(1500バイト)に対し、1ACKを返すようなイメージである。ただ実際にはスライディングウィンドウの機能により、ウィンドウサイズ分をまとめてACKを返すので、4〜5パケットで1つのACKを返しているのが実際であろう。
これに対し、UDPではACKをまったく返さない。だからTCP/IPのオーバヘッドが少ない。

◆ポイント
・TCPとUDPの違いを意識してTCPを理解する。
・再送制御、順序制御を行っている。(どうやって実現しているかを確認しよう)

フレームフォーマットを確認しましょう。
その前に、今はどの部分を見ているのか、L2のイーサネットフレームから順に理解しておきましょう。
frame
 項目長さ(bit)説明
1送信元ポート番号16 
2宛先ポート番号16  
3シーケンス番号 32 ・0から始まるわけではなく、コネク
ション確立時に乱数を用いて決定
される。
・取りうる値は、32ビットなので、
0〜2の32乗-1。これにより、パケ
ットの順番を制御する。
4確認応答番号 32 
5データオフセット TCPヘッダの長さを示す
6予約  
7フラグ 6・順にURG,ACK,PSH,RST,SYN,
FINフラグがある。
・URG(Urgent)は緊急を示す。緊急
で処理すべきパケットの場合は、
URGフラグを1にする。
・ACKとSYNは3ウェイハンドシェイク
で利用するから有名ですよね。
・RESETは強制終了で、IDSなどで
TCP通信を強制切断する際に利用
するフラグ。
・FINは3ウェイハンドシェイクを終了
させるときに利用する。
8ウィンドウサイズ16 ウィンドウサイズを指定
9チェックサム 16 
10緊急(Urgent)ポインタ16URGフラグがONの場合、ここに緊急
データのサイズを指定できる。
11オプション可変 省略可
12Padding 可変 詰め物。省略可 
毎度のことですが、Wiresharkでキャプチャして確認しましょう。以下は、ブラウザからyahoo!のサイトを見た場合のキャプチャです。実際のデータを見ると、より理解が深まることでしょう。
tcp

TCPのヘッダに関して、過去問があるのでチャレンジしていただきたい。はっきり言って難しい。とても午前問題とは思えない。
【H19NW午前 問30】
TCPのデータ転送に関する記述のうち、適切なものはどれか。

ア ウィンドウサイズはACKを待たずに送信できるデータ量で、ネットワークごとに一定の値が決められている。
イ 順序番号は送信データストリーム中のセグメントのオクテット位置を示し、0〜2の32乗-1の値をとる。
ウ 制御ビットフィールドの緊急フラグが有意のセグメントは、そのセグメントを緊急に送るべきであることを表すが、緊急データの長さを指定することはできない。
エ パケットの重複や順序誤りなどのエラーを検出するためにチェックサムの計算を行う。

 正解:イ

TCPやUDPの通信を行うには、ポート番号が必要です。
女性直立 

インターネットを見るHTTPは80番で、
メールを送るSMTPは25番として決まっていますよね。
そう。ただ、厳密に言うと、違うポート番号でHTTP通信をしたり、SMTPにてメールを送ることもできる。
でも、決まっていた方が分かりやすい。
クライアントは、そのポートめがけて通信をすればいいので。
インターネットを見たいときは、80番でアクセスする。サーバは80番で待ち受けている。
サーバ側でnetstatコマンドで確認すれば、その様子が分かるだろう。
(後日その画面を貼り付けます)

補足解説
・ポート番号は2バイト(16ビット)で表現されるので0〜2の16乗(=65535)の値を持つ。
・利用範囲が決められている。
範囲解説
01023Well-Knownポート。telnet 23,smtp 25など
102449151登録されたポート。IPアドレスを管理しているIANA(Internet Assigned Number Authority)が管理し、許可をもらって利用する。たとえばMicrosoft社は3389をターミナルサービスとして登録している。メジャーな会社は申請することが多いだろう。
4915265535アプリケーションが動的に割り当てたり、Privateポート番号として自由に使える。

また、ポート番号はクライアント側でも特定のものが割り当てられている。
サーバは、クライアントのポート番号に向けて、応答パケットを返します。

まず問題。TCPコネクション確立方式である3ウェイハンドシェイクを表す図はどれか。(H22NW午前玉14)
sway
正解はそれほど難しくないでしょう。
女性ハテナ
さて、なぜこんな面倒なことをするの?
3ウェイハンドシェイクをしなくても、通信はできますよね。
現にUDPはこれがありません。
(さきほどの答えはアです。)
かなりざっくりいうと、信頼性を向上させるためである。
TCPはUDPと違ってコネクション型なので、通信の前にコネクションを確立する。これが3ウェイハンドシェイクのフェーズである。セキュリティを高めるためにやっているわけではない。パケットをキャプチャすればこれらの情報を簡単に入手できるからだ(セキュリティの意味がないわけではない)。
一方的な通信を受け入れるのではなく、両者で確認メッセージを送り、しかも番号の整合性もチェックすることで、不正な通信を排除し、整合性の高い通信を可能にする。

◆シーケンス番号と確認応答番号
試験にあまり細かいのは出ませんが、両者の例は以下です。
、 SYN
 シーケンス番号 1000 確認応答番号 0 (Length 0)
□ SYN+ACK
 シーケンス番号 2000 確認応答番号 1001 (Length 0)
→ ACK
 シーケンス番号 1001 確認応答番号 2001 (Length 0)

・シーケンス番号は、各ホストが自分で管理している通番である。よって、コネクション要求元と要求先では番号がまったく異なる。
・確認応答番号は、受け取ったシーケンス番号にLengthを加えたものになる。意味は、「次に送信するシーケンス番号を伝える」ことである。ただ、3ウェイハンドシェイクのLengthは0であるが、1を加える。
・3ウェイハンドシェイクが終わった後の実際の通信では、以下のようにLengthの値が各番号に付加される。
、 ACK 
 シーケンス番号 1100 確認応答番号 2100 (Length 5)
□ ACK 
 シーケンス番号 2100 確認応答番号 1105 (Length 4)
→ ACK
 シーケンス番号 1105 確認応答番号 2104 (Length 6)

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

たしかTCPの場合、接続の開始だけでなく、接続を終了するときも同じような処理をするんですよね?
そうですね。
過去問(H19秋SW午後1問1)を見てみましょう。このように、FIN、ACK、FIN、ACKの流れでコネクションを終了します。
ネットワークスペシャリスト_3ウエイハンドシェーク
補足ですが、終了処理にはFINとRST(RESETの意味)の2つがあります。
FIN
 正常に終了する。3ウェイハンドシェイクの手順を踏んで確認応答も行う。
RST
 強制終了。確認応答を行わない。RSTを受信したホストは、その段階でコネクション情報を破棄する。たとえば、ブラウザを「X」で閉じてもRSTを送る。

女性指差し
・TCPの通信高速化を実現する技術
・まず、TCPの通信ではバッファをする必要がある。
相手に送信きちんとできない(確認応答が無い)場合には再送する必要があり、送信データはバッファに保存しておく。また受信データもアプリケーションに渡し終わるまではバッファをする。
・確認応答を都度実施していると遅くなるので、ウィンドウサイズ分だけまとめて確認応答をする。それまでは連続して送信する。これにより、TCP/IPのオーバーヘッドを少なくして高速化することができる。
・過去問ではTCPヘッダ中のウィンドウサイズの説明として「受信側からの確認応答を待たずに、データを続けて送信できるかどうかの判断に使用される(H21春SC午前2問15)」と述べられている。
・スライディングウィンドウの言葉は、バッファは一つ確認応答が来たら削除し、次の新しいバッファを利用できる。????。こんなイメージ。
・ただ実際には、これが今の高速化技術としていえるかというと疑問である。WAN最適化装置ではもっと画期的な方法で高速化している。

・コネクションレス型のプロトコル
・TCPと比べて、1パケット毎に確認応答を行うことが無い、コネクションを確立するためのオーバヘッドが無い、再送制御をしない、順序の制御をしない、ヘッダがTCPに比べてシンプル、などの理由によって高速な通信を可能にしている。
・上記のことにより電話などのリアルタイム通信や動画、音声のストリーミングなどに適している。UDPはTCPと比べて信頼性が薄いが、ストリーミングにおいて、画面の一部が一瞬欠落してもそれほど問題にはならない。それよりも高速性が求められている。
・過去問(H26年秋高度午前1問10)では、UDPに関して、「IPの上位階層のプロトコルとして,コネクションレスのデータグラム通信を実現し,信頼性のための確認応答や順序制御などの機能をもたないプロトコル」と述べられています。

◆UDPのヘッダ情報
※テキスト類では32ビットで区切られた表になっている場合が多い。私はこの表の意味が理解できなかった。実データは01データなので横並びであるが、ページの関係や分かりやすさの面で、表にしているだけである。

1)送信元ポート番号(16ビット)
2)宛先ポート番号(16ビット)
3)セグメント長(16ビット)
4)チェックサム(16ビット)

たったこれだけで、合計8バイト。TCP(基本は20バイト)に比べてシンプルですよね。
ポイントの一つとして、TCPに存在したシーケンス番号が存在しない。よって、相手に届くパケットの順序制御ができない。

◆過去問にて
過去問では、TCPとUDPのヘッダの違いが問われている。単なる暗記問題と考えるのでははなく、なぜこのフィールドが無いかを理解するべきである。
【H19NW午前 問31】
UDPのヘッダフィールドにはないが、TCPのヘッダフィールドには
含まれる情報はどれか

ア あて先ポート番号
イ シーケンス番号
ウ 送信元ポート番号
エ チェックサム

正解:イ

HTTP(TCP)のフレームを示す。
今回はGoogleにアクセスした。

以下の赤線部分のみ見てもらえばいい。
1.Ethernet ・・・ イーサネットヘッダ
(1)宛先MACアドレス ・・・ 00:0d:02:xx:xx:xx
(2)送信元MACアドレス ・・・ 00:19:d2:xx:xx:xx
(3)タイプ ・・・ IP (ここから次はIPフレームであることを示している)
2.Internet Protocol ・・・ IPヘッダ
(1)プロトコル ・・・ TCP
(2)送信元IPアドレス ・・・ 192.168.1.111
(3)宛先IPアドレス ・・・ 66.249.89.99
3.Transmisson Control Protocol ・・・ TCPヘッダ
(1)送信元ポート番号 ・・・ 3192 (1024番以上)
(2)あて先ポート番号 ・・・ 80
(3)シーケンス番号 ・・・ TCP固有
HTTPのパケット

UDPのフレーム構造を以下に示す。
www.ipa.co.jpにアクセスした際に、DNSサーバにDNS問い合わせが行われたフレームである。

TCPとの違いを中心に見てほしい。
UDP
ネットワークスペシャリストを目指す女性SEなやなや 

DNSってUDPなんですね。
名前解決って信頼性が大事だと思うんですが
確かにそうだね。DNSキャッシュポイズニングなどDNSを詐称する攻撃もあるから。
でも、名前解決はスピードも必要なんだ。
たとえば、www.yahoo.co.jpのサイトを見ようと思うと、まずはDNSで名前解決をする。それから接続に行く。このとき、3wayハンドシェークなどをするTCPは、名前解決までに、コンマ何秒というレベルではあるが、時間がかかってしまう。利用者にとってはネットは早い方がいいよね

このページのトップヘ