是一种面向连接的可靠传输协议。
特点:
1、面向虚连接的传输协议
2、每一条TCP连接有且只有两个端点,即每一条TCP连接只能是点对点的
3、可靠、有序、无丢失、不重复
4、TCP提供全双工通讯
发送缓存:应用程序放给发射方准备发送的数据;TCP已发送但尚未收到确认的数据
接收缓存:乱序到达的数据(可能存在数据丢失);按序到达但尚未被应用程序处理的数据
5、TCP是面向字节流的
TCP的四元组:源IP、源端口、目标IP、目标端口
套接口:IP--->port
TCP报文段
确认序列号:1、该序列号表示接收方期望收到发送方发送的下一个字节的序号;
2、代表接收方已接收该序列号之前所有的所有字节。
(上一个报文序列号+数据)
TCP确认机制被称为累计确认机制
数据偏移:实际上就是TCP首部长度
窗口值:指发送方可以不用接收确认报文,能够连续发送的数据最大值
选项字段:MSS、时间戳、选择确定机制、窗口因子
标记位:
确认位ACK:当ACK=1时,确认序列号字段有意义。在TCP连接建立后,所有传输报文段都必须吧ACK置为1
同步位SYN:代表连接请求,只会在三次握手的地方遇到
终止位FIN:代表此报文发送方数据已全部发送完毕,代表要求释放连接
复位RST:表明TCP连接出现严重错误,必须释放连接,并建立新的连接
紧急位URG:当URG=1时,表明此报文中存在紧急处理的数据,是高优先级数据,应尽快交付应用程序处理。与紧急指针配合使用。
推送位PSH:接收方应尽快交付接收应用进程,不在等待缓冲区填满再向上交付。
TCP的可靠机制
1、排序机制
MTU:(属于接口的概念,数据链路层的概念)
最大传输单元--->包含数据部分·、传输层头部、网络层头部--->以太网当中默认值为1500字节
MSS:(属于传输层的概念)
最大段长度--->仅包含数据部分
在本地设备上,如果进行了分段操作,则无法进行分片操作
2、确认机制
3、重传机制
超时重传机制:
RTT(超时重传):往返时间,指的是发送发将数据发出后,到他接收到对端反馈的确认报文的完整时间段
RTO(超时重传时间):略大于RTT时间
RTO时间是动态变化时间。会进行超时间隔时间加倍。
快速重传机制:
客户端通过服务端的反馈信息从而进行数据重传的方式被称为快速重传机制,此时的重传并非是因为RTO时间到达而触发,而是因为客户端连续收到3个冗余ACK报文。
--->快速重传机制会在RTO定时器超时之前重传报文段,从而解决超时重传时间加倍导致的延时增大问题。
选择确认机制(SACK):
为了加快重传效率,将累计确认机制修改为SACK,在TCP首部中的选项内容中携带未收到的数据字段,从而引发客户端重传。
机制的选择需要提前协商好,现在一般默认选择确定机制。
4、TCP流量控制机制
窗口:指发送方可以在不接收确认报文的前提下,一次性发送的数据最大量
接收方会在连接建立之前创建一个接收缓存,用以存放发送方发送的数据。而窗口大小在最初等于接收缓存大小。之后,窗口大小等于缓存大小减去已存在缓存中的数据量(rwnd---接收窗口大小)。
发送方根据每一次接收到的确认包问中的窗口字段,及时调整发送缓存大小,确保发送缓存永远小于等于窗口值。
TCP连接管理
TCP连接的建立
TCP建立连接的前置条件或需要解决的问题:
1、每一端知晓对端的套接字
2、进行参数协商(MSS\窗口值、是否使用选择确定机制、窗口扩大因子、时间戳)
3、设备对资源进行分配
TCP存在一个保活计时器,该计时器两个小时时间。若该计时器时间内没有收到任何客户端数据,服务端会发送探测报文,每隔75秒发送一次。若连续发送十个探测报文仍没有反映,则服务的认为客户端发生故障,关闭连接。
TCP链接的释放
1、是为了释放在之前分配给TCP进程的资源
2、本地所有数据已传输完毕
客户端time-wait到close要等2*MSL时间(报文存在最长时间,通常为2分钟)。