TCP和UDP

TCP和UDP的区别

这篇博客和大家来说说TCP和UDP的区别把!

首先我们先从计算机网络的角度来阐述一下进程之间的通信问题:

从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层

当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。

两个主机之间的通信其实就是两个应用进程之间的通信,计算机中的进程用进程标识符:端口号来标识。

有了这些基本的概念,下面我们首先来介绍一下UDP把,这个比较简单

  • UDP 在传送数据之前不需要先建立连接。对方的运输层在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式
  • UDP 只在 IP 的数据报服务之上增加端口的功能和差错检测的功能。正是这个原因,所以UDP在一些实时性要求比较高,但是对数据精确度要求不那么高的场合十分适用。

UDP的基本特点:

  • UDP 是无连接的,即发送数据之前不需要建立连接。
  • UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。
  • UDP 是面向报文的。UDP 没有拥塞控制,很适合多媒体通信的要求。
  • UDP 支持一对一、一对多、多对一和多对多的交互通信。
  • UDP 的首部开销小,只有 8 个字节。

为什么说UDP是面向报文的呢,是因为UDP对应用程序传递下来的数据既不合并,也不拆分,直接添加首部便直接交付给IP层。

接下来聊一聊TCP把,这个就比较复杂了。

  • TCP 是面向连接的运输层协议。
  • 每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一)。
  • TCP 提供可靠 (无差错,不丢失,不重复,按序到达)的服务。
  • TCP 提供全双工通信。
  • 面向字节流。

首先我们来看看TCP面向流的概念:
在这里插入图片描述

TCP是如何保证可靠性传输的呢?

TCP的首部有两个字段:一个顺序号,一个确认号

顺序号表示当前报文的顺序,确认号表示当前主机A下一次需要接收主机B的报文序号。

假设主机A向主机B发送顺序号为10的报文段,主机B正常接收以后,会返回给主机A一个报文段,表示:我已正常接收到顺序号为10的报文,现在我需要顺序号为11的报文,主机A接收到之后就会发送一个顺序号为11的报文给主机B。

如图:
在这里插入图片描述
发送方在规定的设置时间内没有收到确认,就要将未被确认的报文段重新发送。
接收方若收到有差错的报文段,则丢弃此报文段(不发送否认信息)。若收到重复的报文段,也要将其丢弃,但要发回(或指带发回)确认信息。
若收到的报文段无差错,只是未按序号,那么应如何处理?或者将不按序的报文段丢弃,或者先将其暂存于接收缓存内,待所缺序号的报文段收齐后再一起上交应用层。

TCP可靠传输的具体实现:

  • TCP 连接的每一端都必须设有两个窗口——一个发送窗口和一个接收窗口。
  • TCP 的可靠传输机制用字节的序号进行控制。TCP 所有的确认都是基于序号而不是基于报文段。
  • TCP 两端的四个窗口经常处于动态变化之中。
  • TCP连接的往返时间 RTT 也不是固定不变的。需要使用特定的算法估算较为合理的重传时间。

TCP的拥塞控制:

首先明确一下何为拥塞

数据的丢失有两种情况:一种是接收方的容量太小(接收缓存),一种是网络的容量太小(网络带宽)
源主机如何知道拥塞:1)收到ICMP的源抑制报文。2)因报文丢失引起的超时

拥塞窗口:TCP的拥塞控制方案将由于接收方的容量和由于网络的容量所产生的拥塞问题分别处理,除了已定义的接收窗口外,还定义了拥塞窗口,拥塞窗口的动态调整是:一旦发现数据包丢失,则降低重发数据包的速率

  • 接收方承认的接收窗口表示接收缓冲区的容量
  • 拥塞窗口表示网络的容量
  • 接收窗口和拥塞窗口,两者取其小

TCP的几种拥塞控制方案:

  1. 慢开始和拥塞避免
    发送方维持一个叫做拥塞窗口 cwnd (congestion window)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。如再考虑到接收方的接收能力,则发送窗口还可能小于拥塞窗口。
    发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。

慢开始算法原理:
在主机刚刚开始发送报文段时可先设置拥塞窗口 cwnd = 1,即设置为一个最大报文段 MSS 的数值。
在每收到一个对新的报文段的确认后,将拥塞窗口加 1,即增加一个 MSS 的数值。
用这样的方法逐步增大发送端的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理。
在这里插入图片描述
使用慢开始算法后,每经过一个传输轮次,拥塞窗口cwnd就加倍

例如,拥塞窗口 cwnd = 4,这时的往返时间 RTT 就是发送方连续发送 4 个报文段,并收到这 4 个报文段的确认,总共经历的时间。 

慢开始门限状态变量ssthresh

慢开始门限 ssthresh 的用法如下:
当 cwnd < ssthresh 时,使用慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。
拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,而不是加倍,使拥塞窗口 cwnd 按线性规律缓慢增长。

当网络出现拥塞时:

无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有按时收到确认),就要把慢开始门限 ssthresh 设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。

然后把拥塞窗口 cwnd 重新设置为 1,执行慢开始算法。
这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。

如下:
在这里插入图片描述

  1. 快重传和快恢复
    快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认。这样做可以让发送方及早知道有报文段没有到达接收方。
    发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。
    不难看出,快重传并非取消重传计时器,而是在某些情况下可更早地重传丢失的报文段。

如下:
在这里插入图片描述

快恢复算法:

(1) 当发送端收到连续三个重复的确认时,就执行“乘法减小”算法,把慢开始门限 ssthresh 减半。但接下去不执行慢开始算法。
(2)由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,即拥塞窗口 cwnd 现在不设置为 1,而是设置为慢开始门限 ssthresh 减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

从连续收到三个重复的确认转入拥塞避免
在这里插入图片描述
发送方的发送窗口的上限值应当取为接收方窗口 rwnd 和拥塞窗口 cwnd 这两个变量中较小的一个,即应按以下公式确定:
发送窗口上限值 = Min [rwnd, cwnd]

篇幅有点长,没有学过计算机网络的同学看起来可能会比较费劲。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值