Closed53

TCP/IPをハンズオンで学ぶ[TCP/IPとは]

ハガユウキハガユウキ

この本から得たいこと

  • ネットワークが何をやっているのかをもっと理解したい。
  • dockerネットワークへの理解に繋げたい。
ハガユウキハガユウキ

一般的な定義ではTCP/IPにイーサネットは含まれない。しかし、この本では説明の都合から含むように表現する場合があるそう。

ハガユウキハガユウキ

1. TCP/IP

  • TCP/IPとは、インターネットを構成するプロトコルの総称。
    • TCP/IPのプロトコル群が存在するから、インターネットが成立している。
    • TCP/IPはプロトコル群で、代表的なプロトコルがTCPとIPって話。
    • TCP/IPに複数のプロトコルがある理由は、プロトコルそれぞれに特定の役割を背負わせて、それらを組み合わせて目的を達成した方が、シンプルに達成できるから。また、組み合わせの数だけ色々なことができるようになる。
  • プロトコルとは、コンピュータ同士がネットワークを用いて通信するための約束ごと

https://yukihaga.hatenablog.com/entry/2022/07/03/103742#プロトコルとは何か

ハガユウキハガユウキ

IPプロトコルの責務:目的地まで荷物(パケット)を運ぶこと。到達する保証はしない
TCPプロトコルの責務:荷物が目的地までちゃんと届いたことを管理するプロトコル

ハガユウキハガユウキ

IPプロトコルとTCPプロトコルを組み合わせることで、荷物(ビット列で表現された何かしらのデータのこと)がちゃんと目的地まで届くことを実現できる

ハガユウキハガユウキ

IPプロトコルとIPアドレスの関係

IPアドレスは、IP(Internet Protocol)というプロトコルで通信するのに必要な識別子の一つ。 IPはインターネットの根幹をなすプロトコルである。

なるほど、IPプロトコルで通信する際に、IPアドレスが必要なのか。

ハガユウキハガユウキ

IPアドレスはネットワーク(プライベート、パブリック問わず)一意でなければならない。

ハガユウキハガユウキ
  • IPプロトコルでは、通信先に届ける荷物(データ)のことをパケットと呼ぶ。
  • IPによって運ばれるパケットの一つ一つには、差出人と宛先のIPアドレスが載っている。これをヘッダと呼ぶ(もちろん簡略的に言っているだけでその他のフィールドもヘッダには含まれている)。つまりパケットにはヘッダが付属する。IP以外のプロトコルにもヘッダという概念は存在していて、ヘッダにはそのプロトコルで通信を成立させるために必要となるさまざまな情報が含まれている。
  • ヘッダの中で情報を記載する領域のことはフィールドと呼ぶ。
ハガユウキハガユウキ

IPアドレスは32ビットで構成されていて、8ビットずつ10進数にして、ドットで繋いだものである。

ハガユウキハガユウキ

ip address show

ip address showで差出人のIPアドレスを確認できる。inetの部分を見ればIPアドレスが何かわかる。
今回の場合、 127.0.0.1や172.17.0.2がコンピュータのIPアドレスである。

root@60a459bf9d33:/# ip address show | grep inet
    inet 127.0.0.1/8 scope host lo
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
ハガユウキハガユウキ
root@60a459bf9d33:/# ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1000
    link/tunnel6 :: brd ::
175: eth0@if176: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

1:や2:の後ろにあるloやeth0@if176はネットワークインターフェースと呼ぶ。

  • ネットワークインターフェースとは、LANケーブルを指すネットワークインターフェースカード(NIC)や無線LANアダプタなどをソフトウェアから扱う上で抽象化した概念のこと。 そのため、実際には物理的なデバイスが存在しないネットワークインターフェイスもある。loとかが代表的。
  • ネットワークインターフェースには、必要に応じてIPアドレスが付与される。
    • loというネットワークインターフェースには、127.0.0.1というIPアドレスが付与される
    • eth0@if176というネットワークインターフェースには、172.17.0.2というIPアドレスが付与される

すごくざっくり解釈するとネットワークインターフェースが存在するから、自分のホストはローカルのネットワークに接続できる。多分。あと、PCにネットワークインターフェースが内蔵されているから、PCにIPアドレスがあると思うのか。実際はIPアドレスはネットワークインターフェースに対して付与される

