第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 是长连接的一种
相关推荐
俊哥工具3 分钟前
解决网速卡顿、断网、网络报错,万能网络修复工具教程
网络·python·django·计算机外设·智能路由器·pygame
pengyi8710154 分钟前
HTTP代理抓包实操教程,零基础监控IP请求与响应数据
网络协议·tcp/ip·http
之歆8 分钟前
Day15_JavaScript DOM 事件完全指南:从基础到实战(上)
开发语言·javascript·ecmascript
todaycode8 分钟前
Vue + CPP项目
javascript·c++·vue.js
.千余14 分钟前
【Linux】Socket编程UDP
linux·运维·服务器·开发语言·网络协议·学习·udp
慕斯fuafua18 分钟前
JS——DOM操作
前端·javascript·html
GISer_Jing21 分钟前
深入解析 Three.js:从架构设计到 WebGPU 渲染革命
javascript·信息可视化·webgl
AI云原生35 分钟前
远程控制软件进入协作阶段:ToDesk、向日葵、AnyDesk、RustDesk怎么选?
运维·服务器·网络·windows·docker·云原生·开源软件
Highcharts.js3 小时前
缺失数据可视化图表开发实战|Highcharts创建人员出生统计面积图表示例
开发语言·前端·javascript·信息可视化·highcharts·图表开发
小辰记事本9 小时前
从零读懂RoCEv2数据包构造:从WQE到线缆上的完整旅程
服务器·网络·网络协议·rdma