tcp的特点:
- 面向字节流
- 可靠传输
- 面向连接
tcp协议保证数据传输可靠性:
- 效检和
- 序列号
- 确认应答
- 超时重传
- 连接管理
- 流量控制
- 拥塞控制
1、TCP判断怎么丢包的?
- 通过序列号确认应答
确认应答与序列号
序列号:TCP传输时将每个字节数据进行了编号
确定应答:TCP传输过程中,每次接受到对方数据都会确认应答。也就是发送ACK报文。这个ACK报文的确认序列号,告诉发送方,接收到了哪些数据,下一次的数据从哪里发。
序列号的作用不仅仅是应答的作用,有了序列号能将接收到的数据根据序列号排列,并且去掉重复序列号的数据。这也是TCP传输可靠性的保证之一。
2、丢包优化方案
- 超时重传
- 流量控制
- 拥塞控制
超时重传
简单的理解就是在发送数据的一段时间内,如果没有接收到接收方的ACK响应,那么刚刚发送的数据需要重新发送。
对应两种情况:
- 如果是发送方的问题,数据重新发送,数据
接收方进行响应ACK
- 如果是接收方的问题,数据发生过来之后,接收方根据序列号判断是否重复数据,如果是直接丢弃,然后继续返回ack响应。
流量控制
定义:TCP根据接收端对数据处理的能力,决定发送速度。
原理:在TCP协议的报头信息当中,有一个16位字段的窗口大小。窗口大小内容实际上是接收端接收缓冲区的剩余大小。这个数字越大,网络的吞吐量也越大。接收端在应答ACK报文时,将自己窗口大小填入,并跟随ACK报文一起发送过去,而发送根据ACK报文里的窗口大小值进而改变自己发送的速度。如果接收端窗口大小为0,那么发送将停止发送数据。并定期向接收端发送窗口探测数据段,让接收端把窗口大小告诉发送端。
拥塞控制
定义:TCP的慢启动机制,在开始发送数据时,先发送少量的数据探路。探清当前的网络状态如何,再觉得多大的速度进行传输。
实现:发送刚开始定义拥塞窗口为1,每次接收到ACK应答,拥塞窗口加1。在发送数据之前,首先将拥塞窗口接收端反馈大小对比,取较小的值作为实际发送的窗口。
原理:拥塞窗口增长是指数级别的。设置一个拥塞窗口的阈值,当窗口大小超过阈值时,不能再按照指数来增长,而是线性增长。在慢启动开始时,慢启动的阈值等于窗口的最大值,一旦造成网络拥塞,发生超时重传时,慢启动的阈值就会是原来的一半,同时拥塞窗口重置为1。