Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

TCP-简介

TCP位于OSI的第四层(传输层)

特点

  • 面向连接

    • 需要建立连接才能传输,每一条TCP连接是点对点的,都有两个端点
    • 这个端点叫做套接字(socket)
      • 本质是文件描述符,绑定了IP地址 + 端口号
      • 两端加起来就是一个四元组
  • 传输可靠

    • 消息报文附带校验码,出现错误或丢包时会触发自动重传
  • 全双工通信

    • 设有发送缓存和接收缓存,双方可以同时发送和接收数据
  • 面向字节流

    • 消息报文可能会被拆分成多个部分,无消息边界,每一部分进行时序编号,按字节流进行发送,所以可能会出现粘包问题
  • 流量控制

    • 为了让发送方发送数据的速度不要太快,让接收方来得及接收
    • 通过大小可变的滑动窗口实现,假如A要发给B
      • 建立连接时,B会告知A,接收窗口大小 rwnd = 400(字节)
      • A发满这个数,就会停止,直到B新的ACK到达,指示后面可以继续发多少rwnd
    • 【死锁问题】B向A发送了rwnd为0的报文,A停止发送,然后B后面有空间了,就发了一个rwnd为400的报文,但这个报文丢失了,A一直在等着可以发,B也一直在等后面的数据,造成死锁
      • 解决办法:发送方A在收到rwnd为0报文后,设置一个持续计时器,到期后会主动发送探测报文,若返回不是0,那就可以打破死锁
  • 拥塞控制

    • 慢开始

      • 开始发送时,设置拥塞窗口cwnd = 1
      • 先使用慢开始算法,少量测试网络拥塞程度,逐步增加cwnd大小
      • 设置一个慢开始门限 ssthresh,cwnd超过这个门限,才会把慢开始算法替换成拥塞避免算法
    • 拥塞避免,有效降低丢包率

      • 每经过一个返回时间RTT,就把 cwnd 加一
      • 当网络出现拥塞,就把ssthresh设置成cwnd的一半,然后把 cwnd设置为1,重启慢开始过程
    • 快恢复

      • 当发送方连续收到3个重复确认,证明网络可能没有拥塞,就把ssthresh自身减半,然后 cwnd 设置为 新ssthresh 的大小,继续执行拥塞避免算法,快速恢复

w500

  • 首部开销明显
    • 最小20字节,最大60字节