End-to-Endの通信機能は、下位のNetwork層に任せているので、これより上の層の役割は、通信機能そのものではなく、通信に様々な「付加価値」を加えることにある。
セグメンテーション
通信したいデータの大きさは、その目的によって、異なる。
おおきなデータを分割し、個々に転送し、受信側で組み立てる仕組が必要。
トランスポート層では、データの分割と組み立てを同時に行う機能を提供する。
多重化
一つの通信経路(2)で、複数の通信を行うための仕組。
データを幾つかに分割し、(下位層での..)一回あたりの通信路の専有時間を短くすること(セグメンテーション)によって、時分割による通信経路の共有を実現する(3)。
データの信頼性
Network層では、データの到達を保障しない(信頼できない.. )。そこで、通信の信頼性を保障する機能(4)を提供する。
フロー制御
通信路の品質や帯域によって、通信速度を変更する仕組(5)。
ネットワーク層の通信では、End-to-Endというののは、Host-to-Hostを意味する(原則として、network addressは、Hostに振られている)。そこで、同一Host間であっても、複数の通信を行うための仕組が必要なる。(1)以上、一つの用途に、通信経路を専有させるわけには行かない。
例えば、最近の携帯電話では、音声と同時に、画像やe-mailなども、同じ通信経路で、並行に送ることができる。
本質的には、相手にデータが届いているかどうかを確認し、もし、届いていないようならば、再送するという仕組で行う。
その他にも、予め、冗長な形で情報を伝達することによって、多少の情報が失われても、ある程度は、元の情報が再現できるような仕組(エラー訂正)を提供することもある。
TCP/IP Modelでは、IP Addressで、Network上のHostをAddressingするが、更に同一のHostが複数の通信を行えるように、同一Hostを更に、サービスで区別するためPortという、更にHost内での通信を区別するための仕組(6)がある。
Hostは、IP AddressとPort番号の対(これをソケットと呼ぶ.. )で、通信の端点( End )を表現しており、通信は、このEnd間(すなわち、ソケット対)で、通信を区別する。
これによって、同一のHost内の同一のサービス(したがって、IP AddressとPort番号が共に同じになるので、当然、ソケットも同じ.. )を、Internet内の複数のHostや、同一Hostからの複数接続を可能にしている。
つまり、このトラスポート層には、「機能が追加できる」が、「追加しなければならない」わけではない。
機能を犠牲にして、効率を尊ぶ場合もあるし、そもそも、機能が不要な場合も十分に有りうる。
この結果、効率よく、かつ、信頼牲のある通信が可能になる可能性があるが、その代わりに、上位層で余分な心配をしなければならない。
結局は、どこでトレードオフするかという問題。
認証や、通信の許可の発行、複数システムの同期等を行う。
交換されるデータの形式に関する取り決めを行う。
例えば、e-mailの交換を行う場合は、To:やSubject:がある部分( Header )と、本文( Body )に分れるが、それらのデータがそれぞれどんな形をし、どんな意味を持つかを取り決める。
End Userとやりとりをし、通信を行う全てのプログラムはアプリケーション層のプログラム。