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