目录一、短轮询、长轮询、SSE、WebSocket的区别区别补充二、WebSocket握手过程及协议升级机制如何保证 WebSocket 连接的稳定性心跳检测与断线重连WebSocket案例三、Tcp和UdpTcp3次握手4次挥手tcp和udp的区别五、OSI参考模型一、短轮询、长轮询、SSE、WebSocket的区别区别‌短轮询 (Short Polling)‌客户端每隔固定时间向服务器发起请求。缺点是大量无效请求造成服务器压力和带宽浪费实时性差取决于轮询间隔。‌长轮询 (Long Polling)‌客户端发起请求后服务器挂起连接直到有数据才返回。虽然减少了空请求但本质仍是“请求-响应”模式连接频繁重建且难以实现真正的双向通信。‌SSE (Server-Sent Events)‌基于 TcpHttp 的单工通信技术。它通过在客户端和服务器之间建立一个长连接使得服务器能够主动向客户端发送数据而不需要客户端明确地请求这种机制相比传统的短轮询和长轮询技术更高效和实时。节省资源‌只需要建立一条长连接不需要频繁地建立和关闭连接从而节省服务器和客户端的资源。‌可靠性高‌使用HTTP协议进行通信具有较好的兼容性和稳定性原生支持自动重连。简单易用只需要使用浏览器内置的EventSource对象即可实现数据的实时推送。仅支持服务器到客户端的单向通信是一种轻量级的通信机制。通常只支持文本格式若只需服务器向客户端单向推送少量文本通知如新闻更新、日志监控‌SSE是更合适的选择。SSE主要为Web应用设计不适用于移动应用或传统桌面应用。因为其本质上是为浏览器环境设计的单向实时通信技术其核心依赖于浏览器内置的EventSourceAPI‌。EventSource‌ 是HTML5标准定义的一个 Web API 接口主要用于实现 ‌服务器发送事件Server-Sent Events, SSE‌。它允许网页自动获取来自服务器的更新建立一种从服务器到客户端的‌单向、持久、实时‌的数据推送通道。数据格式‌: 服务器发送的数据必须是纯文本格式且 MIME 类型必须设置为text/event-streamresponse.setHeader(Content-Type, text/event-stream);EventSource实现服务端与客户端通信案例实战-CSDN博客‌WebSocket‌基于 TcpWebSocket‌ 的全双工通信协议。能够实现客户端和服务器之间的双向实时持久通信具备低延迟和高通信效率的特性支持二进制数据且在各种浏览器中都有良好的兼容性广泛应用于Web开发领域。缺点是需自行处理心跳、重连等机制实现复杂度高于SSE资源消耗也更大。以下是一些常见的使用场景即时通讯如在线聊天、即时游戏、共享文档等。实时数据流如金融交易、体育结果更新、环境监控、多媒体在线音视频流服务、推送券到app、服务器到浏览器的消息推送等。补充单工只能‌单向传输‌数据发送方只能发接收方只能收角色固定不变。比如电视广播、遥控器、传感器上报数据听众或接收端无法反向发送信息。‌‌半双工允许‌双向传输但不能同时‌同一时刻只能一个方向需要切换方向。对讲机是典型例子——按住说话时对方只能听松开后角色互换。‌‌‌全双工最顺畅支持‌双向同时传输‌双方可独立收发就像电话通话两边能同时讲话和听对方声音。现代网络通信、视频会议多采用这种方式。‌‌‌TCP协议通过三次握手建立连接在连接建立后就可以保持长时间的连接TCP也是长连接。HTTP默认使用短连接每次请求都会建立一个新的连接请求完成后连接就会关闭这意味着每次请求都需要重新建立连接这会导致额外的延迟和资源消耗。‌‌FTP协议使用的是长连接即在用户会话期间一直保持控制连接和数据连接FTP工作在OSI模型的应用层使用TCP作为其传输协议确保数据传输的可靠性和顺序性。由于FTP传输效率非常高在网络上传输大的文件时一般采用该协议。FTP客户端通过FTP协议访问位于FTP服务器上的资源。二、WebSocket握手过程及协议升级机制WebSocket 是如何从 HTTP 协议升级为 WebSocket 协议的握手过程中关键头部字段有哪些作用是什么‌客户端发起请求‌客户端发送一个标准的 HTTP GET 请求但包含特定的升级头字段Upgrade: websocket指示服务器希望切换协议。Connection: Upgrade确认连接升级。Sec-WebSocket-Key一个随机生成的 Base64 编码字符串用于防止非 WebSocket 客户端误连确保协议升级的合法性。Sec-WebSocket-Version指定 WebSocket 协议版本通常为13版本。‌服务器响应‌服务器校验请求头若支持 WebSocket则返回状态码101Switching Protocols并在响应头中包含Upgrade: websocketConnection: UpgradeSec-WebSocket-Accept将客户端传来的Sec-WebSocket-Key加上特定 GUID 字符串后进行 SHA-1 哈希运算再 Base64 编码生成。客户端会校验此值以确认服务器身份。‌协议切换‌握手成功后HTTP连接断开底层TCP连接保持双方切换到WebSocket协议进行全双工通信。如何保证 WebSocket 连接的稳定性心跳检测与断线重连在网络波动或中间件拦截下如何检测连接是否存活断开后如何优雅重连由于 WebSocket 基于 TCP若网络异常断开如拔掉网线、路由器重启TCP 层可能不会立即通知应用层导致“僵尸连接”。因此需要应用层的心跳机制。‌心跳检测 (Heartbeat)‌‌机制‌利用 WebSocket 协议自带的控制帧Ping和Pong。客户端或服务器定期发送Ping帧对方收到后必须回复Pong帧。‌超时判定‌若发送Ping后在一定时间内未收到Pong或长时间未收到任何数据帧则判定连接断开主动关闭连接并触发重连逻辑。‌自定义心跳‌也可通过业务层发送特定消息如{type: ping}来实现自定义心跳但使用协议级 Ping/Pong 效率更高且不占用网络带宽。‌断线重连策略‌‌指数退避 (Exponential Backoff)‌避免频繁重连冲击服务器。例如首次重连等待 1s失败后等待 2s、4s、8s... 直到达到最大间隔时间。‌消息补偿‌对于重要通知可在重连成功后通过序列号或时间戳向服务器请求缺失的消息确保通知不丢失需结合业务层的 ACK 机制。WebSocket案例dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-websocket/artifactId /dependencyEnableWebSocketMessageBroker //是Spring Framework中的一个注解使应用程序支持WebSocket通信三、Tcp和UdpTcp3次握手4次挥手TCPTransmission Control Protocol传输控制协议是互联网协议套件中最核心的协议之一提供​​可靠的、面向连接的、基于字节流​​的传输层通信。TCP FLAG 位由 bit 组成分别代表SYN、ACK 、FIN、URG、 PSH 、RST都以置1表示有效。我们重点关注 SYN、 ACK、 FIN。SYN( Synchronize Sequence Numbers 是用作建立连接时的同步信号ACK( Acknowledgement 用于对收到的数据进行确认所确认的数据由确认序列号表示FIN( Finish 表示所建立的连接可以关闭了后面没有数据需要发送。【超详细分析】关于三次握手与四次挥手面试官想考我们什么_帅地的博客-CSDN博客tcp和udp的区别五、OSI参考模型OSIOpen Systems Interconnection Reference Model七层参考模型​ 是国际标准化组织ISO制定的网络通信概念模型用于描述数据如何在网络中从源头传送到目的地。注意OSI是参考模型现实中互联网主要是基于TCP/IP的四层/五层模型。OSI层级名称TCP/IP5层模型功能概述典型协议 / 技术7应用层​应用层为用户应用程序提供网络服务接口HTTP、HTTPS、FTP、SMTP(发邮件)、IMAP(收邮件)、POP3(收邮件)、DNS、Telnet、SSH6表示层​数据格式转换、加密/解密、压缩/解压JPEG(图片文件格式)、MPEG(视频文件格式)、ASCII、UTF-8、SSL/TLS部分归于此SSL/TLS功能上常被归入‌应用层‌或‌传输层之上‌因为它为HTTP等应用层协议提供加密服务。‌‌‌5会话层​建立、管理和终止会话/连接NetBIOS、RPC部分、SQL Session4传输层​传输层​端到端通信、可靠/不可靠传输、流量控制TCP可靠、UDP无连接3网络层​网络层​逻辑寻址和路由选择IPIPv4/IPv6、ICMP、ARP常关联、OSPF、BGP、RIP2数据链路层​数据链路层​物理寻址MAC、帧校验、差错控制Ethernet802.3、Wi-Fi802.11、PPP、MAC、交换机Ethernet以太网和因特网Internet是完全不同的概念。‌‌‌以太网 (Ethernet)‌是一种‌局域网技术‌标准主要定义设备如何通过有线电缆如双绞线、光纤在局部范围内连接和通信。解决的是“怎么连”问题属于底层物理和数据链路层技术 。‌因特网 (Internet)‌是一个‌全球性的广域网络‌由无数个不同规模的局域网和广域网通过 TCP/IP 协议互联而成。解决的是“怎么通”问题是覆盖全球的信息资源网。1物理层​物理层​比特流在物理介质上传输双绞线、光纤、同轴电缆、集线器Hub、电压、光信号