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
階層独立性の高いプロトコルスタックの設計と実装
Search
Hiroki Watanabe (nelio)
March 22, 2019
Programming
0
1.2k
階層独立性の高いプロトコルスタックの設計と実装
2019年3月22日に行われた「第8期サイボウズ・ラボユース成果発表会」にて使用したスライド(一部変更あり)
Hiroki Watanabe (nelio)
March 22, 2019
Tweet
Share
More Decks by Hiroki Watanabe (nelio)
See All by Hiroki Watanabe (nelio)
L4周辺の高機能通信路とネットワークの階層構造の再考
negli0
1
820
Other Decks in Programming
See All in Programming
Introducing ReActionView: A new ActionView-Compatible ERB Engine @ Kaigi on Rails 2025, Tokyo, Japan
marcoroth
3
910
Pythonスレッドとは結局何なのか? CPython実装から見るNoGIL時代の変化
curekoshimizu
4
1.3k
CSC305 Lecture 04
javiergs
PRO
0
250
育てるアーキテクチャ:戦い抜くPythonマイクロサービスの設計と進化戦略
fujidomoe
1
150
Let's Write a Train Tracking Algorithm
twocentstudios
0
220
Pull-Requestの内容を1クリックで動作確認可能にするワークフロー
natmark
2
450
Чего вы не знали о строках в Python – Василий Рябов, PythoNN
sobolevn
0
160
Reduxモダナイズ 〜コードのモダン化を通して、将来のライブラリ移行に備える〜
pvcresin
2
680
Railsだからできる 例外業務に禍根を残さない 設定設計パターン
ei_ei_eiichi
0
170
iOSエンジニア向けの英語学習アプリを作る!
yukawashouhei
0
180
なぜあの開発者はDevRelに伴走し続けるのか / Why Does That Developer Keep Running Alongside DevRel?
nrslib
3
370
そのpreloadは必要?見過ごされたpreloadが技術的負債として爆発した日
mugitti9
2
2.9k
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
For a Future-Friendly Web
brad_frost
180
9.9k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Mobile First: as difficult as doing things right
swwweet
224
10k
Done Done
chrislema
185
16k
Thoughts on Productivity
jonyablonski
70
4.9k
How to Ace a Technical Interview
jacobian
280
23k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Transcript
֊ಠཱੑͷߴ͍ ϓϩτίϧελοΫͷ ઃܭͱ࣮ ୈظαΠϘζɾϥϘϢʔεՌൃදձ!$ZCP[V౦ژΦϑΟε .BS )JSPLJ8"5"/"#& ެ։൛
• OFMJP - 5XJUUFS!@@OFMJP@@ - )1https://negli0.github.io - ݱࡏܚጯٛक़େֶ% - ϝϯλʔޫ͞Μ
• ݚڀ/FUXPSL4ZTUFN - &EHF$PNQVUJOH 4FSWJDF$IBJOJOH - "EWBODFE3PVUJOHɼ1SPUPDPM4UBDL झຯ 2 )JSPLJ8BUBOBCF
• ͘Β͍ເͯͨ͠ϞϊΛ࡞Δ - ֊ಠཱੑͷߴ͍ϓϩτίϧελοΫlFYMBZz • ΧʔωϧϓϩάϥϛϯάΛ͍ͨ͠ - ΄ͱΜͲͬͨ͜ͱ͕ͳ͔ͬͨͷͰ • ϥϘϢʔεલΧʔωϧ͔ͬ৮ͬͯͨ
• ޙϢʔβۭؒʢ1P$ʣ࣮ - ͋ͱݚڀͷࢹΛ͛ΔͨΊ • ࣮υϦϒϯͳݚڀͱͯ͠Ґஔ͚ͮΔ - ීஈݚڀυϦϒϯͳ࣮ • ࣮υϦϒϯͰ͖Δͱָͦ͠͏ Ͱ͖ͨ΄͏͕ྑ͍ 3 ϥϘϢʔεʹ͓͚Δୡඪ
• ݱࡏͷϓϩτίϧελοΫ ҎԼ୯ʹελοΫ - ϓϩτίϧͷػೳͱ֊͕ີ݁߹ ϞϊϦγοΫ • FH
&UIFSOFUୈ֊ɼ*1ୈ֊ɼʜ - طʹఆٛ͞Εͨ֊ߏΛར༻͢ΔϞσϧ • ֤ϓϩτίϧͷػೳͱ֊ҐஔΛ - ֊ಠཱੑ͕ߴ͘ͳΔ • ϓϩτίϧػೳͱ֊Ґஔͷ͕ؔرബʹ - ϓϩτίϧͷ֓೦Λ͋Δఔ·ͰҰൠԽͰ͖Δ • ػೳ͕ҟͳΔ͚ͩͰஔ͖͑Մೳ 4 ͡Ίʹ
5 Πϝʔδ Prot. W Prot. X Prot. Z App. App.
App. Prot. Y Prot. X Prot. W Prot. Y Prot. Z App. App. App. Prot. Y Prot. Z Prot. X Prot. W Prot. Y Prot. W Prot. Z Prot. W Prot. X ϞϊϦγοΫͳελοΫ ֊ಠཱੑ͕ߴ͍ελοΫ ֤ϓϩτίϧΛͲ͜ʹҐஔ͚ͮΔ͔ "QQ͝ͱʹҧͬͯྑ͍
• ϓϩτίϧ֓೦ͷҰൠԽ - ஔ͖͑Մೳɼػೳ͕֊ҐஔʹറΒΕͳ͍ • FH *1͚ͩΛผͷ-ϓϩτίϧʹஔ͖͑ • FH ಠࣗͷελοΫΛఆٛՄೳ
- ੍ϓϩτίϧಠࣗͷૢ࡞͕͘͠ͳΔ • ϓϩτίϧ࣮ͷ࠶ར༻ - ϓϩτίϧ͕ΞϓϦʹ౷߹͞Εͳ͍ˠ͍ճ͠ • ٯʹݴ͑ΞϓϦ͝ͱʹ࠷దԽͰ͖ͳ͍ - ৽ͨͳಠࣗϓϩτίϧͷ࣮ݧ͕༰қ • Ұ࡞Ε্ҐԼҐΛվΊͯ࡞Βͳͯ͘ྑ͍ 6 ֊ಠཱੑΛߴΊΔՁ
• ϓϩτίϧૢ࡞ͷநԽ - ͲΜͳॱংͰੵΈ্͛ΒΕͯػೳ͢ΔΑ͏ʹ • 1SPUPDPM1SPUPDPM*'ͷ͋ΔఔͷҰൠԽ • ελοΫͱΞϓϦΛ͢Δ - ϓϩτίϧ࣮ଞͷελοΫͰ͍ճͤΔ
• $1MBOFαϙʔτ - ֤ϓϩτίϧʹ͓͚Δ௨৴૬खΛಈతʹܾఆՄ • "31ɼ/%1ͳͲ 7 ཁٻࣄ߲
• 04*ࢀরϞσϧΛ࣮͠Α͏ͱͨ͠ - ֤ͷ*'ڞ௨ • ͋ΒΏΔ-ϓϩτίϧ ڞ௨*'Ͱ-ϓϩτίϧͱ ΓऔΓՄೳ - ֤ؒͷ*'ผ
• --*'ͱ--*'ผ 8 ؔ࿈ٕज़4ZTUFN7453&".4 • Transport Provider Interface Specification ◦ http://www.openss7.org/docs/tpi.pdf • Network Provider Interface Specification ◦ http://www.openss7.org/docs/npi.pdf • Datalink Provider Interface Specification ◦ http://www.openss7.org/docs/dlpi.pdf Layer 1 Layer 2 Layer 3 Layer 4 Layer 7 ... L1-L2 I/F L2-L3 I/F L3-L4 I/F ϓϩτίϧ͕֊Ґஔʹଋറ͞Ε͍ͯΔͱ͍͑Δ
• ͷநԽߏ छͷ*' - ߴͰ༏ΕͨநԽ - 1SPUPDPM1SPUPDPM*'ෆఆ • 'SFF#4%protosw
Ͱ நԽ • -JOVYʜʁ • Ұൠʹ֊ߏ੩తఆٛ - વܾΊଧͪ͢Δ΄͏͕ߴ 9 ؔ࿈ٕज़#4%4PDLFU Driver Socket App Protocol-Driver I/F Protocol Stack App.-Socket I/F Socket-Protocol I/F Protocol
• 1SPUPDPM1SPUPDPM*'ͷநԽ - "QQY,FSOFMɼ Y,FSOFM%SJDFSநԽ - 453&".4ͱ#4%4PDLFU ͷ͍͍ͱ͜औΓΛࢦͨ͠ • ֊ߏ੩తఆٛ
- ఆٛΛมߋ͢Δʹ ΧʔωϧίϯύΠϧ͕ඞཁ - ଟ༷ͳελοΫΛදݱՄೳ 10 ؔ࿈ٕज़x,FSOFM Driver App x-Kernel-Driver I/F App.-x-Kernel I/F Protocol-Protocol I/F x-Kernel /$)VUDIJOTPOBOE--1FUFSTPO 5IFY,FSOFMBOBSDIJUFDUVSFGPSJNQMFNFOUJOHOFUXPSLQSPUPDPMT JO*&&& 5SBOTBDUJPOTPO4PGUXBSF&OHJOFFSJOH WPM OP QQ +BOจ63-
• Y,FSOFMΛࠓ෩ʹϦΞϨϯδ - $-*ͰϓϩτίϧΛFYMBZTUBDLʹϩʔυ - ϩʔυ͞ΕͨϓϩτίϧΛ༻͍ͯ"QQ͕ ελοΫΛఆٛ • ϓϩτίϧ࣮ -
TIBSFEMJCSBSZ • 1P$ͬͪ͜ - LFSOFMNPEVMF • ࠓޙ࣮ݱ͍ͨ͠ 11 FYMBZ Driver App exlay-Driver I/F App.-exlay I/F Protocol-Protocol I/F exlay stack Protocol List CLI
• ϓϩτίϧ։ൃͷͨΊͷܗ - OBNFϓϩτίϧ໊ - IES@TJ[FϔομαΠζ - VQQFS@TJ[F্Ґ*%αΠζ • JQQSPUPDPM
• FUIFSOFUUZQF - E@JOQVUE@PVUQVU • ड৴ૹ৴ϋϯυϥ - D@QVMMD@QVTI • $1MBOFϋϯυϥ 12 நԽϓϩτίϧQSPUPDPMPCK name d_input d_output c_pull c_push hdr_size bind_size upper_size dial listen close - EJBMMJTUFODMPTF • ελοΫཱ֬ղ์ϋϯυϥ ͕͜͜؊ɼ͔ͭ·ͩෆेͳͷͰߟ͑ଓ͚Δ
root ethernet ipv4 arp uplyr mac1 upper1 mac1 upper2 fbind
fbind uplyr fp is_top ip1 upper3 ip1 upper4 fbind is_top fbind udp uplyr fbind port1 upper5 is_top • FYMBZͷΤϯυϙΠϯτΛಛఆ͢Δ 13 CJOEJOHUSFF GCJOE QUSUPGPSXBSECJOEJOH ݱ֊ͷ֘ϓϩτίϧͷ MPDBMCJOEJOHͷϦετΛࢦ͢ GQ QUSUPGPSXBSEQSPUP ݱ֊ͷϓϩτίϧͷ ϦετΛࢦ͢ VQMZS QUSUPVQQFSMBZFS ݱ֊ʹ͓͍ͯಛఆ͞Εͨ MPDBMCJOEJOHͷ্Ґ ϓϩτίϧͷϦετΛࢦ͢
14 FYMBZ"1*ͱ࣮ঢ়گ ໊ؔ ಈ࡞ ࣮ঢ়گ FY@DSFBUF@TUBDL ελοΫΛએݴॳظԽ ✔ FY@TFU@CJOEJOH MPDBMͷ*1BEES
QPSUͳͲͷઃఆ ✔ FY@TFU@SFNPUF SFNPUFͷ*1BEES QPSUͳͲͷઃఆ ✔ FY@CJOE@TUBDL ελοΫΛఆٛ ✔ FY@EJBM@TUBDL $0SJFOUFEͳϓϩτίϧͷଓཁٻ FY@MJTUFO@TUBDL $0SJFOUFEͳϓϩτίϧͷଓԠ FY@TFOE@TUBDL ఆٛͨ͠ελοΫʹσʔλΛૹ৴ ✔ FY@SFDW@TUBDL ఆٛͨ͠ελοΫ͔ΒσʔλΛड৴ ✔ FY@DMPTF@TUBDL ఆٛͨ͠ελοΫΛղ์
• MJTUՃࡁΈϓϩτίϧऔಘ • BEE༻ՄೳϓϩτίϧͷՃ • EFMϓϩτίϧͷআ 15 $-*͔Βͷૢ࡞ Ұ෦ൈਮ
16 "QQ࣮Πϝʔδ
• UFTU@FUIFSOFUϓϩτίϧΛՃ • ֊ UFTU@FUIFSOFU ελοΫΛఆٛ - ѼઌΤϯυϙΠϯτෆ໌ͷ߹υϩοϓ - ѼઌΤϯυϙΠϯτ͕߹க͢Δͱදࣔ
• σʔλͷૹ৴ड৴ - ϝοηʔδͷදࣔ - XJSFTIBSLͰຊʹͦͷσʔλ͔Ͳ͏͔֬ೝ 17 σϞ
• τϯωϧΤϯυϙΠϯτΛ࡞Δ - ݱঢ়VOEFSMBZ͔Βࢦఆ͠ͳ͍ͱ͍͚ͳ͍ • τϯωϦϯάͰͳ͍ʜ • ֤ϓϩτίϧͷॆ࣮ͱ$1MBOFରԠ - Έ߹ΘͤΔϓϩτίϧ͕ແ͍ͱແҙຯ
• Χʔωϧಈ࡞ - TIBSFEMJCˠLFSOFMNPEVMF - 'SFF#4%Ͱಈ͔͍ͨ͠ • QSPUPTX NCVGΛྲྀ༻͍ͨ͠ 18 ࠓޙͷల
• ݱࡏͷϓϩτίϧελοΫ - ϓϩτίϧͷػೳͱ֊͕ີ݁߹ • FYMBZϓϩτίϧͷػೳͱ֊ҐஔΛ - ֊ಠཱੑ͕ߴ͘ͳΔ • ύζϧͷΑ͏ʹϢʔβ͕ελοΫΛఆٛͰ͖Δ
- ϓϩτίϧͷ֓೦Λ͋Δఔ·ͰҰൠԽͰ͖Δ • σϞ - ࣗ࡞ϓϩτίϧΛ༻͍ͨಠࣗελοΫΛఆٛ - σʔλૹड৴͕Ͱ͖ͨ 19 ·ͱΊ
• وॏͳܦݧ͕Ͱ͖·ͨ͠ - ͖ͳ044࡞͓͍͚ͬͯۚͨͩͯʜ • ྑ͍ҙݟΛࢁ͍͖ͨͩ·ͨ͠ - ޫ͞Μɼ͞Μɼ͋Γ͕ͱ͏͍͟͝·ͨ͠ • େֶͰ։ൃʹ͍ͭͯฉ͚Δ૬ख͕΄΅͍ͳ͍
• ಠྗେࣄ͕ͩ։ൃ্खͳਓʹֶͿͷେࣄ • ϥϘϢʔεΛΊ·͢ - ੍ΛͬͨΒߦ͖͍ͨਓ݁ߏ͍Δͱࢥ͏ 20 ͓ΘΓʹ