1 功能
1.1 进程间通信
- 从通信和信息处理的角度看,运输层向应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最底层
- 当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能
- 运输层为相互通信的应用进程提供了逻辑通信
1.2 应用进程间通信
- 两个主机进行通信实际上是两个主机中的应用进程通信
- 应用进程间通信又称为端到端的通信
- 运输层的一个很重要的功能就是复用和分用,应用层不同进程的报文通过不同的端口向下交到运输层,再往下就共用网络层提供的服务。
- 运输层提供应用进程间的逻辑通信
“逻辑通信”:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。 - 运输层协议和网络层协议的主要区别
1.3 运输层的主要功能
- 为应用进程之间提供端到端的逻辑通信
- 对收到的报文进行差错检测
- 需要有两种不同的运输协议,即面向连接的 TCP 和无连接的 UDP。
1.4 两种不同的运输协议
- 运输层向高层用户屏蔽了下面网络核心的细节,它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道
- 当运输层采用面向连接的 TCP 协议时,尽管下层的网络都是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道
- 当运输层采用无连接的 UDP 协议时,这种逻辑通信信道是一条不可靠信道
2 UDP与TCP异同
2.1 TCP 与 UDP
- 两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元 TPDU (Transport Protocol Data Unit)。
- TCP 传送的数据单位协议是 TCP 报文段(segment)
- UDP(User Datagram Protocol) 传送的数据单位协议是 UDP 报文或用户数据报
- TCP/IP 体系中的运输层协议
- UDP 在传送数据之前不需要先建立连接。对方的运输层在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。
- TCP 提供面向连接的服务,TCP 不提供广播或多播服务。由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源
- 运输层的 UDP 用户数据报与网际层的IP数据报有很大区别。IP 数据报要经过互连网中许多路由器的存储转发,但 UDP 用户数据报是在运输层的端到端抽象的逻辑信道中传送的。
- TCP 报文段是在运输层抽象的端到端逻辑信道中传送,这种信道是可靠的全双工信道。但这样的信道却不知道究竟经过了哪些路由器,而这些路由器也根本不知道上面的运输层是否建立了 TCP 连接。
3.1 运输层的端口
运行在计算机中的进程是用进程标识符来标志。运行在应用层的各种应用进程却不应当让os指派它的进程标识符。这是因为在因特网上使用os种类很多,而不同os又使用不同格式的进程标识符。为使运行不同os的计算机的应用进程能够互相通信,就必须用统一的方法对 TCP/IP 体系的应用进程进行标志
3.2 需要解决的问题
由于进程的创建、撤销都是动态的,发送方几乎无法识别其他机器上的进程。
有时我们会改换接收报文的进程,但无需通知所有发送方。我们往往需要利用目的主机提供的功能来识别终点,而无需知道实现这个功能的进程。
解决这个问题的方法就是在运输层使用协议端口号(protocol port number),简称为端口(port)。
虽然通信的终点是应用进程,但我们可以把端口想象是通信的终点,因为我们只需将要传送的报文交到目的主机的某个合适的目的端口,后续工作(即最后交付目的进程)就由 TCP 完成。
软件端口与硬件端口
- 在协议栈层间的抽象的协议端口是软件端口
- 路由器或交换机上的端口是硬件端口
- 硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址
3.3 TCP 的端口
端口用一个 16 位端口号进行标志。端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号无任何联系。
3.4 端口的分类
- 熟知端口,0~1023
- 登记端口号,1024~49151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在 IANA 登记,以防止重复
- 客户端口号或短暂端口号,49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用