第7天:网络进阶——TCP/UDP、WebSocket、长连接

今天继续网络基础的深入,重点复习了传输层协议(TCP/UDP)、连接管理(三次握手/四次挥手)、WebSocket 以及长连接与短连接的区别。以下是当天的问答整理。


Q1:TCP 和 UDP 的区别是什么?各自的应用场景?

我的回答:

  • TCP 和 UDP 都在传输层工作。TCP 是面向连接的,需要经过三次握手、传输数据、四次挥手,确保双方都能接收到数据。UDP 是无连接的,直接发送带有标识符的数据包,因此速度更快,资源消耗更低。

补充:

  • TCP(传输控制协议):
  1. 面向连接,提供可靠的、按序的、无重复的数据传输。
  2. 具备流量控制、拥塞控制、错误重传等机制。
  3. 适用于对数据完整性要求高的场景,如文件传输、网页浏览、电子邮件等。
  • UDP(用户数据报协议):
  1. 无连接,尽最大努力交付,但不保证可靠性和顺序。
  2. 头部开销小(8字节),实时性好。
  3. 适用于实时性要求高、允许丢包的场景,如视频直播、语音通话、DNS查询等。

Q2:TCP 三次握手和四次挥手的过程是怎样的?为什么要三次握手?

我的回答:

  • 三次握手:
  1. 客户端向服务端发送 SYN 包(同步序列号),请求建立连接。
  2. 服务端回复 SYN + ACK 包,确认收到客户端的 SYN,并发送自己的 SYN。
  3. 客户端回复 ACK 包,确认收到服务端的 SYN。连接建立。
  • **需要三次握手是因为:**如果只用两次握手,服务端无法确认客户端是否收到了自己的 SYN+ACK,可能导致已失效的连接请求报文突然传到服务端,引起错误(如重复连接或数据丢失)。
  • 四次挥手:
  1. 客户端发送 FIN 包,表示数据发送完毕,请求关闭连接。
  2. 服务端回复 ACK,确认收到关闭请求,但可能还有数据要发送,因此进入半关闭状态。
  3. 服务端数据发送完毕后,发送 FIN 包。
  4. 客户端回复 ACK,确认关闭,经过等待后连接彻底断开。

补充:

  • **三次握手的根本原因:**为了防止已失效的连接请求报文段突然又传到服务端,造成错误。例如客户端第一个 SYN 在网络中滞留,客户端超时重传后成功建立连接并关闭,此时滞留的 SYN 才到达,服务端会误认为新连接请求,如果只有两次握手,就会直接建立连接并等待数据,浪费资源。三次握手可以让服务端确认客户端是否真的需要连接。

Q3:HTTP 和 WebSocket 的区别是什么?

我的回答:

  • HTTP 属于半双工通信,只能由客户端向服务端发起请求,服务端响应。WebSocket 属于全双工通信,客户端和服务端可以互相主动发送消息,适用于需要实时数据交互的场景,如游戏、聊天、实时推送等。

补充:

  • HTTP/1.x 确实是半双工,每次请求-响应都需要客户端主动发起。
  • HTTP/2 引入了服务器推送和多路复用,但仍遵循客户端发起请求的模型,本质上还是客户端驱动。
  • WebSocket 在建立连接后,两端可以随时发送数据,没有请求-响应的限制,适合实时通信。
  • WebSocket 协议标识为 ws://(或 wss:// 加密版),默认端口 80 或 443。

Q4:WebSocket 是如何建立的?即从 HTTP 升级到 WebSocket 的过程。

我的回答:

  • 刚开始不论是哪种网页,都是客户端向服务端发起 HTTP 请求,如果需要升级到WebSocket,HTTP 请求头中会携带特定的字段(如 Upgrade: websocket)以及一个随机生成的标识符(如 Sec-WebSocket-Key)。服务端验证匹配后,返回 101 Switching Protocols 状态码,之后通信就切换到 WebSocket 协议。

Q5:长连接和短连接有什么区别?HTTP 的 keep-alive 是什么?

我的回答:

  • 短连接:每次请求数据都要创建一个新的 TCP 连接,完成后关闭。
  • 长连接:可以复用同一个 TCP 连接进行多次请求,减少连接建立的开销。HTTP 的 keep-alive 就是长连接的一种实现,但依然需要客户端主动发起请求。

补充:

  • 短连接:HTTP/1.0 默认使用短连接,每次请求都要经历 TCP 三次握手和四次挥手,效率较低。
  • 长连接:HTTP/1.1 默认开启 Connection: keep-alive,可以在一个 TCP 连接上发送多个 HTTP 请求和响应,减少延迟和资源消耗。
  • 但 keep-alive 只是保持连接不断开,并不是服务端推送,依然需要客户端主动请求。
  • 长连接也有缺点:如果长时间不通信,连接可能被中间设备(如防火墙)断开,因此需要心跳机制维持连接(WebSocket 就常用心跳)。
  • 此外,HTTP/2 的多路复用进一步优化了长连接,允许多个请求在同一个连接上并行传输。

今日知识点总结

| 概念 | 要点 |
| TCP vs UDP | TCP 面向连接、可靠、有序、流量控制;UDP 无连接、不可靠、低延迟、轻量 |
| 三次握手 | SYN → SYN+ACK → ACK,防止失效连接请求 |
| 四次挥手 | FIN → ACK → FIN → ACK,保证双方数据发送完毕 |
| HTTP 与 WebSocket | HTTP 半双工,客户端驱动;WebSocket 全双工,双向实时通信 |
| WebSocket 升级 | 通过 HTTP Upgrade 机制,携带 Sec-WebSocket-Key 等头,返回 101 状态码 |

长连接 vs 短连接 短连接每次新建 TCP;长连接复用连接,HTTP keep-alive 是长连接的一种
相关推荐
小歪 | 前端5 小时前
VUE_运行Vue项目Network: unavailable问题解决
前端·javascript·vue.js
Andya_net5 小时前
网络安全 | TCP三次握手与四次挥手
网络·tcp/ip·web安全
志栋智能5 小时前
超自动化安全:数字时代的网络免疫系统
网络·安全·自动化
叶帆5 小时前
【YFIOs】从传感芯片到表格曲线
网络
吹个口哨写代码5 小时前
小程序图片不显示,直接访问显示,头部配置问题
javascript·css·nginx
上海云盾-小余6 小时前
TCP 碎片攻击深度剖析:漏洞成因、流量甄别与高防加固实操方案
网络·网络协议·tcp/ip
ZStack开发者社区6 小时前
ZStack Cloud 5.5.16正式发布
网络·云计算·智能路由器
林恒smileZAZ6 小时前
宇宙画布:纯 CSS+JS 实现交互式深空艺术
前端·javascript·css
qcx236 小时前
Warp源码深度解析(五):Feature Flag分层发布、热重载Settings与双版本Completer
网络·人工智能·rust·warp·ai infra
hsjcjh6 小时前
标书自动化攻坚:用Gemini 3.1 Pro镜像官网构建多步推理的智能投标应答流水线(国内实测教程)
运维·服务器·网络