TCP 和 UDP 是传输层两大核心协议,核心区别围绕可靠性、连接性、速度展开。TCP 是面向连接、可靠的协议,需要三次握手建立连接、四次挥手断开,自带确认应答、重传、排序、流量控制机制,数据不丢不乱序,但开销大、速度慢。UDP 是无连接、不可靠的协议,无需建立连接,直接发送数据包,不保证送达和顺序,开销极小、传输速度极快。此外,TCP 面向字节流,UDP 面向数据报;TCP 适合对数据完整性要求高的场景,UDP 适合实时性优先的场景,两者是网络传输最常用的互补协议。
HTTP 是应用层最常用的超文本传输协议,核心特点十分鲜明。它基于客户端 - 服务器模型,由客户端主动发起请求,服务器被动响应。HTTP 是无状态、无连接的协议,服务器不记录客户端的历史请求,每次请求相互独立。它使用明文传输,默认端口 80,支持 GET、POST 等多种请求方法,可传输文本、图片、视频等多种资源。HTTP 协议简单灵活,扩展性强,是 Web 通信的基础,配合 HTTPS 解决安全问题,搭配 Keep-Alive 优化连接效率,成为互联网最核心的应用层协议。
Socket 是网络编程的接口,TCP 和 UDP 的编程实现差异很大。TCP 是面向连接的,编程需先建立连接:服务端调用 bind、listen、accept,客户端调用 connect,连接成功后用 send/receive 传输数据,是流式传输。UDP 无连接,编程无需 connect/accept,服务端只 bind 端口,客户端直接用 sendto/recvfrom 发送带目标地址的数据包,是数据报传输。TCP 编程复杂,需处理连接、粘包,保证可靠;UDP 编程简单,无需处理连接,但不保证可靠。TCP 适合长连接、可靠传输,UDP 适合短请求、实时传输。
网络协议栈是分层的网络协议集合,是计算机通信的标准规则体系,常见的是 TCP/IP 四层模型。自下而上分为:网络接口层(负责硬件数据传输)、网络层(负责寻址路由,如 IP 协议)、传输层(负责端到端传输,如 TCP/UDP)、应用层(负责业务交互,如 HTTP/HTTPS)。每层协议各司其职,下层为上层提供服务,上层依赖下层实现通信。协议栈让不同设备、系统能统一通信,分层设计降低了开发复杂度,是网络通信的核心框架,所有网络编程都基于协议栈实现。
TCP 三次握手是建立可靠连接的必经过程,目的是确认双方的收发能力正常。第一次握手:客户端发送 SYN 包,请求建立连接,进入 SYN_SENT 状态。第二次握手:服务端收到 SYN 包,回复 SYN+ACK 包,确认客户端请求,进入 SYN_RCVD 状态。第三次握手:客户端收到 SYN+ACK 包,回复 ACK 包,服务端收到后,双方进入 ESTABLISHED 连接状态。三次握手缺一不可,避免了失效连接请求导致的资源浪费,确保连接建立的可靠性,是 TCP 传输的基础前提。
HTTP 的无状态性指服务器不保存任何客户端的历史请求信息,每次请求都是独立的,服务器无法识别连续请求来自同一个客户端。比如刷新页面,服务器不会记住之前的操作。这个特点让 HTTP 协议更简单、轻量,服务器压力更小,扩展性更强。但也带来了身份识别的问题,因此诞生了 Cookie、Session、Token 等技术,用来在无状态的协议上实现状态保持,满足登录、购物车等业务需求。无状态是 HTTP 的核心特性,也是 Web 开发中状态管理的根源。
UDP 的校验机制是简单的错误检测手段,用来判断数据包在传输中是否损坏。发送方会将 UDP 首部、数据、伪首部组合,按 16 位进行二进制反码求和,生成校验和并放入首部。接收方收到数据包后,用相同的算法重新计算校验和,与首部中的校验和对比。如果一致,说明数据大概率无错误;如果不一致,直接丢弃数据包。UDP 校验是可选的,且只能检测错误,不能纠错也不能重传,这也是 UDP 不可靠的原因之一,仅能保证数据的基本完整性。
Socket 实现多客户端通信,核心是让服务端同时处理多个客户端连接。基础方案是多线程 / 多进程:服务端主线程监听端口,每收到一个客户端连接,就创建一个独立线程处理交互,主线程继续监听。进阶方案是IO 多路复用,用 select、poll、epoll 等技术,单线程监听多个套接字事件,避免线程开销。高并发场景常用线程池 +IO 多路复用组合。客户端各自与服务端建立独立连接,服务端通过套接字区分不同客户端,实现一对一、一对多的稳定通信。
TCP 流量控制是控制发送方速度,匹配接收方的处理能力,防止接收方缓冲区溢出丢包。核心机制是滑动窗口:接收方在应答包中告知发送方自己的接收窗口大小,发送方严格按照窗口大小发送数据,不超过接收方的处理上限。如果接收方缓冲区已满,会发送窗口大小为 0 的报文,发送方停止发送。接收方处理完数据后,再更新窗口大小,通知发送方继续传输。流量控制是端到端的机制,全程由 TCP 自动完成,无需开发者干预,保证了传输的稳定性。
HTTP 和 HTTPS 的核心区别是安全性,HTTPS 是 HTTP 的加密版本。HTTP 明文传输,数据易被窃听、篡改、劫持,默认端口 80;HTTPS 基于 SSL/TLS 协议加密传输,数据加密、身份认证、完整性校验,默认端口 443。HTTPS 需要申请 SSL 证书,建立连接时需要握手协商加密算法,比 HTTP 多了加密解密开销,速度稍慢。HTTP 适合静态资源、公开页面;HTTPS 适合登录、支付、隐私数据传输。现在互联网已全面普及 HTTPS,是 Web 安全的基础保障。
UDP 数据包的最大长度由首部字段限制,UDP 首部的 16 位总长度字段,决定了数据包最大为 65535 字节。其中 UDP 首部占 8 字节,因此有效数据最大为 65527 字节。但实际网络中,链路层的 MTU(最大传输单元)限制了数据包大小,以太网 MTU 为 1500 字节,IP 首部 20 字节 +UDP 首部 8 字节,实际 UDP 数据部分最大仅 1472 字节。超过这个大小,IP 层会分片传输,分片后丢包率大幅上升,因此实际开发中,UDP 数据包通常控制在 1472 字节以内。
Socket(套接字)是应用层与传输层之间的编程接口,是网络通信的端点,封装了协议栈的底层细节。它就像通信双方的“电话”,客户端和服务端通过 Socket 建立连接、收发数据。Socket 屏蔽了 TCP/UDP、IP、端口等底层实现,为开发者提供了统一的调用方法,比如 bind、listen、connect、send、recv 等。它是网络编程的核心工具,所有网络应用(浏览器、APP、服务器)都基于 Socket 开发,实现了不同设备之间的端到端通信,是网络编程的基础。
TCP 拥塞控制是防止网络链路过载的全局机制,避免大量数据导致网络瘫痪。核心算法包括:慢启动(初始缓慢发送,指数级增加窗口)、拥塞避免(线性增加窗口,稳定传输)、快速重传(收到 3 个重复 ACK 立刻重传,不等待超时)、快速恢复(重传后直接进入拥塞避免,不重置窗口)。TCP 通过维护拥塞窗口,根据网络丢包情况动态调整发送速度,网络拥堵时减小窗口,空闲时增大窗口。拥塞控制和流量控制配合,既保证端到端稳定,又维护了整个网络的通畅。
HTTP/2 是 HTTP/1.x 的升级版本,核心改进大幅提升了传输效率。它采用二进制分帧,替代明文传输,解析更快、更高效。支持多路复用,单个 TCP 连接同时传输多个请求 / 响应,解决了队头阻塞问题。新增服务器推送,主动向客户端推送资源,无需客户端请求。优化了头部压缩,减少冗余数据传输。HTTP/2 还支持优先级控制,重要资源优先传输。相比 HTTP/1.x,它降低了延迟,提升了并发能力,是现代 Web 性能优化的核心协议,兼容 HTTP/1.x 的所有语义。
UDP 本身不可靠,需要在应用层自定义可靠机制,模拟 TCP 的核心逻辑。实现方法:添加序列号和确认应答,每个数据包编号,接收方回复 ACK 确认;加入超时重传,未收到确认则重发数据包;实现数据排序,按序列号重组数据;增加校验和,检测数据损坏。还可实现滑动窗口提升效率,ARQ 协议保证可靠。这种方式叫可靠 UDP(RUDP),兼顾了 UDP 的速度和 TCP 的可靠性,适合游戏、实时视频等需要低延迟又要求数据可靠的场景。
Socket 阻塞与非阻塞的核心区别是调用方法时是否等待结果。阻塞模式下,调用 accept、recv、send 等方法时,若没有事件触发,线程会一直挂起等待,直到事件发生,代码编写简单,但并发能力差。非阻塞模式下,这些方法会立即返回,没有数据则返回错误标识,线程可以处理其他任务,需要循环轮询状态。阻塞模式适合简单的单客户端场景,非阻塞模式配合 IO 多路复用,适合高并发服务端,能充分利用线程资源,提升系统处理能力。
TCP 通过多重机制保证数据可靠、按序到达。可靠性:使用确认应答 + 超时重传,发送数据后等待接收方 ACK,超时未收到则重传;通过校验和检测数据损坏,丢弃错误数据。顺序性:给每个字节数据分配序列号,接收方按序列号排序重组数据,重复数据包直接丢弃。此外,流量控制和拥塞控制避免丢包,连接管理保证通信双方正常交互。这些机制由 TCP 协议自动实现,应用层无需处理,让 TCP 成为最可靠的传输层协议,适合对数据完整性要求极高的场景。
301 和 302 都是 HTTP 重定向状态码,核心区别是重定向的永久性。301 是永久重定向,表示原地址永久失效,搜索引擎会抓取新地址并替换旧地址,浏览器会缓存重定向规则。302 是临时重定向,表示原地址暂时失效,搜索引擎保留旧地址,浏览器不缓存规则。比如网站域名更换用 301,临时维护用 302。使用时需注意场景,错误使用 301 会导致搜索引擎权重异常,是 Web 开发中路由跳转的核心状态码。
UDP 本身不保证数据送达,只能通过应用层优化减少丢包。核心方法:合理控制数据包大小,避免 IP 分片,分片丢包率极高;使用超时重传,未收到确认就重发关键数据;采用FEC 前向纠错,发送冗余数据,接收方可恢复部分丢失包;使用ARQ 自动重传请求,实现确认应答机制。网络层优化:选择稳定的传输链路,降低网络延迟。业务层优化:非关键数据允许丢包,关键数据自定义可靠机制。这些优化能大幅降低 UDP 丢包率,兼顾实时性和稳定性。
Nagle 算法是TCP 的优化算法,用来减少小数据包的传输次数,降低网络开销。它的工作原理:当 TCP 有数据要发送时,如果已发送的数据未收到确认应答,就将小数据缓存起来,直到收到确认或积攒到足够大的数据包,再一次性发送。算法避免了大量微小数据包占用网络资源,提升了传输效率。但在实时性要求高的场景(如游戏、远程控制),会导致延迟增加,可通过设置 TCP_NODELAY 选项关闭算法,根据业务场景灵活选择。
TCP 通过多重校验机制检测传输错误,保证数据完整性。核心是校验和字段:发送方对 TCP 首部和数据进行 16 位反码求和计算,接收方重新计算并对比,不一致则判定数据损坏并丢弃。同时,序列号和确认应答机制检测丢包、重复包:丢失数据包会触发超时重传,重复数据包会直接被丢弃。TCP 还通过滑动窗口保证数据有序,结合流量控制避免缓冲区溢出。这些机制协同工作,全面检测传输中的错误,是 TCP 可靠传输的核心保障。
HTTP Keep-Alive(持久连接)机制复用 TCP 连接,解决 HTTP 无连接导致的频繁建连开销。HTTP/1.1 默认开启,客户端和服务端建立一次 TCP 连接后,可连续传输多个请求 / 响应,不用每次请求都三次握手、四次挥手。它减少了 TCP 连接的建立和断开次数,降低了延迟,减轻了服务器和客户端的资源消耗,提升了传输效率。可设置超时时间和最大请求数,空闲超时后自动断开连接。是 HTTP 性能优化的基础机制,现代 Web 服务都依赖它提升并发能力。
Socket 半关闭指通信一方关闭发送功能,但保留接收功能,另一方同理。TCP 是全双工协议,有独立的发送和接收通道,调用 shutdown 方法可单独关闭一个通道,而 close 方法会直接关闭整个连接。比如客户端发送完数据后,调用 shutdown 关闭输出流,告知服务端数据发送完毕,同时仍能接收服务端的响应数据。半关闭常用于数据传输完成的通知,避免提前关闭连接导致数据丢失,是 TCP 流式传输中常用的优雅关闭方式。
快速重传和快速恢复是 TCP优化丢包处理的核心算法,提升传输效率。快速重传:发送方收到3 个重复的 ACK,判定对应数据包丢失,不等待超时计时器,立刻重传丢失的数据包。快速恢复:重传后,不进入慢启动阶段,而是将拥塞窗口减半,直接进入拥塞避免阶段,线性增加窗口大小。相比超时重传,这两个机制大幅减少了丢包后的延迟,避免了传输速率骤降,让 TCP 在网络不稳定时也能保持稳定的传输效率。
TCP 零窗口大小指接收方缓冲区已满,无法接收新数据,会向发送方发送窗口大小为 0 的应答。此时发送方停止发送数据,避免缓冲区溢出丢包。处理机制:发送方启动坚持计时器,定时向接收方发送探测包,询问窗口是否更新。接收方处理完数据后,会回复更新后的窗口大小,发送方收到后恢复数据传输。如果探测超时,会断开连接避免死锁。零窗口是流量控制的正常场景,核心是防止数据丢失,保证传输稳定。
HTTP/1.1 管道化是优化请求传输的机制,允许客户端在同一个 TCP 连接中,连续发送多个请求,无需等待前一个请求的响应。它减少了请求的等待延迟,提升了传输效率。但管道化存在队头阻塞问题,若第一个请求响应延迟,后续所有请求都会被阻塞。且服务端必须按请求顺序返回响应,灵活性差。因此浏览器默认关闭该功能,实际应用极少,最终被 HTTP/2 的多路复用替代,彻底解决了队头阻塞问题。
UDP 广播和多播是一对多传输的特殊模式,基于 UDP 无连接特性实现。广播:向同一局域网内所有设备发送数据包,目标 IP 是广播地址,所有设备都能接收,无法定向,会占用网络资源。多播(组播):向指定组内的设备发送数据包,只有加入组的设备能接收,定向传输,节省网络带宽。两者都无需建立连接,传输效率高,适合视频直播、在线会议、局域网消息推送等一对多场景,TCP 不支持广播和多播。
Socket 异步事件处理核心是非阻塞 + 事件通知,不用线程等待,单线程处理多个 IO 事件。基础方案用select/poll,循环监听套接字的读、写、异常事件,有事件触发则处理。高性能方案用epoll/kqueue,内核级事件通知,无轮询开销,支持百万级并发。Java 用 NIO、Netty 框架,Go 用 goroutine+ 异步 IO。异步处理将 IO 操作交给内核,线程继续执行其他任务,事件完成后回调处理,大幅提升高并发场景下的系统性能和资源利用率。
TCP 连接建立(三次握手)状态:客户端从 CLOSED→SYN_SENT→ESTABLISHED;服务端从 CLOSED→LISTEN→SYN_RCVD→ESTABLISHED。连接终止(四次挥手)状态:主动关闭方从 ESTABLISHED→FIN_WAIT1→FIN_WAIT2→TIME_WAIT→CLOSED;被动关闭方从 ESTABLISHED→CLOSE_WAIT→LAST_ACK→CLOSED。TIME_WAIT 状态会等待 2MSL,确保最后一个 ACK 被接收,防止旧数据包干扰新连接。这些状态是 TCP 连接管理的核心,保证了连接建立和断开的可靠性。
Content-Type 和 Accept 是 HTTP数据协商的核心头部。Content-Type 是服务端响应或客户端请求中,声明传输数据的格式,比如 application/json、text/html、image/jpeg,告知对方如何解析数据。Accept 是客户端请求中,声明自己能接收的数据格式和优先级,服务端根据 Accept 返回对应格式的数据。两者配合实现数据格式的协商,保证客户端和服务端能正确解析数据,是 HTTP 接口开发、前后端交互中最常用的请求头。
UDP 的不可靠性是天生特性:无连接、无确认应答、无重传、无排序、无流量控制,数据包可能丢失、重复、乱序、损坏。应对策略分两种:非关键数据(视频帧、游戏位置)允许丢包,无需处理;关键数据在应用层实现可靠机制,添加序列号、确认应答、超时重传、数据校验、排序重组。优化传输:控制包大小避免分片,使用 FEC 纠错,选择稳定网络。兼顾实时性和可靠性,是 UDP 开发的核心思路。
bind 函数是 Socket 编程中绑定地址信息的核心方法,作用是将套接字与本地的 IP 地址和端口号关联。服务端必须调用 bind,明确监听的 IP 和端口,让客户端能找到服务端。客户端通常无需 bind,系统会自动分配临时端口。如果不调用 bind,服务端无法接收外部连接。bind 是服务端编程的必经步骤,配合 listen 函数实现端口监听,是建立网络通信的基础,确保数据能准确发送到目标程序。
TCP 头部是可靠传输的核心,关键字段:源端口 / 目的端口(标识应用程序)、序列号(保证数据顺序)、确认号(应答接收数据)、数据偏移(标识首部长度)、控制位(SYN 建连、ACK 确认、FIN 断连、PSH 推送、RST 重置)、窗口大小(流量控制)、校验和(错误检测)、紧急指针(标记紧急数据)。这些字段协同实现连接管理、可靠性、顺序性、流量控制,是 TCP 协议的核心,所有传输机制都依赖头部字段实现。
HTTP/3 是最新的 HTTP 协议,基于 QUIC 协议,彻底解决了 HTTP/2 的队头阻塞问题。它抛弃 TCP,采用 UDP+QUIC 实现传输,内置加密、多路复用、连接迁移、0-RTT 握手。QUIC 协议在传输层实现可靠传输,单个数据包丢失不影响其他流,彻底解决队头阻塞。连接迁移支持网络切换(如 WiFi 切 5G)不断开连接,0-RTT 握手降低延迟。HTTP/3 安全性、速度、稳定性全面提升,是未来 Web 传输的主流协议,兼容 HTTP/2 的所有特性。
TCP 适合数据可靠性优先的场景:网页浏览(HTTP/HTTPS)、文件传输、邮件、远程登录、支付接口等,要求数据不丢不乱,允许一定延迟。UDP 适合实时性优先的场景:在线游戏、视频直播、语音通话、DNS 查询、物联网通信等,允许少量丢包,追求低延迟、高传输速度。TCP 用于长连接、关键数据传输;UDP 用于短请求、一对多传输、实时交互。两者根据业务的可靠性和实时性需求选择,是网络编程的核心选型依据。
WebSocket 是全双工通信协议,基于 TCP,实现客户端和服务端实时双向通信。它和 HTTP 的核心区别:HTTP 是半双工,客户端主动请求,服务端被动响应,无长连接;WebSocket 是全双工,建立连接后,双方可随时主动发送数据,持久连接。HTTP 短连接、开销大,WebSocket 长连接、开销小。HTTP 用于静态资源、接口请求;WebSocket 用于聊天室、实时通知、在线协作等实时场景。WebSocket 通过 HTTP 握手建立连接,之后独立传输,是实时 Web 开发的核心协议。
TCP/IP 模型中端到端加密,核心是传输层加密和应用层加密。传输层用SSL/TLS 协议,为 TCP 提供加密、身份认证、完整性校验,HTTPS 就是 HTTP+TLS,是最常用的方式。应用层可自定义加密算法,对数据明文加密后再传输,比如 AES 对称加密、RSA 非对称加密。端到端加密保证数据在传输全程都是密文,只有发送方和接收方能解密,中间节点无法窃取数据。是网络安全通信的核心方式,保护隐私数据不被泄露。
503 和 504 都是服务端错误状态码,核心区别是错误原因。503 Service Unavailable:服务端自身无法处理请求,比如服务器过载、停机维护、资源不足,是服务端主动拒绝请求。504 Gateway Timeout:网关 / 代理服务器等待上游服务响应超时,上游服务未及时返回数据,网关断开连接,问题出在服务间调用。503 是服务端不可用,504 是服务响应超时,都是服务端故障,需要排查服务状态、负载、网络延迟。
非阻塞 IO 和异步 IO 的核心区别是数据拷贝的执行者。非阻塞 IO:调用方法立即返回,无数据则返回标识,需要用户线程主动轮询并拷贝数据,内核准备好数据后,用户线程参与拷贝。异步 IO:调用方法立即返回,内核完成数据准备和拷贝,完成后通知用户线程,用户线程不参与数据拷贝。非阻塞 IO 配合多路复用实现高并发,异步 IO 性能更高,编程更简单。非阻塞 IO 是同步非阻塞,异步 IO 是真正的异步,是高性能网络编程的核心选型。
IPv6 是 IPv4 的升级版本,核心优势全面解决了 IPv4 的痛点。地址空间极大,IPv4 是 32 位,IPv6 是 128 位,几乎无限的 IP 地址,解决地址枯竭问题。原生支持端到端加密,安全性更高。自动配置地址,无需 DHCP,部署更简单。报文头部简化,路由转发更快,提升传输效率。支持移动 IP,设备切换网络不断开连接。无 NAT 地址转换,避免端口冲突。IPv6 是未来网络的核心协议,适配物联网、5G、海量设备联网的需求。
TCP 是面向字节流的协议,无数据边界,多个数据包会拼接在一起,形成粘包问题,接收方无法区分独立数据。避免方法:固定长度,所有数据包长度一致,不足补位;分隔符,数据包末尾加特殊分隔符,接收方按分隔符拆分;长度 + 数据,数据包前加固定长度字段,标识数据长度,接收方先读长度再读对应数据。其中长度 + 数据是最常用、最稳定的方案,是 TCP 通信中解决粘包的标准方法。
GET 和 POST 是 HTTP 最常用的方法,核心区别:GET 用于获取数据,参数拼接在 URL 中,长度受限,明文传输,可缓存、可收藏、幂等;POST 用于提交数据,参数放在请求体中,长度无限制,相对安全,不可缓存,非幂等。GET 请求历史会被浏览器记录,POST 不会。GET 适合查询、获取资源;POST 适合登录、上传、提交表单等修改数据的操作。本质是语义不同,而非安全性,两者都可被抓包,敏感数据需用 HTTPS 加密。
DNS 泛解析是通配符解析,用匹配所有子域名,将未配置的子域名指向同一个 IP 地址。比如.example.com,所有子域名都解析到指定服务器。用途:简化域名配置,无需为每个子域名单独设置解析;适配多租户系统、 SaaS 平台,每个用户分配独立子域名;防止子域名解析失败,提升可用性;用于域名跳转、流量统计。泛解析配置简单,灵活性强,是企业域名管理、互联网应用开发的常用 DNS 配置方式。
WebSocket 全双工通信的核心是建立持久 TCP 连接。首先通过 HTTP 发起握手请求,服务端响应后,完成协议升级,告别 HTTP 的请求 - 响应模式。连接建立后,客户端和服务端拥有独立的发送和接收通道,双方可随时主动发送数据,无需等待对方请求。WebSocket 基于帧传输,开销极小,延迟极低。配合心跳包保持连接,支持网络中断重连。彻底解决了 HTTP 轮询的低效问题,是实时双向通信的最佳方案,广泛用于聊天室、实时数据推送。
TCP 通过序列号和确认应答机制保证数据包按序到达。发送方为每个传输的字节分配唯一的序列号,按顺序发送数据包。接收方收到数据后,按序列号排序重组,丢弃重复的数据包,并回复确认号,告知发送方已接收的数据。如果中间某个数据包丢失,接收方会重复发送确认号,触发发送方快速重传。接收方只有收到有序的完整数据,才会向上层交付。序列号是 TCP 顺序性的核心,全程由协议自动实现,应用层无需处理。
HTTP/2 服务器推送是服务端主动发送资源的机制,无需客户端请求。当客户端请求主页面时,服务端分析页面依赖的资源(如 CSS、JS、图片),在返回主页面的同时,主动将这些资源推送到客户端缓存。客户端收到后,直接从缓存读取资源,不用单独发起请求。推送基于多路复用,不影响主请求传输,支持优先级控制。该机制减少了客户端的请求次数,降低了延迟,提升了页面加载速度,是 HTTP/2 的核心性能优化特性。
UDP 多播(组播)是一对多定向传输,基于 D 类 IP 地址(224.0.0.0~239.255.255.255)实现。发送方将数据包发送到多播组地址,加入该组的所有设备都能接收。发送方无需知道接收方数量,接收方主动加入 / 离开多播组。UDP 多播无需建立连接,传输效率高,支持跨局域网传输(需路由器支持)。核心用于视频直播、在线会议、局域网消息推送等一对多场景,TCP 不支持多播,是 UDP 的核心优势之一。
SO_REUSEADDR 是 Socket 的地址复用选项,核心作用:允许快速重启服务端,解决 TIME_WAIT 状态导致的端口占用问题,服务端崩溃后可立即绑定同一端口;允许多个套接字绑定同一 IP+ 端口,用于多播通信;允许同一端口绑定不同的本地地址。默认情况下,端口处于 TIME_WAIT 状态时无法绑定,开启该选项后可绕过限制。是服务端开发、高并发场景的常用优化选项,保证服务快速重启,提升可用性。
TCP 拥塞控制是维护网络通畅的全局机制,防止发送方发送过多数据导致网络拥堵瘫痪。它通过拥塞窗口控制发送速度,核心算法:慢启动(初始窗口小,指数级增长)、拥塞避免(线性增长,稳定传输)、快速重传(丢包后立刻重传)、快速恢复(重传后减半窗口,继续线性增长)。拥塞控制自动感知网络状态,网络空闲时提速,拥堵时降速,和流量控制配合,既保证端到端传输稳定,又不破坏整个网络的负载平衡。
HTTP 幂等性指同一请求执行一次和多次的结果完全相同,不会产生副作用。幂等方法:GET、HEAD、PUT、DELETE,多次执行不会修改数据,安全可靠。非幂等方法:POST,多次执行会重复提交数据,产生副作用。幂等性是接口设计的核心原则,保证网络超时、重传时,数据不会重复处理。比如支付接口必须保证幂等,避免重复扣款。RESTful 接口严格遵循幂等性设计,提升系统的稳定性和安全性。
select 和 poll 是IO 多路复用的基础实现,核心区别:select 监听的文件描述符数量有限制(默认 1024),poll 无数量限制;select 采用位图存储描述符,poll 采用数组,效率更高;select 支持跨平台(Windows/Linux),poll 仅支持 Linux/Unix;两者都需要轮询所有描述符,遍历开销大,并发量高时效率低。select 兼容性强,适合简单场景;poll 无数量限制,性能稍优。两者都被 epoll 替代,epoll 无轮询开销,支持百万级并发,是高性能服务端的首选。