树码科技 | 技术博客

Java 网络编程题及参考答案

2026/04/05
9
0

TCP和UDP的主要区别是什么?

TCP和UDP是传输层两大核心协议,核心区别围绕可靠性、连接性、速度展开。TCP是面向连接、可靠的协议,需要三次握手建立连接、四次挥手断开,自带确认应答、重传、排序、流量控制机制,数据不丢不乱序,但开销大、速度慢。UDP是无连接、不可靠的协议,无需建立连接,直接发送数据包,不保证送达和顺序,开销极小、传输速度极快。此外,TCP面向字节流,UDP面向数据报;TCP适合对数据完整性要求高的场景,UDP适合实时性优先的场景,两者是网络传输最常用的互补协议。

HTTP协议的主要特点是什么?

HTTP是应用层最常用的超文本传输协议,核心特点十分鲜明。它基于客户端-服务器模型,由客户端主动发起请求,服务器被动响应。HTTP是无状态、无连接的协议,服务器不记录客户端的历史请求,每次请求相互独立。它使用明文传输,默认端口80,支持GET、POST等多种请求方法,可传输文本、图片、视频等多种资源。HTTP协议简单灵活,扩展性强,是Web通信的基础,配合HTTPS解决安全问题,搭配Keep-Alive优化连接效率,成为互联网最核心的应用层协议。

Socket编程中TCP和UDP编程的区别?

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三次握手过程是什么?

TCP三次握手是建立可靠连接的必经过程,目的是确认双方的收发能力正常。第一次握手:客户端发送SYN包,请求建立连接,进入SYN_SENT状态。第二次握手:服务端收到SYN包,回复SYN+ACK包,确认客户端请求,进入SYN_RCVD状态。第三次握手:客户端收到SYN+ACK包,回复ACK包,服务端收到后,双方进入ESTABLISHED连接状态。三次握手缺一不可,避免了失效连接请求导致的资源浪费,确保连接建立的可靠性,是TCP传输的基础前提。

如何理解HTTP协议的无状态性?

HTTP的无状态性指服务器不保存任何客户端的历史请求信息,每次请求都是独立的,服务器无法识别连续请求来自同一个客户端。比如刷新页面,服务器不会记住之前的操作。这个特点让HTTP协议更简单、轻量,服务器压力更小,扩展性更强。但也带来了身份识别的问题,因此诞生了Cookie、Session、Token等技术,用来在无状态的协议上实现状态保持,满足登录、购物车等业务需求。无状态是HTTP的核心特性,也是Web开发中状态管理的根源。

UDP的校验机制是如何工作的?

UDP的校验机制是简单的错误检测手段,用来判断数据包在传输中是否损坏。发送方会将UDP首部、数据、伪首部组合,按16位进行二进制反码求和,生成校验和并放入首部。接收方收到数据包后,用相同的算法重新计算校验和,与首部中的校验和对比。如果一致,说明数据大概率无错误;如果不一致,直接丢弃数据包。UDP校验是可选的,且只能检测错误,不能纠错也不能重传,这也是UDP不可靠的原因之一,仅能保证数据的基本完整性。

Socket编程中如何实现多客户端通信?

Socket实现多客户端通信,核心是让服务端同时处理多个客户端连接。基础方案是多线程/多进程:服务端主线程监听端口,每收到一个客户端连接,就创建一个独立线程处理交互,主线程继续监听。进阶方案是IO多路复用,用select、poll、epoll等技术,单线程监听多个套接字事件,避免线程开销。高并发场景常用线程池+IO多路复用组合。客户端各自与服务端建立独立连接,服务端通过套接字区分不同客户端,实现一对一、一对多的稳定通信。

TCP如何实现流量控制?

