计算机网络
什么是TCP的三次握手和四次挥手?
一、TCP三次握手(建立连接)
TCP(传输控制协议)是面向连接的协议,三次握手用于确保通信双方的发送和接收能力正常,流程如下:
1. 握手过程图示
客户端 服务器
│ │
├───────── SYN=1, seq=x ─────────►│ (客户端发送同步请求,初始化序列号x)
│ │
│ ◄───────── SYN=1, ACK=x+1, seq=y ──────┤ (服务器确认请求,发送同步+确认,初始化序列号y)
│ │
├───────── ACK=y+1 ────────────►│ (客户端确认服务器的确认,连接建立完成)
│ │2. 各步骤细节
第一次握手(客户端→服务器):
客户端发送带有SYN(同步标志)的数据包,声明自己的初始序列号x,请求建立连接。此时客户端状态变为SYN_SENT。第二次握手(服务器→客户端):
服务器收到请求后,返回SYN+ACK数据包:SYN=1:表示服务器同意建立连接;ACK=x+1:确认客户端的序列号(期望下一个数据包的序列号为x+1);- 声明自己的初始序列号
y。此时服务器状态变为SYN_RCVD。
第三次握手(客户端→服务器):
客户端发送ACK(Acknowledgment) 数据包,确认服务器的序列号y(ACK=y+1)。此时客户端和服务器状态均变为ESTABLISHED,连接正式建立。
3.为什么需要三次握手?
1. 防止历史连接初始化
TCP 采用三次握手而非两次握手,核心在于避免旧的网络包(历史连接)被误处理,导致无效连接建立。具体逻辑如下:
一、两次握手为何无法防止历史连接?
假设 TCP 仅通过两次握手建立连接(客户端发 SYN,服务器回 SYN+ACK 即完成连接),可能出现以下风险场景:
场景:旧 SYN 包导致的无效连接
- 客户端首次连接的延迟与重传
- 客户端发送 SYN 包(Seq=100)请求连接,但因网络延迟,该包未到达服务器。
- 客户端超时后重新发送 SYN 包(Seq=200),服务器收到后回复 SYN+ACK(Ack=201, Seq=300),双方完成通信后断开连接。
- 历史 SYN 包延迟到达服务器
- 首次发送的旧 SYN 包(Seq=100)在连接断开后才到达服务器。
- 服务器误认为这是新的连接请求,返回 SYN+ACK 包(Ack=101, Seq=400),并认为连接已建立(因两次握手无需客户端最后确认)。
问题后果:
服务器资源被无效连接占用(持续等待客户端数据),而客户端实际未发起新连接,导致资源浪费和错误连接。
2. 双向确认通信能力
三次握手通过“客户端→服务器→客户端”的三次交互,确保双方均确认对方的发送和接收能力正常:
- 第一次握手:客户端发送 SYN 包,确认自身发送能力正常。
- 第二次握手:服务器返回 SYN+ACK 包,确认自身接收能力正常,且客户端发送能力正常。
- 第三次握手:客户端返回 ACK 包,确认自身接收能力正常,且服务器发送能力正常。
二、TCP四次挥手(断开连接)
当通信结束时,TCP通过四次挥手释放连接,确保数据完整传输。
1. 挥手过程图示
客户端 服务器
│ │
├───── FIN=1, seq=u ───────────►│ (客户端请求断开,发送FIN包,序列号u)
│ │
│ ◄───── ACK=u+1, seq=v ────────┤ (服务器确认客户端的断开请求)
│ │
│ ◄───── FIN=1, ACK=u+1, seq=w ────┤ (服务器处理完剩余数据后,发送FIN包请求断开)
│ │
├───── ACK=w+1 ────────────►│ (客户端确认服务器的断开请求,连接彻底关闭)
│ │2. 各步骤细节
第一次挥手(客户端→服务器):
客户端发送FIN(结束标志)包,声明序列号u,请求断开连接,状态变为FIN_WAIT_1。第二次挥手(服务器→客户端):
服务器收到FIN后,返回ACK包(ACK=u+1),确认客户端的断开请求,此时服务器状态变为CLOSE_WAIT,客户端状态变为FIN_WAIT_2。第三次挥手(服务器→客户端):
服务器处理完剩余数据后,发送FIN包(序列号w),请求断开连接,状态变为LAST_ACK。第四次挥手(客户端→服务器):
客户端收到FIN后,返回ACK包(ACK=w+1),确认服务器的断开请求,状态变为TIME_WAIT;服务器收到ACK后,状态变为CLOSED。客户端在TIME_WAIT状态等待一段时间(2倍最大段生存期,MSL)后,也变为CLOSED。
3. 为什么需要四次挥手?
- 半关闭特性:TCP连接允许单向关闭(一方发送
FIN后,另一方仍可发送数据)。第二次挥手时服务器可能仍有数据未传输完毕,因此ACK和FIN需分开发送,导致四次挥手。
三、关键状态与常见问题
TIME_WAIT状态的作用:
确保最后一个ACK包成功到达服务器,避免服务器因未收到ACK而重发FIN;同时等待网络中残留的数据包过期,防止干扰新连接。三次握手失败/四次挥手异常:
- 若服务器未响应第二次握手,客户端会重发
SYN; - 若客户端未响应第四次挥手,服务器会重发
FIN。
- 若服务器未响应第二次握手,客户端会重发
OSI 7层模型是什么?
回答:
OSI(Open System Interconnection)7层模型是国际标准化组织制定的网络通信体系结构,从下到上分为7层,每层负责不同的功能:
- 物理层:传输比特流,定义电气信号、接口标准
- 数据链路层:帧传输、MAC地址、错误检测
- 网络层:IP地址、路由选择、分片转发
- 传输层:端到端通信、TCP/UDP协议、端口号
- 会话层:建立、管理和终止会话
- 表示层:数据格式转换、加密压缩
- 应用层:直接面向用户的网络服务,如HTTP、FTP、DNS
核心: 分层设计,各层独立,便于学习和维护。
TCP和UDP的区别?
- TCP面向连接;UDP是无连接的,即发送数据之前不需要建立连接。
- TCP提供可靠的服务;UDP不保证可靠交付。
- TCP面向字节流,把数据看成一连串无结构的字节流;UDP是面向报文的。
- TCP有拥塞控制;UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如实时视频会议等)。
- 每一条TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的通信方式。
- TCP首部开销20字节;UDP的首部开销小,只有8个字节
网络的工作模式有哪些?
常见的网络工作模式有:
C/S(Client/Server)模式
客户端主动发起请求,服务器端响应,常见于 Web 应用、APP。B/S(Browser/Server)模式
客户端通过浏览器访问服务器,轻量化,典型代表是各种 Web 系统。P2P(Peer to Peer)模式
各个节点既是客户端也是服务器,节点间直接通信,常见于 BT 下载、区块链。集中式模式
所有请求统一通过中心服务器处理,易于管理,但单点故障风险高。分布式模式
多个节点协同完成任务,负载均衡,高可用,常用于微服务架构。
网络连接模式有哪些
TCP(面向连接)
- 三次握手建立连接,保证数据可靠传输。
- 特点:可靠、有序、基于字节流,常用于 HTTP、FTP、SMTP 等协议。
UDP(无连接)
- 不建立连接,直接发送数据,可能丢包。
- 特点:不可靠、无序、基于报文,常用于 DNS、视频直播、游戏通信。
单播(Unicast)
- 一对一通信,最常见的模式,比如客户端请求服务器。
广播(Broadcast)
- 一对所有通信,在同一局域网内,消息会发给所有节点。
组播(Multicast)
- 一对多通信,发送给指定组内的多个节点,常用于在线视频会议、直播。
虚拟机常见的网络连接模式有哪些?
NAT(网络地址转换)
- 虚拟机通过宿主机的 IP 上网,外部网络无法直接访问虚拟机。
- 优点:配置简单,能上网。
- 缺点:虚拟机和外部主机之间访问受限。
桥接(Bridged)
- 虚拟机和宿主机在同一个物理网络中,虚拟机会像一台独立电脑一样获取局域网 IP。
- 优点:虚拟机和局域网内其他设备可互相访问。
- 缺点:需要占用局域网 IP,网络环境要求高。
仅主机(Host-Only)
- 虚拟机只和宿主机通信,不能访问外部网络。
- 优点:适合做隔离实验环境。
- 缺点:无法直接上网。
总结:
- NAT:虚拟机借宿主机上网,外网不能访问虚拟机。
- 桥接:虚拟机像局域网中的独立主机,可直接互访。
- 仅主机:虚拟机只能和宿主机通信,不联网。
什么是软路由?
软路由就是用一台普通电脑或嵌入式设备,通过安装路由系统软件(如 OpenWrt、PVE+爱快、ROS 等),来实现传统硬件路由器的功能。
- 本质:软件实现的路由器功能。
- 主要功能:上网拨号、NAT 转换、防火墙、DHCP、端口转发、VPN、流量控制等。
- 优点:可扩展性强、功能丰富、性能可根据硬件提升。
- 缺点:对硬件要求高、耗电量相对大、需要一定的网络知识配置。
上网拨号和 DHCP 的区别
DHCP(动态主机配置协议)
- 设备连上网络后,直接向 DHCP 服务器请求一个 IP 地址。
- 不需要账号密码,自动分配即可。
- 常见于企业内网、校园网、部分光猫桥接后的家庭网络。
PPPoE 拨号
- 在 DHCP 分配 IP 之前,需要先用账号密码完成认证。
- 拨号成功后,运营商再分配一个公网或私网 IP。
- 常见于家庭宽带、小区宽带,需要宽带账号密码。
区别总结:
- DHCP:直接分配 IP,免认证,方便快捷。
- PPPoE:先认证再分配 IP,更适合运营商计费和管理。
在浏览器里面输一个网址,它背后都发生了什么流程?
从输入URL到页面显示,主要经历8个步骤:
- URL解析:提取协议、域名、端口等信息
- DNS查询:域名→IP地址(浏览器缓存→系统缓存→DNS服务器)
- TCP三次握手:建立可靠连接
- HTTP请求发送:发送请求头、请求体
- 服务器处理:处理业务逻辑,生成响应
- HTTP响应返回:返回状态码、响应头、响应体
- 页面渲染:解析HTML→构建DOM树→解析CSS→构建CSSOM树→合并渲染树→布局→绘制
- TCP四次挥手:断开连接
核心: 从DNS解析到页面渲染的完整网络请求生命周期
服务器发送的报文到了用户网卡后面如何解析到内容?
服务器发送的报文到达用户设备后,会经过逐层解析:
1. 网卡层(数据链路层)
- 接收电信号并转换为数字信号
- 检查MAC地址,只接收发给本机的数据包
- 将数据传递给网络层
2. 网络层(IP层)
- 解析IP头部,确认目标IP是否为本机
- 处理路由选择和TTL值检查
- 将数据传递给传输层
3. 传输层
- TCP报文:检查端口号,处理连接管理,重组分段数据
- UDP报文:检查端口号,直接传递数据
- 将数据传递给应用层
4. 应用层
- 根据端口号将数据交给对应程序
- 解析应用层协议(HTTP、HTTPS等)
- 提取出应用程序可理解的内容
整个过程就像拆快递,每层负责拆开对应的外包装,最终拿到里面的内容。
HTTP 常见的状态码有哪些?
| 状态码 | 类别 | 常见状态码 | 含义 |
|---|---|---|---|
| 1xx | 信息性 | 100 Continue | 继续请求 |
| 2xx | 成功 | 200 OK, 201 Created, 204 No Content | 请求成功 |
| 3xx | 重定向 | 301 Moved Permanently, 302 Found, 304 Not Modified | 资源位置变更 |
| 4xx | 客户端错误 | 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found | 请求错误 |
| 5xx | 服务器错误 | 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable | 服务器错误 |
DDoS 攻击是什么?如何实现和防御?
DDoS 是 Distributed Denial of Service(分布式拒绝服务)的缩写,通过控制大量僵尸设备(Botnet)向目标服务器发送海量请求,耗尽其带宽、CPU、内存等资源,导致服务器无法正常响应合法用户请求的攻击方式。
实现方式
- 带宽消耗型:通过UDP洪水、ICMP洪水等方式占用目标网络带宽
- 资源消耗型:通过TCP SYN洪水、HTTP洪水等方式耗尽目标服务器CPU/内存资源
- 应用层攻击:针对应用逻辑漏洞,如慢速loris攻击、CC攻击等
防御方法
- 网络层防御:使用CDN、黑洞路由、防火墙过滤等
- 传输层防御:配置SYN cookies、连接速率限制等
- 应用层防御:实现请求验证、验证码、限流等
- 监控与响应:建立实时监控系统,及时发现并响应攻击
什么是ACK
ACK(Acknowledgment)是TCP协议中的确认标志位,用于确认收到对方发送的数据。在TCP通信中,接收方收到数据包后会发送带有ACK标志的确认包,告知发送方已成功接收,并指定下一个期望接收的序列号。
HTTP2 听过没?那它有啥新功能?
HTTP/2是HTTP协议的升级版,主要解决HTTP/1.1的性能问题:
- 多路复用:一次连接可同时处理多个请求,不用排队等待
- 头部压缩:压缩请求头,减少数据传输量
- 服务器推送:服务器主动发送资源,不用等浏览器请求
- 二进制协议:用二进制代替文本,解析更快
- 请求优先级:重要资源优先加载
简单理解:就像从单车道升级到多车道,车辆可以并行行驶,不用排队。
HTTP3有了解吗?
HTTP/3是最新版本,主要改进:
- 改用UDP:不再用TCP,避免TCP的队头阻塞问题
- 连接更快:0-RTT技术,重连时几乎不耗时
- 自带加密:内置TLS 1.3,安全性更高
- 网络切换:WiFi切换到4G时连接不会断开
简单理解:就像从普通公路升级到高速公路,不仅车道多,而且没有红绿灯,跑得更快。
HTTPS,数据传输过程中用的是对称加密还是非对称加密?
HTTPS使用混合加密方式:
非对称加密(用于握手阶段):
- 客户端使用服务器公钥加密会话密钥
- 服务器使用私钥解密获取会话密钥
- 用于安全交换对称加密所需的密钥
对称加密(用于数据传输阶段):
- 使用握手阶段协商的会话密钥加密实际数据
- 加解密速度快,适合大量数据传输
HTTP与HTTPS有什么区别?
- 安全性:HTTP明文传输,易被窃听篡改;HTTPS通过SSL/TLS加密,提供身份认证和数据完整性
- 协议类型:HTTP是纯应用层协议;HTTPS是HTTP+SSL/TLS组合协议
- 端口:HTTP使用80端口;HTTPS使用443端口
- 证书:HTTP无需证书;HTTPS需要CA颁发的可信数字证书
- 性能:HTTP性能更高(无加密开销);HTTPS性能稍低(需加密解密)