層 | プロトコル |
---|---|
アプリケーション層 | |
プレゼンテーション層 | |
セッション層 | |
トランスポート層 | TCP, UDP, QUIC |
ネットワーク層 | IP, ICMP, IPSec, ARP |
データリンク層 | イーサネット(IEEE802.3), PPP, 無線LAN(IEEE802.11) |
物理層 |
層 | プロトコル |
---|---|
アプリケーション層 | HTTP, HTTPS, SMTP, POP, IMAP, SSH, SSL(TSL) |
トランポート層 | TCP, UDP, QUIC |
インターネット層 | IP, ICMP, IPSec, ARP |
ネットワークインターフェース層 | イーサネット(IEEE802.3), PPP, 無線LAN(IEEE802.11) |
マスタリングTCP/IP 入門編 p38
機器 | 役割 |
---|---|
ネットワークインターフェース(Network Interface) | コンピュータをネットワークに接続するための装着 |
リピーター(Repeater)|ネットワークを物理層で延長する装置 | |
ブリッジ(Bridge/L2スイッチ) | ネットワークをデータリンク層で延長する装置 |
ルーター(Router/L3スイッチ) | ネットワーク層によってパケットを転送する装置 |
ゲートウェイ | プロトコルの変換をする装置 |
ネットワークと機器を接続する装置(物理的なものも仮想的なものもある)でネットワークインタフェースカードやネットワークアダプタとも呼ぶ。
ネットワークカード(Network Card)は、ネットワークへの物理的な接続を提供するためにコンピュータにインストールされるアダプタ回路基板である[1]。コンピュータネットワーク内でコンピュータ間の通信を行うために使用されるハードウェアの1つである。
一般的にはLANカード(ランカード)と呼ばれることが多いが、ネットワークアダプタ、ネットワークインタフェースカード(Network Interface Card)などとも呼ばれる。名称のとおり、LANカードについては、有線のLAN、特にイーサネットに対する物を指す場合が多い。ネットワークアダプタについても古くは同様であったが、イーサネット等以外の各種のネットワーク、例えば無線LANや3G、WiMAX等の普及により、コンピュータ(ホスト)から見た通信デバイス一般を指すようになった。NICと称する場合もあるが、これがネットワークインタフェースカード(Network Interface Card)という物理的媒体を指すのか、ネットワークインタフェースコントローラ(Network interface controller)という、非物理的な機能を指すのかは文脈から判断するほかない。
ネットワーク・インターフェースは1台のホストに複数存在する場合がある。
$ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=201<PERFORMNUD,DAD>
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=50b<RXCSUM,TXCSUM,VLAN_HWTAGGING,AV,CHANNEL_IO>
ether a8:60:b6:2b:a1:81
inet 192.168.11.46 netmask 0xffffff00 broadcast 192.168.11.255
media: autoselect (1000baseT <full-duplex,flow-control,energy-efficient-ethernet>)
status: active
en1: flags=8823<UP,BROADCAST,SMART,SIMPLEX,MULTICAST> mtu 1500
options=400<CHANNEL_IO>
ether 98:9e:63:4b:1d:82
media: autoselect (<unknown type>)
status: inactive
上記はlo0
はループバックアドレス127.0.0.1のネットワーク・インターフェース、en0はイーサネットのネットワーク・インターフェース(IPが振られているので実際に使用されている)、eh1はイーサネットのネットワーク・インターフェースだがIPが振られていないので未使用。
ネットワークアダプタには、MAC(Media Access Control)という製造段階で決められ世界で一意の識別番号が採番されている。
データリンク層でフレーム
を転送する機器の総称をブリッジと呼ぶ。
(ブリッジはOSIの第2層の機器なのでL2スイッチとも呼ぶ。)
データリンク層でフレームを転送する機器
-- TPC/IP ネットワーク入門 p.100
ブリッジにはおもに以下の機器がある。
※ L2スイッチはMACアドレスでPCを識別する。IPアドレスは使用されない。
※ スイッチにはOSIの階層に対応して、L2スイッチ、L3スイッチなどがある。
ネットワーク層でパケット
を転送する機器にルーターやL3スイッチがある。
種類 | 内容 |
---|---|
L2スイッチ | 各ポートにつながっているホストのMACアドレスを記憶して送信相手のみに信号を流す。 |
L3スイッチ | インターネット層まで扱うことができる。VLAN(Virtual LAN)を構築できる。 |
名称 | 内容 |
---|---|
ホスト | ネットワーク上でIPが付与されて経路制御を行わない機器 |
ルーター | ネットワーク上でIPが付与されて経路制御を行なう機器 |
ノート | ホストとルーター合わせたもの |
フレーム
単位パケット
単位ref.
パケット
単位$ sudo tcpdump -tnl -i eth0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
ping -c 3 example.org
PING example.org (93.184.216.34) 56(84) bytes of data.
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=1 ttl=43 time=109 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=2 ttl=43 time=109 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=3 ttl=43 time=109 ms
--- example.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 109.357/109.363/109.376/0.008 ms
$ sudo tcpdump -tnl -i eth0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
IP 10.3.0.183 > 93.184.216.34: ICMP echo request, id 1, seq 1, length 64
IP 93.184.216.34 > 10.3.0.183: ICMP echo reply, id 1, seq 1, length 64
IP 10.3.0.183 > 93.184.216.34: ICMP echo request, id 1, seq 2, length 64
IP 93.184.216.34 > 10.3.0.183: ICMP echo reply, id 1, seq 2, length 64
IP 10.3.0.183 > 93.184.216.34: ICMP echo request, id 1, seq 3, length 64
IP 93.184.216.34 > 10.3.0.183: ICMP echo reply, id 1, seq 3, length 64
セグメント
単位6
tcpdump
とcurl
を使用して、HTTPSにおけるTCPのスリーウェイハンドシェイクを確認する。
tcpdump
でHTTPS通信のTCPパケットをキャプチャ開始する。
ネットワークインターフェースはeth0
と仮定する。
$ sudo tcpdump -tnl -i eth0 port 443 and host 93.184.216.34
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
curl
でhttps://example.org
にリクエスト送信する。
$ curl --head https://example.org
HTTP/2 200
content-encoding: gzip
accept-ranges: bytes
age: 507109
cache-control: max-age=604800
content-type: text/html; charset=UTF-8
date: Fri, 15 Apr 2022 23:44:07 GMT
etag: "3147526947+gzip"
expires: Fri, 22 Apr 2022 23:44:07 GMT
last-modified: Thu, 17 Oct 2019 07:18:26 GMT
server: ECS (sab/56F3)
x-cache: HIT
content-length: 648
--head
オプションは、レスポンスヘッダのみを表示する。
スリーウェイハンドシェイクでTCPコネクションが確立されている。
$ sudo tcpdump -tnl -i eth0 port 443 and 93.184.216.34
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
IP 10.3.0.183.33560 > 93.184.216.34.443: Flags [S], seq 3730146218, win 62727, options [mss 8961,sackOK,TS val 3536179360 ecr 0,nop,wscale 6], length 0 // ---(1)
IP 93.184.216.34.443 > 10.3.0.183.33560: Flags [S.], seq 1871064812, ack 3730146219, win 65535, options [mss 1460,sackOK,TS val 889923695 ecr 3536179360,nop,wscale 9], length 0 // ---(2)
IP 10.3.0.183.33560 > 93.184.216.34.443: Flags [.], ack 1, win 981, options [nop,nop,TS val 3536179464 ecr 889923695], length 0 // ---(3)
IP 10.3.0.183.33560 > 93.184.216.34.443: Flags [P.], seq 1:518, ack 1, win 981, options [nop,nop,TS val 3536179472 ecr 889923695], length 517
IP 93.184.216.34.443 > 10.3.0.183.33560: Flags [.], ack 518, win 131, options [nop,nop,TS val 889923807 ecr 3536179472], length 0
SYN:接続開始要求、ACK:確認応答
UDPが使用される例としてDNS(53ポート)の問い合わせ確認する。
$ sudo tcpdump -tnl -i eth0 udp and port 53
$ dig @8.8.8.8 example.org
※ digはOSのスタブリゾルバ。
$ sudo tcpdump -tnl -i eth0 udp and port 53
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
IP 10.3.0.183.51431 > 8.8.8.8.53: 25064+ [1au] A? example.org. (52)
IP 8.8.8.8.53 > 10.3.0.183.51431: 25064$ 1/0/1 A 93.184.216.34 (56)
ネットワーク層のIPアドレスだけではなく、トランスポート層ポート番号も書き換えることでNATを実現する。
NAPTでは、インターネットに転送するパケットのIPアドレスとポート番号を必要に応じて書きかえるとともに、記憶しておきます。
NAPTでは、この書きかえる前と書きかえた後の対応表をセッションとよんで管理します。
-- TCP/IPネットワーク入門 p148
以下実際はNAPT。
MASQUERADE(マスカレード)は、LinuxにおけるSource NATの実装につけられた名称です。一般にIPマスカレードと呼ばれます。
-- TCP/IPネットワーク入門 p153
MASQUERADE:マスカレード:変装、仮装
iptables
を使った例。
$ sudo iptables -t nat \
-A POSTROUTING \
-s 192.0.2.0/24 \
-o 203.0.113.254 \
-j MASQUERADE
以下実際はNAPT。
送信先がルータのグローバルアドレスになっているパケットを、プライベートアドレスに書きかえます -- TCP/IPネットワーク入門 p153
iptables
を使った例。
$ sudo iptables -t nat \
-A PREROUTING \
-p tcp \
--dport 54321 \
-d 203.0.113.254 \
-j DNAT \
--to-destination 192.0.2.1
この54321を許可することをポートを開ける
と呼ぶことがある。