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

TCP/IP 体系结构应用层中的某些协议需要使用运输层的 TCP 提供的服务
- 而另一些协议需要使用运输层的
UDP提供的服务
1、UCP(无连接) & TCP(面向连接)
1.1、UDP
如下所示,它们在运输层使用 UDP 协议进行通信,纵坐标为时间
使用 UDP 协议的通信双方可以随时发送数据

1.2、TCP
使用 TCP 协议的双方在进行通信之前必须使用 “三报文握手” 来建立 TCP 连接
TCP 连接建立成功后才能进行数据传输
数据传输结束后必须使用 “四报文挥手” 来释放 TCP 连接

三报文握手与四报文挥手属于 TCP 连接管理,过程比较复杂
具体介绍连接:TCP的连接建立
注意:这里逻辑连接是指逻辑连接关系,而不是物理连接
综上所述
UDP是无连接的,TCP是面向连接的
2、UDP(单、多、广播)/TCP(单播)
2.1、UDP
如下所示,使用 UDP 协议进行通信的四台主机
- 其中,任何一台主机都可以向其他三台主机发送广播
- 也可以向某个多播组发送多播
- 还可以向某台主机发送单播

也就是说,UDP 支持单播、多播以及广播
- 话句话说,
UDP支持一对一、一对多、以及一对全的通信

2.2、TCP
使用 TCP 协议的双方在进行通信之前必须使用 “三报文握手” 来建立 TCP 连接
TCP 连接建立成功后才能进行数据传输
数据传输结束后必须使用 “四报文挥手” 来释放 TCP 连接

三报文握手与四报文挥手属于 TCP 连接管理,过程比较复杂
具体介绍连接:TCP的连接建立
3、两个协议对应用报文的处理
3.1、UDP(面向应用报文)

发送方的应用进程将应用层的报文交付给运输层的 UDP
UDP 直接给应用层报文添加一个 UDP 首部,使之称为 UDP 用户数据报,然后进行发送

为了简单起见,忽略运输层下面的各层处理
接收方的 UDP 收到该 UDP 用户数据报后,去掉 UDP 首部,将应用层报文交付给应用进程

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

3.2、TCP(面向字节流) 发送缓存/接收缓存
发送方的 TCP 把应用进程交付下来的数据块仅仅看作是一连串的、无结构的字节流
TCP 并不知道这些待传送的字节流的含义,仅将他们编号并存储在自己的发送缓存中
TCP 根据发送策略,从发送缓存中提取一定数量的字节,构建 TCP 报文段并发送

接收方的 TCP,
-
一方面从接受到的
TCP报文段中去除数据载荷部分并存储在接受缓存中 -
一方面将接受缓存中的一些字节
交付给应用进程

TCP 不保证接收方应用进程所受到的数据块与发送方所发出的数据块具有对应大小的关系
例如:发送方应用进程交给发送方的 TCP 共
10
10
10 个数据块
- 但接受方的
TCP可能只用了 4 4 4 个数据块,就把收到的字节流交付给了上层的应用进程
但是接收方应用进程收到的字节流
必须
\color{red}必须
必须和发送方应用进程发出的字节流完全一样
当然,接收方的应用进程必须有能力识别收到的字节流,把它还原成有意义的应用层数据
- 要求接收方应用进程又出力这种乱序,多次传输后还能拼接完整的能力
也就是说,TCP 是面向字节流的
- 这正是
TCP实现可靠传输、流量控制、以及拥塞控制的基础

说明:
-
以上之展示出了一个方向的数据流
-
在实际网络中,基于
TCP连接的两端可以同时进行TCP报文段的发送和接受 -
也就是全双工通信
-
-
实际中,一个
TCP报文段包含上千个字节是很常见的
4、UDP(不可靠) & TCP(可靠)
4.1、UDP
我们知道,TCP/IP 体系结构中的网际层上其上层提供的是无连接不可靠的传输服务
当运输层使用 UDP 协议时,想起上层提供的也是无连接不可靠的传输服务

发送方给接收方发送 UDP 用户数据报,而传输过程中用户数据报受到干扰而产生误码
接收方 UDP 可以通过该数据报首部中的校验和字段的值检查出产生误码的情况
- 但是仅仅丢弃该数据报,其他什么也不做

发送方给接收方发送 UDP 数据报,若该数据报被因特网中的某个路由器丢弃了
- 发送方
UDP不做任何处理
因为 UDP 向上层提供的是无连接不可靠的传输服务
- 因此,对于
UDP用户数据报出现的误码和丢失等问题,UDP并不关心

基于 UDP 这个特点,UDP 适用于实时应用(例如: IP 电话、视频会议等)
4.2、TCP
尽管网际层中的 IP 协议向上层提供的是无连接不可靠的传输服务
- 也就是说
IP数据报可能再传输过程中出现丢失或误码
但只要运输层使用 TCP 协议,就可向其上层提供面向连接的可靠传输服务
- 我们可以想象成,使用
TCP协议的收发双方基于TCP连接的可靠信道进行数据传输
不会出现传输差错(误码,丢失,乱序,重复)
TCP 适用于要求可靠传输的应用,例如文件传输

5、二者首部对比
5.1、UDP
一个 UDP 用户数据报的首部由首部和数据载荷两部分构成
首部格式如下所示,仅有 4 4 4 个字段,每个字段长度为 2 2 2 个字节

由于 UDP 不提供可靠传输服务,它仅仅在网际层的基础上添加了区分应用进程的端口,
- 因此,它的首部非常简单,仅有 8 8 8 个字节
5.2、TCP
一个 TCP 报文段由首部和数据载荷两部分构成
首部格式如下所示,这比 UDP 用户数据报的首部复杂的多,
其最小长度为 20 20 20 字节,最大长度为 60 60 60 字节
- 这是因为
TCP要实现可靠传输、流量控制、拥塞控制等服务
首部中的字段比较多,首部长度也比较长

6、小结




















