Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
pingコマンド無しping
Search
uyuki
August 01, 2026
Technology
200
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
pingコマンド無しping
ネットワークゆるLT大会 #2 in 大阪にて発表したLTの資料
https://ckp-students.connpass.com/event/397725/
uyuki
August 01, 2026
More Decks by uyuki
See All by uyuki
猫付きpingコマンドを自作
uyuki234
0
370
自作OSでスライド発表する
uyuki234
2
4.7k
トラコン未経験者によるゼロからのICTSC準備ロードマップ
uyuki234
0
110
令和の時代にDE0と格闘する
uyuki234
0
120
Vibe codingでおすすめの言語と開発手法
uyuki234
0
400
Google Calendar APIでいい感じに一年を振り返りたかった
uyuki234
0
150
Other Decks in Technology
See All in Technology
LLMに渡さなかった仕事
nanaism
0
170
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
120
すぐできる衛星通信対応 あとは山奥に行くだけ
tatetate55
0
130
HHKBエバンジェリストになる方法
941
0
100
越境するなら専門用語を使うな高校校歌 / If you wanna cross border, you shouldn't use jargon
vtryo
0
140
AI時代の「技術的負債」の変質ー概念の終焉と再解釈、エージェントと共に向かう先
nwiizo
0
2.6k
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
23
15k
新機種発売前に見直そう!端末移行で再ログインが要るアプリ・要らないアプリは何が違うのか 〜シームレスに再開できる設計と実装〜
zozotech
PRO
0
190
白金鉱業Meetup Vol.25 アウトカムが二値のデータに対するCausal Impact
brainpadpr
0
190
俺の仕事は AIに奪われないし、たぶんその BIも要らない
hikaruri
0
470
beyond jj: config & tools ecosystem
indirect
0
410
SREは、MCPとAutopilotをこう使え!
kazumax55
2
800
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Unsuck your backbone
ammeep
672
58k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
240
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Google's AI Overviews - The New Search
badams
0
1.6k
Designing for Performance
lara
611
70k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
460
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
Transcript
pingコマンド無し ping uyuki234 2026/08/02 ネットワークゆる LT大会 #2 in 大阪
About me • uyuki / uyuki234 • 興味: セキュリティ /
ネットワーク / 低レイヤー • https://scrapbox.io/uyuki234/ • https://x.com/uyuki234 • 作ってワクワク🤩 2
ping 3
ping とは? • 相手の機器までIP通信が届くかを確認するコマンド ◦ 疎通確認で使う 4
ping とは? • 相手の機器までIP通信が届くかを確認するコマンド ◦ • 疎通確認で使う 相手へICMP Echo Requestを送り、
返ってくるICMP Echo Replyを受信して、 応答時間(RTT)やパケット損失率を測る。 5
ping とは? • 相手の機器までIP通信が届くかを確認するコマンド ◦ • 疎通確認で使う 相手へICMP Echo Requestを送り、
返ってくるICMP Echo Replyを受信して、 応答時間(RTT)やパケット損失率を測る。 ◦ ◦ Internet Control Message Protocol:IP通信のエラーや状態を通知するためのプロトコル Round Trip Time:パケットを送ってから応答が返ってくるまでの往復時間 6
こんな感じ 7
8
コマンドを打った後、 どのような処理がされているか 知っていますか 9
10
https://commons.nicovideo.jp/works/nc222068 11
※macOSの場合 12
ping 8.8.8.8 コマンド実行の流れ ターミナル 13
ping 8.8.8.8 コマンド実行の流れ ターミナル $ ping 8.8.8.8 14
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル $ ping 8.8.8.8 15
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル $ ping 8.8.8.8 /sbin/ping
※sbin = system binaries 16
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル $ ping 8.8.8.8 ICMP
Echo Request /sbin/ping ※sbin = system binaries 17
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル $ ping 8.8.8.8 ICMP
Echo Request /sbin/ping ※sbin = system binaries macOS カーネル 18
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル $ ping 8.8.8.8 ICMP
Echo Request /sbin/ping ※sbin = system binaries macOS カーネル IPパケット 19
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル $ ping 8.8.8.8 ICMP
Echo Request /sbin/ping macOS カーネル IPパケット ルーター インターネット Request 8.8.8.8 ※sbin = system binaries 20
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル $ ping 8.8.8.8 ICMP
Echo Request /sbin/ping macOS カーネル IPパケット ルーター インターネット Request ICMP Echo Reply 8.8.8.8 ※sbin = system binaries 21
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル $ ping 8.8.8.8 ICMP
Echo Request macOS カーネル /sbin/ping Reply IPパケット ルーター インターネット Request ICMP Echo Reply 8.8.8.8 ※sbin = system binaries 22
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル (RTT計算・表示内容の整形 ) ターミナル上に表示 $
ping 8.8.8.8 ICMP Echo Request macOS カーネル /sbin/ping Reply IPパケット ルーター インターネット Request ICMP Echo Reply 8.8.8.8 ※sbin = system binaries 23
/sbin/pingと同じ役割を自作 →自作ping 24
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 オレンジだけ作ればいい ターミナル (RTT計算・表示内容の整形 ) ターミナル上に表示
$ ping 8.8.8.8 ICMP Echo Request macOS カーネル /sbin/ping Reply IPパケット ルーター インターネット Request ICMP Echo Reply 8.8.8.8 ※sbin = system binaries 25
Q:どんな機能が必要? 26
A:Apple OSS Distributionsを見ろ 27
全てはここにある https://github.com/apple-oss-distributions 28
ping.cは公開されている https://github.com/apple-oss-distributions/network_cmds/blob/main/ping.tproj/ping.c 29
ping自作 30
自作ping(makePing.c) のデモ 31
コンパイル →実演 32
自作pingで8.8.8.8に疎通! 33
ping自作成功! 34
makePing.c https://github.com/uyuki234/c-ping-lt-20260802 35
makePing.c ざっくり解説していく 36
Appleのping.c:約2100行 makePing.c:約470行 37
Appleのping.c:約2100行 makePing.c:約470行 最低限の実装でも、正しい ICMPパケットをカーネルへ渡し、 Echo Replyを受け取れば pingとして動作する 38
makePing.c に実装した主な関数 • main() ◦ • resolve_ipv4() ◦ • ICMP
Echo Requestパケットを組み立てる wait_for_reply() ◦ • IPアドレスまたはホスト名を IPv4アドレスに変換する build_echo_request() ◦ • 初期化し、Echo Requestの送信とReplyの受信を繰り返す select()とrecvfrom()でEcho Replyを最大1秒待つ parse_echo_reply() ◦ 受信パケットが目的の Echo Replyか確認する https://github.com/uyuki234/c-ping-lt-20260802 39
• Typeを8にしてEcho Requestを作り、 チェックサムを計算 40
• ICMPの入り口を作る ◦ • • • • ユーザー空間の makePingから、カーネルに ICMPの送受信を依頼するための窓口を作る処理
AF_INET:IPv4を使う SOCK_DGRAM:データグラムとして送受信する IPPROTO_ICMP:ICMPを扱う socket_fd:作成した窓口を識別する番号 41
カーネルへ渡す select()とrecvfrom()で最大1秒待つ 42
RTT = 受信時刻−送信時刻 • RTTを計算して表示する 43
ping自作を通じた学び 44
ping 自作を通じた学び • • シェルはコマンド名をPATHから検索し、対応する実行ファイルを起動する プログラムはソケットやシステムコールを通してカーネルへ処理を依頼する ◦ • • •
• これのおかげで、プログラムの記述量は想像よりも少なくなった ▪ もっと色々書かないと動かないと思ってた。 OS、カーネルという仕組みがいかに優秀かというこ とを実感。カーネルにいい感じの機能がたくさんあって最高 カーネルがIPヘッダ、ルーティング、ARP、実際の送受信を担当する OSの機能を再利用することで、プログラムはICMP処理に集中できる ICMPはType・Code・Checksumなどで構成される具体的なデータ形式である RTTやパケット損失率は、送受信結果からpingプログラム自身が計算する hoge自作をすると、上下の層に感謝の気持ちが芽生える https://github.com/uyuki234/c-ping-lt-20260802 45
まとめ 46
まとめと展望 • • • pingについておさらい ping 8.8.8.8 コマンド実行の流れを確認 ping自作した ◦
ICMPを送受信・計測するプログラムと IP通信を担うカーネルの協力で動いていた • 既存のOS機能を再利用することで、必要最低限の実装でもpingを再現できる • 展望:コンピュータシステムの理論と実装 第2版やる ◦ 論理ゲートから高級言語までの流れを押さえたい 47
pingコマンド無し ping uyuki234 2026/08/02 ネットワークゆる LT大会 #2 in 大阪