ネットワーク系読み物
新規作成 2020-11-1
このメモを意味ある単位で分割したい
NTT 技術資料館に行きたい
https://mizunashi-mana.github.io/blog/posts/2025/01/use-10g-internet/#use-10g-internet
ネットワークを知りたくて
に、以下アコーディオンで追加したい。ただ今の記事が一番スッキリ収まってる気がする
記事のDNSリフレクション攻撃か別のところに、自宅 → ルータ(SNAT) → アクセス回線 → ISP → ... → サーバ のような図(登さんの資料にアクセス回線辺りの図があった気がする)
https://www.net-support-serv.co.jp/secret-4.html も参考
上の図のどこで MACアドレス、IPアドレスの変換がされるか示す(なんのMACアドレスかとか、MACアドレスを解決するのはなにかとか)
Packemon で、どう設定してどこでルート変わるか、という説明も
AS(ISP や 通信キャリアなどの電気通信事業者,コンテンツ事業者, データセンター事業者, 学術機関, 一般企業など) 同士で BGP で経路情報のやり取りが、AS 内で各種ルーティングプロトコルで経路情報のやり取りがあってルータのルーティングテーブルが更新された上で、パケットが目的地まで辿り着くというような記載を
「ピアリング戦記 日本のインターネットを繋ぐ技術者たち」も読み終わったら。読了日も追記で
インターネットは、ネットワークのネットワーク
AS の組織としての力のバロメーターは、トラフィック量
2007年までは通信事業者がトラフィック量多かった
ハイパージャイアンツ
2009年頃から、Google などのコンテンツ事業者自らが莫大なトラフィックを生成する AS が出てきたことがわかった。その表現
BGP ルータ同士は、基本的に同一の L2セグメント内で接続する
別のルータを介して利用することも可能で、「BGP マルチホップ」と呼ばれる
IX
「AS を持つ組織が BGP ルータを持ち寄って接続し合うための場所」
BGP ルータ同士を接続し合えるようにするための L2セグメントを提供する(パブリックピアリング)
なので、スイッチが用意されてる
IX 介さずに直接 BGP ルータ同士を直接繋げてピアリングも可能(プライベートピアリング)
「IX をサービスとして提供する事業者のことを IXP と呼ぶこともあります。」
eBPF https://docs.cilium.io/en/latest/reference-guides/bpf/progtypes/
XDP: 入力(受信)が eBPF プログラムのトリガー
tc: 入力(受信)と出力(送信)が eBPF プログラムのトリガー
packemon はこっちで、出力だけ TCP RST パケットをドロップするようにしてる
https://eunomia.dev/tutorials/20-tc/#summary
https://github.com/fedepaol/tc-return/blob/2d02e3baf983878c72992a138eaf5ef55f4d493d/main.go
神資料: https://speakerdeck.com/takehaya/programmable-bandwidth-management-with-ebpf
「ネットワークセキュリティ詳説 PKI/TLS プロトコル」読み途中
詳説とあって詳しい。QUIC も触れてる。
Golangで作るソフトウェアルータ
その名の通り、Go でルータを作る本。大変面白い
syscall パッケージをどう使っているか参考になる
https://github.com/sat0ken/go-curo
参考
https://manpages.ubuntu.com/manpages/bionic/ja/man7/packet.7.html
https://terassyi.net/posts/2020/03/29/ethernet.html
https://ja.m.wikipedia.org/wiki/TUN/TAP
はてな、きーたのブクマも
作りたいなと思ったもの
go使う予定だけど、phpでもサンプル書けないか試したい
Wiresharkの様なguiを使わず、簡単に自作パケット作れて目で確かめられるツール
tuiツール作ってみたい
一旦、https://github.com/ddddddO/packemon で色々試してみてから、↑のツール作れれば
作業風景
Cisco Certified Network Associate (200-301)
白本と呼ばれる教科書買ってみた
読みやすく理解しやすかった。今後も基礎知識や設定コマンドの確認などで役立つはず
Cisco Packet Tracer のインストールや見方とか
試験形式のチュートリアル
Cisco Packet Tracer(パケットトレーサー)を使いこなそう!
一度確認すると良いそう
Ping-t:コマンド練習
2024/04/06 Passした
全88問でシミュレーション問題も出た(各機器を設定してpingで疎通を確認するとか、ルーティングを設定するとか)
SOCKS5 Proxyをためす
このセクションは、別のところに移したい
Dante 導入と起動
WSL2 にて
https://kagasu.hatenablog.com/entry/2020/09/28/075504
「Ⅲ. 手順(ユーザー認証あり)」を実施(「4. ユーザーを追加する」以外)
「3. Dantedを起動する」 のコマンドは sudo で実行
端末に以下エラー
code:console
~/github.com/ddddddO/work
12:31:18 > systemctl restart danted
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: ホストが落ちています
~/github.com/ddddddO/work
12:31:30 >
https://shikiyura.com/2022/11/systemd_supported_in_wsl/ に助けられた
Go で書く
ほぼ、https://motemen.hatenablog.com/entry/2015/08/go-proxy-socks のコードをパクリ
動いた
次に、ブラウザ <-> ターゲットサイト 間でこのプログラムを介するようにするには?
ここで、やりたいことが出来なさそうと気付いた
上記のやったことは無視して、GoでSOCKS5サーバー機能があるpackageを使って、それっぽいものを試作
https://github.com/ddddddO/work/blob/master/go/proxy/main.go
ネットワークプロトコル ハッカーズガイド
一旦、ネットワーク辺りの箇所は読んだので中断。次は、「シンボル情報を抽出する」(P138)から読む
パッシブキャプチャ・アクティブキャプチャの紹介で、アクティブキャプチャに興味が惹かれた
パッシブキャプチャ:WireSharkなどで、通信を覗き見る感じ
アクティブキャプチャ:エンドとエンドの間にプロキシを用意して、通信を覗き見るだけでなく変更を加えたりもする
ポートフォワーディングプロキシ:TCP or UDP
SOCKSプロキシ
サンプル実装(?):https://github.com/ddddddO/work/blob/master/go/proxy/main.go
フォワードHTTPプロキシ
サンプル実装:https://yuroyoro.hatenablog.com/entry/2018/02/16/193816
リバースHTTPプロキシ
サンプル実装:https://qiita.com/convto/items/64e8f090198a4cf7a4fc
秘密の NTT 電話局、フレッツ光、およびインターネット入門 (1)
こちらが大変面白く読み進めている
このpdfが格納されているディレクトリにも面白そうな資料がありそう
この資料を参考にフレッツ光網を疑似的に実現しようと計画している方がいる。こちらも面白そう
ネットワークエンジニアとして
ちょこちょこつまみ食いのように読んでる
GNS3 インストールの参考にもなった。コンソール開けるし、Wiresharkで通信の様子も伺えて面白い
https://scrapbox.io/files/657d035110afb20024a9477b.png
https://scrapbox.io/files/657d036bd1d67700240c1a57.png
ただ、GNS3 でwpcap.dllが見つけられない、というエラーに遭遇し解決に時間を取られた。ファイルは存在していたし...明確な原因が分かっていないけど、多分、GNS3とWiresharkそれぞれで使うwpcap.dllがGNS3には合っていなかったのだと思う(GNS3インストール -> GNS3は普通に動作してるように見える -> Wiresharkでキャプチャできてない? -> Wiresharkアップデート -> GNS3で上記エラー -> GNS3再インストール で解消だったと思う)。
以降、GNS3でやったことは、GNS3 - sandbox に残していく
ピアリング戦記 ― 日本のインターネットを繋ぐ技術者たち
タイトルからして面白そうと感じた。読んでるところ
情報処理教科書 ネットワークスペシャリスト 2024年版
思うところがあってネットワークの勉強をしようと思い、ネットワークを体系的に学習できそうなのでネスぺ取得を目指す。その参考図書として購入
この本自体は初心者向けではない感じ。自分のレベルだとちょくちょくWebで調べたりしないといけない
金子勇、P2P・IoT・災害対策
https://wired.jp/2018/11/10/winny-isamu-kaneko-1/
「インターネットを介さずに独自のネットワークを形成する」
気になった。
なるほどナットク!P2Pがわかる本
一旦積読
ほんの少し読んでみたところ、かなりわかりやすく書かれている。まとまった時間に一気に読みたい。
SSHポートフォワーディング
https://www.koikikukan.com/archives/2016/09/15-000300.php
SoftwareDesign ハンズオンTCP/IP
以下の記事に惹かれた。が、未読で、ちょっと読みごたえありそうなので、一旦寝かせておく。
ping自作
TCPソケットプログラミング
UDPソケットプログラミング
Dockerネットワークの仕組み
WEB+DB Web技術総整理
読んでよかった。特集1「Web技術総整理」で、引っかかったところをピック。
インターネット
インターネット以前の主な通信手段は電話の回線 -> ARPANET(パケット交換方式) -> OSI参照モデルの世界
「QUIC」:トランスポート層に位置するが、UDPの上位レイヤとして実装されている。TCPの速度のデメリットの克服・暗号化通信が可能、とされている。
HTTP
1.1が現在主流。
2は1.1と後方互換性を維持しており、クライアントが対応していれば2で、対応していなければ1.1で通信が可能。また高速な通信ができ、具体的には、ヘッダの圧縮・パイプラインと呼ばれる多重化技術を使うから高速化できるよう。
3は、TCPではなくQUICを使うため、2より高速に通信ができることが期待されている。
バーチャルホストとHostヘッダーフィールド
バーチャルホスト:1台のWebサーバ上に複数のWebアプリケーションを提供できる機能
IPアドレスで対象のWebサーバを、Hostヘッダーで対象のWebアプリケーションを特定
Webサーバ
prefork型とイベント駆動型
prefork型:1リクエストで1プロセス起動していた。そのためリクエストがかさばるとOSがプロセス切り替えの割合が増えて処理能力に限界が来る。これをC10K問題(クライアント1万台問題)
イベント駆動型:1プロセスで複数リクエストを処理する。代表的なWebサーバとしてnginxがある。
ブラウザ
レスポンスが返るまでのフロー
URLを解析して、名前解決してリクエスト作成して、、懐かしい気分になった。
ブラウザによってHTMLを表示するためのレンダリングエンジンが違う。
ブラウザによってJavaScriptを実行するためのJavaScriptエンジンが違う。
JavaScriptに新しい機能を追加して別言語として実装したものをAltJSと呼ぶ。
TypeScriptもその一つ。
AltJSは、最終的にJavaScriptとして実行されるよう。
Wasm
Webアプリケーション
GraphQL
Facebookが提案し、標準化が進んでいる。
RESTは複数リソースのデータを取得しようとしたとき、リクエストを複数回実行しないといけないので非効率。対して、GraphQLは、一度に関連するデータが取得できるよう工夫がされてるため、効率がいい。
特集2「はじめてのDjango」、特集3「作って学ぶRDBMSのしくみ」はざっと読んだけど、特集1を読んでベースの知識がわかった・深く知りたくなった、という人には自然に手が動くようなイメージを持った。蛇足。
海底ケーブル
海底ケーブルマップ
ファーウェイvs日米欧 海底でも通信覇権争い(日経)
東日本大震災から10年災害対策ITはここまで来た(日経コンピュータ)
レジリエンス(復元力)
HAPS
Spectee Pro
経済航海図 マゼランの羅針盤 ~初公開!“テレワーク”開発物語~
https://youtu.be/DIRPxTkdsBc
ネットワークはなぜつながるのか
ブラウザにURLを入力し、リクエストがWebサーバーまで到達・WebサーバーからのレスポンスをWebブラウザが受け取るまでの経路をL7~L1のレイヤを辿って解説
ブラウザの内部でリクエスト・メッセージを生成して、システムコールの呼び出しでOSのネットワーク機能を呼び出し、生成されたソケットに対してメッセージを書き込むことで、Webサーバー側に到達する。ここが面白いと思ったし、このあたりをGoで実装する際は、Goならわかるシステムプログラミング あたりが参考になりそう。
IPヘッダ、MACヘッダを付加してリクエスト先のWebサーバーを特定するまでの細かいやり取りが曖昧。
ネットワーク