为什么会出现丢包?
我们在网络上传输数据的时候,数据需要经过很多的路由器/交换机(交通枢纽)进行传输,而路由器/交换机的结构是很复杂的,传输的数据量也是不确定的,可能这一会传输的数据比较少,过一会传输的数据又比较多
如果路由器/交换机设备太过繁忙,后面来的数据等待了太久,就有可能会被丢弃,这就出现了丢包,当网络负载越高,越繁忙,就越容易出现丢包
出现丢包的两种情况
一.
二.
第二种情况相比于第一种情况就稍微复杂,当主机B接收到了主机A传来的数据,再发送确认应答的数据时发生了丢包,这就导致主机A没有收到主机B确认应答的消息,主机A就会重新发送数据给主机B
此时主机B就收到了两份相同的数据,所以主机B作为接收方就要对接收到的数据进行去重,把重复的数据丢弃掉,保证应用程序在读取数据的时候不会出现重复
那么我们要如何高效的判定当前收到的数据是否是重复的呢,这就需要用到TCP数据报中序号这个属性了,通过传输数据的第一个字节的序号,以及传输数据的长度,可以获得传输数据的每一个字节的序号,通过判断序号有没有重复出现就可以很快的判断出当前接收到的数据有没有出现重复。
超时时间
主机A在发送数据给主机B以后,会等待一段时间,在等待时间结束后还没有收到主机B的确认应答信息的话才会重新发送数据,这段等待的时间便是超时时间
而超时时间不是一个固定的值,会随着超时轮次的增加,而进一步增加,随着重传轮次的增加,等待时间也会越来越长,但即使一直没有收到确认应答的信息,也不会一直的进行重传操作,因为要是多次重传都没有成功,说明当前网络本身的丢包率已经极高了,网络可能遇到了比较严重的故障,进行频繁的重传也是白费力气