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
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
pingコマンド無しping
Search
uyuki
August 01, 2026
Technology
180
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
360
自作OSでスライド発表する
uyuki234
2
4.6k
トラコン未経験者によるゼロからのICTSC準備ロードマップ
uyuki234
0
110
令和の時代にDE0と格闘する
uyuki234
0
120
Vibe codingでおすすめの言語と開発手法
uyuki234
0
390
Google Calendar APIでいい感じに一年を振り返りたかった
uyuki234
0
150
Other Decks in Technology
See All in Technology
Bet AI Day 2026丨バクラク Autopilot、業務システムの再設計
layerx
PRO
2
1.7k
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
2
380
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
250
Bet AI Day 2026丨AIによって本質に戻るシステムリスク管理
layerx
PRO
0
1.3k
20260903 Tokyo Jazug Night #62 | Azure エンジニアよ、 その環境は本当にセキュアか?
olivia_0707
1
640
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
240
コスト最適化の「めんどくさい」を AWS FinOps Agent でチョット楽にする
classmethod_kaz
0
280
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
0
1.1k
AI活用の現在地、 ちゃんと見えてますか?/XPfest-2026
visional_engineering_and_design
0
170
Webとヘルスデータ
yukukotani
1
200
「重なり」は迎える側がつくる ― 人もAIエージェントも歓迎するプロダクトエンジニアリング ―
go0517go
PRO
0
270
こんなアーキテクチャ図は嫌だ BEYOND THE TIME: 半年後の自分へ贈る15のメッセージ / 15 of Anti-pattern in AWS Architecture Diagrams
naospon
3
280
Featured
See All Featured
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
490
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
340
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
370
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
エンジニアに許された特別な時間の終わり
watany
108
250k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
680
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
We Are The Robots
honzajavorek
0
350
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
870
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 大阪