第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 端口号分配综合了以上两种方式,并将端口号分为三部分:
6 计算机网络技术 ● 从0到255被规定作为公共应用服务的端口,如W、FTP、DNS和电子邮 件服务等,又被称为著名端口Wel-known ports))。 ●从256到1023的端口,被保留用作商业性的应用开发,如一些网络设备厂商专 用协议的通信端口等。 ●1023以上端口未做限定,即作为自由端口,以本地方式进行分配。 表82列举了一些著名端口及其用途。表中第一列为端口的十进制值,第二列是其在因 特网中的标准关键字,第三列则是对其作用的描述。 表8.2一些著名端口及关键字 十进制 关键字 描述 7 ECHO Echo 9 DISCARD Discard USERS Active Users DAYTIME Davtime 15 NETSTAT Who is up of NETSTAT 17 OUOTE Quote of the Day 19 CHargen Character Generator 0 FTP-DATA File Transfer Protocol (Data) 21 FTP File Transfer Protocol 23 TELNET Terminal Connection 25 SMTP Simple Mail Transfer Protocol 1 TIME Time NAMESERVER Host Name Server NICNAME Who is 53 DOMAIN Domain Name Server 67 BOOTPS Bootstrap Protocol Server 68 BOOTPC Bootstrap Protocol Client 69 TFTP Trivial File Transfer Protocol 79 FINGER Finger 80 HTTP Hyper Text Transfer Protocol 161 SNMP Simple Network Management Protocol 应该指出,尽管采用了上述的端口分配模式,但在实际使用中,经常会采用端口重定 向技术。所谓端口重定向是指将一个著名端口重定向到另一个端口,例如默认的HTTP端 口是80,不少人将它重定向到另一个端口,如8080
6 计算机网络技术 z 从 0 到 255 被规定作为公共应用服务的端口,如 WWW、FTP、DNS 和电子邮 件服务等,又被称为著名端口 (Well-known ports)。 z 从 256 到 1023 的端口,被保留用作商业性的应用开发,如一些网络设备厂商专 用协议的通信端口等。 z 1023 以上端口未做限定,即作为自由端口,以本地方式进行分配。 表 8.2 列举了一些著名端口及其用途。表中第一列为端口的十进制值,第二列是其在因 特网中的标准关键字,第三列则是对其作用的描述。 表 8.2 一些著名端口及关键字 十进制 关键字 描述 7 ECHO Echo 9 DISCARD Discard 11 USERS Active Users 13 DAYTIME Daytime 15 NETSTAT Who is up of NETSTAT 17 QUOTE Quote of the Day 19 CHARGEN Character Generator 20 FTP-DATA File Transfer Protocol(Data) 21 FTP File Transfer Protocol 23 TELNET Terminal Connection 25 SMTP Simple Mail Transfer Protocol 37 TIME Time 42 NAMESERVER Host Name Server 43 NICNAME Who is 53 DOMAIN Domain Name Server 67 BOOTPS Bootstrap Protocol Server 68 BOOTPC Bootstrap Protocol Client 69 TFTP Trivial File Transfer Protocol 79 FINGER Finger 80 HTTP Hyper Text Transfer Protocol 161 SNMP Simple Network Management Protocol 应该指出,尽管采用了上述的端口分配模式,但在实际使用中,经常会采用端口重定 向技术。所谓端口重定向是指将一个著名端口重定向到另一个端口,例如默认的 HTTP 端 口是 80,不少人将它重定向到另一个端口,如 8080
第8章传输层 请同学们注意,端口在传输层的作用有点类似P地址在网络层作用或MAC地址在数 据链路层的作用,只不过P地址和MAC地址标识的是主机,而端口标识的是网络应用进 程。由于同一时刻一台主机上会有大量的网络应用进程在运行,所以需要有大量的端口号 来标识不同的进程。 前面我们讲过,TCP实现的是面向连接的数据传输服务,即在数据传输以前需要在源 主机和目标主机之间创建相应的虚电路连接。由于一台主机上的多个应用程序可同时与其 他多台主机上的多个对等进程进行通信,所以需要对不同的虚电路进行标识。对T℃P虚电 路连接采用发送端和接收端的套接字(Socket)组合来识别,形如(Socketl,Socket.2)。所谓 套接字实际上是一个通信端点,每个套接字都有一个套接字序号,包括主机的P地址与一 个16位的主机端口号,即形如(主机P地址,端口号)。 正是由于TCP使用通信端点来识别连接,才使得一台计算机上的某个TCP端口号可以 被多个连接所共享,从而程序员可以设计出能同时为多个连接提供服务的程序,而不需要 为每个连接设置各自的本地端口号。 8.3.3TCP连接的实现 TCP连接包括建立与拆除两个过程。TCP使用三次握手协议来建立连接。连接可以由 任何一方发起,也可以由双方同时发起。一旦一台主机上的TCP软件已经主动发起连接请 求,运行在另一台主机上的TCP软件就被动地等待握手。图8.4给出了三次握手建立TCP 连接的简单示意。主机1首先发起TCP连接请求,并在所发送的分段中将编码位字段中的 SYN位置为“1”、ACK位置为“0”。主机2收到该分段,若同意建立连接,则发送一个连 接接受的应答分段,其中编码位字段的SYN和ACK位均被置“1”,指示对第一个SYN报 文段的确认,以继续握手操作:否则,主机2要发送一个将R$T位置为“1”的应答分段, 表示拒绝建立连接。主机1收到主机2发来的同意建立连接分段后,还有再次进行选择的 机会,若其确认要建立这个连接,则向主机2发送确认分段,用来通知主机2双方已完成 建立连接:若其已不想建立这个连接,则可以发送一个将RST位置为“1”的应答分段来告 之主机2拒绝建立连接。 主机1 网络报文 主机2 发送SYN=l,序号=x的分段 SYN=1,ACK=0 SYN=1,ACK=x+l 整警发次定 x+1的分段,发送确认ACK=y+1 SYN=1,ACK=y+1 接收ACK分段
第 8 章 传输层 7 请同学们注意,端口在传输层的作用有点类似 IP 地址在网络层作用或 MAC 地址在数 据链路层的作用,只不过 IP 地址和 MAC 地址标识的是主机,而端口标识的是网络应用进 程。由于同一时刻一台主机上会有大量的网络应用进程在运行,所以需要有大量的端口号 来标识不同的进程。 前面我们讲过,TCP 实现的是面向连接的数据传输服务,即在数据传输以前需要在源 主机和目标主机之间创建相应的虚电路连接。由于一台主机上的多个应用程序可同时与其 他多台主机上的多个对等进程进行通信,所以需要对不同的虚电路进行标识。对 TCP 虚电 路连接采用发送端和接收端的套接字(Socket)组合来识别,形如(Socket1,Socket2)。所谓 套接字实际上是一个通信端点,每个套接字都有一个套接字序号,包括主机的 IP 地址与一 个 16 位的主机端口号,即形如(主机 IP 地址,端口号)。 正是由于 TCP 使用通信端点来识别连接,才使得一台计算机上的某个 TCP 端口号可以 被多个连接所共享,从而程序员可以设计出能同时为多个连接提供服务的程序,而不需要 为每个连接设置各自的本地端口号。 8.3.3 TCP 连接的实现 TCP 连接包括建立与拆除两个过程。TCP 使用三次握手协议来建立连接。连接可以由 任何一方发起,也可以由双方同时发起。一旦一台主机上的 TCP 软件已经主动发起连接请 求,运行在另一台主机上的 TCP 软件就被动地等待握手。图 8.4 给出了三次握手建立 TCP 连接的简单示意。主机 1 首先发起 TCP 连接请求,并在所发送的分段中将编码位字段中的 SYN 位置为“1”、ACK 位置为“0”。主机 2 收到该分段,若同意建立连接,则发送一个连 接接受的应答分段,其中编码位字段的 SYN 和 ACK 位均被置“1”,指示对第一个 SYN 报 文段的确认,以继续握手操作;否则,主机 2 要发送一个将 RST 位置为“1”的应答分段, 表示拒绝建立连接。主机 1 收到主机 2 发来的同意建立连接分段后,还有再次进行选择的 机会,若其确认要建立这个连接,则向主机 2 发送确认分段,用来通知主机 2 双方已完成 建立连接;若其已不想建立这个连接,则可以发送一个将 RST 位置为“1”的应答分段来告 之主机 2 拒绝建立连接。 主机1 网络报文 主机2 发送SYN=1,序号=x的分段 SYN=1,ACK=0 SYN=1,ACK=x+1 SYN=1,ACK=y+1 接收ACK分段,再次确定 建立连接,发送序号为 x+1的分段,发送确认ACK=y+1 接收SYN分段,并同意建立连接, 发送序号为y的分段,发送ACK=x+1 接收ACK分段
8 计算机网络技术 图84三次摆手建立TCP连接 不管是哪一方先发起连接请求,一旦连接建立,就可以实现全双向的数据传送,而不 存在主从关系。TCP将数据流看作字节的序列,其将从用户进程所接收任意长的数据,分 成不超过64K字节(包括TCP头在内)的分段,以适合P数据包的载荷能力。所以对于 次传输要交换大量报文的应用如文件传输、远程登录等,往往需要以多个分段进行传输, 数据传输完成后,还要进行TCP连接的拆除或关闭。TCP协议使用修改的三次握手协 议来关闭连接,以结束会话。TCP连接是全双工的,可以看作两个不同方向的单工数据流 传输。所以一个完整连接的拆除涉及两个单向连接的拆除。如图8.5所示,当主机1的TCP 数据己发送完毕时,其在等待确认的同时可发送一个将编码位字段的FN位置“1”的分段 给主机2,若主机2已正确接收主机1的所有分段,则会发送一个数据分段正确接收的确认 分段,同时通知本地相应的应用程序,对方要求关闭连接,接着再发送一个对主机1所发 送的FN分段进行确认的分段。否则,主机1就要重传那些主机2未能正确接收的分段。 收到主机2关于FN确认后的主机1需要再次发送一个确认拆除连接的分段,主机2收到 该确认分段意味着从主机1到主机2的单向连接已经被结束。但是,此时在相反方向上, 主机2仍然可以向主机1发送数据,直到主机2数据发送完毕并要求关闭连接。一旦当两 个单向连接都被关闭,则两个端节点上的TCP软件就要删除与这个连接有关记录,于是原 来所建立的TCP连接被完全释放。 (应用关闭连接) 主机1 网络报文 主机2 摩楼的分段 FIN=1,ACK=y FIN=1,ACK=y 接整为y的分段 G通知应用) 接收ACK分段 FIN=1,ACK=x+l (应用关闭连接) 发送FINl,AK=x+1 接接AC分 FIN=1,ACK=y+1 接收ACK分段 图8.5用于关闭连接的三次提手操作 8.3.4TCP可靠数据传输的实现 TCP协议采用了许多与数据链路层类似的机制来保证可靠的数据传输,如采用序列号、 确认、滑动窗口协议等。只不过TCP协议的目的是为了实现端到端节点之间的可靠数据传
8 计算机网络技术 图 8.4 三次握手建立 TCP 连接 不管是哪一方先发起连接请求,一旦连接建立,就可以实现全双向的数据传送,而不 存在主从关系。TCP 将数据流看作字节的序列,其将从用户进程所接收任意长的数据,分 成不超过 64K 字节(包括 TCP 头在内)的分段,以适合 IP 数据包的载荷能力。所以对于 一次传输要交换大量报文的应用如文件传输、远程登录等,往往需要以多个分段进行传输。 数据传输完成后,还要进行 TCP 连接的拆除或关闭。TCP 协议使用修改的三次握手协 议来关闭连接,以结束会话。TCP 连接是全双工的,可以看作两个不同方向的单工数据流 传输。所以一个完整连接的拆除涉及两个单向连接的拆除。如图 8.5 所示,当主机 1 的 TCP 数据已发送完毕时,其在等待确认的同时可发送一个将编码位字段的 FIN 位置“1”的分段 给主机 2,若主机 2 已正确接收主机 1 的所有分段,则会发送一个数据分段正确接收的确认 分段,同时通知本地相应的应用程序,对方要求关闭连接,接着再发送一个对主机 1 所发 送的 FIN 分段进行确认的分段。否则,主机 1 就要重传那些主机 2 未能正确接收的分段。 收到主机 2 关于 FIN 确认后的主机 1 需要再次发送一个确认拆除连接的分段,主机 2 收到 该确认分段意味着从主机 1 到主机 2 的单向连接已经被结束。但是,此时在相反方向上, 主机 2 仍然可以向主机 1 发送数据,直到主机 2 数据发送完毕并要求关闭连接。一旦当两 个单向连接都被关闭,则两个端节点上的 TCP 软件就要删除与这个连接有关记录,于是原 来所建立的 TCP 连接被完全释放。 主机1 网络报文 主机2 发送FIN=1, 序号=x的分段 FIN=1,ACK=y FIN=1,ACK=y FIN=1,ACK=y+1 接收ACK分段, 发送ACK=y+1 接收FIN分段, 发送序列号为y的分段 接收ACK分段 (应用关闭连接) 接收ACK分段 FIN=1,ACK=x+1 (通知应用) (应用关闭连接) 发送FIN=1,ACK=x+1 图 8.5 用于关闭连接的三次握手操作 8.3.4 TCP 可靠数据传输的实现 TCP 协议采用了许多与数据链路层类似的机制来保证可靠的数据传输,如采用序列号、 确认、滑动窗口协议等。只不过 TCP 协议的目的是为了实现端到端节点之间的可靠数据传
第8章传输层 输,而数据链路层协议则为了实现相邻节点之间的可靠数据传输。 首先,TCP要为所发送的每一个分段加上序列号,保证每一个分段能被接收方接收, 并只被正确地接收一次。 其次,TCP采用具有重传功能的积极确认技术作为可靠数据流传输服务的基础。这里, “确认”是指接收端在正确收到分段之后向发送端回送一个确认(4CK)信息。发送方将每个 己发送的分段备份在自己的发送缓冲区里,而且在收到相应的确认之前是不会丢弃所保存 的分段的。“积极”是指发送方在每一个分段发送完毕的同时启动一个定时器,假如定时器 的定时期满而关于分段的确认信息尚未到达,则发送方认为该分段己丢失并主动重发。图 8.6给出了TCP分段确认的实现示例,图8.7表示分组丢失引起了超时重传。为了避免由于 网络延迟引起迟到的确认和重复的确认,TCP规定在确认信息中捎带一个分段的序号,使 接收方能正确地将分段与确认联系起米。 第二.采用可恋长的滑动窗口协议讲行流最控制,以防止由干发送端与接收瑞之间的 不匹配而引起数据丢失。这里所采用的滑动窗口协议与我们在数据链路层所讨论的滑动窗 口协议在工作原理上是完全相同的,唯一的区别在于滑动窗口协议用于传输层是为了在端 到端节点之间实现流量控制,而用于数据链路层是为了在相邻节点之间实现流量控制。T℃P 采用可变长的滑动窗口,使得发送端与接收端可根据自己的CPU和数据缓存资源对数据发 送和接收能力来作出动态调整,从而灵活性更强,也更合理。例如,假设主机1有一个大 小为4096字节长的缓冲区,其向主机2发送字2048字节长度的数据分段,则在未收到主 机2的关于该2048字节长度分段的确认之前,主机1向其他主机只能声明自己有一个2048 字节长度的发送缓冲区。过了一段时间后,假定主机1收到了来自主机2的确认,但其中 声明的窗口大小为0,这表明主机2虽然己经正确收到主机1前面所发送的分段,但目前主 机2已不能接受任何来自主机1的新的分段了,除非以后主机2给出窗口大于0的新信息。 关于滑动窗口协议的工作原理若有遗忘的同学请复习第4章中的相关内容,在此我们不再 重复讲述
第 8 章 传输层 9 输,而数据链路层协议则为了实现相邻节点之间的可靠数据传输。 首先,TCP 要为所发送的每一个分段加上序列号,保证每一个分段能被接收方接收, 并只被正确地接收一次。 其次,TCP 采用具有重传功能的积极确认技术作为可靠数据流传输服务的基础。这里, “确认”是指接收端在正确收到分段之后向发送端回送一个确认(ACK)信息。发送方将每个 已发送的分段备份在自己的发送缓冲区里,而且在收到相应的确认之前是不会丢弃所保存 的分段的。“积极”是指发送方在每一个分段发送完毕的同时启动一个定时器,假如定时器 的定时期满而关于分段的确认信息尚未到达,则发送方认为该分段已丢失并主动重发。图 8.6 给出了 TCP 分段确认的实现示例,图 8.7 表示分组丢失引起了超时重传。为了避免由于 网络延迟引起迟到的确认和重复的确认,TCP 规定在确认信息中捎带一个分段的序号,使 接收方能正确地将分段与确认联系起来。 第三,采用可变长的滑动窗口协议进行流量控制,以防止由于发送端与接收端之间的 不匹配而引起数据丢失。这里所采用的滑动窗口协议与我们在数据链路层所讨论的滑动窗 口协议在工作原理上是完全相同的,唯一的区别在于滑动窗口协议用于传输层是为了在端 到端节点之间实现流量控制,而用于数据链路层是为了在相邻节点之间实现流量控制。TCP 采用可变长的滑动窗口,使得发送端与接收端可根据自己的 CPU 和数据缓存资源对数据发 送和接收能力来作出动态调整,从而灵活性更强,也更合理。例如,假设主机 1 有一个大 小为 4096 字节长的缓冲区,其向主机 2 发送字 2048 字节长度的数据分段,则在未收到主 机 2 的关于该 2048 字节长度分段的确认之前,主机 1 向其他主机只能声明自己有一个 2048 字节长度的发送缓冲区。过了一段时间后,假定主机 1 收到了来自主机 2 的确认,但其中 声明的窗口大小为 0,这表明主机 2 虽然已经正确收到主机 1 前面所发送的分段,但目前主 机 2 已不能接受任何来自主机 1 的新的分段了,除非以后主机 2 给出窗口大于 0 的新信息。 关于滑动窗口协议的工作原理若有遗忘的同学请复习第 4 章中的相关内容,在此我们不再 重复讲述
10 计算机网络技术 主机1 网络报文 主机 主机1 网络报文 主机2 发送分段】 分组丢失 接分 超时 整品 惠 费整 接收ACK2 图8.6TCP分段的确认 图8.7TCP的超时重传 8.4 UDP 与TCP相反,TCP/P传输层的另一大协议UDP提供的是不可靠的面向无连接的数据 传输服务,其不提供数据接收的确认、排序、差错控制以及流量控制等功能,因此数据传 输可能会出现丢失、重复以及乱序等现象。从这一点看,UDP与网络层的P类似,所以被 称为用户数据报协议。使用UDP为传输层协议的网络应用其可靠性的问题需要由使用UDF 的应用程序来解决。UDP常用于一次性传输数据量较小的网络应用,如SNMP、DNS应用 数据的传输。因为对于这些一次性传输数据量较小的网络应用,若采用TCP服务,则所付 出的关于连接建立、维护和拆除的开销是非常不合算的。 UDP采用的协议数据单元称为用户数据报。由于不需要提供确认、差错控制、流量控 制等一系列与可靠传输有关的机制,所以UDP数据报与TCP分段相比,其格式要简单得多。 图8.9给出了UDP数据报的格式,一个UDP数据报由UDP报头和UDP数据两部分组成 其中,UDP报头仅由四个各16位长度的字段组成,它们分别为UDP源端口、UDP目的端 口、UDP数据报长度以及校检和。源端口字段包含I6位长度的发送端UDP协议端口号, 目的端口字段包含16位长度的接收端UDP协议端口号。长度字段记录该数据报的长度, 以8位的字节为长度单位,其中包括报头和用户数据。校验和字段是可选择的,如该字段 值为0则表明不进行校验。一般说来,使用校验和字段是必要的。 0 16 31 UDP目的端口 UDP数据报长度 UDP检验和
10 计算机网络技术 主机1 网络报文 主机2 发送分段1 接收ACK2 接收分段1 发送ACK1 接收ACK1 发送分段2 接收分段2 发送ACK2 主机1 网络报文 主机2 发送分段1 启动定时器 接收ACK1 消除定时器 因为分段未到达, 所以未发送ACK 接收分段1 发送ACK1 重传分段1 启动定时器 超时 分组丢失 图 8.6 TCP 分段的确认 图 8.7 TCP 的超时重传 8.4 UDP 与 TCP 相反,TCP/IP 传输层的另一大协议 UDP 提供的是不可靠的面向无连接的数据 传输服务,其不提供数据接收的确认、排序、差错控制以及流量控制等功能,因此数据传 输可能会出现丢失、重复以及乱序等现象。从这一点看,UDP 与网络层的 IP 类似,所以被 称为用户数据报协议。使用 UDP 为传输层协议的网络应用其可靠性的问题需要由使用 UDP 的应用程序来解决。UDP 常用于一次性传输数据量较小的网络应用,如 SNMP、DNS 应用 数据的传输。因为对于这些一次性传输数据量较小的网络应用,若采用 TCP 服务,则所付 出的关于连接建立、维护和拆除的开销是非常不合算的。 UDP 采用的协议数据单元称为用户数据报。由于不需要提供确认、差错控制、流量控 制等一系列与可靠传输有关的机制,所以 UDP 数据报与 TCP 分段相比,其格式要简单得多。 图 8.9 给出了 UDP 数据报的格式,一个 UDP 数据报由 UDP 报头和 UDP 数据两部分组成。 其中,UDP 报头仅由四个各 16 位长度的字段组成,它们分别为 UDP 源端口、UDP 目的端 口、UDP 数据报长度以及校检和。源端口字段包含 16 位长度的发送端 UDP 协议端口号, 目的端口字段包含 16 位长度的接收端 UDP 协议端口号。长度字段记录该数据报的长度, 以 8 位的字节为长度单位,其中包括报头和用户数据。校验和字段是可选择的,如该字段 值为 0 则表明不进行校验。一般说来,使用校验和字段是必要的。 0 16 31 UDP 源端口 UDP 目的端口 UDP 数据报长度 UDP 检验和