1. OSI模型
| 层数 | 层名 | 英文 | 核心作用 | 典型设备 / 协议 | PDU (数据单元) |
|---|---|---|---|---|---|
| 7 | 应用层 | Application | 给应用程序提供网络接口,提供用户服务 | HTTP、HTTPS、FTP、DNS、SMTP | 数据 (Data) |
| 6 | 表示层 | Presentation | 数据格式转换、加密解密、压缩解压 | JPEG、ASCII、SSL/TLS | 数据 (Data) |
| 5 | 会话层 | Session | 建立、管理、断开会话连接 | RPC、NetBIOS | 数据 (Data) |
| 4 | 传输层 | Transport | 端到端传输,流量控制、差错校验 | TCP、UDP | 段 (Segment) / 数据报 (Datagram) |
| 3 | 网络层 | Network | 路由选择、IP 寻址、跨网段转发 | IP、ICMP、ARP | 包 (Packet) |
| 2 | 数据链路层 | Data‑Link | 帧封装、MAC 寻址、相邻节点传输 | 以太网、PPP、交换机 | 帧 (Frame) |
| 1 | 物理层 | Physical | 传输比特流,硬件信号、线缆标准 | 网线、光纤、集线器、网卡 | 比特 (Bit) |
2. TCP/IP模型
| 层级 | 名称 | 核心功能 | 典型协议 | PDU | 对应 OSI 七层 |
|---|---|---|---|---|---|
| 4 | 应用层 | 为应用程序提供网络服务,数据生成 | HTTP、HTTPS、FTP、DNS、SMTP、SSH | 数据 | OSI‑7 应用层 + 6 表示层 +5 会话层 |
| 3 | 传输层 | 端‑到‑端进程通信、流量控制、差错校验 | TCP(可靠)、UDP(不可靠) | 段 (Segment) / 数据报 (Datagram) | OSI‑4 传输层 |
| 2 | 网际层 (互联网层 / IP 层) | IP 寻址、路由选择、跨网络转发 | IP、ICMP、ARP、IGMP | 数据包 (Packet) | OSI‑3 网络层 |
| 1 | 网络接口层 (链路层) | 帧封装、MAC 寻址、物理比特传输 | 以太网 Ethernet、PPP | 帧 (Frame)、比特 Bit | OSI‑2 数据链路层 +1 物理层 |
3. 常用TCP/IP族的网络协议和应用场合