ハガユウキハガユウキ
  • 127.0.0.1というIPアドレスは、ループバックアドレスという特殊なIPアドレスである。ループバックアドレスは、自分自身を表している。ループバックアドレスが付与されているネットワークインターフェイスはループバックインターフェイスと呼ばれる。今回であればloだが、このネットワークインターフェイスは仮想的なものである。つまり、物理的なネットワークインターフェースカードなどがコンピュータに刺さっているわけではない。
    • 動作確認など自分自身だけに関わる通信をしたいときに、このループバックアドレスを使うと便利である
ハガユウキハガユウキ

ネットワークインターフェースカード

ネットワークインターフェースカードとは、コンピュータなどの通信機器を通信ネットワーク(LAN)に繋げるためのカード型の拡張装置。かつてはコンピュータ本体に通信機能がついておらず、NICを差し込んでネットワーク機能を追加するのが一般的だった。現在ではコンピュータに通信機能があらかじめ組み込まれているので、単体のNICを使うことは無くなった。
https://e-words.jp/w/NIC.html

ハガユウキハガユウキ

ループバックコマンドでpingを実行するとめちゃくちゃ早い。そりゃそう。自分自身に対して通信しようとしているんだもん。

root@60a459bf9d33:/# ping -c 3 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.637 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.048 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.042 ms

--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2038ms
rtt min/avg/max/mdev = 0.042/0.242/0.637/0.279 ms

つまり、この環境では、172.17.0.2が差出人に相当するIPアドレスである。

ハガユウキハガユウキ

それぞれのパケットは、IPアドレスがフィールドに書きこまれたヘッダによって表現されています。

これがよくわからん。IPヘッダとパケットって別物じゃないんか?やっぱここは実装しないとわからなそう。

ハガユウキハガユウキ

成功してたら3 receivedして、0% packet lossが出る。失敗してたら、0 received 100% packet lossが出たりする。

ハガユウキハガユウキ

TCP/IPにはさまざまな役割のプロトコルが含まれていて、それらは役割ごとに階層構造で分類できる

実際にTCP/IPで通信するときは、目的に応じてそれぞれの階層にごとにプロトコルを選んで組み合わせながら使う。 料理で前菜やスープなどを一品ずつ選んでコース料理を完成させるイメージ。

ハガユウキハガユウキ

このコースにはある程度決まった組み合わせがあるので、悩むことはないそう。

ハガユウキハガユウキ

もうひとつ重要な概念として、プロトコルの階層構造には「高さ」という考え方があります。先ほど紹介したOSI参照モデルでは、階層構造が低くなるほどより抽象度の低い具象的な概念を扱います。たとえば、階層構造でもっとも低いところにある物理層で扱うのは、通信に使うビットを電気や光でどう表現するかといったことです。反対に、階層構造における位置が高ければ、より抽象度の高い概念を扱います。たとえば、もっとも高いところにあるアプリケーション層のプロトコルの1つであるHTTPではWebページのコンテンツなどを扱います。

momijiame. Learning TCP/IP networking by exercise on Linux (Japanese Edition) (p. 20). Kindle Edition.

なるほど。階層構造の位置の高低に応じて、抽象度が変わってくるのか。

ハガユウキハガユウキ

標準化

IETF(Internet Engineering Task Force)という団体がTCP/IPのプロトコルの仕様をどうするか決めて、RFCという技術文書を通してプロトコルの仕様を公開している。とはいえIETFがトップダウンでプロトコルを決めているわけではなくて、エンジニアの意見も聞いて民主的にプロトコルの仕様を決めているそう。

ハガユウキハガユウキ

sudo

実行するコマンドの先頭にsudoがあると、コマンドを管理者権限で実行することを意味しています。その際、設定によってはログインパスワードを聞かれることがあります。

momijiame. Learning TCP/IP networking by exercise on Linux (Japanese Edition) (p. 24). Kindle Edition.

ハガユウキハガユウキ

Dockerfileでubuntuの環境を手に入れた。
RUN 命令は、現在のイメージよりも上にある新しいレイヤでコマンドを実行し、その結果を コミット(確定)commit する。RUN命令はdocker buildを実行するタイミング(つまり、イメージを生成するとき)に実行する。イメージの時点で実行しておきたいコマンド(パッケージやライブラリのインストール、ファイルコピー、変更など)を実行するために書く。

