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
320
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
パスワード再設定メールのURLについて知っておこう
uyuki234
0
200
Verilogで学ぶCPU自作入門
uyuki234
8
4.3k
猫付きpingコマンドを自作
uyuki234
0
500
自作OSでスライド発表する
uyuki234
2
4.9k
トラコン未経験者によるゼロからのICTSC準備ロードマップ
uyuki234
0
130
令和の時代にDE0と格闘する
uyuki234
0
150
Vibe codingでおすすめの言語と開発手法
uyuki234
0
440
Google Calendar APIでいい感じに一年を振り返りたかった
uyuki234
0
160
Other Decks in Technology
See All in Technology
Technical Project Manager の役割とやりがい、少しだけ AI
yoshiiryo1
0
530
"計画的無茶振り"を通してAIネイティブ世代の新人を育てる
subroh0508
1
140
Draft AIエージェントの トークン消費を最小化する 8つの原則
kinopeee
6
1.9k
LLMの知識とAIエージェント
happysamurai294
0
150
Vibe-to-Spec開発_実践ガイド
happysamurai294
0
140
推論基盤と Scale-Up Interconnect の現状と制約から俯瞰する技術動向
markunet
2
710
"AWSはちょっと苦手"でも大丈夫。AWS Blocks で手軽に作る Flutter のバックエンド #FlutterKaigi
tacck
PRO
0
120
これだけは抑えておきたい!後悔しない re:Invent の過ごし方 / AWS re:Invent 2026 prestudy
kinunori
2
630
AI時代、つくる力を自分たちの手に。 ──電通×KAG、アジャイルとAI駆動開発で挑む開発の変革
yuukiyo
3
450
Content Mapper APIの応用例~CSS Modules、言語ファイル~
uhyo
2
470
キヨさん67歳 AIコーディングエージェント物語
happysamurai294
0
140
1週間、Opus封印でお願いします
kintotechdev
1
420
Featured
See All Featured
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
320
KATA
mclloyd
PRO
35
16k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
1k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
340
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
960
Documentation Writing (for coders)
carmenintech
77
5.6k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
390
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
310
Accessibility Awareness
sabderemane
1
280
Reality Check: Gamification 10 Years Later
codingconduct
0
2.4k
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 大阪