5.3、UDP 和 TCP 的对比

在使用 TCP/IP 体系结构的网络通信中,这两个协议的使用频率仅次于网际层的 IP 协议

image-20230104174811333

TCP/IP 体系结构应用层中的某些协议需要使用运输层的 TCP 提供的服务

  • 而另一些协议需要使用运输层的 UDP 提供的服务

1、UCP(无连接) & TCP(面向连接)

1.1、UDP

如下所示,它们在运输层使用 UDP 协议进行通信,纵坐标为时间

使用 UDP 协议的通信双方可以随时发送数据

image-20230104175231569


1.2、TCP

使用 TCP 协议的双方在进行通信之前必须使用 “三报文握手” 来建立 TCP 连接

TCP 连接建立成功后才能进行数据传输

数据传输结束后必须使用 “四报文挥手” 来释放 TCP 连接

image-20230104175224008

三报文握手与四报文挥手属于 TCP 连接管理,过程比较复杂

具体介绍连接:TCP的连接建立


注意:这里逻辑连接是指逻辑连接关系,而不是物理连接

综上所述

  • UDP 是无连接的,
  • TCP 是面向连接的

2、UDP(单、多、广播)/TCP(单播)

2.1、UDP

如下所示,使用 UDP 协议进行通信的四台主机

  • 其中,任何一台主机都可以向其他三台主机发送广播
  • 也可以向某个多播组发送多播
  • 还可以向某台主机发送单播

image-20230104175738428

也就是说,UDP 支持单播、多播以及广播

  • 话句话说,UDP 支持一对一、一对多、以及一对全的通信

image-20230104175811901


2.2、TCP

使用 TCP 协议的双方在进行数据传输之前必须使用 “三报文握手” 来建立 TCP 连接

  • TCP 连接建立成后,通信双方之间就好像有一条可靠的通信信道

通信双方使用这条基于 TCP 连接的可靠信道进行通信

tcptongxin.gif

很显然,TCP 仅支持单播

  • 也就是一对一的通信

3、两个协议对应用报文的处理

3.1、UDP(面向应用报文)

image-20230104180536246

发送方的应用进程将应用层的报文交付给运输层的 UDP

UDP 直接给应用层报文添加一个 UDP 首部,使之称为 UDP 用户数据报,然后进行发送

udpfasong.gif

为了简单起见,忽略运输层下面的各层处理


接收方的 UDP 收到该 UDP 用户数据报后,去掉 UDP 首部,将应用层报文交付给应用进程

udpjieshou.gif


也就是说 UDP 对应用层交付下来的报文既不合并也不拆分,而是保留这些报文的边界

  • 换句话说,UDP面向应用报文

image-20230104181516270

3.2、TCP(面向字节流) 发送缓存/接收缓存

发送方的 TCP 把应用进程交付下来的数据块仅仅看作是一连串的、无结构的字节流

TCP 并不知道这些待传送的字节流的含义,仅将他们编号并存储在自己的发送缓存

TCP 根据发送策略,从发送缓存中提取一定数量的字节,构建 TCP 报文段并发送

image-20230104181713238


接收方的 TCP

  • 一方面从接受到的 TCP 报文段中去除数据载荷部分并存储在接受缓存中

  • 一方面将接受缓存中的一些字节交付给应用进程

image-20230104181947521


TCP 不保证接收方应用进程所受到的数据块与发送方所发出的数据块具有对应大小的关系

例如:发送方应用进程交给发送方的 TCP 10 10 10 个数据块

  • 但接受方的 TCP 可能只用了 4 4 4 个数据块,就把收到的字节流交付给了上层的应用进程

但是接收方应用进程收到的字节流 必须 \color{red}必须 必须和发送方应用进程发出的字节流完全一样

当然,接收方的应用进程必须有能力识别收到的字节流,把它还原成有意义的应用层数据

  • 要求接收方应用进程又出力这种乱序,多次传输后还能拼接完整的能力

也就是说,TCP 是面向字节流的

  • 这正是 TCP 实现可靠传输、流量控制、以及拥塞控制的基础

image-20230104182354926

说明:

  • 以上之展示出了一个方向的数据流

    • 在实际网络中,基于 TCP 连接的两端可以同时进行 TCP 报文段的发送和接受

    • 也就是全双工通信

  • 实际中,一个 TCP 报文段包含上千个字节是很常见的


4、UDP(不可靠) & TCP(可靠)

4.1、UDP

我们知道,TCP/IP 体系结构中的网际层上其上层提供的是无连接不可靠的传输服务

当运输层使用 UDP 协议时,想起上层提供的也是无连接不可靠的传输服务

image-20230104210133638


发送方给接收方发送 UDP 用户数据报,而传输过程中用户数据报受到干扰而产生误码

接收方 UDP 可以通过该数据报首部中的校验和字段的值检查出产生误码的情况

  • 但是仅仅丢弃该数据报,其他什么也不做

image-20230104210355844

发送方给接收方发送 UDP 数据报,若该数据报被因特网中的某个路由器丢弃了

  • 发送方 UDP 不做任何处理

因为 UDP 向上层提供的是无连接不可靠的传输服务

  • 因此,对于 UDP 用户数据报出现的误码和丢失等问题,UDP 并不关心

image-20230104210621525

基于 UDP 这个特点,UDP 适用于实时应用(例如: IP 电话、视频会议等)


4.2、TCP

尽管网际层中的 IP 协议向上层提供的是无连接不可靠的传输服务

  • 也就是说 IP 数据报可能再传输过程中出现丢失或误码

但只要运输层使用 TCP 协议,就可向其上层提供面向连接的可靠传输服务

  • 我们可以想象成,使用 TCP 协议的收发双方基于 TCP 连接的可靠信道进行数据传输

不会出现传输差错(误码,丢失,乱序,重复)

TCP 适用于要求可靠传输的应用,例如文件传输

image-20230104214541359

5、二者首部对比

5.1、UDP

一个 UDP 用户数据报的首部由首部和数据载荷两部分构成

首部格式如下所示,仅有 4 4 4 个字段,每个字段长度为 2 2 2 个字节

image-20230104214824151

由于 UDP 不提供可靠传输服务,它仅仅在网际层的基础上添加了区分应用进程的端口,

  • 因此,它的首部非常简单,仅有 8 8 8 个字节

5.2、TCP

一个 TCP 报文段由首部和数据载荷两部分构成

首部格式如下所示,这比 UDP 用户数据报的首部复杂的多,

其最小长度为 20 20 20 字节,最大长度为 60 60 60 字节

  • 这是因为 TCP 要实现可靠传输、流量控制、拥塞控制等服务

首部中的字段比较多,首部长度也比较长

image-20230104221114414

6、小结

image-20230104221311671

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值