TCP流量控制是控制发送方速度,匹配接收方的处理能力,防止接收方缓冲区溢出丢包。核心机制是滑动窗口:接收方在应答包中告知发送方自己的接收窗口大小,发送方严格按照窗口大小发送数据,不超过接收方的处理上限。如果接收方缓冲区已满,会发送窗口大小为0的报文,发送方停止发送。接收方处理完数据后,再更新窗口大小,通知发送方继续传输。流量控制是端到端的机制,全程由TCP自动完成,无需开发者干预,保证了传输的稳定性。

HTTP和HTTPS有哪些主要区别?

HTTP和HTTPS的核心区别是安全性,HTTPS是HTTP的加密版本。HTTP明文传输,数据易被窃听、篡改、劫持,默认端口80;HTTPS基于SSL/TLS协议加密传输,数据加密、身份认证、完整性校验,默认端口443。HTTPS需要申请SSL证书,建立连接时需要握手协商加密算法,比HTTP多了加密解密开销,速度稍慢。HTTP适合静态资源、公开页面;HTTPS适合登录、支付、隐私数据传输。现在互联网已全面普及HTTPS,是Web安全的基础保障。

UDP数据包的最大长度是多少?

UDP数据包的最大长度由首部字段限制,UDP首部的16位总长度字段,决定了数据包最大为65535字节。其中UDP首部占8字节,因此有效数据最大为65527字节。但实际网络中,链路层的MTU(最大传输单元)限制了数据包大小,以太网MTU为1500字节,IP首部20字节+UDP首部8字节,实际UDP数据部分最大仅1472字节。超过这个大小,IP层会分片传输,分片后丢包率大幅上升,因此实际开发中,UDP数据包通常控制在1472字节以内。

什么是Socket,它在网络编程中扮演什么角色?

Socket(套接字)是应用层与传输层之间的编程接口,是网络通信的端点,封装了协议栈的底层细节。它就像通信双方的“电话”,客户端和服务端通过Socket建立连接、收发数据。Socket屏蔽了TCP/UDP、IP、端口等底层实现,为开发者提供了统一的调用方法,比如bind、listen、connect、send、recv等。它是网络编程的核心工具,所有网络应用(浏览器、APP、服务器)都基于Socket开发,实现了不同设备之间的端到端通信,是网络编程的基础。

TCP如何处理网络拥塞?

TCP拥塞控制是防止网络链路过载的全局机制,避免大量数据导致网络瘫痪。核心算法包括:慢启动(初始缓慢发送,指数级增加窗口)、拥塞避免(线性增加窗口,稳定传输)、快速重传(收到3个重复ACK立刻重传,不等待超时)、快速恢复(重传后直接进入拥塞避免,不重置窗口)。TCP通过维护拥塞窗口,根据网络丢包情况动态调整发送速度,网络拥堵时减小窗口,空闲时增大窗口。拥塞控制和流量控制配合,既保证端到端稳定,又维护了整个网络的通畅。

HTTP/2相比HTTP/1.x有哪些显著改进?

HTTP/2是HTTP/1.x的升级版本,核心改进大幅提升了传输效率。它采用二进制分帧,替代明文传输,解析更快、更高效。支持多路复用,单个TCP连接同时传输多个请求/响应,解决了队头阻塞问题。新增服务器推送,主动向客户端推送资源,无需客户端请求。优化了头部压缩,减少冗余数据传输。HTTP/2还支持优先级控制,重要资源优先传输。相比HTTP/1.x,它降低了延迟,提升了并发能力,是现代Web性能优化的核心协议,兼容HTTP/1.x的所有语义。

在UDP中如何实现可靠的数据传输?

UDP本身不可靠,需要在应用层自定义可靠机制,模拟TCP的核心逻辑。实现方法:添加序列号和确认应答,每个数据包编号,接收方回复ACK确认;加入超时重传,未收到确认则重发数据包;实现数据排序,按序列号重组数据;增加校验和,检测数据损坏。还可实现滑动窗口提升效率,ARQ协议保证可靠。这种方式叫可靠UDP(RUDP),兼顾了UDP的速度和TCP的可靠性,适合游戏、实时视频等需要低延迟又要求数据可靠的场景。

