Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
詳解TCP/IP 勉強会 11章 UDP ユーザ・データグラム・プロトコル
Search
on
March 20, 2017
1
180
詳解TCP/IP 勉強会 11章 UDP ユーザ・データグラム・プロトコル
on
March 20, 2017
Tweet
Share
More Decks by on
See All by on
詳解TCP/IP 勉強会 3章 IP インターネットプロトコル
on
1
140
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.2k
Writing Fast Ruby
sferik
628
61k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
The Pragmatic Product Professional
lauravandoore
32
6.4k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.2k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Statistics for Hackers
jakevdp
797
220k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.6k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Bootstrapping a Software Product
garrettdimon
PRO
306
110k
Transcript
UDP: ユーザー・データグラム・プロトコル on 1
目次 • 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
11.1 イントロダクション • UDP • データグラム指向(↔ストリーム指向) • トランスポート層プロトコル 3
11.2 UDPヘッダ 4 • ポート番号:送り手、受け手のプロセスを示す • デマルチプレクス後参照されるため、ポート番号はTCPとUDPで独立 • UDPデータ長:UDPヘッダ+UDPデータの長さ •
最小値は8バイト(データがないこともある) • IPヘッダに全体のデータ長、IPヘッダ長が記載済み →全体のデータ長ーIPヘッダ長=UDPデータグラムのデータ長
11.3 UDPチェックサム • 対象:UDPヘッダとUDPデータ • チェックサムはUDPではオプション、TCPでは必須 • 計算:基本16ビット・ワードの1の補数計算 • 相違点
①UDPデータグラムが奇数バイトのとき最後に0をくっつける(パット・バイト) ②12バイトの擬似ヘッダを使用 5
11.3 UDPチェックサム • 擬似ヘッダ • IPヘッダを簡略化 • 正しい宛先に到着したことを再 確認 •
エラー検出 • 破棄 • エラー・メッセージなし • チェックサムをオフにもできる • 推奨されない 6
11.3 UDPチェックサム • Tcpdump出力 • UDPチェックサムを有効にしているか見たい • 受信UDPチェックサムを出力させた(0のときオフ) • Sockプログラム
7
11.3 UDPチェックサム • いくつかの統計情報 • 40日間のFNSのエラー件数を記録 8
11.4 単純な例 • TcpdumpでUDPデータグラムを見る(sockプログラム) • 宛先svr4 • TCPにかえてUDPを指定(-u) • 2つ目はデータ長0(-w0)
9
11.4 単純な例 10 • 結果
11.5 IPフラグメンテーション • MTUとデータグラムのサイズを比較→必要なら断片化 • IPヘッダ • フラグ • フラグ・フィールドの一部がオン→「自分は最後のフラグメントではない」ことを示す
• フラグメント・オフセット • 自分がオリジナルのデータグラムのどの位置にあたるか示す • 全データ長 • フラグメントされると変更される • フラグ・フィールドの1つのビットがオン • フラグメント化してはいけない→ICMPエラーを送り返す 11
11.5 IPフラグメンテーション • フラグメントが1つでも失われたら、全体を再送 • 途中のルーターでフラグメンテーションが行われたとき、発信元はどのように フラグメント化されたかを知ることができない 12
11.5 IPフラグメンテーション • Tcpdumpでフラグメント化を見てみる 13
11.5 IPフラグメンテーション • 結果 14
11.5 IPフラグメンテーション 15 • フラグメント化
11.6 ICMP到達不可エラー(フラグメンテー ション要求) • フラグメンテーション必要 しかし 「フラグメント化してはいけない (DF)」フラグがオン のときに発生 16
11.6 ICMP到達不可エラー(フラグメンテー ション要求) • 例 17
11.6 ICMP到達不可エラー(フラグメンテー ション要求) 18 • 結果
11.6 ICMP到達不可エラー(フラグメンテー ション要求) 19
11.7 tracerouteを用いてパスMTUを決定す る • DFビットをオン →送信インターフェースのMTUに合わせてパケット送信 →ICMPエラーが返ってくるとパケットサイズを縮小してパケット送信 20
11.7 tracerouteを用いてパスMTUを決定す る • BsdiのICMPコードを修正 送信インターフェースのMTUを返すようにする 21
11.8 UDPによるパスMTUディスカバリ • UDPを利用するアプリケーションとパスMTUディスカバリの関係 22
11.8 UDPによるパスMTUディスカバリ 23
11.8 UDPによるパスMTUディスカバリ • Solarisによる想定(576)は適正ではなかった 本当のMTUは296 →solarisでフラグメント化された後、bsdiでもフラグメント化される 24
11.8 UDPによるパスMTUディスカバリ • 同じ例 ただし、bsdiがICMPエラーで次のホップのMTUを返すよう修正 25
11.9 UDPとARPの間のやりとり • UDPとARP実装の話 26
11.9 UDPとARPの間のやりとり • 結果 27
11.10 UDPデータグラム・サイズの最大値 • 理論的には65535-20-8=65507バイト しかし殆どの場合これより小さい • 原因 • アプリケーション・プログラムがプログラム・インターフェースに制限される •
TCP/IPのカーネルの実装 • UDPプログラム・インターフェースは、アプリケーションが戻ってくる データグラムの最大値を毎回指定できるようにしている 28
11.11 ICMP発信元抑制エラー • 受信データグラムが処理できないほど早く流れてきたときに生成 • あくまで「できる」だけ(必須ではない) 29
11.11 ICMP発信元抑制エラー • Bsdiからsunを経由してsolarisへデータグラムを送る • SLIPリンクはEthernetより1000倍ほど遅い • 100個の1024バイトのデータグラムを送る 30
11.11 ICMP発信元抑制エラー • 結果 31
11.12 UDPサーバーの設計 • UDPを利用するサーバーの設計と実装にUDPのプロトコルとしての 機能がどのように影響するのか 32
11.12 UDPサーバーの設計 • クライアントのIPアドレスとポート番号 • UDPデータグラムには • 発信元と宛先のIPアドレス • 発信元と宛先のポート番号
• 応答は要求してきたクライアントに返すことができる • 宛先IPアドレス • いくつかのアプリケーションは宛先IPアドレスを知る必要がある • OSが受信したUDPデータグラムから宛先IPアドレスをパスすることを要求して いるが、全ての実装がこの機能を提供しているわけではない 33
11.12 UDPサーバーの設計 • UDP入力キュー • UDPポートには入力キューがある • オーバーフローするとデータグラムが破棄されることがある • Sockプログラムで実験してみる
34
11.12 UDPサーバーの設計 35
11.12 UDPサーバーの設計 36 • 結果 • Sunから送られた全部1のデータグラム • Svr4から送られた全部4のデータグラム が届いた
• 残りは破棄
11.12 UDPサーバーの設計 • ローカルIPアドレスの制御 37
まとめ • チェックサムの検証 • フラグメンテーションの観察 • ICMP到達不可エラー • TracerouteとUDPによるパスMTUディスカバリの調査 •
UDPとARPのやり取り • ICMP発信元抑制エラー 38