FROM ubuntu:20.04
# apt-getコマンドを使うことで、ubuntuでパッケージのインストールやアップデート、削除などを簡単にできる。
RUN apt-get update
# -yを指定することでパッケージをインストールするたびに出る確認プロンプトに自動でyesと答えてくれる
# bash: GNU Bashシェル(Unixシェルの一種)であり、コマンドラインインターフェースを提供します。
# coreutils: Linuxで一般的に使用される基本的なコマンド群を提供します。例えば、ls、cp、mv、rmなどのコマンドが含まれます。
# grep: ファイル内の文字列を検索するためのコマンドです。
# iproute2: Linuxカーネルのネットワーク構成ツールで、ネットワークインターフェースやルーティングテーブルの設定に使用されます。
# iputils-ping: ネットワークデバイスの到達性をテストするために使用されるpingコマンドの一部です。
# traceroute: パケットが通る経路をトレースし、ネットワークの経路情報を表示するために使用されます。
# tcpdump: ネットワークトラフィックをキャプチャして表示するためのパケット解析ツールです。
# bind9-dnsutils: BIND DNSサーバーのユーティリティツールを提供します。
# dnsmasq-base: DHCPサーバーやDNSキャッシュを提供する軽量で高速なネットワークサービスを提供するdnsmasqのベース部分です。
# netcat-openbsd: ネットワーク接続を作成・監視・操作するためのユーティリティツールです。
# python3: Pythonプログラミング言語のバージョン3のランタイムとライブラリを提供します。
# curl: コマンドラインからURLを操作し、データの送受信を行うためのツールです。
# wget: コマンドラインからファイルをダウンロードするためのツールです。
# iptables: Linuxのファイアウォール機能を管理するためのツールです。
# procps: プロセスに関連する情報を表示・操作するためのツール群です。
# isc-dhcp-client: DHCPクライアントを提供します。
# DHCPは「コンピュータにIPアドレスを自動割り当てする仕組み」
# DHCPサーバは、人間様の代わりに、コンピュータにIPアドレスを割り当てる仕事をやるコンピュータのこと
# DHCPクライアントとは、DHCPサーバとやり取りしてIPアドレスを割り当ててもらう側のコンピュータのこと。
# https://wa3.i-3-i.info/word18660.html
RUN apt-get -y install bash coreutils grep iproute2 iputils-ping traceroute tcpdump bind9-dnsutils \
    dnsmasq-base netcat-openbsd python3 curl wget iptables procps isc-dhcp-client

https://github.com/yukiHaga/go_todo_app/blob/main/Dockerfile
https://hub.docker.com/_/ubuntu
https://wa3.i-3-i.info/word18660.html

ハガユウキハガユウキ

IPのパケットはIPのヘッダとペイロード(データ本体)から構成される。ペイロードはIPのヘッダではないので注意。ペイロードには、IPのパケットが運ぶデータが入る場所。IPヘッダはIPパケットの先頭にある。なるほどね。やっと理解した

ハガユウキハガユウキ

パッケージがインターネットからダウンロードされるときの通信もTCP/IPによって実現されている。

ハガユウキハガユウキ

pingコマンド(ピンコマンド)

  • 8.8.8.8はGoogleが運用する公開DNSサーバのIPアドレス。IPアドレスなので、もちろんインターネット上で一つしか存在しない。
  • pingコマンドでTCP/IPで通信できるのかを確認できる。
    • pingコマンドによって生じる通信は、一般にコマンドと同名のPing(ピン)と呼ばれる
root@60a459bf9d33:/# ping -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=36 time=25.9 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=36 time=9.79 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=36 time=7.40 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 7.395/14.362/25.898/8.215 ms
ハガユウキハガユウキ

こちらの出した要求に対して応答が全て無事に届いている。3packetstransmitted,3received,0%packetloss"という表示からわかります。これは「3つ要求を送って、3つ応答が戻ってきました。途中で失われた内容は0%です」という意味

momijiame. Learning TCP/IP networking by exercise on Linux (Japanese Edition) (p. 27). Kindle Edition.