Socket编程中的阻塞与非阻塞模式有何区别?

Socket阻塞与非阻塞的核心区别是调用方法时是否等待结果。阻塞模式下,调用accept、recv、send等方法时,若没有事件触发,线程会一直挂起等待,直到事件发生,代码编写简单,但并发能力差。非阻塞模式下,这些方法会立即返回,没有数据则返回错误标识,线程可以处理其他任务,需要循环轮询状态。阻塞模式适合简单的单客户端场景,非阻塞模式配合IO多路复用,适合高并发服务端,能充分利用线程资源,提升系统处理能力。

TCP如何保证数据传输的顺序性和可靠性?

TCP通过多重机制保证数据可靠、按序到达。可靠性:使用确认应答+超时重传,发送数据后等待接收方ACK,超时未收到则重传;通过校验和检测数据损坏,丢弃错误数据。顺序性:给每个字节数据分配序列号,接收方按序列号排序重组数据,重复数据包直接丢弃。此外,流量控制和拥塞控制避免丢包,连接管理保证通信双方正常交互。这些机制由TCP协议自动实现,应用层无需处理,让TCP成为最可靠的传输层协议,适合对数据完整性要求极高的场景。

HTTP协议中状态码301和302有什么区别?

301和302都是HTTP重定向状态码,核心区别是重定向的永久性。301是永久重定向,表示原地址永久失效,搜索引擎会抓取新地址并替换旧地址,浏览器会缓存重定向规则。302是临时重定向,表示原地址暂时失效,搜索引擎保留旧地址,浏览器不缓存规则。比如网站域名更换用301,临时维护用302。使用时需注意场景,错误使用301会导致搜索引擎权重异常,是Web开发中路由跳转的核心状态码。

UDP协议如何减少数据包的丢失?

UDP本身不保证数据送达,只能通过应用层优化减少丢包。核心方法:合理控制数据包大小,避免IP分片,分片丢包率极高;使用超时重传,未收到确认就重发关键数据;采用FEC前向纠错,发送冗余数据,接收方可恢复部分丢失包;使用ARQ自动重传请求,实现确认应答机制。网络层优化:选择稳定的传输链路,降低网络延迟。业务层优化:非关键数据允许丢包,关键数据自定义可靠机制。这些优化能大幅降低UDP丢包率,兼顾实时性和稳定性。

Socket通信中的Nagle算法是什么?它如何工作?

Nagle算法是TCP的优化算法,用来减少小数据包的传输次数,降低网络开销。它的工作原理:当TCP有数据要发送时,如果已发送的数据未收到确认应答,就将小数据缓存起来,直到收到确认或积攒到足够大的数据包,再一次性发送。算法避免了大量微小数据包占用网络资源,提升了传输效率。但在实时性要求高的场景(如游戏、远程控制),会导致延迟增加,可通过设置TCP_NODELAY选项关闭算法,根据业务场景灵活选择。

TCP协议如何实现可靠性传输的错误检测?

TCP通过多重校验机制检测传输错误,保证数据完整性。核心是校验和字段:发送方对TCP首部和数据进行16位反码求和计算,接收方重新计算并对比,不一致则判定数据损坏并丢弃。同时,序列号和确认应答机制检测丢包、重复包:丢失数据包会触发超时重传,重复数据包会直接被丢弃。TCP还通过滑动窗口保证数据有序,结合流量控制避免缓冲区溢出。这些机制协同工作,全面检测传输中的错误,是TCP可靠传输的核心保障。

HTTP Keep-Alive机制的作用是什么?

HTTP Keep-Alive(持久连接)机制复用TCP连接,解决HTTP无连接导致的频繁建连开销。HTTP/1.1默认开启,客户端和服务端建立一次TCP连接后,可连续传输多个请求/响应,不用每次请求都三次握手、四次挥手。它减少了TCP连接的建立和断开次数,降低了延迟,减轻了服务器和客户端的资源消耗,提升了传输效率。可设置超时时间和最大请求数,空闲超时后自动断开连接。是HTTP性能优化的基础机制,现代Web服务都依赖它提升并发能力。

