企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
## 3.5 面向连接的运输:TCP ### 3.5.1 TCP连接 TCP是面向连接的(Connection-oriented),TCP协议的连接状态只维护在两个端系统中。TCP连接是全双工服务(Full-duplex Service\)和点对点(Point-to-Point)服务。 每次发送报文,连接均从发送缓存(Send Buffer)中取出受限于最大报文长度(Maximum Segment Size,MSS)的报文数据,MSS的取值取决于最大传输单元(Maximum Transmission Unit,MTU)。 TCP会为每一个传输单位加上一个TCP首部,使其成为TCP报文段(TCP Segment)。 ![](https://img.kancloud.cn/d5/81/d581c610598d0dd43149b8171a612ac8_567x254.png) ### 3.5.2 TCP报文段结构 * 16 bit源端口号和16 bit 目的端口号 * 32 bit序号(Sequence Number Field)和32 bit 确认号(Acknowledgment Number Field):用于实现可靠传输,序列号为发送方的分组序列,确认号为确认之前的分组是否被成功接收 * 16 bit 接受窗口字段(Receive Window Field):用于流量控制 * 4 bit 首部长度(Header Length Field):TCP首部长度可变 * 可选可变长的选项字段(Options Field):协商最大报文长度MSS * 6 bit 标志字段(Flag Field): * ACK 确认字段值有效 * RST、SYN、FIN:连接建立和拆除 * PSH:数据直接上角应用层 * URG:报文中是否存在紧急数据 * 16 bit 紧急数据指针:用于指向紧急数据 ![](https://img.kancloud.cn/52/22/52220d265e7418ff5daf1864b89415f5_401x399.png) ### 3.5.3 往返时间估计与超时 **估计往返时间**: * 超时间隔必须大于连接的往返时间(RTT) * SampleRTT:为某一时刻RTT采样。 * EstimatedRTT:\(1 - å\) EstimatedRTT + å SampleRTT;å 一般为0.125 * 指数加权移动平均(Exponential Weighted Moving Average,EWMA):用于表示RTT的变化,DevRTT = \(1 - ß\) DevRTT + ß \| SampleRTT - EstimatedRTT \| **设置和管理重传超时**:TimeoutInterval = EstimatedRTT + 4 DevRTT ### 3.5.4 可靠数据传输 TCP的可靠数据传输服务确保一个进程从其缓存读出的数据流是无损坏、无间隔、非冗余和按序的。 TCP连接的发送需要:从上层应用程序接受数据、响应定时器超时和接受ACK(TCP采用累积确认,确认y则表示y之前的分组均被成功接收) * 超时则时间间隔加倍:如果发生超时事件,则TimeoutInterval = 2 \* TimeoutInterval。 * 快速重传(Fast Retransmit):一旦收到三个冗余ACK,TCP立即执行快速重传。 * 回退N步还是选择重传:TCP采用两个机制的混合版 ![](https://img.kancloud.cn/32/ab/32ab584b89645b84865ddccd369d9427_365x536.png) ### 3.5.5 流量控制 一条TCP连接每一侧主机都为该连接提供了接受缓存,当该TCP连接收到正确、按序的字节后,就将数据放入接收缓存。TCP为它的应用程序提供了流量控制服务(Flow-control Service)以消除缓存溢出的情况,该服务也称速度匹配服务,发送方去匹配接收方从缓存中读取数据的速度。 拥塞控制(Congestion Control):TCP发送方因为IP网络的拥塞而被遏制。 TCP通过让发送方维护一个接受窗口(Receive Window)的变量,即接收方还有多少缓存空间,来实现流量控制。 ### 3.5.6 TCP连接管理 TCP三次握手(Three-way Handshake): * 客户端发送一个请求建立连接的报文给服务端,SYN=1、client-isn为随机值。 * 服务端接收到请求报文,为连接分配缓存和变量,并返回一个确认报文,SYN=1、client-isn=client-isn+1、server-isn=xxx(服务器生成),该报文称为SYNACK报文。 * 客户端接收到SYNACK报文,为连接分配缓存和变量,并返回一个确认报文,SYN=0,server-isn=server-isn+1 ![](https://img.kancloud.cn/72/e4/72e46abd78824ef77e8d97bfbe70f8ce_460x443.png) TCP四次挥手: ![](https://img.kancloud.cn/b2/1d/b21d7aec2d3bdf47733afacfd7595e78_384x465.png) SYN泛洪攻击(SYN Flood Attack):发送大量的SYN报文请求建立连接,而不完成第三次握手,导致服务器不断为半开连接分配资源直至资源耗尽。