UDP和TCP

UDP和TCP

一、TCP (传输控制协议)

TCP 是一种 面向连接的、可靠的、基于字节流 的传输层通信协议。它像打电话一样,需要先建立连接,确保数据准确无误、按顺序地送达。

1.核心特点

面向连接:在数据传输前,必须通过“三次握手”建立稳定的连接,传输结束后通过“四次挥手”断开连接。

三次握手过程

假设客户端(C)想要主动连接服务器(S)。

第一次握手:SYN

a.发起方:客户端

b.动作:客户端向服务器发送一个特殊的TCP数据包。

c.包内容关键标志:

  • SYN = 1(同步标志位,表示这是一个连接请求)

  • seq = m(客户端的初始序列号,m是一个随机生成的数字)

  • 客户端状态变化:从 CLOSED 进入 SYN-SENT(同步已发送)状态。

  • 此时的意义:客户端对服务器说:“你好,我想和你建立连接。我这边起始的编号是 x,你能听到我吗?”

第二次握手:SYN + ACK

a.发起方:服务器

b.动作:服务器收到客户端的SYN包后,如果同意建立连接,则回复一个特殊的TCP数据包。

c.包内容关键标志:

  • SYN = 1(同样,表示这也是一个连接请求/确认)

  • ACK = 1(确认标志位)

  • seq = x(服务器的初始序列号,x是另一个随机生成的数字)

  • ack = m + 1(确认号。它的值是客户端的初始序列号 m + 1,表示“我成功收到了你的序列号为m的包,期待你下一个发序号为m+1的包给我”)

  • 服务器状态变化:从 LISTEN 进入 SYN-RCVD(同步已收到)状态。

  • 此时的意义:服务器对客户端说:“我听到你了!我同意建立连接。我这边起始的编号是 y,并且我确认收到了你的 x 号包。” 这一步同时完成了两件事:应答了客户端的请求,并发起了自己方向的连接。

第三次握手:ACK

a.发起方:客户端

b.动作:客户端收到服务器的SYN-ACK包后,需要再次向服务器发送确认。

c.包内容关键标志:

  • ACK = 1

  • seq = m + 1(此时客户端的序列号变为 m+1,因为第一次握手的SYN包消耗了一个序列号)

  • ack = x+ 1(确认号。它的值是 服务器的初始序列号 x + 1,表示“我成功收到了你的序列号为 x 的包”)

  • 双方状态变化:

    • 客户端:从 SYN-SENT 进入 ESTABLISHED(连接已建立) 状态。

    • 服务器:收到此ACK后,从 SYN-RCVD 进入 ESTABLISHED(连接已建立) 状态。

  • 此时的意义:客户端对服务器说:“好的,我也收到你的确认了,连接现在正式建立,我们可以开始传输数据了!”

可靠传输:

  • 确认和重传:接收方收到数据后会发送确认报文。如果发送方未收到确认,会重新发送数据。

  • 数据排序:为每个数据包编号,确保接收方能按正确顺序重组数据。

  • 流量控制:通过滑动窗口机制,根据接收方的处理能力动态调整发送速率,防止接收方被淹没。

  • 拥塞控制:通过慢启动、拥塞避免等算法探测网络状况,防止网络过载。

基于字节流:数据被视为无结构的字节流,没有固定的“消息”边界。应用程序需要自己处理边界问题(如添加长度前缀或分隔符)。

优点

  • 数据绝对可靠:不丢失、不重复、按序到达。

  • 适合重要数据传输:如网页浏览、文件传输、电子邮件、金融交易等。

缺点

  • 开销大:由于需要建立连接、确认、重传等机制,首部信息更多(通常20字节),占用更多带宽和系统资源。

  • 速度相对慢:建立连接有延迟,并且拥塞控制机制在复杂网络下可能降低传输速度。

  • 实时性较差:重传机制会导致延迟,不适合对延迟极其敏感的应用。

典型应用

HTTP/HTTPS(网页)、FTP(文件传输)、SMTP/POP3(邮件)、SSH(远程登录)等。

二、UDP (用户数据报协议)

UDP 是一种 无连接的、不可靠的、基于数据报 的传输层通信协议。它像寄明信片,写好地址就发出,不保证对方一定能收到,也不保证按顺序收到。

核心特点

(1)无连接:无需事先建立连接,直接发送数据。通信开销小。

(2)不可靠传输:

  • 不保证数据包能到达目的地。

  • 不保证数据包的到达顺序。

  • 不提供流量控制和拥塞控制。

(3)基于数据报:每个UDP数据包(数据报)都是一个独立的、有明确边界的信息单元。接收方一次接收一个完整的数据报。

(4)首部开销小:只有8个字节(源端口、目标端口、长度、校验和)。

优点

  • 速度快、延迟低:没有连接建立和复杂控制机制,直接发送,实时性极高。

  • 开销小:协议头简单,网络负担轻。

  • 支持广播和多播:可以向一个网络内的多个主机同时发送数据。

缺点

  • 数据可能丢失、重复或乱序:网络状况不佳时,数据质量无法保证。

  • 需要应用层处理可靠性:如果应用需要可靠性,必须在应用程序自身实现确认、重传和排序逻辑。

典型应用:

  • 实时音视频流:视频会议(Zoom, Teams)、在线直播、网络电话(VoIP)。丢失几帧数据比延迟卡顿体验更好。

  • DNS查询:请求域名解析,快速简单,一次请求一个应答。

三、TCP和UCP核心区别表

特性

TCP

UDP

连接

面向连接(三次握手

无连接

可靠性

可靠,确保数据正确送达

不可靠,尽力而为

数据顺序

保证数据包顺序

不保证顺序

传输模式

面向字节流(无消息边界)

面向数据报(有消息边界)

速度

较慢(开销大,有控制机制)

极快(开销小,无控制机制)

流量/拥塞控制

头部大小

较大(通常20字节)

很小(8字节)

适用场景

需要数据完整性的应用

需要速度和实时性的应用

四.UDP和TCP常用端口查询

TCP常用端口

端口

服务

用途

80

HTTP

网页浏览

443

HTTPS

安全网页

22

SSH

远程管理

21

FTP

文件传输

25

SMTP

发送邮件

110

POP3

接收邮件

143

IMAP

接收邮件

53

DNS

域名解析

3306

MySQL

数据库

3389

RDP

远程桌面

UDP常用端口

端口

服务

用途

53

DNS

域名查询

67/68

DHCP

自动获取IP

123

NTP

时间同步

161

SNMP

网络管理

69

TFTP

简单文件传输

520

RIP

路由协议

1900

SSDP

设备发现

5353

mDNS

本地发现

UDP和TCP 53端口区分:

DNS日常查询用小数据包走快速的UDP 53端口,大数据传输和服务器同步走可靠的TCP 53端口。

LICENSED UNDER CC BY-NC-SA 4.0