在Socket编程中,什么是半关闭(Half-close)?

Socket半关闭指通信一方关闭发送功能,但保留接收功能,另一方同理。TCP是全双工协议,有独立的发送和接收通道,调用shutdown方法可单独关闭一个通道,而close方法会直接关闭整个连接。比如客户端发送完数据后,调用shutdown关闭输出流,告知服务端数据发送完毕,同时仍能接收服务端的响应数据。半关闭常用于数据传输完成的通知,避免提前关闭连接导致数据丢失,是TCP流式传输中常用的优雅关闭方式。

描述TCP的快速重传和快速恢复机制

快速重传和快速恢复是TCP优化丢包处理的核心算法,提升传输效率。快速重传:发送方收到3个重复的ACK,判定对应数据包丢失,不等待超时计时器,立刻重传丢失的数据包。快速恢复:重传后,不进入慢启动阶段,而是将拥塞窗口减半,直接进入拥塞避免阶段,线性增加窗口大小。相比超时重传,这两个机制大幅减少了丢包后的延迟,避免了传输速率骤降,让TCP在网络不稳定时也能保持稳定的传输效率。

解释TCP零窗口大小的情况和如何处理?

TCP零窗口大小指接收方缓冲区已满,无法接收新数据,会向发送方发送窗口大小为0的应答。此时发送方停止发送数据,避免缓冲区溢出丢包。处理机制:发送方启动坚持计时器,定时向接收方发送探测包,询问窗口是否更新。接收方处理完数据后,会回复更新后的窗口大小,发送方收到后恢复数据传输。如果探测超时,会断开连接避免死锁。零窗口是流量控制的正常场景,核心是防止数据丢失,保证传输稳定。

HTTP/1.1中的管道化(Pipelining)是什么意思?

HTTP/1.1管道化是优化请求传输的机制,允许客户端在同一个TCP连接中,连续发送多个请求,无需等待前一个请求的响应。它减少了请求的等待延迟,提升了传输效率。但管道化存在队头阻塞问题,若第一个请求响应延迟,后续所有请求都会被阻塞。且服务端必须按请求顺序返回响应,灵活性差。因此浏览器默认关闭该功能,实际应用极少,最终被HTTP/2的多路复用替代,彻底解决了队头阻塞问题。

什么是UDP广播和多播?

UDP广播和多播是一对多传输的特殊模式,基于UDP无连接特性实现。广播:向同一局域网内所有设备发送数据包,目标IP是广播地址,所有设备都能接收,无法定向,会占用网络资源。多播(组播):向指定组内的设备发送数据包,只有加入组的设备能接收,定向传输,节省网络带宽。两者都无需建立连接,传输效率高,适合视频直播、在线会议、局域网消息推送等一对多场景,TCP不支持广播和多播。

Socket编程中如何处理异步事件?

Socket异步事件处理核心是非阻塞+事件通知,不用线程等待,单线程处理多个IO事件。基础方案用select/poll,循环监听套接字的读、写、异常事件,有事件触发则处理。高性能方案用epoll/kqueue,内核级事件通知,无轮询开销,支持百万级并发。Java用NIO、Netty框架,Go用goroutine+异步IO。异步处理将IO操作交给内核,线程继续执行其他任务,事件完成后回调处理,大幅提升高并发场景下的系统性能和资源利用率。

TCP连接的建立和终止过程中发生的状态变化?

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连接管理的核心,保证了连接建立和断开的可靠性。

HTTP消息头中的Content-Type和Accept有什么作用?

Content-Type和Accept是HTTP数据协商的核心头部。Content-Type是服务端响应客户端请求中,声明传输数据的格式,比如application/json、text/html、image/jpeg,告知对方如何解析数据。Accept是客户端请求中,声明自己能接收的数据格式和优先级,服务端根据Accept返回对应格式的数据。两者配合实现数据格式的协商,保证客户端和服务端能正确解析数据,是HTTP接口开发、前后端交互中最常用的请求头。

