第九章 计算机网络——运输层

运输层协议概述

从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。

运输层的逻辑通信示意图

两个主机进行通信实际上就是两个主机中的应用进程互相通信。 应

用进程之间的通信又称为端到端的通信。

运输层的一个很重要的功能就是复用和分用。应用层不同进程的报文通过不同的端口向下交到运输层,再往下就共用网络层提供的服务。

“运输层提供应用进程间的逻辑通信”。“逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。

运输层的主要功能

运输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)。

运输层还要对收到的报文进行差错检测。

运输层需要有两种不同的运输协议,即面向连接的 TCP 和无连接的 UDP。 

TCP/IP 体系中的运输层

运输层中的两个协议

TCP/IP的运输层有两个不同的协议:

(1) 用户数据报协议 UDP                 (User Datagram Protocol)

(2) 传输控制协议 TCP         (Transmission Control Protocol)

两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元 TPDU (Transport Protocol Data Unit)。 TCP 传送的数据单位协议是 TCP 报文段(segment)  UDP 传送的数据单位协议是 UDP 报文或用户数据报。

UDP 在传送数据之前不需要先建立连接。对方的运输层在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。 TCP 则提供面向连接的服务。

TCP 不提供广播或多播服务。由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。 

运输层的 UDP 用户数据报与网际层的IP数据报有很大区别。IP 数据报要经过互连网中许多路由器的存储转发,但 UDP 用户数据报是在运输层的端到端抽象的逻辑信道中传送的。

TCP 报文段是在运输层抽象的端到端逻辑信道中传送,这种信道是可靠的全双工信道。但这样的信道却不知道究竟经过了哪些路由器,而这些路由器也根本不知道上面的运输层是否建立了 TCP 连接。 

端口的概念

端口就是运输层服务访问点 TSAP。

端口的作用就是让应用层的各种应用进程都能将其数据通过端口向下交付给运输层,以及让运输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。 从这个意义上讲,端口是用来标志应用层的进程。

端口用一个 16 bit 端口号进行标志。 端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。

目前有两类端口:一类是熟知端口,其数值一般为 0~1023。当一种新的应用程序出现时,必须为它指派一个熟知端口。 另一类则是一般端口,用来随时分配给请求通信的客户进程。

用户数据报协议 UDP

 UDP 概述

UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。

虽然 UDP 用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点:

  1.  发送数据之前不需要建立连接
  2. UDP 的主机不需要维持复杂的连接状态表。
  3. UDP 用户数据报只有8个字节的首部开销。
  4. 网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。    

示意图:

UDP 用户数据报的首部格式

  1. 用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段有 8 个字节,由 4 个字段组成,每个字段都是两个字节。
  2. 在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。

传输控制协议 TCP

TCP 概述

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它工作在OSI(Open Systems Interconnection,开放系统互连)模型的传输层,与UDP(User Datagram Protocol,用户数据报协议)一起构成了互联网传输层的主要协议。TCP旨在提供可靠的数据传输服务,确保数据能够准确无误地从发送方传输到接收方。

主要特点

  1. 面向连接:在数据交换之前,TCP协议会先建立一个连接,这个连接是虚拟的,但为通信双方提供了一个逻辑上的通道。当数据传输完成后,连接会被断开。

  2. 可靠性:TCP通过序列号、确认应答、超时重传、流量控制、拥塞控制等机制,确保数据的可靠性传输。即使在网络状况不佳的情况下,TCP也能通过重传机制保证数据的完整性。

  3. 基于字节流:TCP将应用层的数据视为一个连续的字节流,而不是独立的数据包。TCP会负责将字节流分割成合适大小的段(segment),并添加TCP头部后发送给接收方。接收方在收到数据后,会按照顺序重新组装成原始的字节流。

  4. 全双工通信:TCP允许通信双方在任何时候都能发送和接收数据,这使得TCP连接上的数据传输是双向的。

  5. 流量控制:TCP通过滑动窗口机制实现流量控制,以避免发送方发送的数据超过接收方的处理能力,从而防止数据丢失。

  6. 拥塞控制:TCP还具备拥塞控制机制,通过检测网络中的拥塞情况,动态调整发送方的发送速率,以减轻网络拥塞,提高整体网络的传输效率。

TCP的工作流程

  1. 建立连接:通过三次握手(Three-way Handshake)过程建立连接。首先,客户端发送一个SYN(同步序列号)包到服务器,服务器响应一个SYN-ACK(同步序列号确认)包,最后客户端再发送一个ACK(确认)包给服务器。这样,TCP连接就建立起来了。

  2. 数据传输:在连接建立后,双方就可以开始数据传输了。TCP会将数据分割成多个段,并添加TCP头部信息,然后发送给接收方。接收方在收到数据后,会发送ACK包进行确认。

  3. 断开连接:数据传输完成后,双方会通过四次挥手(Four-way Handshake)过程来断开连接。首先,一方会发送一个FIN(结束)包,另一方在确认收到FIN包后,会发送一个ACK包,并发送自己的FIN包,最后原发送FIN包的一方再发送一个ACK包进行确认,这样连接就被断开了。