4. 交换机和路由器工作在TCP/IP的哪一层,主要工作区别是什么
- 二层交换机
- OSI:第 2 层‑数据链路层
- TCP/IP 模型:网络接口层
- 识别地址:MAC 地址(物理地址)
- 路由器
- OSI:第 3 层‑网络层
- TCP/IP 模型:网际层(互联网层 / IP 层)
- 识别地址:IP 地址(逻辑地址)
核心区别
| 对比项目 | 二层交换机 | 路由器 |
|---|---|---|
| 工作层级 | 数据链路层(网络接口层) | 网络层(网际层) |
| 依据什么转发 | MAC 地址 | IP 地址 |
| 作用范围 | 同一个局域网(同一网段)内部 | 不同网段、跨网络之间通信 |
| 能否隔离广播 | 不能,转发广播帧;所有端口在同一个广播域 | 可以隔离广播,每个接口单独一个广播域 |
| 寻址表 | MAC 地址表 | 路由表 |
| 分割冲突域 | ✅每个端口是独立冲突域 | ✅每个接口独立冲突域 + 独立广播域 |
| 典型场景 | 宿舍、公司内网,多台电脑网线相连 | 家里光猫后接路由器,内网访问互联网 |
5. IP地址的表现形式和组成
表现形式:点分十进制------192.168.1.100
- 由4 个十进制数组成
- 数字之间用英文小数点
.隔开 - 每一段取值范围:0‑255
底层本质是二进制数,IPv4 一共 32 位二进制比特,分成 4 组,每组 8 位即为1 字节。
IP 地址的两大部分组成:网络号 + 主机号
需要配合子网掩码划分哪几位是网络号、哪几位是主机号
- 网络号(网络地址) 标识这台设备属于哪一个网段、哪个局域网。同一网段内所有设备网络号必须相同。
- 主机号(主机地址) 标识网段内一台唯一的主机;同一个网段主机号不能重复。
IPv6:长度 128 位二进制 ,冒分十六进制,用 : 分隔,解决 IPv4 地址枯竭。例:2001:0db8::1
6.网络设备字节序和主机字节序
主机字节序(Host Byte‑Order)就是你这台电脑 CPU 存储多字节数据的顺序。
网络字节序(Network Byte‑Order)网络传输的时候,一律使用【大端序 Big‑Endian】
-
小端序(Little‑Endian):低字节存低地址,高字节存高地址
-
x86、AMD、Intel CPU(PC、虚拟机)默认 小端
-
ARM 芯片很多也是小端
-
这是最常见的主机序
-
-
大端序(Big‑Endian):高字节存低地址,低字节存高地址
7.端口号的作用,端口号的长度,常用网络协议的端口号
一、端口号的作用
IP 地址:定位网络上哪一台主机 端口号:定位主机上哪一个应用进程
一台电脑可以同时开多个网络程序(浏览器、QQ、ssh),IP 只能找到这台电脑;端口用来区分发给哪个程序 。 传输层(TCP/UDP)通过端口号完成端到端、进程到进程的数据交付。
二、端口号长度
- 16 位无符号整数
- 取值范围:
0 ~ 65535
端口三大分区:
- 公认端口(知名端口):0‑1023 系统服务、标准协议占用,普通程序不能随便占用。
- 注册端口:1024‑49151 用户程序、第三方软件可以使用。
- 动态 / 临时端口:49152‑65535 客户端发起连接时,操作系统随机分配给客户端。
常用协议端口对照表
TCP协议:
| 协议 | 端口号 | 功能 |
|---|---|---|
| HTTP | 80 | 网页浏览 |
| HTTPS | 443 | 加密网页 |
| FTP | 21 | 控制端口,文件传输 |
| SSH | 22 | 远程安全登录 Linux |
| Telnet | 23 | 明文远程登录 |
| SMTP | 25 | 发送邮件 |
| POP3 | 110 | 接收邮件 |
| IMAP | 143 | 邮箱服务器在线管理邮件 |
UDP协议:
| 协议 | 端口号 | 功能 |
|---|---|---|
| DNS | 53 | 域名解析(优先 UDP) |
| DHCP | 67 (服务器)、68 (客户端) | 自动分配 IP |
| TFTP | 69 | 简单文件传输 |
8.TCP和UDP的区别
| 对比项 | TCP(传输控制协议) | UDP(用户数据报协议) |
|---|---|---|
| 连接特性 | 面向连接,通信前先建立连接(三次握手),结束四次挥手断开 | 无连接,不用建立连接,发完就走 |
| 可靠性 | 可靠传输。超时重传、确认应答、丢包重发 | 不可靠传输。没有确认,丢包不会重传 |
| 流量 & 拥塞控制 | ✅ 流量控制、拥塞控制,防止发太快淹没对方网络 | ❌ 没有流量、拥塞控制 |
| 报文边界 | 字节流,无报文边界,数据是一串连续字节 | 数据报,保留报文边界,一次发一个完整 UDP 包 |
| 头部开销 | 头部最小 20 字节,开销大 | 头部固定 8 字节,开销很小 |
| 传输速度 | 较慢 | 速度快、延迟低 |
| 端口 | 16 位端口号 | 16 位端口号 |
| 适用场景 | 文件下载、网页 HTTP/HTTPS、SSH 远程登录、数据库、邮件要求数据不能丢 | 视频通话、直播、语音、游戏、DNS 查询、流媒体允许少量丢包,优先低延迟 |
9.三次握手和四次挥手
三次握手(建立连接)
- 客户端→服务器:SYN 请求连接
- 服务器→客户端:SYN+ACK 同意连接
- 客户端→服务器:ACK 确认,连接成功
四次挥手(断开连接)
- 客户端→服务器:FIN 我发完了,要断开
- 服务器→客户端:ACK 收到,我还有数据要发
- 服务器→客户端:FIN 我也发完了,可以断开
- 客户端→服务器:ACK 确认断开
10.TCP 保证可靠传输的机制
-
确认应答 (ACK) 收到数据后,接收方返回确认报文,告诉发送方数据已收到。
-
超时重传 发送数据后,超过时间没收到 ACK,就重新发送这份数据,解决丢包。
-
序列号 给每一字节数据编上序号,解决数据包乱序、重复的问题。
-
流量控制(滑动窗口) 接收方告诉发送方自己还能接收多少数据,不让发送方发太快,接收不过来。
-
拥塞控制 发送方根据网络拥堵情况,自动减慢发送速度,防止网络过载丢包。
11.Wireshark简介
开源免费的网络数据包捕获 & 协议分析软件,俗称抓包工具Wireshark。
- 捕获数据包:抓取经过网卡的网络流量(TCP、UDP、HTTP、DNS 等数据包)CSDN博...
- 分层解析数据包:把原始二进制数据包拆开,展示 OSI 每一层的详细字段,比如 IP 地址、端口、序列号、SYN/ACK 标志位CSDN
- 过滤数据包:筛选出你想看的流量(指定 IP、端口、协议)
- 追踪会话 :查看一条完整 TCP 连接全过程,观察三次握手、四次挥手
- 排查网络故障:定位丢包、延迟、连接失败问题
- 学习网络协议:最常用的学习 TCP/IP 可视化工具
详细使用由HTTP协议篇写了
12.ip协议头中的ttl和mtu是什么
MTU全称:最大传输单元(Maximum Transmission Unit)
- 含义:一条链路单次能够发送的最大数据包大小(字节)
- 以太网默认:1500 字节(最常考)
- MTU 指的是IP 数据包的数据部分 + IP 头部 ,不含帧头、帧尾
- 如果发送的 IP 包>MTU,路由器就会对数据包进行分片,拆成多个小包再传输
TTL(IP 头部字段)全称:生存时间(Time‑To‑Live)
- 长度:8 位,取值范围 0‑255
- 作用:限制数据包最多可以经过多少个路由器,防止数据包在网络里无限循环
- 规则:数据包每经过一台路由器,TTL‑1;当 TTL 减到 0,路由器直接丢弃该包,并返回 ICMP 超时报文
- Windows 默认 TTL:128;Linux 默认 TTL:64
- ping 命令就能看到 TTL 值
13.TCP,ip协议头大小,以及常用字段有哪些
一、IP 首部(IPv4)
长度:最小 20 字节,最多 60 字节(可选选项字段最多 40 字节)
常用字段
-
版本 (4bit):IPv4 / IPv6
-
首部长度 (4bit):IP 头一共多长
-
TTL(8bit):生存时间,每过一个路由器‑1
-
协议 (8bit):上层是什么协议;6=TCP,17=UDP,1=ICMP
-
源 IP 地址 (32bit):发送方 IP
-
目的 IP 地址 (32bit):接收方 IP
-
标识、标志、片偏移:数据包分片用
二、TCP 首部
长度:最小 20 字节,最多 60 字节(选项字段最多 40 字节)
常用字段
-
源端口 (16bit)
-
目的端口 (16bit)
-
序列号 seq (32bit):字节流编号
-
确认号 ack (32bit):期望收到下一字节序号
-
数据偏移 (4bit):TCP 头部长度
-
6 个标志位(重点!)
-
SYN:请求建立连接
-
ACK:确认应答
-
FIN:断开连接
-
RST:重置连接
-
PSH:推送数据
-
URG:紧急指针
-
-
窗口大小 (16bit):流量控制、滑动窗口
-
校验和
-
紧急指针
14.什么是IO多路复用,处理任务过程中与多线程有什么不同
IO 多路复用 (I/O Multiplexing) :一个线程,通过系统提供的函数,同时监视多个文件描述符 (fd),哪个 fd 就绪(可读 / 可写 / 异常),就去处理哪个 IO 事件。
- IO 多路复用:1 个线程,把 1000 个 socket 交给内核监控,有数据来了再去读。
- 多线程模型:开 1000 个线程,每个线程阻塞等待一个客户端的数据。
| 对比项 | 多线程 (阻塞 IO) | IO 多路复用 (epoll 单线程) |
|---|---|---|
| 线程数量 | 一个连接 ≈ 一个线程 | 1 个线程管理成千上万个连接 |
| 等待 IO 方式 | 线程阻塞,内核休眠该线程 | 线程阻塞在 epoll_wait,内核监控一堆 fd |
| 并发上限 | 受线程数量限制,几千就瓶颈 | 受文件描述符限制,可支持十万级长连接 |
| CPU 切换开销 | 大,大量线程频繁切换 | 极小,只有少量线程 |
| 阻塞影响 | 一个连接阻塞,只卡住自己那条线程 | 一段代码阻塞,卡住所有连接 |
| 编程模型 | 同步顺序,简单直观 | 事件驱动,回调 / 非阻塞,复杂度高 |
| 擅长场景 | 并发少、CPU 重业务、耗时任务 | 高并发网络 IO、短业务处理 |
select、poll、epoll 三者都是 IO 多路复用,作用都是监视多个文件描述符,等待 IO 就绪;主要差异在内核实现、性能、上限。
| 特性 | select | poll | epoll |
|---|---|---|---|
| 最大 fd 上限 | 1024 | 无限制 | 无限制 |
| 内核检测方式 | 轮询 O (n) | 轮询 O (n) | 事件回调 O (1) |
| 数据拷贝 | 每次调用全量拷贝 | 每次调用全量拷贝 | 只需一次拷贝 |
| 返回结果 | 所有 fd,需遍历查找就绪 | 所有 fd,需遍历查找就绪 | 直接返回就绪列表 |
| 触发模式 | 水平触发 LT | 水平触发 LT | LT / ET 两种 |
| 高并发性能 | 差 | 一般 | 优秀 |
15.服务器和客户端模型有哪些,cs、bs模型的区别
1. C/S 模型 (Client / Server,客户端‑服务器)
定义:需要安装独立客户端程序,客户端主动和服务器通信。 例子:QQ、微信 PC 版、游戏客户端、MySQL 客户端、FTP、Netty/TCP 自定义服务。 典型网络架构实现方案:
- 单线程阻塞模型:一次只能处理 1 个客户端,几乎淘汰
- 一连接一线程(多线程阻塞 IO):accept 之后每个客户端新建线程,并发一般
- IO 多路复用单线程 Reactor:epoll 单线程处理所有 IO,Redis,Nginx
- 主从 Reactor 多线程模型:Nginx、Netty;主线程监听 accept,子线程处理 IO、线程池执行业务
2. B/S 模型 (Browser / Server,浏览器‑服务器)
属于 C/S 的一个子集 ,客户端 = 浏览器,不用安装专用软件 。 例子:网页、后台管理系统、各大网站。 通信协议:HTTP/HTTPS(短连接为主,无状态) 浏览器就是通用客户端。
3. P2P 模型 (Peer‑to‑Peer 对等模型)
没有严格区分客户端和服务器,每台机器既当客户端也当服务端。 例子:迅雷下载、BT、部分直播。
| 对比维度 | C/S(客户端服务器) | B/S(浏览器服务器) |
|---|---|---|
| 客户端 | 需要下载安装专属软件 | 不需要,浏览器即可访问 |
| 通信协议 | TCP/UDP、WebSocket、自定义私有协议 | HTTP/HTTPS |
| 连接特点 | 常为长连接,持续双向通信 | 默认短连接,请求‑响应后断开 |
| 状态 | 可本地保存大量状态数据 | 无状态,靠 Cookie/Session/JWT 维持会话 |
| 运算压力 | 客户端分担一部分计算 | 绝大部分运算都放在服务器,客户端只负责渲染页面 |
| 升级维护 | 客户端、服务器两边都要更新;升级麻烦 | 只更新后端服务器代码,浏览器刷新即可,维护简单 |
| 跨平台 | 需要开发 Windows、Linux、Mac 多个版本 | 一次开发,任意浏览器都能用,天然跨平台 |
| 性能 | 传输快,交互流畅,可以做高实时性(游戏、聊天) | 受 HTTP、网络延迟限制,实时性偏弱 |
| 安全 | 私有协议,安全性相对可控 | 开放 HTTP 协议,需要额外做防攻击 |
16.服务器并发模型有哪些
1. 多进程模型(一连接一进程)
每 accept 到一个客户端,fork() 创建新进程。
- 优点:进程隔离,一个客户端崩溃不会影响主服务;编程简单
- 缺点:进程开销极大;进程间通信麻烦;并发上限低 例子:早期 Apache prefork 模式
2. 多线程模型(一连接一线程,C/S 最经典)
accept 之后创建子线程服务客户端。
- 优点:线程比进程轻量,代码共享;同步阻塞写法简单
- 缺点:线程栈内存、上下文切换开销;上万连接压力巨大;线程数有上限
- 瓶颈:连接数 ≈ 线程数
3. IO 多路复用模型(事件驱动,单 Reactor)
单线程 + select/poll/epoll,一个线程管理成千上万个连接 。 典型:Reactor 单线程模型 流程:epoll_wait 等待事件 → 就绪就读取数据 → 执行业务 → 返回 epoll_wait
- 优点:极少线程,切换开销低,高并发长连接性能好
- 致命缺点:同一个线程,任何耗时阻塞操作,所有连接全部卡住 例子:Redis(单线程 Reactor)
- 解决阻塞方案:业务丢进线程池 → 引出多线程 Reactor
17.Linux中io有哪些io模型,如何给文件设置非阻塞
- 阻塞 IO(Blocking‑IO)
默认模式。调用read/recv,缓冲区没数据,线程直接休眠阻塞,直到数据到达
绝大多数文件、socket 默认都是阻塞。
- 非阻塞 IO(Non‑Blocking‑IO)
read 没有数据时不会阻塞,立刻返回‑1,errno = EAGAIN/EWOULDBLOCK。 需要循环轮询,不断调用 read 去查有没有数据,CPU 空耗高,很少单独使用。
- IO 多路复用(I/O Multiplexing)
select / poll / epoll,一个线程监视一堆 fd。等待 IO 就绪之后再去读写。 读写的时候一般配合非阻塞 fd使用。
- 信号驱动 IO (SIG‑IO)
内核数据就绪时,给进程发送信号SIGIO,进程收到信号再读取数据。 几乎很少用。
- 异步 IO (AIO)
发起 read 之后函数立刻返回;内核把数据拷贝到用户缓冲区完成之后,再通知你 。 前面 4 种都属于同步 IO(进程需要自己参与数据拷贝);只有 AIO 是真正异步。
简单区分:
-
同步 IO:程序需要等待数据
-
异步 IO:你发请求就可以干别的,内核全部干完通知你
给文件描述符设置非阻塞
方法 1:打开文件时直接设置 O_NONBLOCK
方法 2:已经打开的 fd,用 fcntl 设置非阻塞
18.HTTP的url的作用,长链接接和短链接的区别
URL(统一资源定位符) :用来定位互联网上某一份资源的完整地址。
http://www.xxx.com:8080/index.html?name=123#top
拆分:
http://:协议,规定客户端和服务器怎么通信www.xxx.com:域名(服务器 IP 别名)8080:端口号,找到服务器上对应的服务程序/index.html:资源路径,服务器上哪个文件 / 接口?name=123:查询参数,发给服务器的数据(GET 参数)#top:锚点,浏览器本地跳转,不会发给服务器
长链接和短链接
| 对比项 | 短连接 | HTTP 长连接 (keep‑alive) |
|---|---|---|
| TCP 生命周期 | 1 次请求 = 1 次 TCP 连接 | 一条 TCP 连接,多次请求响应复用 |
| 头部字段 | Connection: close |
Connection: keep‑alive |
| 开销 | 每次都握手挥手,开销大 | 减少频繁建立断开 TCP,降低开销 |
| 服务器资源 | 请求完就释放,压力小 | 连接空闲时仍然占用服务器资源 |
| 适用场景 | 请求次数少、一次性访问(静态页面) | 网页含有大量图片、多个接口请求,频繁通信 |
http请求方式、状态码详见https://blog.csdn.net/2401_82879595/article/details/164288617?spm=1001.2014.3001.5501