1.TCP报文格式
为了方便后续各位深入理解TCP机制,我们有必要先了解一下TCP的报文格式,首先我们先来看如下图
第四行那六个单词分别有不同的作用,初始为0,无作用,置为1即代表不同作用,具体后面会介绍。
我们后面要介绍的各种机制,实际都与这些息息相关,OK,话不多说,我们首先来介绍第一个机制——-——
可靠性机制
2.可靠性机制
可靠性机制主要是由确认应答,超时重传,连接管理(重中之重之重之重之重),拥塞管理实现的,下面我们来一一介绍。
2.1确认应答
详细解析:发送端每发送一条数据都会根据数据生成一个序号,然后把这个序号写入TCP报文头中,也就是上面报文图的第二行,接收端在接收这条数据之后,会将序号加1然后填入确认序号,并将ACK 置为1表示是对之前数据的应答,也是按照TCP报文格式发送的,那么发送端在接收到这个报文之后就知道接收端确实接收到了之前的数据,就会放心的去继续发送数据,然后接收端继续发送ACK应答,如此循环直到数据发送完毕。
这么看确实比UDP好不少,UDP管你收没收到,发完就润。
补充:注意区分应答和响应
应答:在传输层层面,只是一个标记,虽然是按照TCP报文格式发送的,但是数据项为空。
响应:在应用层层面,是针对客户端请求计算出来的结果,包含真实数据。
白话版:想象一下你跟女生激情告白,写了三千字小作文,第一种情况:女生看完扣了个1表示消息收到了,但是没有任何表态,仅此而已。
第二种情况:女生热泪盈眶,写了三万字小作文明确的拒绝了你。哈哈。。。
那么应答就是扣了一1
响应则是三万字小作文,针对你的要求(在一起)给出了明确的结果(拒绝)。
2.2超时重传
介绍;ACK是一个确认信号,ACK置为1即表示你刚才发的数据我都收到了。
所谓ACK应答也即是把ACK置为1的TCP报文。
详细解析:数据在传输过程中要经过很多网络设备,比如:路由器,交换机,运营商网络等等,,
在此过程如果任何一个设置出问题,比如太阳耀斑,地球爆炸,网络中断,本次数据传输就会出现超时现象(规定时间内没有拿到刚发送数据的ACK应答)
那么设计TCP协议的大牛是如何处理这个问题呢,啊听名字就知道,如果确定出现超时现象了我就重新发一次数据。
那会不会发送端成功发送了数据1-1000,接收端也接收了,但是接收端发送ACK应答时出现了丢包,导致发送端判定为超时了重新发了数据1-1000,那么接收端会接收两个数据1-000吗,答案是不会,接收端会根据报文中序号来判断是否接收过这些数据,如果发现接收过就舍弃第二次收到的数据1-1000,然后重新发送数据1-1000ACK应答.
2.3连接管理(重中之重之重之重之重之重之重)
介绍:上面讲的都是发送端和接收端数据传输之间的设计,那发送端和接收端是如何建立连接呢,大牛对于建立连接又有怎样的设计呢😮。
概要:
连接建立时:三次握手
连接断开时:四次挥手
(礼貌这一块👍)
先看图:
SYN就是握手字符,我们前面说SYN等都是置为0的,不发挥作用,那么当SYN置为1就表示我想要和你建立连接,是一个握手信号。
ACK前面已经说过了不赘述。
那么现在我们来看图说话吧!
第一步: 首先发送端 发送了一个SYN为1的TCP报文表示我想和你建立连接,接收端同意建立连接(不然怎么传数据),这表示发送端的发送能力没有问题。
第二步:接收端发送了ACK为1 和SYN为1的TCP报文,ACK为1表示我收到了你的连接请求,SYN为1表示我也跟你建立连接,这表示接收端的接收能力和发送能力没有问题。
第三步:发送端再发送一个ACK为1的TCP报文,表示我也收到了你的连接请求。这表示发送端的接收的能力没有问题。
如此大功告成!!!发送端和接收端就可以开启没羞没臊的数据传输生活辣!