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
290
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
86
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
猫付きpingコマンドを自作
uyuki234
0
460
自作OSでスライド発表する
uyuki234
2
4.9k
トラコン未経験者によるゼロからのICTSC準備ロードマップ
uyuki234
0
130
令和の時代にDE0と格闘する
uyuki234
0
140
Vibe codingでおすすめの言語と開発手法
uyuki234
0
430
Google Calendar APIでいい感じに一年を振り返りたかった
uyuki234
0
160
Other Decks in Technology
See All in Technology
契約書画像からの情報抽出に特化した視覚接地モデルを育てる話
sansantech
PRO
1
160
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
8
1.9k
FactoryBotアンチパターン / factory_bot anti-patterns
toshimaru
0
140
生成AIを使って「人が」考える技術 ― AI時代の人機共想と実践ノウハウ|UNITT AC2026
ishiirikie
0
580
LLM機能を自作して分かるSnowflake Cortex AIの強み
nayuts
0
350
MCPゲートウェイを作って運用してわかったこと — Agent時代の権限管理の現在地
mtpooh
10
3.3k
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
0
290
オンラインゲームのシステム全体像 - コロプラ 2026年度 新卒研修
colopl
0
1.1k
全PRの83%が AIレビューだけでマージできるようになった開発組織は その後どうなったか @2026/10
athug
0
140
予測不能な実行エージェントを安全にサクッと試せるサンドボックス環境の話
sansantech
PRO
1
140
DevelopersIO 2026 知識の地図を描く ─ オントロジーとは何か?
ishikawa_satoru
1
1.3k
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
1
770
Featured
See All Featured
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
630
Chasing Engaging Ingredients in Design
codingconduct
0
350
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.2k
Optimising Largest Contentful Paint
csswizardry
37
4k
A designer walks into a library…
pauljervisheath
211
25k
The Invisible Side of Design
smashingmag
301
52k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
480
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
RailsConf 2023
tenderlove
30
1.6k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Making Projects Easy
brettharned
120
6.8k
How to build a perfect <img>
jonoalderson
1
6.1k
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 大阪