TCP协议详解
一、TCP的设计理念
| 传输层协议 | 端到端控制,实现分用和复用 |
|---|---|
| 可靠传输机制 | 保证端到端数据按序正确的到达、序号机制、确认机制、差错检测机制、缓存机制、重传机制、滑动窗口机制 |
| 其他机制 | 流量控制机制、拥塞控制机制 |
TCP协议的可靠传输机制
TCP的首部
源端口和目的端口字段——各占2字节。端口是传输层与应用层的服务接口,类似一个地址标识。传输层的复用和分用功能都要通过端口才能实现序号字段——占4字节。TCP连接中传送的数据流中的每一个字节都编上一个号。序号字段的值指的是本报文段所发送的数据的第一个字节的编号确认号字段——占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。注意,当有数据要发送给对方时,顺便确认,当没有数据发送给对方时,单独发一个确认报文- 特殊标记(Flag):每个标记占一个bit,有特殊约定
URG——紧急比特标记,当URG置为1时,表明紧急指针字段有效。通知本报文段中有紧急数据,应尽快传送,紧急数据的优先级要高。ACK——只有当ACK置为1时,确认号字段才有效。正常情况下只有第一次握手时ACK=0PSH(Push)——推送比特,接收方收到推送比特置为1的报文段,就尽快地将该报文段的数据交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付RST(ReSet)——复位比特,当RST=1时,表明TCP连接中出现严重差错,必须强行释放连接,属于单方面强行断开连接SYN——同步比特,SYN置为1,表示这是一个连接请求报文。正常情况下只有第一次握手和第二次握手时SYN等于1,其余都等于0FIN(Final)——终止比特,用来正常释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并请求对方释放连接,当对方确认后,会释放发送缓存窗口字段——占2字节。窗口字段是流量控制的关键,用来控制对方发送窗口的大小,单位为字节。接收方根据自身的缓存大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限- 检验和——占2字节。检验和字段检验的范围包括首部和数据这两部分,在计算检验和时,要在TCP报文段的前面加上12字节的伪首部
-紧急指针字段——占16bit,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号
TCP的确认机制
序号
- 按字节编号
确认
- 期望确认:期待对方发送的下一个报文的序号
- 累积确认:收到某个分组的确认意味着该分组及之前所有分组都正确收到
特殊报文的确认问题
- 对于没有包含数据的确认报文段不再确认
- 对于含
特殊标记的数据段,即使没有任何的数据接收,确认号也要加1
TCP 建立连接的作用
作用:
- 使每一方能够确知对方的存在
- 允许双方协议一些参数(如最大报文段长度,最大窗口大小,服务质量等)
- 对传输实体资源进行分配
TCP的三次握手建立连接
注意:这个时候如果客户端再发请求,序号还是从x+1开始
注意:
- 建立连接时会初始化相关参数,分配缓存等资源
- 服务端收到第一次握手后默认会跟踪该连接75秒
SYN Flooding攻击
- 攻击原理:服务器进行第二次握手之后会在超时时间内(一般为75秒)跟踪该连接,未收到第三次握手会不断重发,消耗资源
攻击防范
- 缩短TCP超时时间
- 更改TCP的搬开连接数
- TCP-z,监控TCP状态
- 通过防火墙、路由器等过滤网关防护
- 使用SYN Cookie技术
TCP的四次挥手断开连接


TCP的时间等待计时器
- 防止最后一个ACK丢失导致断开连接出现异常
- 一般等于二倍报文段寿命长度
保活计时器
- 防止两个TCP之间的连接长时间的空闲
TCP的重传机制
选择性重传机制
- 当数据超时则需要重传,需要重传定时器
- TCP属于使用累积确认的选择性重传协议
重传超时时间的确定
快重传机制
- 当连续收到三个重复的确认,直接重传所需分组,提高效率
TCP的流量控制
接收方:明确地通过TCP首部的窗口字段发送接收窗口大小,从而限制发送方发送窗口的最大值
发送方:保证发送窗口大小不超过对方发送的接收窗口的大小

浙公网安备 33010602011771号