TCP 是什么
TCP(TRANSMISSION CONTROL PROTOCOL) 称为传输控制协议,是 TCP/IP 网络中使用的主要协议之一。
- TCP 用于保证所有的数据都按顺序接收,如果不使用 TCP,数据就可能会丢失或乱序
- TCP 是面向连接的协议,两台计算机在进行通信之前都要首先建立逻辑连接,这个过程称为“三次握手”
-
- TCP 的另一个重要作用是保证了数据的可靠传输,如果数据包乱码或丢失,TCP 会对其进行重传
TCP 连接过程(三次握手)
1、首先,发送方将发送一个 SYN 信息给接收方
2、接收方收到对方发送的 SYN 信息之后,将返回一个确认信息 ACK,告诉发送方自己已经接收到 SYN 信息
3、最后,发送方发送另一个确认信息 ACK 给接收方
此时,TCP 双方就可以进行收发数据了
为什么 TCP 建立连接需要三次握手,而不是两次?
这是因为这是为了防止出现失效的连接请求报文段被服务端接收的情况,从而产生错误。
TCP 的特点
- 面向连接
- 仅支持单播传输
- 基于字节流
- 可靠传输
- 提供拥塞控制
- 提供全双工通信
TCP 的优缺点
- 是一种面向连接,可靠的,基于字节流的传输层通信协议
- 优点:安全,有序
- 缺点:慢,效率低,首部开销大(至少20字节),占用系统资源多
适用场景
- 浏览网站
- 发送或接收邮件
- 文件传输
- 远程登录
UDP 是什么
UDP(USER DATA PROTOCOL)称为用户数据报协议,和 TCP 类似,UDP 也用于发送和接收数据,不同的是,UDP 是无连接的,在通信之前无需建立逻辑连接,当然也不保证数据传输的可靠性。
在OSI 模型中运行在第四层——传输层
当计算机使用 UDP 发送数据时,它并不关心数据是否被另一端收到,以及数据在传输过程中发生了什么
UDP 的特点
- 面向无连接
在发送端,应用层将数据传递给传输层的 UDP 协议,UDP 只会给数据增加一个 UDP 头标识,然后就传递给网络层了
在接收端,网络层将数据传递给传输层,UDP 只去除 IP 报文头就传递给应用层,不会进行任何拼接操作
- 有单播,多播,广播的功能
UDP 支持一对一,一对多,多对一和多对多的传输方式
- 基于数据报发送
- 不可靠性
1、不可靠性体现在无连接上,通信前不需要建立连接
2、收到什么数据就传递什么数据,也不会备份数据,发送数据之后也不会关心对方是否已经正确接收到数据
3、UDP 没有拥塞控制和流量控制,一直会以恒定的速度发送数据。在网络条件不好的情况下可能会导致丢包,但在某些实时性要求高的场景(IP电话、视频会议、直播等)就需要使用 UDP 而不是 TCP
- 首部开销小,传输效率高
UDP 头部包含了以下几个数据:
1、两个十六位的端口号,分别为源端口(可选字段)和目标端口
2、整个数据报文的长度
3、整个数据报文的检验和(IPv4 可选 字段),该字段用于发现头部信息和数据中的错误
因此 UDP 的头部开销小,只有八字节,相比 TCP 的至少二十字节要少得多,在传输数据报文时是很高效的
UDP 的优缺点
- 是一种无连接,相对于 TCP 传输不可靠,基于数据报的传输层通信协议
- 优点:
报文简单,传输速度快,效率高,首部开销小(8字节),占用系统资源少 - 缺点:
不可靠,不稳定
不提供数据包分组、组装
不能对数据包进行排序
适用场景
- 多媒体
- 即时通信(QQ视频聊天)
- 在线视频
- 网络语音电话
TCP 和 UDP 的比较
TCP | UDP | |
---|---|---|
是否基于连接 | 面向连接 | 无连接 |
可靠性 | 相对于 UDP 可靠 | 相对于 TCP 不可靠 |
传输方式 | 基于字节流 | 基于数据报 |
连接对象数量 | 点到点,一对一 | 一对一,一对多,多对一,多对多 |
有序性 | 有序 | 无序 |
实时性(效率) | 较低 | 较高 |
协议首部大小 | 首部开销大(至少20 字节) | 首部开销小(8 字节) |
系统资源占用 | 较多 | 较少 |
总结:
- TCP 是面向连接的协议,发送数据前需要建立连接;而 UDP 是无连接的协议,发送数据不需要连接
- TCP 提供交付保证(TCP 通过校验和,重传机制,序号标识,滑动窗口,确认应答实现可靠传输),无差错,不丢失,不重复,且按序到达,同时也保证了数据的有效性;而 UDP 不提供任何有序性的保证,尽最大努力交付,数据包将以任何可能的顺序到达
- TCP 的逻辑通信信道是全双工的可靠信道,UDP 则是不可靠信道
- UDP 具有较好的实时性,传输效率比 TCP 高,适用于对高速传输和实时性有较高要求的通信或广播通信
- TCP 的首部开销至少 20 字节;UDP 的首部开销仅为 8 字节
- TCP 对系统资源要求较多,而UDP 对系统资源要求较少。TCP 被认为是重量级的协议,而 UDP 则是轻量级的协议