TCP存在十大特性的目的是为了在保证传输数据可靠性的同时,还要提高传输效率,所以才出现了下面这些机制。
目录
确认应答的目的是为了保证数据的可靠传输。
1.应答机制的例子
2.实际的确认应答机制
二.超时重传机制
目的是为了确保数据传输的可靠性
1.超时重传的例子
2. 实际的超时重传机制
三.连接管理
确保数据传输的可靠性
1.连接管理的内容以及建立连接的目的
(1)连接管理内容
- 建立连接:3次握手
- 断开连接:4次挥手
(2)建立连接的目的
- 为了更好的可靠性,验证通讯双发的发送和接收能力是否正常。
- 协商一些重要参数。
2.三次握手的例子
3.实际三次握手的过程
4.连接管理的常见问题
(1)是否可以2次握手
不可以,因为如果没有最后一次确认号,以上面通话为例,那么小明是无法确认自己的话筒和对方的听筒是否正常。
(2)是否可以4次握手
可以,但是没有必要,4次连接相当于是把中间的一次拆分成2次,对于网络传输而言,传输一个数据包肯定比传输两个数据包效率高,所以没必要4次握手。
5.四次挥手(断开连接)的例子
6.实际的四次挥手过程
7.三次握手和四次挥手的重要状态
(1)LISTEN
服务器启动完毕,随时准备客户端进行连接。
(2)ESTABLISHED
连接建立成功,随时准备传输信息。
(3)CLOASE_WAIT
如果在服务端的代码出现了大量的该状态信息,说明挥手挥了一半,代码中存在bug,说明服务器没有正确的关闭socket。
(4)TIME_WAIT
当主动断开连接的一方,进入该状态后,即使进程已经消亡了,该状态还会存在一段时间,防止最后一个ACK丢包从而从而避免了无法重传。
四.滑动窗口
在可靠传输的基础上,提高传输效率
1.什么是滑动窗口
滑动窗口是批量发送数据,批量等待ACK,从而提高传输效率的一种机制。
2.使用滑动窗口处理数据的原理
3.滑动窗口对于丢包如何处理
(1)部分ACK丢包
(2)数据包丢包
五.流量控制
限制滑动窗口大小的一方面,确保可靠传输
1.为什么要有流量控制
对于滑动窗口而言越大传输效率就越高,但是滑动窗口不能无限大,肯定会有限制,由于TCP的传输本质上是一个生产者-消费者模型;其中发送方相当于是生产者,接收方是消费者,接收方的缓冲区相当于是用来存储数据的仓库,只有当仓库中有容量时,发送方才能继续发送数据。
2.什么是流量控制
在滑动窗口的机制下,为了限制传输的效率不要太快,保障传输的可靠性,相当于是接受方的缓冲区剩余空间的大小制约着发送方的滑动窗口大小,其中返回的ACK报文的报头就是窗口大小字段,而这个字段也是缓冲区剩余空间的大小。
3.具体的流量控制过程
六.拥塞控制
和流量控制一块决定滑动窗口的大小,也是确保可靠传输
1.为什么需要拥塞控制
对于刚开始发送数据时,由于不确定对方的网络状况如何,贸然地发送大量的数据,如果对方当前的网络状态比较拥堵,可能会使接收端雪上加霜,所以TCP通过刚开始发送少量的数据,相当于时先探路,判断对方的网络状态如何,然后再决定按照多大的传输速率来进行传输数据。
2. 引入拥塞控制后发送数据的详情图解
七.延迟应答
提高传输效率
1.什么是延迟应答
延迟应答就是接收端接收到数据后,不会立即就返回响应应答,而是等待一小段时间再来给发送方发送应答ACK,目的是想尽一切办法来提高传输效率。
2.延迟应答的详解示意图
八.捎带应答
在延迟应答的基础上,提高传输效率
1.什么是捎带应答
捎带应答就是接受端在接收发送端发来的数据后,由于存在延迟应答,之后会将响应和ACK应答一起发送给接收端。相当于是ACK搭上了响应的顺风车。
2.捎带应答的详解图示
九.粘包问题
与字节流传输有关,也可以归结到可靠传输
1.为什么出现粘包问题
TCP是传输层的协议,而且数据是按照序号排列在缓冲区中;而粘包问题是应用层解析数据时出现的问题,而粘包问题主要是由于字节流传输导致的,因为字节流在传输数据时,可以传输一个字节,也可以传输100个字节,当接收方收到数据时,不知道数据是从哪里开始,又到哪里结束,所以就出现了问题。
2.粘包问题示意图以及解决方法
3.解决粘包问题总结
(1)使用分隔符
(2)明确包的长度
解决粘包问题最主要的是要明确包和包之间的边界问题。
十.保活机制
归结到可靠传输里面
1.保活机制的应用场景
对于发生一些异常情况下,TCP对连接的特殊处理,如进程崩溃,主机关机,断电,网线断了。这时候就使用到了保活机制。目的也是为了提高可靠性。
2.异常情况的处理过程
(1)进程崩溃
在该情况下,TCP会正常的进行4次挥手,进程退出后,会自动关闭相关文件。
(2)主机关机
关机的时候会强制杀死进行,在这个过程中,也就完成了4次挥手。
(3)主机断电/断网
1.接收方断电
这个情况下,发送方就不会收到接收方的ACK,这时候就会触发超时重传,重传到一定次数后,发送方就会重置连接;如果还不行,就会断开连接。
2.发送方断电
由于接收方会等待发送方的数据,但是接收方不会一直进行等待,这时候就有了心跳包这个东西,这个心跳包没有包含实际业务的意义,只是为了保证对方是否还“活着”,一旦隔了一段时间后,没有接收到对方发送的心跳包,这时候就认为对方已经挂了,之后就会断开连接。这时候就体现到了保活机制的重要性。