TCP协议因其高可靠性和面向连接的特性,在需要可靠传输的应用场景中被广泛使用,如Web浏览、电子邮件、文件传输等。

TCP 报文段的首部

  1. 源端口和目的端口字段——各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
  2. 序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
  3. 确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
  4. 数据偏移——占 4  bit,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位不是字节而是 32 bit 字(4 字节为计算单位)。
  5. 保留字段——占 6 bit,保留为今后使用,但目前应置为 0。
  6. 紧急比特 URG —— 当 URG  1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
  7. 确认比特 ACK —— 只有当 ACK  1 时确认号字段才有效。当 ACK  0 时,确认号无效。
  8. 推送比特 PSH (PuSH) —— 接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。  
  9. 复位比特 RST (ReSeT) —— 当 RST  1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
  10. 同步比特 SYN —— 同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文。
  11. 终止比特 FIN (FINal) —— 用来释放一个连接。当FIN  1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
  12. 窗口字段 —— 占 2 字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。
  13. 检验和 —— 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。
  14. 紧急指针字段 —— 占 16 bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。
  15. MSS 是 TCP 报文段中的数据字段的最大长度。 数据字段加上 TCP 首部 才等于整个的 TCP 报文段。
  16. 选项字段 —— 长度可变。TCP 只规定了一种选项,即最大报文段长度 MSS (Maximum Segment Size)。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”
  17. 填充字段 —— 这是为了使整个首部长度是 4 字节的整数倍。


TCP 的数据编号与确认

TCP 协议是面向字节的。TCP 将所要传送的报文看成是字节组成的数据流,并使每一个字节对应于一个序号。

在连接建立时,双方要商定初始序号。TCP 每次发送的报文段的首部中的序号字段数值表示该报文段中的数据部分的第一个字节的序号。

 TCP 的确认是对接收到的数据的最高序号表示确认。接收端返回的确认号是已收到的数据的最高序号加 1。因此确认号表示接收端期望下次收到的数据中的第一个数据字节的序号。 


TCP 的流量控制与拥塞控制

TCP 采用大小可变的滑动窗口进行流量控制。窗口大小的单位是字节。

在 TCP 报文段首部的窗口字段写入的数值就是当前给对方设置的发送窗口数值的上限。

发送窗口在连接建立时由双方商定。但在通信的过程中,接收端可根据自己的资源情况,随时动态地调整对方的发送窗口上限值(可增大或减小)。  

发送端要发送 900 字节长的数据,划分为 9 个 100 字节长的报文段,而发送窗口确定为 500 字节。 发送端只要收到了对方的确认,发送窗口就可前移。 发送 TCP 要维护一个指针。每发送一个报文段,指针就向前移动一个报文段的距离。

发送端已发送了 400 字节的数据,但只收到对前 200 字节数据的确认,同时窗口大小不变。 现在发送端还可发送 300 字节。

发送端收到了对方对前 400 字节数据的确认,但对方通知发送端必须把窗口减小到 400 字节。 现在发送端最多还可发送 400 字节的数据。 


TCP 的重传机制

重传机制是 TCP 中最重要和最复杂的问题之一。 TCP 每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。

由于 TCP 的下层是一个互连网环境,IP 数据报所选择的路由变化很大。因而运输层的往返时延的方差也很大。


TCP 的运输连接管理

运输连接就有三个阶段,即:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常地进行。

连接建立过程中要解决以下三个问题:

  1. 要使每一方能够确知对方的存在。
  2. 要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。
  3. 能够对运输实体资源(如缓存大小,连接表中的项目等)进行分配。  

TCP 的连接和建立都是采用客户服务器方式。 主动发起连接建立的应用进程叫做客户(client)。 被动等待连接建立的应用进程叫做服务器(server)。

三次握手建立tcp连接

建立 TCP 连接

  1. A 的 TCP 向 B 发出连接请求报文段,其首部中的同步比特 SYN 应置为 1,并选择序号 x,表明传送数据时的第一个数据字节的序号是 x。
  2. B 的 TCP 收到连接请求报文段后,如同意,则发回确认。
  3. B 在确认报文段中应将 SYN 置为 1,其确认号应为 x  1,同时也为自己选择序号 y。
  4. A 收到此报文段后,向 B 给出确认,其确认号应为 y  1。
  5. A 的 TCP 通知上层应用进程,连接已经建立。
  6. 当运行服务器进程的主机 B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程,连接已经建立。
  7. 从 A 到 B 的连接就释放了,连接处于半关闭状态。 相当于 A 向 B 说: “我已经没有数据要发送了。 但你如果还发送数据,我仍接收。” 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值