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
160
詳解TCP/IP 勉強会 11章 UDP ユーザ・データグラム・プロトコル
on
March 20, 2017
Tweet
Share
More Decks by on
See All by on
詳解TCP/IP 勉強会 3章 IP インターネットプロトコル
on
1
130
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
Six Lessons from altMBA
skipperchong
27
3.5k
Ruby is Unlike a Banana
tanoku
97
11k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.2k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Building Adaptive Systems
keathley
38
2.3k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
Speed Design
sergeychernyshev
25
620
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