UDP数据传输的不可靠性及其应对策略

UDP的不可靠性是天生特性:无连接、无确认应答、无重传、无排序、无流量控制,数据包可能丢失、重复、乱序、损坏。应对策略分两种:非关键数据(视频帧、游戏位置)允许丢包,无需处理;关键数据在应用层实现可靠机制,添加序列号、确认应答、超时重传、数据校验、排序重组。优化传输:控制包大小避免分片,使用FEC纠错,选择稳定网络。兼顾实时性和可靠性,是UDP开发的核心思路。

Socket中bind函数的作用是什么?

bind函数是Socket编程中绑定地址信息的核心方法,作用是将套接字与本地的IP地址和端口号关联。服务端必须调用bind,明确监听的IP和端口,让客户端能找到服务端。客户端通常无需bind,系统会自动分配临时端口。如果不调用bind,服务端无法接收外部连接。bind是服务端编程的必经步骤,配合listen函数实现端口监听,是建立网络通信的基础,确保数据能准确发送到目标程序。

TCP头部包含哪些重要字段及其作用?

TCP头部是可靠传输的核心,关键字段:源端口/目的端口(标识应用程序)、序列号(保证数据顺序)、确认号(应答接收数据)、数据偏移(标识首部长度)、控制位(SYN建连、ACK确认、FIN断连、PSH推送、RST重置)、窗口大小(流量控制)、校验和(错误检测)、紧急指针(标记紧急数据)。这些字段协同实现连接管理、可靠性、顺序性、流量控制,是TCP协议的核心,所有传输机制都依赖头部字段实现。

HTTP/3的主要改进是什么?

HTTP/3是最新的HTTP协议,基于QUIC协议,彻底解决了HTTP/2的队头阻塞问题。它抛弃TCP,采用UDP+QUIC实现传输,内置加密、多路复用、连接迁移、0-RTT握手。QUIC协议在传输层实现可靠传输,单个数据包丢失不影响其他流,彻底解决队头阻塞。连接迁移支持网络切换(如WiFi切5G)不断开连接,0-RTT握手降低延迟。HTTP/3安全性、速度、稳定性全面提升,是未来Web传输的主流协议,兼容HTTP/2的所有特性。

TCP和UDP在网络编程中的适用场景?

TCP适合数据可靠性优先的场景:网页浏览(HTTP/HTTPS)、文件传输、邮件、远程登录、支付接口等,要求数据不丢不乱,允许一定延迟。UDP适合实时性优先的场景:在线游戏、视频直播、语音通话、DNS查询、物联网通信等,允许少量丢包,追求低延迟、高传输速度。TCP用于长连接、关键数据传输;UDP用于短请求、一对多传输、实时交互。两者根据业务的可靠性和实时性需求选择,是网络编程的核心选型依据。

什么是WebSocket?它和HTTP有什么区别?

WebSocket是全双工通信协议,基于TCP,实现客户端和服务端实时双向通信。它和HTTP的核心区别:HTTP是半双工,客户端主动请求,服务端被动响应,无长连接;WebSocket是全双工,建立连接后,双方可随时主动发送数据,持久连接。HTTP短连接、开销大,WebSocket长连接、开销小。HTTP用于静态资源、接口请求;WebSocket用于聊天室、实时通知、在线协作等实时场景。WebSocket通过HTTP握手建立连接,之后独立传输,是实时Web开发的核心协议。

如何在TCP/IP模型中实现端到端的加密通信?

TCP/IP模型中端到端加密,核心是传输层加密应用层加密。传输层用SSL/TLS协议,为TCP提供加密、身份认证、完整性校验,HTTPS就是HTTP+TLS,是最常用的方式。应用层可自定义加密算法,对数据明文加密后再传输,比如AES对称加密、RSA非对称加密。端到端加密保证数据在传输全程都是密文,只有发送方和接收方能解密,中间节点无法窃取数据。是网络安全通信的核心方式,保护隐私数据不被泄露。

