【概述】
传输层,是在网络层所提供的服务基础上向应用层提供服务,属于面向通信部分的最高层,同时也是用户功能中的最低层
网络层为主机之间提供通信,而传输层为主机间的应用进程提供了逻辑通信,显然,即使网络层协议会使分组丢失、混乱、重复,传输层仍能为应用层提供可靠的服务
从下图可以看出,网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端通信时,只有主机的协议栈才有传输层和应用层,路由器在转发分组时都只用了下上层的功能
简单来说,与网络层相比,传输层主要具有以下功能:
网络层 | 传输层 |
---|---|
提供主机到主机的通信 | 为应用进程间的提供端到端的逻辑通信 |
对 IP 数据报首部进行差错检测 | 对报文的首部、数据部分进行差错检测 |
要么提供面向连接的虚电路,要么提供无连接的数据报,不可能同时存在两种方式 | 可提供两种不同的传输协议,无连接的 UDP、面向连接的 TCP |
复用:发送方不同协议的数据,都可封装成 IP 数据报发送出去 | 复用:发送方不同的应用进程,都可使用同一个传输层协议传输数据 |
分用:接收方的网络层,在剥去报文首部后,能将数据交付给相应协议 | 分用:接收方的传输层,在剥去报文首部后,能将数据交付给目的进程 |
传输层向高层用户屏蔽了网络拓扑、路由协议等底层网络核心细节,使应用进程看见的就是好像两个传输层实体间有一条端到端的逻辑信道,这条逻辑信道对三层的表现却因传输层协议不同而有很大的差别
当传输层采用 TCP 时,尽管下面的网络是不可靠的,但这种逻辑信道就相当于一条全双工的可靠信道;当传输层采用 UDP 时,这种逻辑信道仍是一条不可靠信道
【寻址与端口】
端口的作用
端口(Port),能让应用层的各种应用进程将其数据通过端口交付给传输层,同时让传输层知道,当其将报文段中的数据向上通过端口交付给应用层时,交付给的是哪个进程
端口,就是传输层的服务访问点 SAP,其在传输层的作用类似于 IP 地址在网络层的作用,或 MAC 地址在链路层的作用,只是 IP 地址与 MAC 地址标识的是主机,端口标识的是主机中的进程
在协议栈层之间,抽象的协议端口是软件端口,是各种协议进程与传输实体进行层间交互的一种地址;而路由器和交换机上的接口是硬件端口,是不同硬件设备进行交互的接口
端口号
端口号(Port Number)只具有本地意义,其用于标识本计算机应用层中的进程
主机中的端口号长度为 $16bit$,最多可标识 $2^{16}=65536$ 个不同的进程
根据端口号的范围,可将端口分为两类:
1.服务端使用端口号
服务端使用端口号又分为范围为 0~1023
的熟知端口号,和范围为 1024~49151
的登记端口号
其中,熟知端口号由互联网地址指派机构 IANA 分配给了 TCP/IP 的一些重要应用程序,让所有的用户都知道,常用的熟知端口号如下表
应用程序 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP |
---|---|---|---|---|---|---|---|
熟知端口号 | 21 | 23 | 25 | 53 | 69 | 80 | 161 |
登记端口号,是为没有熟知端口号的应用程序使用的,若想使用这些端口号,需要在 IANA 进行登记,以防止重复
2.客户端使用端口号
客户端使用端口号的范围为 49152~65535
,这类端口号仅在客户进程运行时才动态选择
其又称临时端口号、短暂端口号,提供给客户短暂使用,当通信结束后,这个端口号会被注销,之后,就又可以提供给其他客户进程使用
套接字
网络中,通过 IP 地址来标识不同的主机,通过端口号来标识一台主机中不同的进程
在网络中,采用发送方和接收方的套接字(Socket),来识别端点,其唯一标识了网络中的一个主机和其上的一个进程,本质上是一个通信端点,即:
在网络通信中,主机 $A$ 给主机 $B$ 发送的报文段包含目的端口号和源端口号,源端口号作为返回地址的一部分,即当 $B$ 需要发回给一个报文段给 $A$ 时,$B$ 到 $A$ 的报文段中目的端口号就是 $A$ 到 $B$ 报文段中源端口号
【无连接服务与面向连接服务】
网络层知道如何将分组投递给一台主机,但不知道如何将它们投递给主机上具体的应用进程,而 TCP/IP 协议族在 IP 层之上使用两个传输协议来将数据交付给进程:
- 无连接的 UDP 协议:传输层向上提供一条不可靠的逻辑信道
- 面向连接的 TCP 协议:传输层向上提供一条全双工的可靠的逻辑信道
UDP 是一个无连接的不可靠的传输层协议,其在 IP 之上仅提供两个附加服务:多路复用与对数据的差错检测,同时,其尽最大努力交付,其在传送数据前不建立连接,远程主机的传输层收到 UDP 报文后,也不给出任何确认
由于 UDP 比较简单,其执行速度较快、实时性好,因此 UDP 主要用于对速度要求高的场合,例如:小文件传输协议 TFTP、实时协议 RTP、域名解析 DNS、简单网络管理协议 SNMP 等
TCP 是一个面向连接的可靠的传输层协议,在传输数据前先建立连接,数据传输结束后释放连接,同时,其不提供广播、组播服务
但由于 TCP 提供可靠的传输服务,这不可避免的增加了许多开销,不仅使 TCP 的数据单元头部增大许多,还占用许多处理机资源,因此 TCP 主要用于可靠性更重要的场合,例如:文件传输协议 FTP、超文本传输协议 HTTP、远程登录 TELNET 等