ハガユウキハガユウキ

ネットワークって言葉の意味が若干理解曖昧だけど、作らないと理解できなさそう

ハガユウキハガユウキ

tcpdumpコマンド

tcpdumpコマンドを使うことで、ネットワーク上を流れるデータパケットをリアルタイムで表示できる。
通信を覗き見することを、パケットキャプチャやスニッフィングと呼ぶ。

# -tn: このオプションは、tcpdumpが表示するパケットの詳細をシンプルな形式で表示するためのものです。
# -t: タイムスタンプを表示しないことを意味します。
# -n: ホスト名をIPアドレスで表示することを意味します。つまり、DNSの逆引きを行わずにIPアドレスで表示されます。
# -i any: すべてのネットワークインターフェースからのトラフィックをキャプチャすることを意味します。
# anyは、すべてのインターフェースを表す特殊なキーワードです。
# icmp: ICMPトラフィックをフィルタリングするための条件です。ICMPは、ネットワークデバイス間で制御メッセージをやり取りするためのプロトコルであり、通常はネットワークの健全性やエラー報告に使用されます。ping(ICMP Echo Request/Reply)も含まれます。


tcpdump -tn -i any icmp

pingコマンドはIPプロトコルとICMPプロトコルを用いて行われている。

root@60a459bf9d33:/# tcpdump -tn -i any icmp
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 172.17.0.2 > 8.8.8.8: ICMP echo request, id 3, seq 1, length 64
IP 8.8.8.8 > 172.17.0.2: ICMP echo reply, id 3, seq 1, length 64
IP 172.17.0.2 > 8.8.8.8: ICMP echo request, id 3, seq 2, length 64
IP 8.8.8.8 > 172.17.0.2: ICMP echo reply, id 3, seq 2, length 64
IP 172.17.0.2 > 8.8.8.8: ICMP echo request, id 3, seq 3, length 64
IP 8.8.8.8 > 172.17.0.2: ICMP echo reply, id 3, seq 3, length 64
ハガユウキハガユウキ

tracerouteコマンド

tracerouteコマンドを使うことで、指定したホスト(IPアドレス)までのパケットの経路を追跡することができる。また、-nオプションを付けることで、ホスト名の逆引きを行わずにIPアドレスで表示することができます。

traceroute -n 8.8.8.8
ハガユウキハガユウキ
root@60a459bf9d33:/# traceroute -n 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  172.17.0.1  2.233 ms  2.146 ms  2.129 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *

tracerouteコマンドを使って、パケットがどのような道順で目的につくのか確認できる。
パケットが通る道順のことは、一般に「経路(Route)」と呼ばれる。
tracerouteコマンドの結果として表示される一つ一つの行は、パケットが通過した一つ一つのルータを表している。それぞれの行に表示されているIPアドレスは、パケットが通過したルータが持っているIPアドレスである。

ハガユウキハガユウキ

パケットが通過するルータの台数はインターネットにおける論理的な距離として扱われる。この通過するルータの台数のことをホップ数と呼ぶ。

ハガユウキハガユウキ

インターネットの不思議な力には、ルータというネットワーク機器が関係している

  • ルータの仕事は、別のルータまたはホストから送られてきたパケットを次のルータまたはホストに送ること
  • tracrouteコマンドの実行結果を見てわかる通り、パケットを目的地まで届けるためにたくさんのルータを通過する。
  • つまり、インターネットとは、たくさんのルータによるパケットのバケツリレーによって成り立っているものであることが分かる。
ハガユウキハガユウキ
  • IPアドレスを持ってネットワークにつながっている、ルータではないコンピュータのことをホスト(Host)と呼ぶ。
  • また、ホストやルータといった区別をしない、ネットワークにつながったコンピュータの総称をノード(Node)と呼ぶ。
ハガユウキハガユウキ

ルーティングテーブル

  • TCP/IPの世界では、次にパケットを渡すべき相手をルーティングテーブル(RoutingTable)というもので管理している。
  • ルーティングテーブルは、インターネットにつながるノードがそれぞれ持っています。
  • ip route showで、インターネットにつながる自分のコンピュータのルーティングテーブルを確認できる。
ハガユウキハガユウキ

これが自分のPCのルーティングテーブル

root@60a459bf9d33:/# ip route show
default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.2

