第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 是长连接的一种
相关推荐
@yanyu66615 小时前
07-引入element布局及spring boot完善后端
javascript·vue.js·spring boot
@大迁世界15 小时前
2026年React大洗牌:React Hooks 将迎来重大升级
前端·javascript·react.js·前端框架·ecmascript
为何创造硅基生物15 小时前
ESP32S3的RGB屏幕漂移问题
网络
风止何安啊15 小时前
为什么要有 TypeScript?让 JS 告别 “薛定谔的 Bug”
前端·javascript·面试
好运的阿财15 小时前
process 工具与子agent管理机制详解
网络·人工智能·python·程序人生·ai编程
黄昏晓x15 小时前
Linux ---- UDP和TCP
linux·tcp/ip·udp
周杰伦fans16 小时前
C# required 关键字详解
开发语言·网络·c#
洛水水16 小时前
深入理解网络编程核心:Reactor、IOCP 与异步 IO 模型详解
网络·iocp
favour_you___16 小时前
epoll惊群问题与解决
服务器·网络·tcp/ip·epoll
海天鹰16 小时前
SOC架构
javascript