HTTP状态码503和504区别是什么?

503和504都是服务端错误状态码,核心区别是错误原因。503 Service Unavailable:服务端自身无法处理请求,比如服务器过载、停机维护、资源不足,是服务端主动拒绝请求。504 Gateway Timeout:网关/代理服务器等待上游服务响应超时,上游服务未及时返回数据,网关断开连接,问题出在服务间调用。503是服务端不可用,504是服务响应超时,都是服务端故障,需要排查服务状态、负载、网络延迟。

网络编程中,非阻塞IO和异步IO的区别是什么?

非阻塞IO和异步IO的核心区别是数据拷贝的执行者。非阻塞IO:调用方法立即返回,无数据则返回标识,需要用户线程主动轮询并拷贝数据,内核准备好数据后,用户线程参与拷贝。异步IO:调用方法立即返回,内核完成数据准备和拷贝,完成后通知用户线程,用户线程不参与数据拷贝。非阻塞IO配合多路复用实现高并发,异步IO性能更高,编程更简单。非阻塞IO是同步非阻塞,异步IO是真正的异步,是高性能网络编程的核心选型。

IPv6相比IPv4的主要优势?

IPv6是IPv4的升级版本,核心优势全面解决了IPv4的痛点。地址空间极大,IPv4是32位,IPv6是128位,几乎无限的IP地址,解决地址枯竭问题。原生支持端到端加密,安全性更高。自动配置地址,无需DHCP,部署更简单。报文头部简化,路由转发更快,提升传输效率。支持移动IP,设备切换网络不断开连接。无NAT地址转换,避免端口冲突。IPv6是未来网络的核心协议,适配物联网、5G、海量设备联网的需求。

什么是TCP粘包问题,如何避免?

TCP是面向字节流的协议,无数据边界,多个数据包会拼接在一起,形成粘包问题,接收方无法区分独立数据。避免方法:固定长度,所有数据包长度一致,不足补位;分隔符,数据包末尾加特殊分隔符,接收方按分隔符拆分;长度+数据,数据包前加固定长度字段,标识数据长度,接收方先读长度再读对应数据。其中长度+数据是最常用、最稳定的方案,是TCP通信中解决粘包的标准方法。

HTTP方法GET和POST的区别是什么?

GET和POST是HTTP最常用的方法,核心区别:GET用于获取数据,参数拼接在URL中,长度受限,明文传输,可缓存、可收藏、幂等;POST用于提交数据,参数放在请求体中,长度无限制,相对安全,不可缓存,非幂等。GET请求历史会被浏览器记录,POST不会。GET适合查询、获取资源;POST适合登录、上传、提交表单等修改数据的操作。本质是语义不同,而非安全性,两者都可被抓包,敏感数据需用HTTPS加密。

DNS泛解析定义及用途

DNS泛解析是通配符解析,用匹配所有子域名,将未配置的子域名指向同一个IP地址。比如.example.com,所有子域名都解析到指定服务器。用途:简化域名配置,无需为每个子域名单独设置解析;适配多租户系统、 SaaS平台,每个用户分配独立子域名;防止子域名解析失败,提升可用性;用于域名跳转、流量统计。泛解析配置简单,灵活性强,是企业域名管理、互联网应用开发的常用DNS配置方式。

WebSocket如何实现全双工通信?

WebSocket全双工通信的核心是建立持久TCP连接。首先通过HTTP发起握手请求,服务端响应后,完成协议升级,告别HTTP的请求-响应模式。连接建立后,客户端和服务端拥有独立的发送和接收通道,双方可随时主动发送数据,无需等待对方请求。WebSocket基于帧传输,开销极小,延迟极低。配合心跳包保持连接,支持网络中断重连。彻底解决了HTTP轮询的低效问题,是实时双向通信的最佳方案,广泛用于聊天室、实时数据推送。