ルーティングテーブルは複数のルーティングエントリ(ルーティングテーブルの各行のこと)で構成されている。ルーティングエントリを構成する2大要素は、「宛先(defaultや172.17.0.0/16)」と「次にパケットを渡す相手(Next Hopとも呼ぶ)」である

注) ルーティングエントリのことを経路と呼ぶこともある。

ハガユウキハガユウキ

defaultは他のどの宛先にも該当しないときに使われる宛先。デフォルトルートと呼ばれる。
172.17.0.0/16は、複数のIPアドレスをまとめた表現方法。この表記方法では、256個のIPアドレスをまとめて宛先として指定している。つまり、ルーティングテーブルでは、宛先となるIPアドレスを必ずしもひとつずつ書くわけではない。もちろん一つずつ書くこともできるけど、効率が悪いので、いくつかまとめて扱えるようにしている。

ホスト部が全て0のIPアドレスはネットワークアドレスである。 ネットワークアドレスは
 ネットワーク自体を指すアドレスとして使用される。ネットワークに割り当てるアドレスなので、ホストに割り当てることはできない。

https://www.infraexpert.com/study/ip4.html

ハガユウキハガユウキ

宛先の後ろにあるのがネクストポップである(次にパケットを渡す相手)。
宛先がデフォルトルートのルーティングエントリの場合、via 172.17.0.1がネクストポップに該当する。 つまり、デフォルトルートのルーティングエントリを解釈すると、他に該当しない全ての宛先のパケットは、172.17.0.1に転送する」という意味である。

ハガユウキハガユウキ

devとなっているネクストポップについて、これは該当する宛先についてはそのネットワークインターフェースを用いて通信することを示している。 たしかに、自分以外のホストと通信する際の自分のIPアドレスは、 172.17.0.2/16であり、ネットワークインターフェースはeth0だったな。

ハガユウキハガユウキ

172.17.0.0/16 dev eth0の場合、自分自身のホストがそのネットワークに存在しているので、ネクストポップとなるルータを必要とせずに、通信することができる。なるほどね。わかってきた

要は、同じネットワークに所属しているホストたちだから、ルータを必要とせずに通信できるよねって話。

ハガユウキハガユウキ

てことは、複数のホストがあるネットワークに所属している場合、そのネットワークに所属しているルータを使わずとも、複数のホストは通信できるということか。自分のネットワークとは別のネットワークに所属しているホストと通信する場合は、自分のネットワークに存在するルータを経由しないとダメ。わかってきた

ハガユウキハガユウキ

ルーティング

ルーティングテーブルを使って、ネクストホップにパケットを転送する作業のことをルーティング(Routing)といいます。インターネットを構成するルータがやっているバケツリレーは、このルーティングという作業です。

コマンドを実行したホストが持つルートテーブルをもとにルーティングがまずは決まる。デフォルトルートの場合、NextPopのルーターにパケットが渡る。
NextPopとなるルータは他のノードからパケットを受け取って、そのパケットのヘッダを見て、宛先のIPアドレスを取得する。その後、そのルータは自分のルーティングテーブルを見て、宛先のIPアドレスに一致するNextPopにパケットを送る。

ネクストホップにパケットを渡す作業のことをフォワーディング(Forwarding)と呼んで、ルーティングの作業と区別することもあります。区別するときは、ルーティングテーブルからネクストホップを調べるまでの作業がルーティングと呼ばれます。
momijiame. Learning TCP/IP networking by exercise on Linux (Japanese Edition) (p. 58). Kindle Edition.

へー。フォワーディングという言葉が絡むときは、ルーティングはルーティングテーブルからネクスホップを調べるまでの作業になるのか。

ハガユウキハガユウキ

2つのインターネット(IPv4/IPv6)

実は、この世界には2つのインターネットが、まったく別々に存在しています。それは、プロトコルにIPv4(InternetProtocolversion4)を使ったインターネットと、IPv6(InternetProtocolversion6)を使ったインターネットです。さまざまな共存技術はありますが、両者には基本的に互換性がありません。そのため、IPv4のインターネットを使うにはIPv4アドレスが、IPv6のインターネットを使うにはIPv6アドレスが必要になります

