运输层
运输层协议概述
进程之间的通信
运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。
当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。
从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。也就是说,端到端的通信是应用进程之间的通信。运输层提供应用进程间的逻辑通信(好像运输层之间直接通信,但其实不然)。
网络层和运输层的区别:网络层是为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。
在一台主机中经常有多个应用进程同时分别和另一台主机中的多个应用进程通信。 这表明运输层有一个很重要的功能——复用 (multiplexing)和分用 (demultiplexing)。
根据应用程序的不同需求,运输层需要有两种不同的运输协议,即面向连接的 TCP 和无连接的 UDP 。
运输层的端口
端口用一个 16 位端口号进行标志。 端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。 在互联网中,不同计算机的相同端口号是没有联系的。
由此可见,两个计算机中的进程要互相通信,不仅必须知道对方的 IP 地址(为了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)。
端口分为服务器端使用的和客户端使用的,常用的熟知端口(服务器端):
UDP
用户数据协议UDP是无连接的,它在IP层的数据报服务上只增加了:复用和分用的功能、差错检测的功能。
PDU:UDP用户数据报
UDP的主要特点:(1) UDP 是无连接的,发送数据之前不需要建立连接,,因此减少了开销和发送数据之前的时延。 (2) UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。 (3) UDP 是面向报文的。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。UDP 一次交付一个完整的报文。 (4) UDP 没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很适合多媒体通信的要求。(5) UDP 支持一对一、一对多、多对一和多对多的交互通信。 (6) UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。
UDP的首部格式:用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段很简单,只有 8 个字节(源端口 目的端口 长度 检验和)。
当运输层从 IP 层收到 UDP 数据报时,就根据首部中的目的端口,把 UDP 数据报通过相应的端口,上交最后的终点——应用进程。
请注意,虽然在 UDP 之间的通信要用到其端口号,但由于 UDP 的通信是无连接的,因此不需要使用套接字。
TCP
传输控制协议TCP是面向连接的运输层协议,每一条 TCP 连接只能有两个端点 (endpoint),每一条 TCP 连接只能是点对点的(一对一)。 TCP 提供可靠交付的服务。 TCP 提供全双工通信、面向字节流(TCP 中的“流”(stream)指的是流入或流出进程的字节序列。 “面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块,但 TCP 把应用程序交下来的数据看成仅仅是一连串无结构的字节流。 )
PDU:TCP报文段
TCP 连接是一条虚连接而不是一条真正的物理连接。TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的)。
TCP的连接:每一条TCP连接有2个端点,TCP 连接的端点叫做套接字 (socket) 或插口。 端口号拼接到 (contatenated with) IP 地址即构成了套接字。
套接字 socket = (IP地址 : 端口号)
每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:
TCP为了实现和其他协议的不同:可靠传输。需要一些特定的功能:停止等待协议 连续ARQ协议 滑动窗口协议(TCP协议的精髓)。
TCP报文段的首部格式:
源端口和目的端口字段——各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。 序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。 确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。数据偏移(即首部长度)——占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位是 32 位字(以 4 字节为计算单位)。 保留字段——占 6 位,保留为今后使用,但目前应置为 0。 紧急 URG —— 当 URG = 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。 确认 ACK —— 只有当 ACK = 1 时确认号字段才有效。当 ACK = 0 时,确认号无效。 推送 PSH (PuSH) —— 接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。 复位 RST (ReSeT) —— 当 RST = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。 同步 SYN —— 同步 SYN = 1 表示这是一个连接请求或连接接受报文。终止 FIN (FINish) —— 用来释放一个连接。FIN = 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。 窗口字段 —— 占 2 字节,用来让对方设置发送窗口的依据,单位为字节。检验和 —— 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。紧急指针字段 —— 占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。 选项字段 —— 长度可变。TCP 最初只规定了一种选项,即最大报文段长度 MSS(数据部分)。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”
TCP可靠传输的实现: 以字节为单位的滑动窗口 超时重传时间的选择 选择确认SACK
TCP的流量控制:所谓流量控制就是让发送方的发送速率不要太快,要然接收方来得及接受。这主要靠滑动窗口来实现。
TCP的拥塞控制:拥塞控制就是防止过多的数据注入到网络中,使网络中的路由器或链路不致过载。 拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。 拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
TCP的运输连接管理:运输连接有三个阶段: 连接建立 数据传送 连接释放 运输连接的管理就是使运输连接的建立和释放都能正常地进行。TCP连接的建立采用客户服务器方式。 主动发起连接建立的应用进程叫做客户(client), 被动等待连接建立的应用进程叫做服务器(server)。
TCP 建立连接的过程叫做握手。 握手需要在客户和服务器之间交换三个 TCP 报文段。称之为三报文握手。 采用三报文握手主要是为了防止已失效的连接请求报文段突然又传送到了,因而产生错误。
TCP的连接释放过程比较复杂:数据传输结束后,通信的双方都可释放连接。 TCP 连接释放过程是四报文握手。
TCP的有限状态机(为了更清晰地看出TCP连接的各种状态之间的关系):
参考文献
计算机网络 / 谢希仁编著.——7版