关于TCP的确认机制看了不少书,但有一个问题始终没有搞懂,还望有高手指点迷经。
发送端发送序号1024、2028的两个TCP包。正常情况接收端会返回确认号为2029的ack包来确认两个发送端的包已经接收到了。如果2028的包丢失那就会只返回确认号为1025的包,可是要是1024包丢失接收端仍会返回确认号为2029。可发送端接收到确认号为2029的包,就认为1024、2028的两个包都传输成功,而不知道1024包丢失,他就不会重传1024包(我理解的TCP的确认机制就是这样)。如何让发送端知道1024包丢失并重传?

解决方案 »

  1.   

    TCP不是为了提高效率,不用每个包都确认就一次连续发送发送窗口大小的数据。而接收端只发送下一个要接收的字节数作为确认号。这样的话如果1024包丢失接收端不会返回确认号为2029的包,那发送端不就要重传1024和2028两个包了,这样起不是没有达到提高效率的作用吗?
      

  2.   

    好象IP层上有IP安全协议,具体忘记了,反正就是加密之类的