目录
1. TCP提高效率的机制
1.1 滑动窗口
作用:可以基于多线程并发,并行的执行代码结合理解,并行的发送数据报,提高网络数据传输效率(作用在发送端)
- 使用滑动窗口就是要同时收发多条数据报;
- 响应的ACK下一个序号是多少表示:接收端在这个序号以前的数据包都已经接收到;
- 窗口大小就是无需等待确认应答而可以继续发送数据的最大值(发送端接收到的ACK确认序号的最大值),上图窗口就是4000字节(四个字段);
- 窗口大小受限于流量控制窗口大小和拥塞窗口大小:min(流量控制窗口大小,拥塞窗口大小);
- 窗口越大,则网络的吞吐率就越高,传输效率越高;
- 滑动:接收到ACK确认序号的最大值,可以计算出多少段数据对方已经收到,对应的发送端滑动窗口就向下滑动多少;
这种机制被称为“高速重发控制”(快重传)发送端连续三次收到相同的下一个是多少的ACK,表示数据丢包需要重发,相较于超时重传时间是更快的。
1.2 延迟应答机制
作用:接收端稍等一定的时间再去应答,这样可以有时间消费掉接收缓冲区的数据,接收缓冲区剩余的空间就更大,返回的流量窗口大小就更大
目标:保证网络不拥塞的情况下尽量提高传输效率
延迟条件:
- 数量限制:每隔N个包就应答一次
- 时间限制:超过最大延迟时间就应答一次
1.3 捎带应答机制
2.TCP的特性/机制
2.1 安全性、可靠性机制
- 确认应答
- 超时重发
- 连接管理
- 流量控制
- 拥塞控制
2.2 提高效率的机制
- 滑动窗口
- 延迟应答
- 捎带应答
3.对于TCP中的缓冲区
客户端和服务端都存在接收缓冲区和发送缓冲区(每一端都有两个缓冲区)
发送缓冲区:记录了发送数据的序号、接收ACK应答的序号
接收缓冲区:记录了接收数据的序号、应答ACK的序号
4.TCP的粘包问题
发送和接收,都存在缓冲区(多次发送和接收)
粘包原因:解析某个数据时,用到其他部分的数据了。
TCP是基于字节流的,多条数据报在缓冲区,存在粘包问题;UDP是一次性发一次性收,不存在粘包问题。
- 如何避免粘包问题?
答:明确两个包之间的边界(应用层自己约定好数据格式、协议),类似于在线编程题,多组测试用例时的输入和输出,每组用例的输入和另一组用例的输入需要明确分隔开。
5.基于TCP的应用层协议
HTTP
HTTPS
6. TCP和UDP区别
没有哪个更好,只有在某个具体的业务场景中更合适选择
如果要满足安全可靠(包括次序)就可以使用TCP,反之,可以使用UDP
- 效率看,UDP更优(不用等待ACK应答)
- UDP是无连接、不可靠的,反之,TCP有连接、可靠的传输
- UDP面向数据报,只能一次发送和一次接收;TCP是面向字节流的,可以多次发送和接收
- UDP具有接收缓冲区,没有发送缓冲区,TCP都有
- UDP大小受限,TCP大小不受限
- TCP有“确认应答、超时重发、连接管理、流量控制、拥塞控制”机制保证其安全、可靠性