Linux学习-TCP网络协议(补充)
一、TCP 头部标志位
TCP 头部包含多种标志位,用于控制连接建立、数据传输、连接断开等过程,核心标志位及作用如下:
标志位 | 英文全称 | 作用 |
---|---|---|
SYN | Synchronize Sequence Numbers | 请求建立连接,三次握手第一步发送 SYN 包 |
ACK | Acknowledgment | 响应报文标志,用于确认收到数据,确认号字段需配合 ACK 位使用 |
PSH | Push | 携带数据标志,通知接收方立即从缓冲区读数据,无需等待缓冲区满 |
FIN | Finish | 请求断开连接标志,四次挥手过程中用于发起断开请求 |
RST | Reset | 复位标志,用于异常断开连接(如连接超时、错误),强制重置连接状态 |
URG | Urgent | 紧急数据标志,标记数据为紧急,紧急指针字段配合使用,指示紧急数据位置 |
从 TCP 头部结构看,这些标志位位于“数据偏移”“保留”之后的控制位区域,与源端口、目的端口、序列号、确认号等共同构成 TCP 报文首部(固定 20 字节,含选项则更长 ),TCP 报文段封装在 IP 数据报的数据部分传输 。
二、TCP 保障安全可靠的机制
(一)连接管理:三次握手 & 四次挥手
- 三次握手:通过 SYN、SYN + ACK、ACK 交互,确保收发双方通信前就绪,同步序列号,确认双向收发能力 。
- 四次挥手:通过 FIN、ACK、FIN、ACK 交互,确保双方数据传输完毕,有序释放连接资源,避免数据残留 。
(二)应答机制
TCP 发送数据时,用序列号标记数据包起始编号;接收方回复确认号(为收到的最后一个字节编号 + 1 ),告知发送方已接收数据范围。发送方依据确认号判断数据是否被接收,未确认则触发重传,保障数据可靠。
(三)超时重传机制
数据发送后,若在**超时时间(RTO,Retransmission Timeout )**内未收到确认,发送方认为数据包丢失,重新发送该数据。超时时间会根据网络情况动态调整(如基于往返时间 RTT 计算 ),平衡重传效率与网络开销。
(四)滑动窗口机制
- 发送方和接收方各维护一个窗口(缓冲区 ),窗口内是已发送未确认、或准备发送的数据 。
- 发送方无需等每个数据包确认后再发下一个,可连续发送窗口内数据,提升传输效率;接收方通过窗口大小字段告知发送方自己的接收能力,动态调整发送速率,避免拥塞 。
三、TCP 提升效率的机制
(一)延迟应答机制
接收方不立即回复 ACK,等待一段时间(如缓存更多数据、凑齐应用层读取需求 ),再批量确认。减少 ACK 报文数量,降低网络开销,提升整体传输效率。
(二)流量控制机制
结合 TCP 头部窗口大小字段,接收方根据自身缓冲区剩余空间,调整窗口大小告知发送方。发送方按窗口大小控制发送数据量,避免发送过快导致接收方缓冲区溢出,实现收发速率匹配。
(三)捎带应答机制
ACK 报文可与应用层数据合并发送(如接收方有数据要发给发送方时,将 ACK 与数据报文一起传输 ),减少单独发送 ACK 的次数,降低网络报文数量,提升传输效率。