今天图老师小编给大家展示的是TCP超时/丢失重传,精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!
【 tulaoshi.com - 服务器 】
Nagle算法要求一条TCP连接上最多只有一个未被确认的报文,发送方发送一个TCP报文,接收方确认该报文,发送方再发送下一个报文,若发送方在一定时间内未收到确认,则再重发报文。相对来说Nagle算法相对简单且不容易出错,但却降低了网络的吞吐量,也增加了网络流量。
在实际的TCP实现中,接收方往往一次确认一批的TCP报文,且确认报文与接收方发往发送方的报文一同回复,以减少网络流量,从另一方面说也就允许发送方在前一报文未确认时,可以继续发送下一个报文,虽然这种实现提高了吞吐量,但却带来了另一个问题,即发送文如何确认报文被接收方正确接收?
TCP有两种方式来保证报文被正确接收:
1:发送端在一定时期内未收到报文确认,报文重发
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/fuwuqi/)2:接收端检测到某一报文丢失,重复发送ACK报文(3个以上),以促使发送端重发丢失报文。这就是快速重传机制。
通常,发送端会重传接收方未收到的报文,但不会重传已经被接收方收到但并未确认的包,然后接收方将收到的报文排序后进行一并确认,
如上图,由于某种原因,发送端发给接收端的数据包序号1025,丢失了序号为1的包(250839)
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/fuwuqi/)此时接收端对序号1进行了确认,发送端重发了序号1,此时接收端已经有了2484个字节,序号1中有1024个字节,序号1025中的1460个字节,接收端这时回复一个确认2485的AC包。
来源:http://www.tulaoshi.com/n/20160331/2052531.html