TCP协议
- 一.TCP协议图
- 二. TCP中的关键协议
- 确认应答
- 后发先至机制
- 引入序号和确认序号
- 超时重传
- 去重机制
- 建立连接
- 三次握手
一.TCP协议图
我们可以发现,相比于UDP,TCP协议明显复杂很多,比如32位序号和32位确认序号,4位首都长度,保留位,窗口大小,紧急指针,选项,数据等这都是UDP协议中不存在的,我们就依次来看看TCP协议中的关键内容吧。
接着来介绍6位保留位,我们知道,在UDP协议中,因为受到报头长度的限制,如果我们长度超过报头的长度时,就会发生截断,超出部分就不会保留,那么在TCP中专门有"保留位"这个概念来预备将来想要扩展时所需的长度。
二. TCP中的关键协议
确认应答
确认应答是保证可靠性最核心的机制。在网络传输
后发先至机制
在网络传输的过程中,我们经常会发现有后发先至这种情况,意思就是后发出去的消息先显示出来的情况。
在网络传输过程中,出现后发先至,就会导致错误的含义。
为什么会发生后发先至的情况呢
那么为了解决后发先至这种情况,我们来引入一些规则。
引入序号和确认序号
引入这种之后,应答方就会告知发送方,我回答的是哪个数据。就不会导致被错误的理解。
而应答报文中的第一个序号,是按照发送报文的最后一个字节的序号+1得到的。
在确认应答机制中,通过应答报文来反馈回送给发送方,表示当前的数据正确收到了。
应答报文,也就是acknowledge,ack的缩写。
保留位中的第二位,就是ACK。如果当前报文是应答报文,ACK就会从0变成1.
超时重传
如果这一切数据的传输都是顺利的,那么接收方就会收到ACK应答报文,表示数据传输过程中传输正确,那么,如果在传输的过程当中,遇到丢包的情况,收不到ACK应答报文,这时候就需要超时重传上场了。
在发送方传输数据时,等的时间里,收到了ACK应答报文,如果等了好久都还没有收到, 那么发送方就会认为在传输的过程发生了丢包,就会把刚才的数据包再次传输。但是等待的时间有一个最大值阈值。
去重机制
超时确实会重传,但是重传也会有一定的次数限制,不会无休止的重传。
1.重传到一定程度,还没有ack应答报文,就会尝试重新连接,如果连接不上,就会放弃连接。
2 重传时间也不是一成不变的,重传到一定程度,会随着重传的次数而增大。
建立连接
建立连接的代码表示:
三次握手
此处的连接是虚拟的连接,抽象的连接,目的是让双方都能够保存到对端的信息。
虽然看起来图上有四次交互,但是有两次可以合并为一次,也就是中间的ack和syn可以合并为一处,最终形成三次握手。
所谓的建立连接的过程,就是服务器和客户端各自向对方发起一个syn,接收一个ack,其实在双方第一次交互的时候,连接就已经建立好了,但是最终要完成连接的建立,确立出后续进行通信,还需要接下来的步骤走完才可以,等到所有的握手环节都走完,服务器才会保留对端,也就是客户端的信息。
最终四步交互可以变成三步。
三次握手的意义是什么?为什么要进行三次握手。
- 可以先针对通信路径,投石问路,通信链路是否畅通。
- 针对通信双方,检验一下发送能力和接收能力是否正常。
- 服务器和客户端双方协商一些必要的参数。
协商参数的时候,大部分是以选项来体现的,最少0字节,最多40字节(因为报头部分占有20字节),TCP在一次通信过程中,每次开始的序号并不是从0/1开始的,而是选择一个较大的数字,以这个数字来继续计算,即使是同一个客户端和服务器,每次连接开始的序号也不同。