Upgrade to Pro — share decks privately, control downloads, hide ads and more …

詳解TCP/IP 勉強会 11章 UDP ユーザ・データグラム・プロトコル

on
March 20, 2017
100

詳解TCP/IP 勉強会 11章 UDP ユーザ・データグラム・プロトコル

on

March 20, 2017
Tweet

Transcript

  1. UDP:
    ユーザー・データグラム・プロトコル
    on
    1

    View Slide

  2. 目次
    • 11.1 イントロダクション
    • 11.2 UDPヘッダ
    • 11.3 UDPチェックサム
    • 11.4 単純な例
    • 11.5 IPフラグメンンテーション
    • 11.6 ICMP到達不可エラー(フラブメンテーション要求)
    • 11.7 Tracerouteを用いてパスMTUを決定する
    • 11.8 UDPによるパスMTUディスカバリ
    • 11.9 UDPとARPの間のやり取り
    • 11.10 UDPデータグラム・サイズの最大値
    • 11.11 ICMP発信元抑制エラー
    • 11.12 UDPサーバーの設計
    • 11.13 まとめ
    2

    View Slide

  3. 11.1 イントロダクション
    • UDP
    • データグラム指向(↔ストリーム指向)
    • トランスポート層プロトコル
    3

    View Slide

  4. 11.2 UDPヘッダ
    4
    • ポート番号:送り手、受け手のプロセスを示す
    • デマルチプレクス後参照されるため、ポート番号はTCPとUDPで独立
    • UDPデータ長:UDPヘッダ+UDPデータの長さ
    • 最小値は8バイト(データがないこともある)
    • IPヘッダに全体のデータ長、IPヘッダ長が記載済み
    →全体のデータ長ーIPヘッダ長=UDPデータグラムのデータ長

    View Slide

  5. 11.3 UDPチェックサム
    • 対象:UDPヘッダとUDPデータ
    • チェックサムはUDPではオプション、TCPでは必須
    • 計算:基本16ビット・ワードの1の補数計算
    • 相違点
    ①UDPデータグラムが奇数バイトのとき最後に0をくっつける(パット・バイト)
    ②12バイトの擬似ヘッダを使用
    5

    View Slide

  6. 11.3 UDPチェックサム
    • 擬似ヘッダ
    • IPヘッダを簡略化
    • 正しい宛先に到着したことを再
    確認
    • エラー検出
    • 破棄
    • エラー・メッセージなし
    • チェックサムをオフにもできる
    • 推奨されない
    6

    View Slide

  7. 11.3 UDPチェックサム
    • Tcpdump出力
    • UDPチェックサムを有効にしているか見たい
    • 受信UDPチェックサムを出力させた(0のときオフ)
    • Sockプログラム
    7

    View Slide

  8. 11.3 UDPチェックサム
    • いくつかの統計情報
    • 40日間のFNSのエラー件数を記録
    8

    View Slide

  9. 11.4 単純な例
    • TcpdumpでUDPデータグラムを見る(sockプログラム)
    • 宛先svr4
    • TCPにかえてUDPを指定(-u)
    • 2つ目はデータ長0(-w0)
    9

    View Slide

  10. 11.4 単純な例
    10
    • 結果

    View Slide

  11. 11.5 IPフラグメンテーション
    • MTUとデータグラムのサイズを比較→必要なら断片化
    • IPヘッダ
    • フラグ
    • フラグ・フィールドの一部がオン→「自分は最後のフラグメントではない」ことを示す
    • フラグメント・オフセット
    • 自分がオリジナルのデータグラムのどの位置にあたるか示す
    • 全データ長
    • フラグメントされると変更される
    • フラグ・フィールドの1つのビットがオン
    • フラグメント化してはいけない→ICMPエラーを送り返す
    11

    View Slide

  12. 11.5 IPフラグメンテーション
    • フラグメントが1つでも失われたら、全体を再送
    • 途中のルーターでフラグメンテーションが行われたとき、発信元はどのように
    フラグメント化されたかを知ることができない
    12

    View Slide

  13. 11.5 IPフラグメンテーション
    • Tcpdumpでフラグメント化を見てみる
    13

    View Slide

  14. 11.5 IPフラグメンテーション
    • 結果
    14

    View Slide

  15. 11.5 IPフラグメンテーション
    15
    • フラグメント化

    View Slide

  16. 11.6 ICMP到達不可エラー(フラグメンテー
    ション要求)
    • フラグメンテーション必要 しかし 「フラグメント化してはいけない
    (DF)」フラグがオン のときに発生
    16

    View Slide

  17. 11.6 ICMP到達不可エラー(フラグメンテー
    ション要求)
    • 例
    17

    View Slide

  18. 11.6 ICMP到達不可エラー(フラグメンテー
    ション要求)
    18
    • 結果

    View Slide

  19. 11.6 ICMP到達不可エラー(フラグメンテー
    ション要求)
    19

    View Slide

  20. 11.7 tracerouteを用いてパスMTUを決定す

    • DFビットをオン
    →送信インターフェースのMTUに合わせてパケット送信
    →ICMPエラーが返ってくるとパケットサイズを縮小してパケット送信
    20

    View Slide

  21. 11.7 tracerouteを用いてパスMTUを決定す

    • BsdiのICMPコードを修正
    送信インターフェースのMTUを返すようにする
    21

    View Slide

  22. 11.8 UDPによるパスMTUディスカバリ
    • UDPを利用するアプリケーションとパスMTUディスカバリの関係
    22

    View Slide

  23. 11.8 UDPによるパスMTUディスカバリ
    23

    View Slide

  24. 11.8 UDPによるパスMTUディスカバリ
    • Solarisによる想定(576)は適正ではなかった
    本当のMTUは296
    →solarisでフラグメント化された後、bsdiでもフラグメント化される
    24

    View Slide

  25. 11.8 UDPによるパスMTUディスカバリ
    • 同じ例
    ただし、bsdiがICMPエラーで次のホップのMTUを返すよう修正
    25

    View Slide

  26. 11.9 UDPとARPの間のやりとり
    • UDPとARP実装の話
    26

    View Slide

  27. 11.9 UDPとARPの間のやりとり
    • 結果
    27

    View Slide

  28. 11.10 UDPデータグラム・サイズの最大値
    • 理論的には65535-20-8=65507バイト
    しかし殆どの場合これより小さい
    • 原因
    • アプリケーション・プログラムがプログラム・インターフェースに制限される
    • TCP/IPのカーネルの実装
    • UDPプログラム・インターフェースは、アプリケーションが戻ってくる
    データグラムの最大値を毎回指定できるようにしている
    28

    View Slide

  29. 11.11 ICMP発信元抑制エラー
    • 受信データグラムが処理できないほど早く流れてきたときに生成
    • あくまで「できる」だけ(必須ではない)
    29

    View Slide

  30. 11.11 ICMP発信元抑制エラー
    • Bsdiからsunを経由してsolarisへデータグラムを送る
    • SLIPリンクはEthernetより1000倍ほど遅い
    • 100個の1024バイトのデータグラムを送る
    30

    View Slide

  31. 11.11 ICMP発信元抑制エラー
    • 結果
    31

    View Slide

  32. 11.12 UDPサーバーの設計
    • UDPを利用するサーバーの設計と実装にUDPのプロトコルとしての
    機能がどのように影響するのか
    32

    View Slide

  33. 11.12 UDPサーバーの設計
    • クライアントのIPアドレスとポート番号
    • UDPデータグラムには
    • 発信元と宛先のIPアドレス
    • 発信元と宛先のポート番号
    • 応答は要求してきたクライアントに返すことができる
    • 宛先IPアドレス
    • いくつかのアプリケーションは宛先IPアドレスを知る必要がある
    • OSが受信したUDPデータグラムから宛先IPアドレスをパスすることを要求して
    いるが、全ての実装がこの機能を提供しているわけではない
    33

    View Slide

  34. 11.12 UDPサーバーの設計
    • UDP入力キュー
    • UDPポートには入力キューがある
    • オーバーフローするとデータグラムが破棄されることがある
    • Sockプログラムで実験してみる
    34

    View Slide

  35. 11.12 UDPサーバーの設計
    35

    View Slide

  36. 11.12 UDPサーバーの設計
    36
    • 結果
    • Sunから送られた全部1のデータグラム
    • Svr4から送られた全部4のデータグラム が届いた
    • 残りは破棄

    View Slide

  37. 11.12 UDPサーバーの設計
    • ローカルIPアドレスの制御
    37

    View Slide

  38. まとめ
    • チェックサムの検証
    • フラグメンテーションの観察
    • ICMP到達不可エラー
    • TracerouteとUDPによるパスMTUディスカバリの調査
    • UDPとARPのやり取り
    • ICMP発信元抑制エラー
    38

    View Slide