自作TCP
自作TCP入門導入記になったらいいけどどうなるやら
Linux 仮想デバイス
TUN
IPパケット用
Tunnel の略
今回はTCPを実装したいのでこちらを利用する
TAP
Ethernetフレーム用
Universal TUN/TAP device driver — The Linux Kernel documentation がドライバのドキュメント
ユーザ空間でIPパケット/Ethernetフレームを通信するためのもの
利用するにはデバイスファイルを作成した後 ioctl を発行してデバイスをカーネルに登録する必要がある
Erlangで IP パケットを受信する
msantos/tunctl: Erlang TUN/TAP interface を使う
code:sh
sudo setcap cap_net_admin=ep /usr/lib/erlang/erts-16.3/bin/beam.smp
10.0.0.1/25で作成すると
CIDR について
Classless Inter-Domain Routing - Wikipedia
10.0.0.0 ~ 10.0.0.128 の範囲を受け持つ
デバイス自体のアドレスは10.0.0.1
code:sh
ip route show dev tun0
10.0.0.0/25 proto kernel scope link src 10.0.0.0
【IPアドレス】完全ガイド: 初心者から中級者まで理解できるネットワークの基本【AWS/VPC/CIDR表記/サブネット】
CIDR 表記がうろ覚えだったので学び直し
ドット区切りの表記はCIDRではなくDot-decimal notationという方が適切なんだろうか?
IPv4 - Wikipediaも同時に参照
Special-use addresses が意外と多かった
CIDR の / の後ろはネットワーク部(先頭部)のビット長
IPパケットを処理する
RFC 791: Internet Protocol とIPv4 - Wikipediaを見つつ最低限を Parse
TCP を処理する
RFC 9293 - Transmission Control Protocol (TCP) 日本語訳 を見ながらやる
参考文献
TUN/TAP - Wikipedia
Universal TUN/TAP device driver — The Linux Kernel documentation
https://qiita.com/hibi_ki/items/4286b8d9d5c00c6a7490
https://tex2e.github.io/rfc-translater/html/rfc9293.html
Goでゼロから作る 自作TCP/IPプロトコル サーバー