上次我们说TCP协议是一个可靠的传输层协议,它的可靠性主要分为四点
①建立连接(三次握手)
②确认重传
③流量控制,滑动窗口
④断开连接(四次挥手)
上次我们说到TCP通过包头信息中的序列号和确认号保证能够完全接受所有数据,通过校验和确认数据的完整性,那么tcp除了这些提供了可靠性之外,还有建立连接,断开连接,和滑动窗口控制来提供可靠性机制,接下来一次给大家讲解。
首先我们来看一下TCP如何进行建立连接
TCP通过三次握手建立可靠连接,那么这个链接是如何建立的呢?
上次我们说到TCP报头中有个Flag选项,里有6个标志位,每一位代表不同的作用。而建立链接的时候就用到了我们的标志位。
首先我们看紫色圈住的内容是tcp建立连接三次握手的过程,而红色的是我们的Flag中的标志位。
建立过程
①主机a(通常叫做客户端)发送一个SYN置位为“1”的数据段,表示期望与服务器A建立链接,这个数据段的序列号(seq)为a
②服务器a回复了SYN=ACK的数据段,这个数据段的序列号(seq)为b,确认序列号为主机a的序列号加1(a+1),此次作为对主机a的SYN报文进行确认,表示同意建立连接并希望与主机a建立链接。
③主机a发送一个标识了ACK置位为“1”的数据段,次数据段的序列号(seq)为a+1,确认序列号为服务器的序列号加1(b+1),此次作为对服务器a的SYN报文进行确认,表示同意与你建立链接。
以上就是TCP建立连接的过程,双向请求,双向作出回应,所以我们所tcp是可靠的。
接下来我们说滑动窗口是如何保证数据的可靠性的。
首先我们要知道窗口大小指的是什么
窗口大小,就是预留了多大的缓冲区,单位是字节,一次最多能接收处理的数据量。
看上图,主机a向服务器a发送4个长度为1024字节的数据段,其中主机a的窗口大小为4096个字节,服务器a的窗口大小为3072个字节,当服务器收到第3个数据段,缓存区满了之后,第四个数据段就会被丢弃,这时候服务器以ACK3073响应窗口大小调整为3072,表明自己的缓冲区只能处理3072个字节的数据段,主机a收到之后改变自己发送的速率,发送窗口大小改为3072字节。
TCP通过窗口滑动,保证了数据的完全接受和处理保障了数据传输的可靠性。
TCP支持全双工模式的数据传输,在传输数据之前通过三次握手建立两个方向的连接,因此在数据传输之后,两个方向的连接都需要关闭。那么是如何进行关闭的呢,我们看下面。
如图所示
①主机a想要终止连接,于是发送一个FIN,ACK置位为“1”的数据段,序列号为a,确认序列号为b,表示要跟服务器断开连接。
②服务器a收到后回应标识了ACK的数据段,序列号为b,确认序列号为a+1,作为对主机a的FIN回应,表示收到了断开请求。
③服务器a再给主机a发送一个FIN,ACK置位为“1”的数据段,序列号为b,确认序列号为a+1,表示想要跟主机a断开连接。
④主机a回应一个标识了ACK的数据段,序列号为a+1,确认序列号为b+1,作为对服务器a的FIN报文的确认,表示同意断开连接。
经过这四个步骤代表着tcp连接的断开,双向建立,双向断开,保证其可靠性。
以上是TCP如何通过通过滑动窗口,三次握手,四次挥手提高可靠性的原因,感谢大家的观看,我们技术讨论群是:765244669,每天都会有免费的公开课连接,大家可以免费报班学习。