题外话
最近学习内容很多嗷
正题
延时应答机制
当客户端发送数据到服务器时,服务器不会立即返回ACK,而是等待一会再返回ACK
这段等待时间应用程序可能会消化掉接收缓冲区中的数据,当服务器返回ACK时,就会携带此时接收缓冲区大小的信息
当客户端下次再发送数据的时候就可以发送的大一些
延时时间的两种策略
1.按照一定的时间指定延时
2.根据收到的数据量延时
上述两个延时策略是结合使用的
捎带应答机制
建立在延时应答机制的基础上,提升效率的方式
具体如下图
粘包问题
在字节流读写数据的场景中,会涉及到一个非常关键的问题,粘包问题
如上图
当客户端向服务器发送给多个数据到内存缓冲区,我们无法知道哪个数据到哪里截止,这就是粘包问题
粘包问题解决方法
1.使用分隔符
定义任意字符都可以,只要字符在请求数据中是不存在的
2.约定包的长度
当我们发送数据的时候,可以将数据长度放在数据前,这样就可以正确读取数据
关于异常情况及处理方法
1.传输过程中,其中一个进程崩溃(结束)了
操作系统可以回收释放对应的PCB(进程控制块),相当于调用close
2.某个主机关机
操作系统会强制结束所有用户进程再进入关机,进程结束后会进行四次挥手断开连接的
3.某个主机电源断电或者网线断开
服务器断电或者网线带哪里,客户端接收不到ACK数据包,就会触发超时重传,重传几次会发送复位报文(RST)
没有响应之后客户端会单方面删除服务器信息
客户端断电或者网线断开,服务器一段时间接收不到客户端发送的数据,就会触发心跳包,服务器会周期性给客户端发送心跳包
正常情况下客户端会给服务器返回ack,但是客户端断电了,就不会返回任何数据
小结
至此,所有的TCP核心机制已经结束了
1.确认应答机制
2.超时重传机制
3.连接管理机制{三次握手,四次挥手}
4.滑动窗口机制
5.流量控制机制
6.拥塞控制机制
7.延时应答机制
8.捎带应答机制
9.战报问题
10异常情况及处理方法
现在加入粉丝团以后就是老粉了,麻烦家人们给个三连(点赞关注收藏!!!)