计算机网络——TCP/UDP 协议(网络可靠性)

TCP/UDP协议

内容

  • TCP三次握手、四次挥手

  • TCP可靠传输机制(确认应答、重传、华东窗口)

  • UDP特点(快、不可靠、适合音视频)

  • 端口号的作用(如80、443、3306)

一、TCP协议

1. 基本特点

  • 面向连接

  • 可靠传输

  • 字节流

  • 全双工通信

  • 流量控制

  • 拥塞控制

2. TCP三次握手

建立可靠的链接,确保双方都能发送和接收数据

握手流程

客户端 → SYN(seq=x) → 服务器

服务器 → SYN-ACK(seq=y,ack=x+1) → 客户端

客户端 → ACK(ack=y+1) → 服务器

  • SYN:同步标志位,表示请求建立链接

  • SYN-ACK:服务器回应同步,并确认收到客户端的请求

  • ACK:客户端确认收到服务器的响应,连接建立完成

原理和意义
  • 确保双方都能发送和接收数据

  • 防止已失效的连接请求突然传入造成资源浪费

常见问题
  • SYN Flood攻击:攻击者伪造大量SYN请求,耗尽服务器资源

  • 半连接队列满:服务器维护SYN_RCVD状态的连接过多导致拒绝服务

3. TCP四次挥手

断开链接,释放资源

挥手流程

客户端 → FIN → 服务器

服务器 → ACK → 客户端

服务器 → FIN → 客户端

客户端 → ACK → 服务器

  • FIN:一方提出关闭连接请求

  • ACK:另一方确认收到关闭请求

  • 最终双方都发送FIN并受到ACK后,连接彻底断开

原理
  • TCP是全双工通信,每一方都需要独立地关闭自己的发送通道

  • 最后一次ACK可能丢失,所以客户端进入FIN-WAIT-1CLOSE-WAITLAST-ACKTIME-WAIT 等状态

常见问题
  • 大量 TIME_WAIT 状态:占用本地端口资源,影响新连接建立

  • FIN 不回复 ACK 导致连接无法释放

4.TCP连接状态机

状态含义
CLOSED初始状态
LISTEN服务器监听
SYN_SENT客户端发送 SYN
SYN_RCVD服务器收到 SYN 并发送 SYN-ACK
ESTABLISHED连接建立成功
FIN_WAIT_1客户端发送 FIN
CLOSE_WAIT服务器收到 FIN,等待应用层关闭
LAST_ACK服务器发送 FIN,等待最后 ACK
FIN_WAIT_2客户端等待对方发送 FIN
TIME_WAIT客户端收到对方 FIN 并发送 ACK 后的状态
CLOSING同时关闭连接

TIME_WAIT的作用

  • 确保最后一个ACK能被对方收到

  • 防止旧连接的报文段干扰新连接

5. TCP可靠传输机制

TCP能够保证数据“有序、无差错、不丢失”,这得益于以下三大机制:

  1. 确认应答机制(ACK)

    每收到一段数据后,接收方会发送一个确认报文(ACK),告诉发送方“我已收到”

  2. 重传机制(Retransmission)

    如果发送发在一定时间内没有收到ACK,就会重新发送该段数据

    • 超时重传

    • 快速重传(收到三个重复的ACK就触发)

  3. 滑动窗口机制(Sliding Window)

    控制一次可以发送的数据量,提高效率并避免接收方缓冲区溢出

    • 窗口大小=接收方剩余缓冲区大小

    • 发送方可连接发送多个数据包,无需等待每个ACK

  4. 流量控制(Flow Control)

    • 接收方通过通告窗口大小来控制发送速率

  5. 拥塞控制(Congestion Control)

    • 慢启动(Slow Start)

    • 拥塞避免(Congestion Avoidance)

    • 快重传 & 快恢复(Fast Recovery)

二、UDP协议

1.基本特点
  • 无连接

  • 不可靠传输

  • 数据可能乱序或丢失

  • 无拥塞控制

  • 报文面向消息

2.适用场景
  • 实时音视频童话(容忍少量丢包,延迟敏感)

  • DNS查询

  • DHCP分配IP地址

  • 在线游戏

三、TCP和UDP对比总结

特性TCPUDP
是否连接面向连接无连接
是否可靠可靠传输不可靠传输
是否有序有序到达无序到达
是否拥塞控制
是否流量控制
数据形式字节流报文
速度较慢
开销头部较大,开销多头部小,开销低
应用场景HTTP、FTP、SMTP视频会议、直播、DNS

四、端口号的作用和分类

1.端口号的意义
  • 标识主机上的某个应用程序

  • 区分不同的服务(如Web、数据库、SSH)

2. 端口号的分类
类别范围用途
系统端口(Well-known Ports)0 - 1023IANA 分配给标准服务(如 HTTP:80、HTTPS:443)
注册端口(Registered Ports)1024 - 49151由第三方注册使用的端口(如 MySQL:3306)
动态/私有端口(Dynamic/Private Ports)49152 - 65535临时分配,常用于客户端连接
3.常见端口
常见端口对应服务
21FTP(文件传输)
22SSH(远程登录)
25SMTP(邮件发送)
53DNS(域名解析)
80HTTP(网页访问)
443HTTPS(安全网页)
3306MySQL(数据库)
6379Redis(缓存服务)

五、具体问题

场景 1:前端调用后端接口提示“连接超时”

  • 使用 telnet ip port 检查端口是否通

  • 如果不通,可能是防火墙限制或服务未启动

  • 如果通但没响应,可能是应用逻辑卡住或 TCP 握手失败

场景 2:运维发现服务器上存在大量 TIME_WAIT 连接

  • 说明连接频繁创建又关闭

  • 可优化内核参数(如 tcp_tw_reusetcp_tw_recycle

场景 3:在线游戏使用 TCP 出现卡顿

  • TCP 重传机制导致延迟增加

  • 改为 UDP + 自定义重传机制,提升实时性

场景 4:开发人员部署服务在 8080 端口,浏览器访问失败

  • 检查服务是否正常运行

  • 使用 netstat -tulnp | grep 8080 查看端口监听情况

  • 使用 curl http://localhost:8080 本地测试

TCP 是可靠的、面向连接的协议,适用于需要数据完整性与顺序性的场景;UDP 是快速、不可靠的协议,适用于对延迟敏感的应用。掌握它们的工作机制、状态转换、抓包分析技巧,是网络编程和故障排查的基础能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值