Open1

Linuxで動かしながら学ぶTCP/IPネットワーク入門

yucattyyucatty

TCP/IPとは

  • インターネットを構成するプロトコルの総称
  • コンピュータ同士が会話するための共通言語のようなイメージ
  • TCPとIPもそれぞれプロトコル

IPアドレス

コンピューターのIPを確認する

root@18bd86182100:/var/tmp# 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 ::
14: eth0@if15: <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
  • 127.0.0.1や172.17.0.2がコンピュータのIPアドレス
  • loeth0はネットワークインターフェイスのこと
    • LANケーブルをさすネットワークインターフェイスカード(NIC)や無線LANアダプタなど
  • IPアドレスはネットワークインターフェイスに付与される
  • 127.0.0.1は自分自身のIPでループバックアドレスという
    • ループバックアドレスが付与されているネットワークインターフェイスをループバックインターフェイスとよぶ
    • ループバックインターフェイスは仮想的なもの
  • 172.17.0.2がリクエスト送信元のIPアドレス

リクエスト送信元のIPアドレスを確認

別ターミナルで以下のコマンドを実行して、ping -c 3 8.8.8.8 をした時
tcdumpで通信を覗くことができる
pingの通信はIPとICMPで成り立っている

root@18bd86182100:/var/tmp# 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), capture size 262144 bytes
IP 172.17.0.2 > 8.8.8.8: ICMP echo request, id 4, seq 1, length 64
IP 8.8.8.8 > 172.17.0.2: ICMP echo reply, id 4, seq 1, length 64
IP 172.17.0.2 > 8.8.8.8: ICMP echo request, id 4, seq 2, length 64
IP 8.8.8.8 > 172.17.0.2: ICMP echo reply, id 4, seq 2, length 64
IP 172.17.0.2 > 8.8.8.8: ICMP echo request, id 4, seq 3, length 64
IP 8.8.8.8 > 172.17.0.2: ICMP echo reply, id 4, seq 3, length 64

経路を確認する

routerのIPが確認することができる

root@18bd86182100:/var/tmp# 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  0.122 ms  0.021 ms  0.014 ms
 2  10.6.5.1  122.630 ms  122.537 ms  121.780 ms
 3  45.87.213.97  121.113 ms  119.882 ms  119.770 ms
 4  193.27.15.50  134.692 ms  136.632 ms  136.678 ms
 5  193.27.15.176  118.855 ms  117.882 ms  117.834 ms
 6  101.203.88.173  376.199 ms  375.841 ms  376.186 ms
 7  108.170.242.129  116.573 ms  273.717 ms 108.170.242.161  276.459 ms
 8  142.251.226.141  273.291 ms  273.271 ms 216.239.41.71  277.315 ms
 9  8.8.8.8  272.969 ms  272.931 ms  272.104 ms

次のルートを確認する

次にパケットを渡す相手をルーティングテーブルで管理している

root@18bd86182100:/var/tmp# 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

読み方

  • default(どれにも該当しなかった場合を意味する)/172.17.0.0/16は送信先のIPアドレス
  • via/dev以降が次にパケットを渡す相手
    • devとは、該当する送信先についてはそのネットワークインターフェイスを使って通信することを意味する。つまりローカルの通信はネットワークインターフェイスを使うということかな?

    • A dev B proto x scope x src C

      • 送信元IPがCで送信先IPがAの通信はデバイスに流すこと