TCP协议的特点和首部格式
文章目录
- TCP协议是什么?
- TCP协议的主要特点
- 1. 面向连接
- 2. 可靠传输
- 3. 流量控制
- 4. 拥塞控制
- TCP首部格式
- 源端口和目标端口(各16位)
- 序列号(32位)
- 确认号(32位)
- 数据偏移(4位)
- 保留字段(6位)
- 控制位(6位)
- 窗口大小(16位)
- 校验和(16位)
- 紧急指针(16位)
- 选项字段(可变长度)
- 总结
TCP协议是什么?
TCP(传输控制协议)是Internet协议族中的核心协议之一,工作在传输层。它为应用层提供面向连接的、可靠的字节流服务。
TCP协议的主要特点
1. 面向连接
TCP在传输数据之前,必须先建立连接。
2. 可靠传输
TCP通过多种机制保证数据传输的可靠性:
确认应答机制
每发送一段数据,接收方都要回复一个ACK确认。
超时重传
如果发送方在规定时间内没收到ACK,就重新发送数据。
序列号机制
每个字节都有一个序列号,确保数据按正确顺序组装。
校验和
检测数据在传输过程中是否出错。
3. 流量控制
TCP会根据接收方的处理能力来调整发送速度,避免接收方被"撑爆"。
4. 拥塞控制
当网络拥堵时,TCP会主动降低发送速度,避免让网络更加拥堵。
TCP首部格式
源端口和目标端口(各16位)
这两个字段标识了通信的两端。端口号的范围是0-65535,其中:
- 0-1023:知名端口(如HTTP的80,HTTPS的443)
- 1024-49151:注册端口
- 49152-65535:动态/私有端口
序列号(32位)
序列号用来标识每个字节的位置。TCP把数据流看作一个巨大的字节数组,每个字节都有一个序列号。
确认号(32位)
确认号表示期望收到的下一个字节的序列号。比如我收到了序列号1000-1499的数据,那么我会发送ACK=1500,表示"1500之前的数据我都收到了,请发送1500开始的数据"。
数据偏移(4位)
也叫首部长度,表示TCP首部有多少个32位字(4字节)。由于这个字段只有4位,所以TCP首部最长是15×4=60字节。
保留字段(6位)
目前全部设为0,为将来扩展使用。
控制位(6位)
这6个标志位控制TCP的行为:
URG(紧急):标识紧急数据
ACK(确认):标识确认号字段有效
PSH(推送):要求立即推送数据给应用程序
RST(复位):重置连接
SYN(同步):用于建立连接
FIN(结束):用于关闭连接
窗口大小(16位)
表示接收方还能接收多少字节的数据,用于流量控制。
校验和(16位)
用于检测TCP首部和数据在传输过程中是否出错。计算校验和时,不仅包括TCP首部和数据,还包括IP首部中的源IP地址、目标IP地址等信息。
紧急指针(16位)
当URG标志位设置时,这个字段指向紧急数据的结束位置。
选项字段(可变长度)
最常见的选项包括:
- 最大段大小(MSS):TCP能接收的最大数据段长度
- 窗口扩大:扩大窗口大小的表示范围
- 时间戳:用于计算往返时间
总结
TCP协议的核心思想就是"可靠"二字,通过序列号、确认应答、超时重传等机制,确保数据能够准确、完整、有序地到达目的地。