TCP/IPの基礎
-
プロトコル
- 通信を行う上での取り決め
TCP/IPプロトコル
OSI参照モデル | TCP/IPの構造 |
---|---|
アプリケーション層 プレゼンテーション層 セッション層 |
アプリケーション層(HTTP, SMTP, TELNET, etc.) |
トランスポート層 | トランスポート層(TCP, UDP) |
ネットワーク層 | インターネット層(IP, ICMP) |
データリンク層 物理層 |
ネットワークインターフェース層 |
TCP: Transmission Control Protocol
-
コネクション型
-
信頼性高い
- 再送制御
- 伝送順序の整列
-
-
上位レイヤ
- FTP
- Telnet
- POP
- SMTP
- etc.
UDP: Uesr Datagram Protocol
-
コネクションレス型
- 信頼性低い
- はやい
-
上位レイヤ
- DNS
- NFS
- 音声や映像のストリーミング配信
IP: Internet Protocol
-
IPアドレスの規定
- 32bits
- データグラム(伝送単位)の規定
-
データグラムが伝送されるネットワーク経路の制御
- routing
IPv6
- アドレス部128bits
- セキュリティ機能
ICMP: Internet Control Message Protocol
- エラーメッセージや制御メッセージの伝送用
- pingやtracerouteで使用される
IPアドレス(IPv4)
- 32ビット
- 8ビットずつ分割、
.
区切り10進表記 -
ネットワーク部/ホスト部
- クラスやサブネットマスクで規定される
-
ホストNICに割り当てられないアドレス
-
ホスト部全ビット0: ネットワークアドレス
- ネットワーク自身
-
ホスト部全ビット1: ブロードキャストアドレス
- ネットワーク以下全ホストに送信
-
クラス
- 最初の8ビットによる分類
A | B | C | |
---|---|---|---|
先頭8ビット | 0xxxxxxx | 10xxxxxx | 110xxxxx |
先頭8ビット(10進) | 0-127 | 128-191 | 192-223 |
サブネットマスク | 255.0.0.0 | 255.255.0.0 | 255.255.255.0 |
ホスト数 | 2^24 - 2 | 2-16 - 2 | 2^8 - 2 |
-
特殊なアドレス
-
デフォルトルート
- 先頭8ビットが0
-
知らないネットワーク宛のパケットを丸投げ
- デフォゲ的な?
-
ローカルループバック
- 先頭8ビットが127
localhost
が127.0.0.1
だったり
-
プライベートアドレス
- IPアドレスは、原則インターネット内で一意
-
例外: プライベートアドレス
- LAN内で一意ならOK
A | B | C | |
---|---|---|---|
先頭 | 00001010.******** |
10101100.0001**** |
11000000.10101000 |
先頭(10進) | 10 | 172.16 - 172.32 | 192.168 |
CIDR: Classless Inter-Domain Routing
-
クラスCでもホスト数254
- こんなにいらねえ
- ネットワークにぶら下げられるホストを減らし、ネットワークを分割する
-
例:
192.168.0.0/26
- もともとネットワーク部が24ビットなのを、26に
- 2ビットを使って、4つのサブネットワークに分ける
第四オクテット | 0b00 | 0b01 | 0b10 | 0b11 |
---|---|---|---|---|
ネットワークアドレス | 192.168.0.0 | 192.168.0.64 | 192.168.0.128 | 192.168.0.192 |
ブロードキャストアドレス | 192.168.0.63 | 192.168.0.127 | 192.168.0.191 | 192.168.0.255 |
ホストに使えるやつ | 1-62 | 65-126 | 129-190 | 193-254 |
IPアドレス(IPv6)
-
128ビット
- ながい
:
区切りの16進数4桁(=16ビット)8ブロック表記-
長いので、省略記法多数
- 各ブロック先頭の0は省略可
-
連続する0のみブロックは
::
と略記可能-
1箇所だけ
- さもないと、何ブロック略記されているのか特定できないから
-
-
プレフィックス
- IPv4でいうネットワーク部のこと
- 64ビット
-
インタフェースID
- IPv4でいうホスト部のこと
- 64ビット
分類 | IPv6表記 | プレフィックス(2進) | 備考 |
---|---|---|---|
ローカルループバックアドレス | ::1/128 | 000…1 | |
グローバルユニキャストアドレス | 2000::/3 | 001 | |
リンクローカルユニキャストアドレス | fe80::/10 | 1111111010 | |
マルチキャストアドレス | ff00::/8 | 11111111 | IPv4のブロードキャストアドレス相当 |
エニーキャストアドレス | 複数のホストの集合に割り当てられる |
ポート番号
-
送信元/先の識別に使われる
- これのおかげで、同一のホストが複数のアプリケーションを使用していても正しく通信できる
- 0は特殊。「動的に別の空きを割り当ててね」というやつ(any port)
-
どのアプリケーションが何番を使うか、有名どころは決まっている(well-known port)
- 1023まで予約済
-
IANA: Internet Assigned Numbe Authority
- well-known portの予約などを行う組織
- 現在、ICANNの下部組織
番号 | トランスポート層 | 上位サービス・プロトコル | 説明 |
---|---|---|---|
20 | TCP | FTP | FTPのデータ転送 |
21 | TCP/UDP | FTP | FTPの制御情報 |
22 | TCP | SSH | SSH |
23 | TCP | Telnet | Telnet接続 |
25 | TCP/UDP | SMTP | 電子メール |
53 | TCP/UDP | DNS | DNS |
80 | TCP | HTTP | Web |
110 | TCP | POP3 | 電子メール(受信) |
123 | UDP | NTP | NTPサービス |
139 | TCP/UDP | NetBIOS | Microsoftネットワーク |
143 | TCP | IMAP | 電子メール(IMAP2/IMAP4) |
161 | UDP | SNMP | ネットワークの監視 |
162 | TCP/UDP | SNMP Trap | ネットワークの監視(警告通知等) |
389 | TCP/UDP | LDAP | ディレクトリサービス |
443 | TCP/UDP | HTTP over SSL/TLS | SSL/TLSによるHTTP接続 |
465 | TCP | SMTP over SSL/TLS | SSL/TLSによるSMTP接続 |
514 | UDP | Syslog | ロギングサービス |
636 | TCP/UDP | LDAP over SSL/TLS | SSL/TLSによるディレクトリサービス |
993 | TCP/UDP | IMAP over SSL/TLS | SSL/TLSによるIMAP接続 |
995 | TCP/UDP | POP3 over SSL/TLS | SSL/TLSによるPOP3接続 |
- 465 — SSMTPはIANAによる正式な割り当てではないらしい
-
レジスタードポート
-
1024-49151
- 49151 = 65535 - 16384 = (1 << 16) - 1 - (1 << 14)
- 使用可能な0-65535のうちだいたい3/4
-
ベンダやグループの申請により割り当てが可能
- PostgreSQL: 5432 とか
-
-
IPv4でローカルにWebサーバーを立てたなら
127.0.0.1:80
-
IPv6では、IPアドレスのブロックの区切りの
:
と混ざってしまわないよう、アドレスを[]
で囲む[0:0:0:0:0:0:0:1]:80
- ポート番号とサービスとの対応は
/etc/services
に記述されている
/etc/services
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, officially ports have two entries
# even if the protocol doesn't support UDP operations.
#
# Updated from http://www.iana.org/assignments/port-numbers and other
# sources like http://www.freebsd.org/cgi/cvsweb.cgi/src/etc/services .
# New ports will be added on request if they have been officially assigned
# by IANA and used in the real-world or are needed by a debian package.
# If you need a huge list of used numbers please install the nmap package.
tcpmux 1/tcp # TCP port service multiplexer
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
qotd 17/tcp quote
msp 18/tcp # message send protocol
msp 18/udp
chargen 19/tcp ttytst source
chargen 19/udp ttytst source
ftp-data 20/tcp
ftp 21/tcp
fsp 21/udp fspd
ssh 22/tcp # SSH Remote Login Protocol
telnet 23/tcp
smtp 25/tcp mail
ネットワークの設定
ネットワークの基本設定
-
コマンドで設定
ifconfig
とか- 一時的
-
設定ファイルで設定
/etc
以下のなにか- 永続化
/etc/hostname
ファイル
wand-ThinkPad-X240s
/etc/hosts
ファイル
127.0.0.1 localhost
127.0.1.1 wand-ThinkPad-X240s
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
-
名前解決を記述
-
ホスト名の定義ファイルではない
- それは
/etc/hostname
- それは
-
-
小規模ネットワークならこれでネットワーク内の名前解決が実現可能
- Dockerでちょっと遊ぶだけ、とか
- ネットワークに変更があったら、全ホストの
/etc/hosts
を書き換える必要あり
/etc/network/interfaces
ファイル
- Debian系ディストリ
- ネットワークインタフェースの設定を記述
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
- loインタフェースをループバックとして設定しているもよう
/etc/sysconfig/network-scripts
ディレクトリ
- Red Hat系ディストリ
-
様々なネットワークインタフェースの設定ファイルを配置
ifcfg-eth0
とかそういう感じのファイル命名
-
CentOS7コンテナにはなかったです
nmtui
/nmcli
コマンドを使って設定することが推奨されているらしい
- CentOS6コンテナにはあった
NetworkManagerによる設定
-
NetworkManager
- CentOS, Red Hatに導入されている
- centos7コンテナには入っていなかった
- C-S構成
- インストール
yum install -y NetworkManager
- サービス動かす
systemctl start NetworkManager
systemctl status NetworkManager
● NetworkManager.service - Network Manager
Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2019-04-17 06:24:31 UTC; 5s ago
Docs: man:NetworkManager(8)
Main PID: 2318 (NetworkManager)
CGroup: /docker/727bfe1baddeb8a5b1488ef5c03d3198417e541231a2e53a06ec7c691adbd0e0/system.slice/NetworkManager.service
└─2318 /usr/sbin/NetworkManager --no-daemon
‣ 2318 /usr/sbin/NetworkManager --no-daemon
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info> [1555482271.9644] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info> [1555482271.9652] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info> [1555482271.9656] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info> [1555482271.9659] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info> [1555482271.9668] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info> [1555482271.9671] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info> [1555482271.9674] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info> [1555482271.9680] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info> [1555482271.9684] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info> [1555482271.9689] ...
Hint: Some lines were ellipsized, use -l to show in full.
- Clientさわる
nmcli --help
-
dockerみたいなコマンド体系
- 「何を(OBJECT)」「どうする」という感じ
...
OBJECT
g[eneral] NetworkManager's general status and operations
n[etworking] overall networking control
r[adio] NetworkManager radio switches
c[onnection] NetworkManager's connections
d[evice] devices managed by NetworkManager
a[gent] NetworkManager secret agent or polkit agent
m[onitor] monitor NetworkManager changes
- Network Managerの状態を表示
nmcli general status
# nmcli general # これでもおなじ
STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN
connected full enabled enabled enabled enabled
- 無線接続
- 状態取得
nmcli radio
WIFI-HW WIFI WWAN-HW WWAN
enabled enabled enabled enabled
- Wi-Fiのみ取得
nmcli radio wifi
enabled
-
Wi-Fi無効化・有効化
- privilegedコンテナ内から実行するとホストのWi-Fiが影響を受ける
sudo nmcli radio wifi off
nmcli radio
WIFI-HW WIFI WWAN-HW WWAN
enabled disabled enabled enabled
sudo nmcli radio wifi on
nmcli radio all
WIFI-HW WIFI WWAN-HW WWAN
enabled disabled enabled enabled
- 接続一覧取得
nmcli connection show
NAME UUID TYPE DEVICE
eth0 50a52767-1d0d-4a3b-b4de-81161e89807f ethe
rnet eth0
Wired connection 1 291c7b26-6e87-32b8-b702-3839a81df5dd ethernet --
- デバイス情報取得
nmcli device status
# nmcli device # これでもおなじ
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected eth0
lo loopback unmanaged --
-
hostnamectl
- ホスト名設定・関連情報の取得
hostnamectl status
# hostnamectl status # これでもおなじ
[root@727bfe1badde /]# hostnamectl status
Static hostname: 727bfe1badde
Icon name: computer-laptop
Chassis: laptop
Machine ID: 5e7ad63340d1400aba5b3b022de880bb
Boot ID: 3aa178b2499447f28aa817cf02905437
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 4.15.0-47-generic
Architecture: x86-64
- ホスト名変更
sudo hostnamectl set-hostname piyo
コラム: systemd-networkd
- Systemd採用システム
- NetworkManagerやnetplan(Ubuntu)の代替
/etc/systemd/network/
ディレクトリ以下の設定ファイルで設定