| [[Multipass]] | [[Ubuntu]] |
==TCP/IP==
{{amazon|B085BG8CH5}}
===ipコマンド===
----
*====[https://atmarkit.itmedia.co.jp/ait/articles/1709/22/news019.html 基礎1]====*https://atmarkit.itmedia.co.jp/ait/articles/1709/22/news019.html から引用 <table class="wikitable" ><tr><td>オブジェクト</td><td>別名(省略形)</td><td>意味</td></tr><tr><td>link</td><td>l</td><td>ネットワークデバイス</td></tr><tr><td>addr</td><td>a、address</td><td>ネットワークデバイスのIPアドレス</td></tr><tr><td>addrlabel</td><td>addrl</td><td>アドレスラベル</td></tr><tr><td>route</td><td>r</td><td>ルーティングテーブルのエントリー</td></tr><tr><td>rule</td><td>rul</td><td>ルーティングポリシーデータベースに登録されているルール</td></tr><tr><td>neigh</td><td>n、neighbour</td><td>近傍キャッシュエントリ(ARPまたはNDISCキャッシュエントリ)</td></tr><tr><td>ntable</td><td>nt、ntb</td><td>近傍キャッシュの管理テーブル</td></tr><tr><td>tunnel</td><td>t</td><td>IPトンネル</td></tr><tr><td>tuntap</td><td>tu</td><td>トンネルデバイス</td></tr><tr><td>maddr</td><td>m、ma、mad</td><td>マルチキャストアドレス</td></tr><tr><td>mroute</td><td>mr</td><td>マルチキャストルーティングのキャッシュエントリ</td></tr><tr><td>mrule</td><td>mru</td><td>マルチキャストルーティングポリシーデータベースに登録されているルール</td></tr><tr><td>monitor</td><td>mon</td><td>ネットリンクメッセージの監視</td></tr><tr><td>xfrm</td><td>x、xf</td><td>IPsecポリシー</td></tr><tr><td>netns</td><td>net</td><td>ネットワーク名前空間</td></tr><tr><td>l2tp</td><td>l2</td><td>L2TPv3(レイヤー2トンネリングプロトコル)</td></tr><tr><td>tcp_metrics</td><td>tcp_m、tcp_metrics、tcpm</td><td>TCPメトリック</td></tr><tr><td>token</td><td>tok</td><td>トークン</td></table> ====[https://atmarkit.itmedia.co.jp/ait/articles/1709/28/news029.html 基礎2]====*====[https://atmarkit.itmedia.co.jp/ait/articles/1709/29/news019.html 基礎3]====*====[https://atmarkit.itmedia.co.jp/ait/articles/1710/05/news012.html 応用]====
===ip address show===
rtt min/avg/max/mdev = 0.138/0.179/0.262/0.058 ms
</pre>
===ブリッジの削除===
<pre>
# ip link set br100 down
# brctl delbr br100
</pre>
==トランスポート層プロトコル==
===ポート===
*DHCP
*など
===HTTP===
----
<pre>
$ mkdir http-home
$ cd http-home
$ cat << 'EOF' > index.html
> <!doctype html>
> <html>
> <head>
> <title>Hello, World</title>
> </head>
> <body>
> <h1>Hello, World</h1>
> </body>
> </html>
> EOF
</pre>
====HTTPサーバー====
[[Python]]のHTTPサーバーを起動
<pre>
$ sudo python3 -m http.server -b 127.0.0.1 80
Serving HTTP on 127.0.0.1 port 80 (http://127.0.0.1:80/) ...
</pre>
====ncコマンドをブラウザとしてアクセス====
<pre>
$ echo -en "GET / HTTP/1.0\r\n\r\n" | nc 127.0.0.1 80
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.8.10
Date: Wed, 13 Apr 2022 11:56:03 GMT
Content-type: text/html
Content-Length: 127
Last-Modified: Tue, 22 Mar 2022 15:07:11 GMT
<!doctype html>
<html>
<head>
<title>Hello, World</title>
</head>
<body>
<h1>Hello, World</h1>
</body>
</html>
</pre>
===DNS===
----
*ドメイン名の解決はOSの中でリゾルバというプログラムが担当する
*リゾルバが問い合わせるDNSのサーバーをネームサーバーという
*確認
**tcpdumpを起動
<pre>
$ sudo tcpdump -tnl -i any "udp and port 53"
</pre>
*他のターミナルから
<pre>
$ dig +short @8.8.8.8 typea.info A
160.16.110.88
</pre>
*tcpdumpの結果を確認
<pre>
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes
IP 127.0.0.1.46121 > 127.0.0.53.53: 57838+ [1au] NS? . (40)
IP 192.168.122.243.55378 > 192.168.122.1.53: 22272+ [1au] NS? . (28)
IP 192.168.122.1.53 > 192.168.122.243.55378: 22272 13/0/1 NS c.root-servers.net., NS m.root-servers.net., NS a.root-servers.net., NS d.root-servers.net., NS l.root-servers.net., NS i.root-servers.net., NS k.root-servers.net., NS f.root-servers.net., NS b.root-servers.net., NS e.root-servers.net., NS j.root-servers.net., NS h.root-servers.net., NS g.root-servers.net. (239)
IP 127.0.0.53.53 > 127.0.0.1.46121: 57838 13/0/1 NS c.root-servers.net., NS m.root-servers.net., NS a.root-servers.net., NS d.root-servers.net., NS l.root-servers.net., NS i.root-servers.net., NS k.root-servers.net., NS f.root-servers.net., NS b.root-servers.net., NS e.root-servers.net., NS j.root-servers.net., NS h.root-servers.net., NS g.root-servers.net. (239)
IP 192.168.122.243.55943 > 8.8.8.8.53: 4489+ [1au] A? typea.info. (51)
IP 8.8.8.8.53 > 192.168.122.243.55943: 4489 1/0/1 A 160.16.110.88 (55)
</pre>
===DHCP===
----
<pre>
$ sudo ip netns add server
$ sudo ip netns add client
$ sudo ip link add s-veth0 type veth peer name c-veth
$ sudo ip link set s-veth0 netns server
$ sudo ip link set c-veth netns client
$ sudo ip netns exec server ip link set s-veth0 up
$ sudo ip netns exec client ip link set c-veth up
$ sudo ip netns exec server ip address add 192.0.2.254/24 dev s-veth0</pre>
*dhcp サーバーをserverで起動
<pre>
$ sudo ip netns exec server dnsmasq --dhcp-range=192.0.2.100,192.0.2.200,255.255.255.0 --interface=s-veth0 --port 0 --no-resolv --no-daemon
</pre>
*別ターミナルからDHCPサーバーを利用する
<pre>
$ sudo ip netns exec client dhclient -d c-veth
Internet Systems Consortium DHCP Client 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/c-veth/fa:e0:8a:cb:c5:19
Sending on LPF/c-veth/fa:e0:8a:cb:c5:19
Sending on Socket/fallback
DHCPDISCOVER on c-veth to 255.255.255.255 port 67 interval 3 (xid=0x47349475)
DHCPDISCOVER on c-veth to 255.255.255.255 port 67 interval 6 (xid=0x47349475)
DHCPOFFER of 192.0.2.131 from 192.0.2.254
DHCPREQUEST for 192.0.2.131 on c-veth to 255.255.255.255 port 67 (xid=0x75943447)
DHCPACK of 192.0.2.131 from 192.0.2.254 (xid=0x47349475)
bound to 192.0.2.131 -- renewal in 1695 seconds.
</pre>
*一旦、DHCPクライアントを終了しIPアドレスを確認
<pre>
$ sudo ip netns exec client ip addr show | grep "inet"
inet 192.0.2.131/24 brd 192.0.2.255 scope global dynamic c-veth
inet6 fe80::f8e0:8aff:fecb:c519/64 scope link
</pre>
*ルーティングテーブルを確認
<pre>
$ sudo ip netns exec client ip route show
default via 192.0.2.254 dev c-veth
192.0.2.0/24 dev c-veth proto kernel scope link src 192.0.2.131
</pre>