> For the complete documentation index, see [llms.txt](https://legacy.cookielau.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://legacy.cookielau.com/archives/5-junior2/2-computernetwork/6-transmitlayer.md).

# 传输层

## 引言

* 传输协议(Transport protocol)是整个网络体系结构中的关键协议之一。
* 实现进程到进程的**可靠/不可靠**通信服务。
* 可将**多对进程通信复用到一条网络连接**上。
* **传输层**为**应用进程**之间提供**逻辑通信**，**网络层**为**主机**之间提供**逻辑通信**。

## 传输层详细信息

### 传输层在 OSI 模型中的层次

![](https://i.niupic.com/images/2020/05/14/7RRX.png)

### 传输层作用

1\) 用户无法对通信子网加以控制，无法采用更好的通信处理机制来解决网络层服务质量问题，更**无法改进数据链路层纠错能力** 2) 传输层的职责是在两个不同系统的**进程之间**提供一种交换数据的可靠机制，协议具有端到端 **(peer-peer)** 的意义。 3) 传输层的存在使得传输服务比网络服务更可靠，报文丢失、残缺等错误都可以被传输层检测到并可以采取相应的补救措施。

### 运输层为进程提供逻辑通信

![](https://i.niupic.com/images/2020/05/14/7RRY.png)

### 传输层功能

* 连接管理
  * 定义允许两个用户象直接连接一样交谈的规则 &#x20;
* 流量控制(Flow Control)
  * 传输层定义了端用户之间的流量控制，数据链路协议定义了两个中间相邻接点的流量控制 &#x20;
* 差错检测(Error Detection)
  * 数据链路层提供了可靠的链路传输，但在路由器将含有分组的帧重新格式化，可能会出现影响分组内容的错误。帧校验和是在新帧创建后计算的，可能包含了错误数据。传输层的差错检测用于检测此错误 &#x20;
* 建立无连接和面向连接的通信 &#x20;
* 拥塞控制(congestion control)
* 流量控制 vs 拥塞控制
  * 流量控制是端到端的控制，原理是通过滑动窗口的大小改变来实现。&#x20;
  * 拥塞控制控制全局网络的速率。

#### 对比

Transport vs. Link Layers

* Peer-Peer vs. Point-Point
* Logical link vs. physical link
  * Must establish connection
* Variable RTT
  * May vary within a connection
* Can't expect endpoints to exactly match link
  * Buffer space availability
* Transmission rate
  * Don’t directly know transmission rate

#### 传输服务和协议

* provide **logical communication** between apps' processes running on different hosts
* transport protocols run in end systems
* transport vs network layer services:
  * **network layer**: data transfer between end systems
  * **transport layer**: data transfer between processes&#x20;

    ![](https://i.niupic.com/images/2020/05/16/7Sf8.png) &#x20;

### 进程间通信

* 程序是一个在时间上按照严格顺序的操作序列，是存储的代码，是一个静态的概念；
* 进程是一个动态的概念，是读入内存正在执行的代码；进程状态反映出进程执行过程的变化；
* 要保证系统正常地工作，操作系统必须对**进程的创建、撤消与状态转换进行控制**；
* 从进程的观点看，操作系统核心是控制和协调进程的运行，解决进程之间的通信。

#### 单机OS的进程通信

* BSD UNIX 引入了管道(pipe)、命名管道(named pipe)和软中断信号(signal)机制；
* AT\&T UNIX引入了消息(message)、共享存储区(shared memory)和信号量(semaphore)等；
* UNIX系统的消息、共享存储区和信号量统称为**进程通信**(inter process communication，IPC)机制；
* IPC机制不适应于网络环境中的进程通信。
* 计算机网络**最根本的目的**是要实现**网络环境中分布式进程的通信**，以实现各种网络服务功能。

#### 分布式进程通信

* 分布式进程通信与单机进程通信的主要区别：
  * **网络中主机的高度自治性**；
* 不同的主机系统之间，**没有**一个统一的高层操作系统进行**全局控制、调度与管理**；
* 网络中一台主机对其它主机的
  * 活动状态
  * 希望与什么进程通信无从知道
* 需要解决的问题：
  * 进程命名与寻址方法
  * 多重协议的识别
  * 要建立一个机制，为准备通信的进程建立连接

#### Client/Server模型

* 网络中计算机的硬件、软件与数据资源是其它主机的用户可以共享的资源;
* 每一项网络服务都对应一个"服务程序"进程;
* "服务程序"进程要为每一个获准的网络用户请求执行一组规定的动作，以满足用户网络资源共享的需要;
* 客户与服务器分别表示相互通信的两个应用程序的**进程**;
* 网络环境中一个完整的进程通信标识需要一个五元组来表示：
  * 协议&#x20;
  * 本地地址&#x20;
  * 本地端口号
  * 远程地址&#x20;
  * 远程端口号

#### 客户端和服务器

* 客户端
  * 被用户调用后运行，在打算通信时主动向远地服务器发起通信（请求服务）。因此，**客户程序必须知道服务器程序的地址**。
  * 不需要特殊的硬件和很复杂的操作系统。
* 服务器端
  * 一种专门用来提供某种服务的程序，可**同时处理多个远地或本地客户的请求**。
  * 系统启动后即自动调用并一直不断地运行着，**被动地等待并接受**来自各地的客户的通信请求。因此，**服务器程序不需要知道客户程序的地址**。
  * 一般需要强大的硬件和高级的操作系统支持。

    ![](https://i.niupic.com/images/2020/05/16/7Sfd.png)

### 复用/分用
