提供给上层的服务
传输层的最终目标是向它的用户提供高效的、可靠的和成本有效的数据传输服务,它的用户通常是应用层的进程。为了实现这个目标,传输层需要充分利用网络层提供给它的服务。在传输层内,完成这项工作的硬件和/或软件称为传输实体(transport entity)。传输实体可以实现在主机的不同位置,可能在操作系统内核,或者以一个链接库的形式绑定到网络应用中,或者以一个独立的用户进程运行,甚至可以实现在网络接口卡上。前两种实现方式在Internet上最常见。
传输服务类似于网络服务,但是两者之间有一些重要的区别。最主要的区别在于网络服务毫不掩盖地按照实际网络提供的服务来建立模型。实际网络可能会丢失数据包,所以网络服务一般来说是不可靠的。
与此相反,面向连接的传输服务是可靠的。当然,实际网络并非没有错误,但是,这恰好是传输层的目标——在不可靠的网络之上提供可靠的服务。
传输服务原语(简单的)
这个传输接口给出了一个传输接口应该完成的基本工作,允许应用程序建立并使用连接,用完之后再释放连接。
原语 | 发出的包 | 含义 |
---|---|---|
LISTEN | (无) | 阻塞,直到某个进程试图与之连接 |
CONNECT | CONNECTION REQ | 主动尝试建立一个连接 |
SEND | DATA | 发送信息 |
RECEIVE | (无) | 阻塞,直到达到一个DATA包 |
DISCONNECT | DISCONNECTION REQ | 请求释放连接 |
TCP的套接字原语
原语 | 含义 |
---|---|
SOCKET | 创建一个新通信端点 |
BIND | 将套接字与一个本地地址关联 |
LISTEN | 声明愿意接收连接;给出队列长度 |
ACCEPT | 被动创建一个入境连接 |
CONNECT | 主动创建一个连接 |
SEND | 通过连接发送一些数据 |
RECEIVE | 从连接上接收一些数据 |
CLOSE | 释放连接 |
寻址
当一个应用(比如一个用户)进程希望与另一个远程应用进程建立连接时,它必须指定要连接到哪个应用进程上(无连接的传输也有同样的问题:消息发送给谁?)。通常使用的方法是为那些能够监听连接请求的进程定义相应的传输地址。在Internet中,这些端点称为端口(port)。
通用术语传输服务访问点(TSAP,Transport Service Access Point) 表示传输层的一个特殊端点,网络层上的类似端点(即网络层地址)称为网络服务访问点(NSAP,Network Service Access Point)。IP地址是NSAP的实例。
应用进程(包括客户和服务器)可以将自己关联到一个本地TSAP上,以便与一个远程TSAP建立连接。这些连接运行在每台主机的NSAP之上,如上图所示。在有些网络中,每台计算机只有一个NSAP,但是能有多个传输端点共享此NSAP,因此需要某种方法来区分这些传输端点。
使用传输连接的一种可能场景如下所述。
- 主机2上的邮件服务器进程将自己关联到TSAP 1522上,等待入境连接请求的到来。
- 主机1上的应用进程希望发送一个邮件消息,所以它把自己关联到TSAP 1208上,并且发出一个CONNECT请求。该请求消息指定主机1上的TASP 1208作为源,主机2上的TSAP 1522作为目标。这个动作最终导致在应用进程和服务器之间建立了一个连接。
- 应用进程发送邮件消息。
- 作为响应,邮件服务器表示它将传递该消息。
- 传输连接被释放。
注意,在主机2上很可能还有其他的服务器被关联到其他的TSAP上,它们也在等待经过同一个NSAP达到的入境请求连接。