面试题-计网:TCP如何保证可靠传输?

491 阅读3分钟
TCP如何保证可靠传输?
  • TCP基于以字节为单位的滑动窗口来实现可靠传输

image-20210330210511427.png

  • 如何描述发送窗口的状态?(使用三个指针来分别指向相应的字节序号)
    • 小于P1的是已发送并已收到确认的部分
    • 大于等于P3的是不允许发送的
    • P3-P1=发送窗口的尺寸
    • P2-P1=已发送但尚未收到确认的字节数
    • P3-P2=允许发生但尚未发送的字节数(又称为可用窗口或有效窗口)
  • 虽然发送方的发送窗口时根据接收方的接受窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大
    • 网络传送窗口值需要经历一定的时间之后,而且这个时间还是不确定的
    • 发送方也有可能根据网络当时的拥塞情况适当减小自己的发送窗口尺寸
      • 如果接收方把不按序到达的数据一律丢弃,那么接受窗口的管理将会比较简单,但这样对网络资源的利用不利,因为发送方会重复传送较多的数据。
      • TCP通常对不按序到达的数据是先临时存放在接受窗口中,等到字节流中所缺少的字节到了后,再给到上层的应用进程
    • TCP要求接收方必须有累计确认和捎带确认机制,减少传输开销。接收方可以在合适的时候发送确认,也可以在自己有数据要发生时,顺便一起把确认信息带上
      • 接收方不应过分推迟发送确认,否则会导致发送方不必要的超时重传,这反而浪费了网络资源。TCP标准规定,确认推迟的时间不应超过0.5s。若收到一连串具有最大长度的报文段,则必须每隔一个报文段发送一个确认[RFC 1122]
      • 捎带确认很少发生,大多数应用程序很少同时两个方向上发送数据
    • TCP的通信时全双工通信。
  • 对于不按序到达的数据应如何处理,TCP并无明确规定
  • 总结
    1. 校验和:发送的数据包的二进制相加然后取反,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。
    2. 编号:TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
    3. 超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
    4. 滑动窗口
    5. 拥塞控制