システムプログラム（第6回）: TCP/IPのプロトコルスタック


# システムプログラム（第6回）: TCP/IPのプロトコルスタック

筑波大学 システム情報系 情報工学域
新城 靖
<yas@cs.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~syspro/2015/2015-07-22 /tcpip.html
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~syspro/2015/
http://www.coins.tsukuba.ac.jp/~yas/

### 層（プロトコル・スタック）

TCP/IPによる通信では、図２に示すように、４つのプロトコル（規約、約束事）
の層が使われる。TCP/IP自身は、TCP層と IP層という２つのプロトコルに分解
される。このようにさまざまなプロトコルが決められ、全体として層をなして
いる。この様子を、プロトコル・スタックと呼ぶ。

図２　TCP/IPにおけるプロトコル・スタック

#### IPアドレス

#### TCPで通信をする時に、通信相手を識別するには
IPアドレス
と
ポート番号が必要になる。
IPアドレスとしては、IPv4 では、32ビットの整数が
使われてる。IPv6 では、128 ビットの整数が使われる。

#### IPアドレスの表記(IPv4)

32ビットのアドレスを 8 ビットずつに 4 つ分ける
各8ビットを、10進数(0〜255)で表す。
4つの10進数を、「.」で区切りつなげる

例：

12.34.56.78

これは、１０進数でいくつになるかを計算したい時には、次のようにして計算
する。

12 * 256 3 + 34 * 256 2 + 56 * 256 1 + 78 * 256 0
(((12 * 256)+34)*256+56)*256+78

#### IPアドレスの表記(IPv6)

128ビットのアドレスを 16 ビットずつに 8 に分ける
各16ビットを、16進数4桁(0〜ffff)で表す。
8個の16進数を、「:」で区切りつなげる。
ただし、0 が続く場所は、全体で1カ所だけは、「::」と省略してもよい。

例：

2001:2f8:3a:1701::86:1
fe80::1
fe80::212:51fe:fe88:8ed2

#### ポート番号

#### TCPで通信をする時に、通信相手を識別するにはIPアドレスと
ポート番号(port number)
が必要になる。ポート番号は、同じホストの中で提供されている様々なサービスを
区別するために使われる。
ポート番号は、16ビットの整数であり、よく使われる
アプリケーション
では、あらかじめどの番号を使うかが決められている。これを
well-knownポート番号(well-known port number)
という。Unix では、1024 番より小さいポート番号を使うには、
特権ユーザ(スーパー・ユーザ、管理者)の権限が必
要であり、このようなポート番号は、
特権ポート番号(privileged port number)
と呼ばれる。

#### 応用層

#### TCP層の上には、応用層が定義されている。この層では、ftp, ssh, Firefox,
Thunderbird などの、TCP/IP を利用するプログラムの間の会話の方法が定
義される。

TCP/IPを使った通信は、まるでプロセス同士が電話で会話するよう
に進められる。普通の電話では、日本語を話す人と英語を話す人は、電話で情
報交換を行うことができない。同様に、同じTCP/IPを使っていても、会話の方
法が違うと、まったく情報交換を行うことができない。ゆえに、TCP/IPの上に
さらに、情報交換のためにさまざまなプロトコルが取り決められている。

TCP/IPの上に構築されているプロトコルの例を、表１に示す。

表１　TCP/IPの上に構築されているプロトコルの例

TCP/IPの上に構築されているプロトコルの例

ポート番号 プロトコルの名前 目的
21 FTP(File Transfer Protocol) ファイル転送
22 SSH (Secure Shell) 暗号通信路によるログイン
23 Telnet 遠隔ログイン(telnet)
25 SMTP(Simple Mail Transfer Protocol) 電子メールの転送
79 finger finger name の取得
80 HTTP(HyperText Transfer Protocol) WWWのデータ転送
110 POP(Post Office Protocol) 電子メールのアクセス
119 NNTP(Network News Transfer Protocol) ネットワーク・ニュースの記事の転送
143 IMAP(Internet Message Access Protocol) 電子メールのアクセス
513 login 遠隔ログイン(rlogin)

/etc/services に、他のポート番号が掲載されている。

#### 物理層

#### IPのデータグラムを転送するためには、さまざまな物理的な媒体が使われる。
物理媒体は、IP層と同様にデータグラム転送サービスを提供するものが多い。
ただし、アドレスとしては、IPアドレスではなく、それぞれの物理層に
独自のものを用いる。

現在LANでは、イーサネットがよく使われいる。イーサネットは、同軸
ケーブル、より対線(Twisted Pair Cable)、または、光ファイバ
を使ってデータグラムを転送する。
無線LAN (IEEE 802.11b/g/a) も、データグラムを転送する。

IPのデータグラムを転送する時に、物理的なデータグラム転送サービスではな
く、他のプロトコルが使われることもある。
モデムなどを使ったシリアル回線では、PPP(Point
to Point Protocol)というプロトコルの上に、IPデータグラムが流される。

IP上に構築された UDP（User Datagram Protocol）も、IPとほとんど同じ機能
を提供する。

#### ホストとルータ

ネットワークに接続されている計算機の中で、ネットワークに１ヵ所の出入り
口（インタフェース）を持っているものは、ホストと呼ばれる。２ヵ所以上の
出入り口を持っている計算機は、ルータと呼ばれる。ルータは、ネットワーク
とネットワークを接続するための計算機である。ルータは、入ってきたIPのパ
ケットのIPアドレスを見て、どのネットワークに送ればよいかを判断する。

図１で、左端と右端にあり、４層全てそろっている部分がホストである。
TCP/IPの通信は、ホストとホストの間で行われる。中央の、２層しかない部分
は、ルータである。ルータの仕事は、IP層において行われる。

#### OSI 7層参照モデル

#### TCP/IP は、OSI参照モデルよりも古い。OSI参照モデルでは、プロトコル・ス
タックは 7層からなるが、TCP/IPでは 4 層しかない。

## IP層

## TCP は、IP という通信プロトコルを利用して実現されている。

### IPのデータグラム

### IPは、（信頼
性がない）データグラム（datagram）転送サービスを提供する通信プロトコル
である。データグラムとは、次のような性質を持つ。

データの送り手と受けての間に結合(connection，通信路)が作られない
複数回に分けて送り出したデータの順番が入れ替わる可能性がある
送り出したデータが途中で失われることもある

図？　結合が作られる通信プリミティブでのメッセージの配送

図？　結合が作られない通信プリミティブでのメッセージの配送

データグラムは、書留めではない郵便に似ている。
データグラムは、
パケット
と呼ばれることもある。(パケットという言葉は、データの送り手と受けての
間に結合が作られる作られる時にも使われることがある。データグラムは、結
合が作られない通信で使われるひと固まりのデータで、電報(telegram)との類
推から名前が付けらた。)

#### IPアドレス

#### IPのデータグラムが配達されるときに使われる番号が、
IPアドレス
である。IPアドレスとしては、IPv4 では、32ビットの整数が
使われてる。IPv6 では、128 ビットの整数が使われる。

Last updated: 2015/07/16 13:59:50