最主要的特点
-
TCP 是
面向连接的运输层协议
。应用程序在使用 TCP 协议之前,必须先建立 TCP 连接。在传送数据完毕后,必须释放已经建立的 TCP 连接 -
每一条 TCP 连接只能有两个
端点
,每一条 TCP 连接只能是点对点
的(一对一) -
TCP 提供
可靠交付
的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复,并且按序到达 -
TCP 提供
全双工通信
。TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都设有发送缓存和接受缓存,用来临时存放双向通信的数据 -
面向字节流
。TCP 中的“流”指的是流入到进程或从进程流出的字节序列
TCP 的连接
-
TCP连接的四元组:源IP、源端口、目IP、目端口。
-
IP 地址即构成了套接字
-
TCP建立连接的前置条件或需要解决的问题:
1、每一端知晓对端的套接字
2、进行参数协商(MSS、窗口值、是否使用选择确认机制、窗口扩大因子、时间戳)
3、设备对资源进行分配 -
TCP存在一个保活计时器,该计时器2小时时间。若该计时器时间内没有收到任何客户端的数据,服务端会发送一个探测报文段,并每隔75秒发送一次。若连续发送10个探测报文仍没有反应,则服务器认为客户端出现故障,关闭连接。
TCP连接的释放
- 是为了释放在之前分配给TCP进程的资源
- 本地所有数据已传输完毕
TCP报文段
TCP 虽然是面向字节流的,但 TCP 传送的数据单元却是报文段。一个 TCP 报文段分为首部和数据两部分。TCP 报文段首部的前20个字节是固定的,后面有4n字节是根据需要而增加的选项(n是整数)。因此 TCP 首部的最小长度是20字节
首部字段
-
源端口
和目的端口
各占2个字节,分别写入源端口号和目的端口号 -
序号
占4字节。序号范围是[0, 232-1],共232(即4 294 967 296)个序号。序号增加到232-1后,下一个序号就又回到0。在一个 TCP 连接中传送的字节流中的每一个字节都按顺序编号
-
确认号
占4字节,是期望收到对方下一个报文段的第一个数据字节的序号
-
数据偏移
占4字节,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。这个字段实际上是指出 TCP 报文段的首部长度 -
保留
占6位,保留为今后使用,但目前应置为0 -
下面有6个
控制位
,用来说明本报文段的性质 -
紧急 URG(URGent)
当 URG=1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不是按原先的排队顺序来传送 -
确认 ACK(ACKnowledgment)
仅当 ACK=1 时确认号字段才有效。当 ACK=0 时,确认号无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置1 -
推送 PSH(Push)
当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应 -
复位 RST(ReSeT)
当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接 -
同步 SYN(SYNnchronization)
在连接建立时用来同步序号。当 SYN=1 而 ACK=0 时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使 SYN=1 和 ACK=1 -
终止 FIN(FINis)
用来释放一个连接。当 FIN=1 时,表明此报文段的发送发的数据已发送完毕,并要求释放运输连接 -
窗口
占2字节。窗口值是[0, 216-1]之间的整数。窗口值作为接收方让发送方设置其发送窗口的依旧 -
检验和
占2字节。检验和字段检验的范围包括首部和数据这两部分 -
紧急指针
占2字节。紧急指针仅在 URG=1 时才有意义,它指出本报文段中的紧急数据的字节数 -
选项
长度可变,最长可达40字节
TCP的可靠性机制
确认机制
重传机制
- RTT:往返时间,指的是发送方将数据发出后,到他接收到对端反馈的确认报文的完整时间段。
- RTO:超时重传时间;略大于RTT时间。
- RTO时间是动态变化的时间。会进行超时间隔时间加倍。
- 超时重传---快速重传机制。
- 客户端通过服务端的反馈信息从而进行数据重传的方式被称为快速重传机制,此时的重传并非是因为RTO时间到达而触发,而是因为客户端连续接收到3个冗余ACK报文。---->快速重传机制会在RTO定时器超时之前重传报文段,从而解决超时重传时间加倍导致的延迟增大问题。
- 为了加快重传效率,将累积确认机制修改为SACK机制(选择确认机制),在TCP首部中的选项内容中携带未收到的数据字段,从而引发客户端重传。
排序机制
-
MTU:最大传输单元--->包含数据部分、传输层头部、网络层头部--->以太网当中默认值为1500字节
-
MSS:最大段长度----->仅包含数据部分1460字节
TCP流量控制机制
- 窗口:指发送方可以在不接收确认报文的前提下,一次性发送的数据最大量。
- 接收方会在连接建立之前创建一个接收缓存,用以存放发送方发送的数据。而窗口大小在最初等于接收缓存大小。之后,窗口大小等于缓存大小减去已存在缓存中的数据量(rwnd---接收窗口大小)。
- 发送方根据每一次接收到的确认报文中的窗口字段,及时调整发送缓存大小,确保发送缓存用于小于等于窗口值。