- 拥塞控制
- 延迟应答
- 捎带应答
- 粘包问题
- 保活机制
前部分的特性:link.
拥塞控制和流量控制一起来决定窗口的大小
由于不好衡量玩过传输路径上的拥堵情况,TCP引入了慢启动机制,先发少量的数据探路,查看当前的拥堵状态,再去慢慢快速的传输数据。
(1)当TCP开始启动时,慢开始的阈值等于窗口的最大值。
(2)每次超时发送的时候,慢开始的阈值就会变成原来的一半。
目的是为了提高传输的效率,在流量控制的基础上,尽量返回一个合理的、较大的窗口。
在不影响可靠性情况下,尽量让ACK的发送时间晚一点,就可以给应用程序提供更多的消费数据的机会,时间到了再去发送ACK,此时窗口大小就会更大一点。一定要注意不可以发送超时重传。
在延时应答的基础上,为了进一步的提高运行效率。
在连接管理中断开连接部分是四次挥手的过程,如果是捎带应答就可以三次挥手就完成断开连接的过程。
客户端给服务器发送了请求之后,内核收到数据会立刻返回一个ACK。如果ACK发送了演示应答,在等待发送的过程中,服务器准备发送自己的RESP,此时发现ACK还没有发送,就可以在RESP数据报的基础上,顺带捎上ACK数据报。
(1)粘包问题的产生
粘包问题中的包是应用层中的“包”。在TCP报头中没有像UDP一样的报文长度的字段,所以在传输层的角度中,TCP是以报文传输的,而应用层就相当于是字节流。应用层看到这段字节流,完全不知道应该从哪里开始从哪里结束。(就相当于是写作文没有标点符号)。
因此粘包问题也并不是TCP自身的一个机制,而是面向字节流传输存在的问题。
(2)解决粘包问题:要么使用分隔符,要么明确数据包的长度。
当出现一点异常的情况时,TCP会对这些情况进行特殊的处理。
(1)进程突然崩溃:TCP可以正常进行四次挥手来断开连接
(2)主动(按照流程)关机:关机时会强制性的杀死进程,在杀死进程时就可以进行四次挥手了。
(3)主机断电/网线坏掉了
接收方出现问题:发送方尝试发送消息,就会出现收不到ACK得情况,就会导致一直超时重传,当重传一定次数,就会重置连接,最后放弃连接。
发送方出现问题:接收方尝试接收消息,接收方是不清楚发送发是什么时候发送消息,可以使用“心跳包”来解决问题,TCP连接得双方,即使在没有数据交互得时候,也会定时互相发送一个没有实际意义得“心跳包”,目的就是为了查看对方有没有活着,如果一段时间没收到就说明对方挂了。
十个特性之间的联系:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)