TCP如何确保数据包按序到达接收方?

TCP通过序列号和确认应答机制保证数据包按序到达。发送方为每个传输的字节分配唯一的序列号,按顺序发送数据包。接收方收到数据后,按序列号排序重组,丢弃重复的数据包,并回复确认号,告知发送方已接收的数据。如果中间某个数据包丢失,接收方会重复发送确认号,触发发送方快速重传。接收方只有收到有序的完整数据,才会向上层交付。序列号是TCP顺序性的核心,全程由协议自动实现,应用层无需处理。

HTTP/2服务器推送功能如何工作?

HTTP/2服务器推送是服务端主动发送资源的机制,无需客户端请求。当客户端请求主页面时,服务端分析页面依赖的资源(如CSS、JS、图片),在返回主页面的同时,主动将这些资源推送到客户端缓存。客户端收到后,直接从缓存读取资源,不用单独发起请求。推送基于多路复用,不影响主请求传输,支持优先级控制。该机制减少了客户端的请求次数,降低了延迟,提升了页面加载速度,是HTTP/2的核心性能优化特性。

UDP如何支持多播通信?

UDP多播(组播)是一对多定向传输,基于D类IP地址(224.0.0.0~239.255.255.255)实现。发送方将数据包发送到多播组地址,加入该组的所有设备都能接收。发送方无需知道接收方数量,接收方主动加入/离开多播组。UDP多播无需建立连接,传输效率高,支持跨局域网传输(需路由器支持)。核心用于视频直播、在线会议、局域网消息推送等一对多场景,TCP不支持多播,是UDP的核心优势之一。

Socket中SO_REUSEADDR选项的作用是什么?

SO_REUSEADDR是Socket的地址复用选项,核心作用:允许快速重启服务端,解决TIME_WAIT状态导致的端口占用问题,服务端崩溃后可立即绑定同一端口;允许多个套接字绑定同一IP+端口,用于多播通信;允许同一端口绑定不同的本地地址。默认情况下,端口处于TIME_WAIT状态时无法绑定,开启该选项后可绕过限制。是服务端开发、高并发场景的常用优化选项,保证服务快速重启,提升可用性。

如何理解TCP的拥塞控制机制?

TCP拥塞控制是维护网络通畅的全局机制,防止发送方发送过多数据导致网络拥堵瘫痪。它通过拥塞窗口控制发送速度,核心算法:慢启动(初始窗口小,指数级增长)、拥塞避免(线性增长,稳定传输)、快速重传(丢包后立刻重传)、快速恢复(重传后减半窗口,继续线性增长)。拥塞控制自动感知网络状态,网络空闲时提速,拥堵时降速,和流量控制配合,既保证端到端传输稳定,又不破坏整个网络的负载平衡。

HTTP协议中的幂等性是什么意思?

HTTP幂等性指同一请求执行一次和多次的结果完全相同,不会产生副作用。幂等方法:GET、HEAD、PUT、DELETE,多次执行不会修改数据,安全可靠。非幂等方法:POST,多次执行会重复提交数据,产生副作用。幂等性是接口设计的核心原则,保证网络超时、重传时,数据不会重复处理。比如支付接口必须保证幂等,避免重复扣款。RESTful接口严格遵循幂等性设计,提升系统的稳定性和安全性。

Socket中select和poll的区别是什么?

select和poll是IO多路复用的基础实现,核心区别:select监听的文件描述符数量有限制(默认1024),poll无数量限制;select采用位图存储描述符,poll采用数组,效率更高;select支持跨平台(Windows/Linux),poll仅支持Linux/Unix;两者都需要轮询所有描述符,遍历开销大,并发量高时效率低。select兼容性强,适合简单场景;poll无数量限制,性能稍优。两者都被epoll替代,epoll无轮询开销,支持百万级并发,是高性能服务端的首选。