【云计算 IT 基础知识】系列1 目录/汇总(持续更新)
------------------------------------------------------------
5.4 传输层
5.4.1 TCP
概念
传输控制协议TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字 节流的传输层通信协议(在RFC793中定义)。
特点
TCP具有以下特点:
l 面向连接的传输。
l 端到端的通信。
l 高可靠性,确保传输数据的正确性,不出现丢失或乱序。
l 全双工方式传输。
l 采用字节流方式,即以字节为单位传输字节序列。
l 紧急数据传送功能。
l 使用缓冲区。
l 提供重传机制。
原理
可靠性保障
TCP通过下列方式来保障数据传输的可靠性:
l 数据被分割成TCP最适合发送的数据块,也就是最大报文段长度。当一个连接建立 时,连接的双方都要通告各自的最大报文段长度。
l 当TCP发出一个报文段后,它启动一个定时器,等待目的端确认收到这个报文段。 如果不能及时收到一个确认将重发这个报文段。
l 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认通常将推迟 几分之一秒发送,以便将ACK与需要沿该方向发送的数据一起发送。绝大多数实现 采用的时延为200ms。
l TCP通过端到端的首部和数据的检验和,检测数据在传输过程中的任何变化。如果 收到段的检验和有差错,TCP将丢弃这个报文段并不确认收到此报文段,希望发送 端超时并重发。
l 如果TCP报文段的到达顺序错误,TCP会对收到的数据进行重新排序,将数据以正 确顺序交给应用层。
l TCP接收端会丢弃重复的数据。
l TCP可提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端 只允许另一端发送接收端缓冲区所能接纳的数据,从而防止缓冲区溢出。
建立TCP连接
TCP通过三次握手完成连接的建立,如图5-27所示。
TCP连接建立的过程:
1. 客户端执行主动打开:客户端发送SYN包给服务器,其中包含序列号X。
2. 服务器收到SYN(SEQ=X)包后,向客户端回SYN(SEQ=Y)+ACK(SEQ=X+1)包作为应答以及对客户端SYN(SEQ=X)包的确认。
3. 客户端向服务器发送ACK(SEQ=Y+1)包,对服务器SYN(SEQ=Y)包进行确认。
同时打开:在很偶然的情况下,TCP连接的两方会同时彼此执行主动打开。这种情况下,每一方必须发送一个SYN,且这些SYN必须传递给对方。每一方均使用一个对方熟知的端口作为本地端口。例如,主机A中的一个应用程序使用 地端口7000,并与主机B的端口8000执行主动打开。主机B的一个应用程序则使用本地端口8000,并与主机A的 端口7000执行主动打开。它们仅建立一条连接而不两条连接,且每一端既是客户机又是服务器。
终止TCP连接
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。TCP通过四次握手完成
连接的终止,如图5-28所示。
TCP连接终止的过程:
1. 客户端执行主动关闭:客户端发送FIN包给服务器,其中包含序列号X。
2. 服务器收到FIN(SEQ=X)包后,向客户端回ACK(SEQ=X+1)包作为对客户端FIN(SEQ=X)包的确认。从客户端到服务器的传送被关闭。
3. 服务器执行被动关闭:服务器向客户端发送FIN(SEQ=Y) ACK(SEQ=X+1)包。
4. 客户端向服务器发送ACK(SEQ=Y+1)包,对服务器FIN(SEQ=Y)包进行确认。从服 务器到客户端的传送被关闭。
同时关闭:TCP连接的两方都可以执行主动关闭。
异常释放:通常情况下,TCP通过发送FIN包关闭连接。若使用的是复位报文来结束连接,则称为异常释放。使用异常释放,可以使复位报文的发送方立即丢弃待发数据,减少资源浪费,而接受方可以判断出发送方是正常关闭还是异常关闭。
流量控制
为了实现流量控制,TCP使用一种滑动窗口协议。TCP连接的双方为每个连接使用一个窗口。窗口区间是缓冲区的一部分,包含一方在等待另一方的确认期间所能发送的字节数据。该窗口之所以称为滑动窗口,是因为它能随着数据的发送、确认的接收,在整个缓冲区内滑动。
TCP的滑动窗口是面向字节的。滑动窗口的使用使传输效率更高,同时也能控制数据流量,使接收端不被数据所淹没。
拥塞控制
TCP提供4种拥塞控制机制来确保有效的利用带宽,并快速修复拥塞和错误:
l 慢速启动
新建立的连接不在一开始就大量发送数据包,而是根据网络情况逐步增加每次发送的数据量。当新建连接时,拥塞窗口大小初始化为1个最大报文段长度(以字节为
单位),发送端开始按照拥塞窗口大小发送数据。每当有一个报文段被确认,拥塞 窗口大小就增加1个最大报文段长度。拥塞窗口大小的值随着网络往返时间呈指数级增长。
l 拥塞避免
当拥塞窗口大小超过慢启动门限(通常是65536字节)后,慢速启动过程结束,进入拥塞避免阶段。拥塞避免的主要思想是加法增大,即拥塞窗口大小的值不再指数级往上升,而是开始加法增加。当窗口中所有的报文段都被确认时,拥塞窗口大小加1。拥塞窗口大小的值随着网络往返时间的增加而线性增加,从而避免增长过快 导致网络拥塞,逐渐增加调整到网络的最佳值。
l 快速重传
TCP在收到乱序到达包时会立即发送ACK,TCP利用3个相同的ACK来判定数据包的丢失。此时进行快速重传,包括把慢启动门限值设置为拥塞窗口大小的一半,把拥塞窗口大小重新设置为慢启动门限的值(具体实现有些为慢启动门限的值+3), 并重新进入拥塞避免阶段。
l 快速恢复
快速恢复与快速重传类似,但当收到3个重复ACK时,TCP最后进入的不是拥塞避免阶段,而是快速恢复阶段。快速恢复的思想是“数据包守恒”原则,即同一个时刻在网络中的数据包数量是恒定的,只有当“老”数据包离开了网络后,才能向网 络中发送一个“新”的数据包。如果发送方收到一个重复的ACK,根据TCP的ACK重传机制,就表明有一个数据包离开了网络,于是拥塞窗口大小加1。
报文格式
TCP的报文格式如图5-29所示。
报文中各字段的定义如表5-11所示。
------------------------------------------------------------