TCP/UDP

比较

Posted by Lan on July 17, 2020

tcp,udp

tcp

  • 面向连接

  • 面向字节流

  • 可靠传输,流量控制和拥塞控制

  • 不支持广播,只有两个端

  • 首部最小20字节,最大60字节

tcp可靠性体现在

  • 超时重发 发送方,发送内容出现误码或者丢包,接收方不会返回确认码(ACK),在超时时间截止时,接收方收不到确认码就会超时重发

    • RTT 往返时间:自tcp数据发送到接收确认的时间间隔
    • RTO 超时重传时间:一般设置为略大于RTT.(小于RTT会导致不必要的重传,过大于RTT会导致网络等待时间过长)
    • Jscobson/Karels算法:由于复杂度网络变化,RTT一直在变,所以RTO要依据RTT的变化做出修改,以适应网络变化。
  • 滑动窗口 TCP 头里有一个字段叫 Window,叫 Advertised-Window,这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。

    滑动窗口分为发送窗口和接收窗口

    • 发送窗口 大小取决于接受窗口,收到接受方确认ack就会发生[滑动]

    • 接受窗口 大小取决于系统和硬件,收到发送方确认ack就会发生[滑动]

    但接收端窗口滑动还必须前面的报文都确认的情况下,才会移动窗口左沿

  • 流量控制 就是让发送方的发送速率不要太快,让接收方来得及接收

    • 方式: 1.接收方发送滑动窗口给发送方,调整发送方的发送窗口大小。一般在发送方发送窗口过大时,可能接收方会收不到发送方的部分数据,就会去调整发送方窗口大小,进行流量控制。
  • 拥塞控制 视频:https://www.bilibili.com/video/av52266048/

    • 网络拥塞:网络需求量大于网络可提供的资源部分(带宽等),就形成了网络拥塞。
    • 概要: 发送方维护拥塞窗口,将拥塞窗口作为发送窗口(swmd=cwnd),维护慢开始门限(ssthresh);
      • cwnd < ssthresh,使用慢开始算法
      • cwnd > ssthresh,停止使用慢开始,改用拥塞避免算法
      • cwnd = ssthresh,既可以使用慢开始,也可以使用拥塞避免
    • TCP四种拥塞控制算法
      • 慢开始算法(1988 TCP Tahoe) 拥塞窗口大小以指数规律增长(1,2,4,8)
      • 拥塞避免算法(1988 TCP Tahoe) 每轮次拥塞窗口加1,即线性规律增长
      • 快重传(1990 TCP Reno) 就是使得发送方尽快进行重传,而不是等超时时重传计时器超时再重传 一旦收到三个重复确认,就知道丢失的数据报文段,开始执行快重传
      • 快恢复(1990 TCP Reno)

    拥塞控制

udp

  • 不面向连接
  • 面向报文

  • 不可靠传输

  • 支持广播,支持一对多,多对多,多对一等

  • 适用于实时应用: ip 电话、视频会议

  • 首部仅8字节