TCP 和 UDP 基本认知

简介: TCP 和 UDP 基本认知

什么是 TCP ?

TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。

  • 面向连接:一定是「一对一」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;
  • 可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;
  • 字节流:用户消息通过 TCP 协议传输时,消息可能会被操作系统「分组」成多个的 TCP 报文,如果接收方的程序如果不知道「消息的边界」,是无法读出一个有效的用户消息的。并且 TCP 报文是「有序的」,当「前一个」TCP 报文没有收到的时候,即使它先收到了后面的 TCP 报文,那么也不能扔给应用层去处理,同时对「重复」的 TCP 报文会自动丢弃。

什么是 TCP 连接?

用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括 Socket、序列号和窗口大小称为连接。

建立一个 TCP 连接是需要客户端与服务端达成三个信息的共识。

  • Socket:由 IP 地址和端口号组成
  • 序列号:用来解决乱序问题等
  • 窗口大小:用来做流量控制

如何唯一确定一个 TCP 连接呢?

TCP 四元组可以唯一的确定一个连接,四元组包括如下:

  • 源地址
  • 源端口
  • 目的地址
  • 目的端口

源地址和目的地址的字段(32 位)是在 IP 头部中,作用是通过 IP 协议发送报文给对方主机。

源端口和目的端口的字段(16 位)是在 TCP 头部中,作用是告诉 TCP 协议应该把报文发给哪个进程。

服务端单机最大 TCP 连接数?

服务端监听了一个端口,它的 TCP 的最大连接数是 客户端的 IP 数(2322^{32}232) * 客户端的端口数(2162^{16}216),即服务端单机最大 TCP 连接数,约为 2482^{48}248 次方。

但是实际的数量远小于这个数,受下面因素限制:

  • 文件描述符限制,每个 TCP 连接都是一个文件,如果文件描述符被占满了,会发生 Too many open files。Linux 对可打开的文件描述符的数量分别作了三个方面的限制:
  • 系统级:当前系统可打开的最大数量,通过 cat /proc/sys/fs/file-max 查看;
  • 用户级:指定用户可打开的最大数量,通过 cat /etc/security/limits.conf 查看;
  • 进程级:单个进程可打开的最大数量,通过 cat /proc/sys/fs/nr_open 查看;
  • 内存限制,每个 TCP 连接都要占用一定内存,操作系统的内存是有限的,如果内存资源被占满后,会发生 OOM。

为什么需要 TCP 协议? TCP 工作在哪一层?

TCP/IP分层模型 OSI参考模型
应用层 应用层
表示层
会话层
传输层 传输层
网络层 网络层
网络接口层 数据链路层
物理层
IP 层(网络层)是「不可靠」的,它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。

如果需要保障网络数据包的可靠性,那么就需要由上层(传输层)的 TCP 协议来负责。

因为 TCP 是一个工作在传输层可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。

UDP 和 TCP 有什么区别呢?分别的应用场景是?

UDP 不提供复杂的控制机制,利用 IP 提供面向「无连接」的通信服务。

TCP 和 UDP 区别:

1. 连接

  • TCP 是面向连接的传输层协议,传输数据前先要建立连接。
  • UDP 是不需要连接,即刻传输数据。

2. 服务对象

  • TCP 是一对一的两点服务,即一条连接只有两个端点。
  • UDP 支持一对一、一对多、多对多的交互通信

3. 可靠性

  • TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达。
  • UDP 是尽最大努力交付,不保证可靠交付数据。但是我们可以基于 UDP 传输协议实现一个可靠的传输协议,对数据简单的进行检查。

4. 拥塞控制、流量控制

  • TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
  • UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。

5. 首部开销

  • TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。
  • UDP 首部只有 8 个字节,并且是固定不变的,开销较小。

6. 传输方式

  • TCP 是流式传输,没有边界,但保证顺序和可靠。
  • UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。

7. 分片不同

  • TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
  • UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层。

TCP 和 UDP 应用场景:

由于 TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:

  • FTP 文件传输;
  • HTTP / HTTPS;

由于 UDP 面向无连接,它可以随时发送数据,再加上 UDP 本身的处理既简单又高效,因此经常用于:

  • 包总量较少的通信,如 DNSSNMP 等;
  • 视频、音频等多媒体通信;
  • 广播通信;

总结

TCP和UDP的区别:

  1. 连接性:
  • TCP: 是面向连接的协议。在数据传输之前,需要进行三次握手建立连接,然后进行数据传输,最后进行四次挥手关闭连接。提供可靠的、有序的、面向连接的数据流。
  • UDP: 是面向无连接的协议。每个数据包都是独立的,发送者和接收者之间没有明确的连接。不保证数据包的可靠性和有序性。
  1. 可靠性:
  • TCP: 通过序号、确认和重传机制保证数据的可靠性。如果数据包丢失,TCP会进行重传,直到对方确认收到。
  • UDP: 不提供可靠性保证,数据包的发送与接收没有确认机制,也没有重传机制。
  1. 流量控制和拥塞控制:
  • TCP: 提供流量控制和拥塞控制,确保数据的有序传输,并且在网络拥塞时会调整传输速率。
  • UDP: 没有流量控制和拥塞控制机制,数据包尽最大努力交付。
  1. 适用场景:
  • TCP: 适用于要求可靠性、有序性的应用,如网页浏览、文件传输等。
  • UDP: 适用于实时性要求较高,可以容忍一些数据丢失的应用,如音视频传输、在线游戏等。
  1. 头部开销:
  • TCP: 头部开销较大,包含序号、确认号、窗口大小等信息。
  • UDP: 头部开销较小,只包含基本的源端口、目标端口、长度和校验和等信息。

总体而言,选择TCP还是UDP取决于应用的需求,如果需要可靠性和有序性,选择TCP;如果对实时性要求高,可以容忍一些数据丢失,选择UDP。


相关文章
|
4天前
|
网络协议 算法 网络性能优化
TCP和UDP详解2
TCP和UDP详解
34 0
|
3天前
|
网络协议 网络性能优化
UDP与TCP:了解这两种网络协议的不同之处
UDP与TCP:了解这两种网络协议的不同之处
|
4天前
|
网络协议
TCP和UDP可以绑定同样的端口吗?
TCP和UDP可以绑定同样的端口吗?
|
4天前
|
网络协议 网络性能优化 Go
【JaveEE】UDP 与 TCP 原理(下)
【JaveEE】UDP 与 TCP 原理
16 1
|
4天前
|
XML JSON 网络协议
【JaveEE】UDP 与 TCP 原理(上)
【JaveEE】UDP 与 TCP 原理
15 3
|
4天前
|
网络协议 Unix 网络性能优化
网络编程 —— TCP 和 UDP 编程详解
网络编程 —— TCP 和 UDP 编程详解
网络编程 —— TCP 和 UDP 编程详解
|
4天前
|
网络协议 网络性能优化 网络架构
|
4天前
|
网络协议 网络性能优化
运输层中的UDP和TCP协议
总结来说,UDP适用于那些要求速度和实时性高于可靠性的应用,而TCP适用于要求数据可靠性和完整性的应用。选择使用哪种协议取决于您的应用需求。
17 1
|
4天前
|
网络协议 算法 网络性能优化
TCP 和 UDP哪个更好
TCP 和 UDP哪个更好
15 0
|
4天前
|
网络协议 程序员 API
LabVIEWCompactRIO 开发指南19 原始以太网(TCP/UDP)
LabVIEWCompactRIO 开发指南19 原始以太网(TCP/UDP)
12 0
http://www.vxiaotou.com