momijiame. Learning TCP/IP networking by exercise on Linux (Japanese Edition) (pp. 58-59). Kindle Edition.

ハガユウキハガユウキ

実は、IPv4のアドレスは、普及に伴って新たに使えるものが少なくなってきているのです。そのため、今は次世代のインターネットとしてIPv6への移行が試みられています。

momijiame. Learning TCP/IP networking by exercise on Linux (Japanese Edition) (p. 59). Kindle Edition.

ハガユウキハガユウキ

19ただし、NAT64/DNS64のように、異なるアドレス体系のインターネットに対して間接的にアクセスする技術も存在します。

momijiame. Learning TCP/IP networking by exercise on Linux (Japanese Edition) (p. 61). Kindle Edition.

ハガユウキハガユウキ

そうか、ネットワーク自体を表すIPアドレス(ネットワークアドレス)が存在するってことは、ネットワークを差ししめることができるのか。なんとなくネットワークがわかってきた。とりあえずIPアドレスを所有しているっていうのがわかりやすい。

ハガユウキハガユウキ

vagrantを入れて仮想マシンでracerouteを使うと、どのルータを通って、ホストにたどり着いたのかが分かるな。やっぱデフォルトルートがインターネットの入り口のルートを表していたのか。ルートテーブルにない宛先を指定すると、デフォルトルートが選ばれて、デフォルトルートに指定してあるNextPopのノードにパケットが運ばれる。そして、そのルータは差し出したホストと同じネットワークに所属しているからまだ自分のネットワークを出たわけではない。その後、そのルータのルートテーブルによって、自分のネットワークを出てインターネットへつながる。

vagrant@ubuntu-focal:~$ traceroute -n 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  10.0.2.2  0.219 ms  0.145 ms  0.083 ms
 2  133.20.191.254  40.646 ms  40.229 ms  40.579 ms
 3  133.20.17.158  40.898 ms  40.440 ms  41.117 ms
 4  133.20.17.238  44.535 ms  42.643 ms  43.112 ms
 5  150.99.182.77  43.795 ms  68.986 ms  68.661 ms
 6  150.99.9.125  46.459 ms  43.468 ms  44.467 ms
 7  101.203.88.173  45.648 ms  9.180 ms  11.384 ms
 8  108.170.242.97  12.285 ms  13.108 ms 108.170.242.193  13.918 ms
 9  142.250.214.139  13.445 ms 142.251.226.139  12.670 ms 142.251.60.197  13.664 ms
10  8.8.8.8  12.257 ms  13.961 ms  11.905 ms
vagrant@ubuntu-focal:~$ ip route show
default via 10.0.2.2 dev enp0s3 proto dhcp src 10.0.2.15 metric 100
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15
10.0.2.2 dev enp0s3 proto dhcp scope link src 10.0.2.15 metric 100
vagrant@ubuntu-focal:~$
ハガユウキハガユウキ

internetとは

インターネット(またはinternet)[a]は、インターネット・プロトコル・スイート(TCP/IP)[b]を使用してネットワークやデバイス間で通信を行う、相互接続されたコンピュータネットワークの世界的なシステムである。

https://en.wikipedia.org/wiki/Internet

ハガユウキハガユウキ

そうか、超個人的に解釈すると、インターネットって、TCP/IPのプロトコル群で複数のネットワークが接続された世界的なネットワークのことなのか。要は世界中のネットワークの集合体がインターネット。インターネットへの行き方はデフォルトルートで表される。自分と同じネットワークに所属しているルータがインターネットへ案内してくれる

https://nyoken.com/internet

ハガユウキハガユウキ

ネットワークを棒で書くとすると、こんな感じでホスト(IPアドレスを持ってネットワークにつながっている、ルータではないコンピュータ)はインターネットに接続している。
ネットワークを図示する際に棒(線)で表現するのは、複数のノード(ホストやルータといった区別をしない、ネットワークにつながったコンピュータの総称)が相互に接続されていることを視覚的に示すため。自分と同じネットワークに所属しているルーターがインターネットへ案内してくれる(自分のホストが持つルートテーブルからデフォルトルートが選ばれたときに、同じネットワークに所属しているルータへパケットが流れる。そしてルーターがインターネットへ案内してくれる)。

このスクラップは2023/07/25にクローズされました