第8章传输层 第8章传输层 本章基本要求:掌握TCPP传输层的协议组成,掌握常见的著名TCP/IP的端口分配 值:理解TCP可靠传输服务的主要实现机制:理解OSI传输层的功能:了解套接字和端口 概今,。 本章难点:TCP可靠传输的实现,端口与套接字的概念 建议教学时数:34学时,无实验。 上一章我们对OS1模型中最复杂的一个层次网络层进行了详细的介绍,本章我们将学 习OSI模型中最为重要的一层即传输层,包括传输层的重要性、传输层的功能,并将TCPP 的传输层作为传输的典型实例展开详细讨论。 8.1传输层功能概述 8.1.1为什么需要传输层 我们知道,传输层是OSI模型中建立在网络层和会话层之间的一个层次。那么为什么 还要在网络 再提供 个传输层而不 直接界 是会话层呢?其原因就在于网络层虽然损 供了从源网络到目标网络通信服务,但是其所提供的服务有可靠与不可靠之分。如我们前 面所学过的TCPP的网络层就是一个典型的提供面向无连接的不可靠服务的例子。不可靠 的P协议提供“尽力而为best effort)”的服务,但不保证瑞到瑞数据传输的可靠性,即P 分细在传龄中△ 出现丢包 乱序或者是重复的情况。因此,需要在网络层之上增加 个层次来弥补网络层所提供的服务 量的不足,以便为高层提供可靠的端到端通信 从通信子网的角度,我们也可以这样理解,作为资源子网中的端用户是不可能对通信 子网内部加以直接控制的,即不可能通过更换性能更好的路由器或增强数据链路层的纠错 能力来提高网络层的服条质景,其只能依靠在自已主机上所增加的文个传输层来检测分细 的丢失或数据的残缺并采取相应的补救措施 ,所以传输层不仅有存在的必要,它还是OSI 七层模型中非常重要的一层,起到承上启下的不可或缺的作用,从而被看成是整个分层体 系的核心。但是,只有资源子网中的端设备才会具有传输层,通信子网中的设备一般至多 只具备OSI下面三层的功能即通信功能,如图8.1所示
第 8 章 传输层 1 第 8 章 传输层 本章基本要求:掌握 TCP/IP 传输层的协议组成,掌握常见的著名 TCP/IP 的端口分配 值;理解 TCP 可靠传输服务的主要实现机制;理解 OSI 传输层的功能;了解套接字和端口 概念,。 本章难点:TCP 可靠传输的实现,端口与套接字的概念 建议教学时数:3-4 学时,无实验。 上一章我们对 OSI 模型中最复杂的一个层次网络层进行了详细的介绍,本章我们将学 习 OSI 模型中最为重要的一层即传输层,包括传输层的重要性、传输层的功能,并将 TCP/IP 的传输层作为传输的典型实例展开详细讨论。 8.1 传输层功能概述 8.1.1 为什么需要传输层 我们知道,传输层是 OSI 模型中建立在网络层和会话层之间的一个层次。那么为什么 还要在网络层之上再提供一个传输层而不直接就是会话层呢?其原因就在于网络层虽然提 供了从源网络到目标网络通信服务,但是其所提供的服务有可靠与不可靠之分。如我们前 面所学过的 TCP/IP 的网络层就是一个典型的提供面向无连接的不可靠服务的例子。不可靠 的 IP 协议提供“尽力而为(best effort)”的服务,但不保证端到端数据传输的可靠性,即 IP 分组在传输过程中会出现丢包、乱序或者是重复的情况。因此,需要在网络层之上增加一 个层次来弥补网络层所提供的服务质量的不足,以便为高层提供可靠的端到端通信。 从通信子网的角度,我们也可以这样理解,作为资源子网中的端用户是不可能对通信 子网内部加以直接控制的,即不可能通过更换性能更好的路由器或增强数据链路层的纠错 能力来提高网络层的服务质量,其只能依靠在自己主机上所增加的这个传输层来检测分组 的丢失或数据的残缺并采取相应的补救措施。所以传输层不仅有存在的必要,它还是 OSI 七层模型中非常重要的一层,起到承上启下的不可或缺的作用,从而被看成是整个分层体 系的核心。但是,只有资源子网中的端设备才会具有传输层,通信子网中的设备一般至多 只具备 OSI 下面三层的功能即通信功能,如图 8.1 所示
计算机网络技术 主机 主机Y APDU 应用层 4… 应用层 PPDU 表示层 表示层 会话层 会话层 分段 传输层 传输层 分组 网络层 网络层 网络层门 网络层 网络层 数据链路康 数据筛路 数据链路层 数据链路层 對据链路层 位 物理层 物理层 物理层 物理层 物理层 图8.!传输层是与资源子网中的设备联系在一起的 根据上述原因,我们通常又将OSI模型中的下面三层称为面向通信子网的层,而将传 输层及以上的各层称为面向资源子网或主机的层。另一种划分则是将传输层及以下的各层 统称为面向数据通信的层,而将传输层之上的会话层、表示层及应用层这些不包含任何数 据传输功能的层统称为面向应用的层。如图8.2所示。 应用层 面 表示层 会话层 传输层 王机或资源子网 网络层 面向通信 数据链路层 通信 物理层 图8,2传输层在OSI模型中的地位 8.1.2传输层功能 传输层是OS1模型中最重要的一层,其涉及从源主机到目的主机的可靠数据传输。传 输层利用了网络层所提供的源到日标分组传输服务向会话层提供可靠的源主机到目标主机 的数据传输, 并使之与当前使用的网络无关。为了实现上述 能必须提供如下机制。 首先 能够为高层数据的传输建立、维护与拆除传输连接,以实现透明的、可靠的端到端的传输。 其次,要提供端到端的错误恢复与流量控制,以能对网络层出现的丢包、乱序或重复等问 题作出反应。第三,当上层的协议数据包的长度超过网络层所能承载的最大数据传输单元 时,要提供必要的分段功能,从而在接收方的对等层还要提供合并分段的功能。另外,有
2 计算机网络技术 网络层 数据链路层 物理层 应用层 表示层 会话层 传输层 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 网络层 数据链路层 物理层 网络层 数据链路层 物理层 网络层 数据链路层 物理层 APDU PPDU SPDU 分段 分组 帧 位 主机X 主机Y 图 8.1 传输层是与资源子网中的设备联系在一起的 根据上述原因,我们通常又将 OSI 模型中的下面三层称为面向通信子网的层,而将传 输层及以上的各层称为面向资源子网或主机的层。另一种划分则是将传输层及以下的各层 统称为面向数据通信的层,而将传输层之上的会话层、表示层及应用层这些不包含任何数 据传输功能的层统称为面向应用的层。如图 8.2 所示。 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 面 向 主 机 或 资 源 子 网 面 向 通 信 子 网 面 向 应 用 面 向 通 信 图 8.2 传输层在 OSI 模型中的地位 8.1.2 传输层功能 传输层是 OSI 模型中最重要的一层,其涉及从源主机到目的主机的可靠数据传输。传 输层利用了网络层所提供的源到目标分组传输服务向会话层提供可靠的源主机到目标主机 的数据传输,并使之与当前使用的网络无关。为了实现上述功能必须提供如下机制。首先, 能够为高层数据的传输建立、维护与拆除传输连接,以实现透明的、可靠的端到端的传输。 其次,要提供端到端的错误恢复与流量控制,以能对网络层出现的丢包、乱序或重复等问 题作出反应。第三,当上层的协议数据包的长度超过网络层所能承载的最大数据传输单元 时,要提供必要的分段功能,从而在接收方的对等层还要提供合并分段的功能。另外,有
第8章传输层 3 时候怀要提供多路复用机制,即加果网络厚提供的是面向连接的服条,则传输厚应该既能 够将一个高层应用复用到多个网络层连接上 能够将多个高层应用复用 个网络层连 接上。总之,传输层通过扩展网 层服务功能,并通过传输层与高层之间的服务接口向高 层提供了端到端节点之间的可靠数据传输,从而使系统之间实现高层资源的共享时不必再 考虑数据通信方面的问题。 传输层中完成相应功能的硬件与(或)软件被称为传输实体,其可能位于在操作系统 内核中、用户进程内、网络应用程序库中或网络接口卡 。在 个系山 传输 网络服务与其它对等的传输实体通信,进而向传输层用户(可以是应用进程,也可以是会 话层协议)提供传输服务。 8.2TCP/IP的传输层 由于TCP/IP的网络层提供的是面向无连接的数据报服务,也就是说P数据报传送会出 现丢失、重复或乱序的情况,因此在TCPP网络中传输层就变得极为重要。TCPP的传输 层提供了两个主要的协议即传输控制协议(transport control protocol,.简称TCP)和用户数 据报协议(user datagram protocol,简称UDP),如图8.3所示。 应用层 FTP HTTP SMTP TELNET DAS TFTP 传输层 TCP UDP 网际层 IP ICMP ARP RARP 网络访问层 Ethernet Token Ring FDDI Frame Ralay 图8.3 TCPAP的传输层 8.3 TCP 尽管TCP/IP的网络层提供的是一种面向无连接的IP数据报服务,但传输层的TCP旨 在向TCPP的应用层提供的是一种端到端的面向连接的可靠的数据流传输服务。TCP常用 于一次传输要交换大量报文的情形,如文件传输、远程登录等。 为了实现这种端到端的可靠传输,TCP协议必须规定传输层的连接建立与拆除的方式、 数据传输格式、确认的方式、目标应用进程的识别以及差错控制和流量控制机制等。与所
第 8 章 传输层 3 时候还要提供多路复用机制,即如果网络层提供的是面向连接的服务,则传输层应该既能 够将一个高层应用复用到多个网络层连接上,又能够将多个高层应用复用到一个网络层连 接上。总之,传输层通过扩展网络层服务功能,并通过传输层与高层之间的服务接口向高 层提供了端到端节点之间的可靠数据传输,从而使系统之间实现高层资源的共享时不必再 考虑数据通信方面的问题。 传输层中完成相应功能的硬件与(或)软件被称为传输实体,其可能位于在操作系统 内核中、用户进程内、网络应用程序库中或网络接口卡上。在一个系统中,传输实体通过 网络服务与其它对等的传输实体通信,进而向传输层用户(可以是应用进程,也可以是会 话层协议)提供传输服务。 8.2 TCP/IP 的传输层 由于 TCP/IP 的网络层提供的是面向无连接的数据报服务,也就是说 IP 数据报传送会出 现丢失、重复或乱序的情况,因此在 TCP/IP 网络中传输层就变得极为重要。TCP/IP 的传输 层提供了两个主要的协议即传输控制协议(transport control protocol,简称 TCP)和用户数 据报协议(user datagram protocol,简称 UDP),如图 8.3 所示。 FTP HTTP SMTP DNS TFTP IP ICMP RARP Ethernet Token Ring TELNET TCP UDP ARP FDDI Frame Ralay 应用层 传输层 网际层 网络访问层 图 8.3 TCP/IP 的传输层 8.3 TCP 尽管 TCP/IP 的网络层提供的是一种面向无连接的 IP 数据报服务,但传输层的 TCP 旨 在向 TCP/IP 的应用层提供的是一种端到端的面向连接的可靠的数据流传输服务。TCP 常用 于一次传输要交换大量报文的情形,如文件传输、远程登录等。 为了实现这种端到端的可靠传输,TCP 协议必须规定传输层的连接建立与拆除的方式、 数据传输格式、确认的方式、目标应用进程的识别以及差错控制和流量控制机制等。与所
4 计算机网络技术 有网络协议类似,TCP将自己所要实现的功能集中体现在了TCP的协议数据单元中。 8.3.1TCP分段的格式 TCP的协议数据单元被称为分段(Segment),TCP通过分段的交互来建立连接、传输 数据、发出确认、进行差错控制、流量控制及关闭连接。分段分为两部分,即分段头和数 据,所谓分段头就是TCP为了实现端到端可靠传输所加上的控制信息,而数据则是指由高 层即应用层来的数据。图83给出了TCP分段头的格式。其中有关字段的说明如下: ●源端口:主叫方的TCP端口号。 目标端口:被叫方的TCP端口号。 ·顺序号:分段的序列号,表示该分段在发送方的数据流中的位置。 确认号:下一个期望接收的TCP分段号,相当于是对对方所发送的并己被本方所 正确接收的分段的确认。顺序号和确认号共同用于TCP服务中的确认、差错控制。 头长:TCP头长,以32位字长为单位。实际上相当于给出数据在数据段中的开始 位置。 预留:未用的6位,为将来的应用而保留,目前置为“0”。 ·编码位:TCP分段有多种应用,如建立或关闭连接、传输数据、携带确认等,这 些编码位用于给出与分段的作用及处理有关的控制信息。详细参见表8.1。 ● 窗口:窗口的大小表示发送方可以接收的数据量,以八位字长为计量单位。使用 可变大小的滑动窗口协议来进行流量控制。 ● 校验和:用于对分段头和数据进行校验。通过将所有16位字以补码形式相加,然 后再对相加和取补。正常情况下应为“0” ● 紧急指针:给出从当前领序号到紧急数据位置的偏移量 任选项:提供一种增加额外设置的方法,如最大TCP分段的大小的约定。 ·填充:当任选项字段长度不足32位字长时,需要加以填充。 ·数据:来自高层即应用层的协议数据。 24 3 L⊥Lttn 源端口 目的端口 顺序号 确认号 保留 编码位 窗口大小 校验和 紧急指针 任诜项 数据 图83TCP分段的格式
4 计算机网络技术 有网络协议类似,TCP 将自己所要实现的功能集中体现在了 TCP 的协议数据单元中。 8.3.1TCP 分段的格式 TCP 的协议数据单元被称为分段(Segment),TCP 通过分段的交互来建立连接、传输 数据、发出确认、进行差错控制、流量控制及关闭连接。分段分为两部分,即分段头和数 据,所谓分段头就是 TCP 为了实现端到端可靠传输所加上的控制信息,而数据则是指由高 层即应用层来的数据。图 8.3 给出了 TCP 分段头的格式。其中有关字段的说明如下: z 源端口:主叫方的 TCP 端口号。 z 目标端口:被叫方的 TCP 端口号。 z 顺序号:分段的序列号,表示该分段在发送方的数据流中的位置。 z 确认号:下一个期望接收的 TCP 分段号,相当于是对对方所发送的并已被本方所 正确接收的分段的确认。顺序号和确认号共同用于 TCP 服务中的确认、差错控制。 z 头长:TCP 头长,以 32 位字长为单位。实际上相当于给出数据在数据段中的开始 位置。 z 预留:未用的 6 位,为将来的应用而保留,目前置为“0”。 z 编码位:TCP 分段有多种应用,如建立或关闭连接、传输数据、携带确认等,这 些编码位用于给出与分段的作用及处理有关的控制信息。详细参见表 8.1。 z 窗口:窗口的大小表示发送方可以接收的数据量,以八位字长为计量单位。使用 可变大小的滑动窗口协议来进行流量控制。 z 校验和:用于对分段头和数据进行校验。通过将所有 16 位字以补码形式相加,然 后再对相加和取补。正常情况下应为“0” z 紧急指针: 给出从当前顺序号到紧急数据位置的偏移量 z 任选项:提供一种增加额外设置的方法, 如最大 TCP 分段的大小的约定。 z 填充:当任选项字段长度不足 32 位字长时,需要加以填充。 z 数据:来自高层即应用层的协议数据。 源端口 目的端口 顺序号 确认号 报头 长度 保留 编码位 窗口大小 校验和 紧急指针 任选项 数据 …… 0 8 16 24 32 图 8.3 TCP 分段的格式
第8章传输层 表8.1TCP分段头中的编码位字段的含义 编码位(从左到右)的标识 该位置“1”的含义 URG 表示启用了紧急指针字段 ACK 表示确认字段是有效的 PSH RST 连接复位。复位因主机崩溃或其他原因而出现错误的连接, 也可用于拒绝非法的分段或拒绝连接请求 SYN 与ACK合用以建立TCP连接。如SYN=1,ACK=O表示连 接请求:而SYN=l,ACK=1表示同意建立连接 FIN 表示发送方己无数据要发送从而要释放连接,但接收方仍可 继续接收发送方此前发送的数据 8.3.2端口和套接字 上面TCP分段格式中出现了“源端口”和“目标端口”字段,那么端口在此起到什么 作用呢?“端口”是英文pot的意译,作为计算机术语“端口”被认为是计算机与外界通信 交流的出入口。 由网络OSI七层模型可知,传输层与网络层最大的区别是传输层提供进程通信能力, 网络通信的最终地址不仅包括主机地址,还包括可描述网络进程的某种标识。所以TCPP 协议所涉及的端口是指用于实现面向连接或无连接服务的通信协议端口,是对网络通信进 程的一种标识。其属于一种抽象的软件结构,包括一些数据结构和O(输入输出)缓冲区, 故属于软件端口范畴。 应用程序(调入内存运行后一般称为:进程)通过系统调用与某传输层端口建立绑定 binding)后,传输层传给该鼎口的所有数据都被建立这种绑定的相应讲程所接收,相应讲程 发给传输层的数据也都从该端口输出。在TCPP协议的实现中,端口操作类似于一般的VO 操作,进程获取一个端口,相当于获取本地唯一的VO文件,可以用一般的读写方式访问。 类似于文件描述符,每个端口都拥有一个叫端口号的整数描述符,用来标识不同的端 口或进程。在TCPAP传输层,我们定义一个16Bt长度的整数作为端口标识,也就是说可 定义216个端口,其端口号从0到216-1。由于TCP/P传输层的TCP和UDP两个协议是两 个完全独立的软件草块,因出名白的端口号也相石独立,知各白可种立拥有26个瑞口 端口号有两种基本分配方式,即全局分配和本地分配方式。全局分配指由一个公认权 威的机构根据用户需要进行统一分配,并将结果公布于众,所以这是一种集中分配方式, 本地分配则是指当进程需要访问传输层服务时,向本地系统提出申请,系统返回本地唯 的端口号,进程再通过合适的系统调用,将自己和该端口绑定起来,显然这是一种动态连 接方式。实际的TCPP端口号分配综合了以上两种方式,并将端口号分为三部分:
第 8 章 传输层 5 表 8.1 TCP 分段头中的编码位字段的含义 编码位(从左到右)的标识 该位置“1”的含义 URG 表示启用了紧急指针字段 ACK 表示确认字段是有效的 PSH 请求急迫操作,即分段一到马上送应用程序而不等到接收缓 冲区满时才送应用程序 RST 连接复位。复位因主机崩溃或其他原因而出现错误的连接, 也可用于拒绝非法的分段或拒绝连接请求 SYN 与 ACK 合用以建立 TCP 连接。如 SYN=1,ACK=0 表示连 接请求;而 SYN=1,ACK=1 表示同意建立连接 FIN 表示发送方已无数据要发送从而要释放连接,但接收方仍可 继续接收发送方此前发送的数据 8.3.2 端口和套接字 上面 TCP 分段格式中出现了“源端口”和“目标端口”字段,那么端口在此起到什么 作用呢?“端口”是英文 port 的意译,作为计算机术语“端口”被认为是计算机与外界通信 交流的出入口。 由网络 OSI 七层模型可知,传输层与网络层最大的区别是传输层提供进程通信能力, 网络通信的最终地址不仅包括主机地址,还包括可描述网络进程的某种标识。所以 TCP/IP 协议所涉及的端口是指用于实现面向连接或无连接服务的通信协议端口,是对网络通信进 程的一种标识。其属于一种抽象的软件结构,包括一些数据结构和 I/O(输入输出)缓冲区, 故属于软件端口范畴。 应用程序(调入内存运行后一般称为:进程)通过系统调用与某传输层端口建立绑定 (binding)后,传输层传给该端口的所有数据都被建立这种绑定的相应进程所接收,相应进程 发给传输层的数据也都从该端口输出。在 TCP/IP 协议的实现中,端口操作类似于一般的 I/O 操作,进程获取一个端口,相当于获取本地唯一的 I/O 文件,可以用一般的读写方式访问。 类似于文件描述符,每个端口都拥有一个叫端口号的整数描述符,用来标识不同的端 口或进程。在 TCP/IP 传输层,我们定义一个 16Bit 长度的整数作为端口标识,也就是说可 定义 216 个端口,其端口号从 0 到 216-1。由于 TCP/IP 传输层的 TCP 和 UDP 两个协议是两 个完全独立的软件模块,因此各自的端口号也相互独立,即各自可独立拥有 216 个端口。 端口号有两种基本分配方式,即全局分配和本地分配方式。全局分配指由一个公认权 威的机构根据用户需要进行统一分配,并将结果公布于众,所以这是一种集中分配方式, 本地分配则是指当进程需要访问传输层服务时,向本地系统提出申请,系统返回本地唯一 的端口号,进程再通过合适的系统调用,将自己和该端口绑定起来,显然这是一种动态连 接方式。实际的 TCP/IP 端口号分配综合了以上两种方式,并将端口号分为三部分: