传输层(一)——UDP和TCP的可靠传输,流量控制机制

传输层

UDP

UDP报文结构

在这里插入图片描述

  • 源端口号(2)
  • 目地端口号(2)
  • UDP报文总长度(首部+数据)(2)
  • 检验和:校验和是可选的。 (TCP 是必选的)校验和覆盖 UDP 首部和数据 (TCP 也一样覆盖首部和数据,但是 IP 只覆盖首部)(2)
检验和的计算

UDP 的校验和要计算首部和数据部分。首部还包括伪首部。
在这里插入图片描述

  • 多了 12 个字节的伪首部。
  • 注意点:UDP 长度计算两次。
  • 如果检验和有错,则 UDP 数据报被悄悄丢弃,不产生任何差错报文。
为什么要加有伪首部?
  • 目的是让 UDP 两次检查数据是否已经正确到达目的地。
  • 收到这个udp的对端也做同样的校验和计算,如果接收端IP层传递了错误的数据报到UDP层的话(目的ip不是本机ip或者协议类型不对),校验和就会不一致,丢弃包。
  • 即使网络层没有检查出来,在传输层也能得到检验。

伪首部包括:源 IP 地址,目的 IP 地址,0,协议号,UDP 长度。

TCP

TCP的可靠传输
  1. 应用数据被分割成 TCP 认为最适合发送的数据块。
  2. 确认机制,发送报文后,等待确认。
  3. 重发机制,没有收到确认,将重发数据段。
  4. 保持它首部和数据的校验和。确认数据的准确性。
  5. 排序,丢弃重复的,流量控制。
TCP 的流量控制机制
慢启动(慢开始):
  1. 慢开始不是指 cwnd 的增长速度慢(指数增长),而是指 TCP 开始发送设置 cwnd=1。 2. 思路:不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大 逐渐增加拥塞窗口的大小。这里用报文段的个数的拥塞窗口大小举例说明慢开始算法,实时 拥塞窗口大小是以字节为单位的。
  2. 为了防止 cwnd 增长过大引起网络拥塞,设置一个慢开始门限(ssthresh 状态变量) 当 cnwd<ssthresh,使用慢开始算法
    当 cnwd=ssthresh,既可使用慢开始算法,也可以使用拥塞避免算法
    当 cnwd>ssthresh,使用拥塞避免算法
拥塞避免:
  1. 拥塞避免并非完全能够避免拥塞,是说在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
  2. 思路:让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞控制窗口加一。
  • 无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认,虽然没有收到确认可能是其他原因的分组丢失,但是因为无法判定,所以都当做 拥塞来处理),就把慢开始门限设置为出现拥塞时的发送窗口大小的一半。然后把拥塞窗口 设置为 1,执行慢开始算法。 如图所示:
  • 在这里插入图片描述
快速重传:
  1. 快重传要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及 早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发 送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。
  2. 由于不需要等待设置的重传计时器到期,能尽早重传未被确认的报文段,能提高整个网络的吞吐量。
快速恢复:
  1. 当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把 ssthresh 门限减半。 但是接下去并不执行慢开始算法。
  2. 考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将 cwnd 设置为 ssthresh 的大小, 然后执行拥塞避免算法。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值