网络编程-复习

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的哪一层,主要工作区别是什么

  1. 二层交换机
  • OSI:第 2 层‑数据链路层
  • TCP/IP 模型:网络接口层
  • 识别地址:MAC 地址(物理地址)
  1. 路由器
  • OSI:第 3 层‑网络层
  • TCP/IP 模型:网际层(互联网层 / IP 层)
  • 识别地址:IP 地址(逻辑地址)

核心区别

对比项目 二层交换机 路由器
工作层级 数据链路层(网络接口层) 网络层(网际层)
依据什么转发 MAC 地址 IP 地址
作用范围 同一个局域网(同一网段)内部 不同网段、跨网络之间通信
能否隔离广播 不能,转发广播帧;所有端口在同一个广播域 可以隔离广播,每个接口单独一个广播域
寻址表 MAC 地址表 路由表
分割冲突域 ✅每个端口是独立冲突域 ✅每个接口独立冲突域 + 独立广播域
典型场景 宿舍、公司内网,多台电脑网线相连 家里光猫后接路由器,内网访问互联网

5. IP地址的表现形式和组成

表现形式:点分十进制------192.168.1.100

  • 4 个十进制数组成
  • 数字之间用英文小数点 . 隔开
  • 每一段取值范围:0‑255

底层本质是二进制数,IPv4 一共 32 位二进制比特,分成 4 组,每组 8 位即为1 字节。

IP 地址的两大部分组成:网络号 + 主机号

需要配合子网掩码划分哪几位是网络号、哪几位是主机号

  1. 网络号(网络地址) 标识这台设备属于哪一个网段、哪个局域网。同一网段内所有设备网络号必须相同
  2. 主机号(主机地址) 标识网段内一台唯一的主机;同一个网段主机号不能重复
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

端口三大分区:

  1. 公认端口(知名端口):0‑1023 系统服务、标准协议占用,普通程序不能随便占用。
  2. 注册端口:1024‑49151 用户程序、第三方软件可以使用。
  3. 动态 / 临时端口: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.三次握手和四次挥手

三次握手(建立连接)

  1. 客户端→服务器:SYN 请求连接
  2. 服务器→客户端:SYN+ACK 同意连接
  3. 客户端→服务器:ACK 确认,连接成功

四次挥手(断开连接)

  1. 客户端→服务器:FIN 我发完了,要断开
  2. 服务器→客户端:ACK 收到,我还有数据要发
  3. 服务器→客户端:FIN 我也发完了,可以断开
  4. 客户端→服务器:ACK 确认断开

10.TCP 保证可靠传输的机制

  1. 确认应答 (ACK) 收到数据后,接收方返回确认报文,告诉发送方数据已收到。

  2. 超时重传 发送数据后,超过时间没收到 ACK,就重新发送这份数据,解决丢包。

  3. 序列号 给每一字节数据编上序号,解决数据包乱序、重复的问题。

  4. 流量控制(滑动窗口) 接收方告诉发送方自己还能接收多少数据,不让发送方发太快,接收不过来。

  5. 拥塞控制 发送方根据网络拥堵情况,自动减慢发送速度,防止网络过载丢包。

11.Wireshark简介

开源免费的网络数据包捕获 & 协议分析软件,俗称抓包工具Wireshark。

  1. 捕获数据包:抓取经过网卡的网络流量(TCP、UDP、HTTP、DNS 等数据包)CSDN博...
  2. 分层解析数据包:把原始二进制数据包拆开,展示 OSI 每一层的详细字段,比如 IP 地址、端口、序列号、SYN/ACK 标志位CSDN
  3. 过滤数据包:筛选出你想看的流量(指定 IP、端口、协议)
  4. 追踪会话 :查看一条完整 TCP 连接全过程,观察三次握手、四次挥手
  5. 排查网络故障:定位丢包、延迟、连接失败问题
  6. 学习网络协议:最常用的学习 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 字节)

常用字段

  1. 版本 (4bit):IPv4 / IPv6

  2. 首部长度 (4bit):IP 头一共多长

  3. TTL(8bit):生存时间,每过一个路由器‑1

  4. 协议 (8bit):上层是什么协议;6=TCP,17=UDP,1=ICMP

  5. 源 IP 地址 (32bit):发送方 IP

  6. 目的 IP 地址 (32bit):接收方 IP

  7. 标识、标志、片偏移:数据包分片用

二、TCP 首部

长度:最小 20 字节,最多 60 字节(选项字段最多 40 字节)

常用字段

  1. 源端口 (16bit)

  2. 目的端口 (16bit)

  3. 序列号 seq (32bit):字节流编号

  4. 确认号 ack (32bit):期望收到下一字节序号

  5. 数据偏移 (4bit):TCP 头部长度

  6. 6 个标志位(重点!)

    • SYN:请求建立连接

    • ACK:确认应答

    • FIN:断开连接

    • RST:重置连接

    • PSH:推送数据

    • URG:紧急指针

  7. 窗口大小 (16bit):流量控制、滑动窗口

  8. 校验和

  9. 紧急指针

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. 单线程阻塞模型:一次只能处理 1 个客户端,几乎淘汰
  2. 一连接一线程(多线程阻塞 IO):accept 之后每个客户端新建线程,并发一般
  3. IO 多路复用单线程 Reactor:epoll 单线程处理所有 IO,Redis,Nginx
  4. 主从 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模型,如何给文件设置非阻塞

  1. 阻塞 IO(Blocking‑IO)

默认模式。调用read/recv,缓冲区没数据,线程直接休眠阻塞,直到数据到达

绝大多数文件、socket 默认都是阻塞。

  1. 非阻塞 IO(Non‑Blocking‑IO)

read 没有数据时不会阻塞,立刻返回‑1,errno = EAGAIN/EWOULDBLOCK。 需要循环轮询,不断调用 read 去查有没有数据,CPU 空耗高,很少单独使用。

  1. IO 多路复用(I/O Multiplexing)

select / poll / epoll,一个线程监视一堆 fd。等待 IO 就绪之后再去读写。 读写的时候一般配合非阻塞 fd使用。

  1. 信号驱动 IO (SIG‑IO)

内核数据就绪时,给进程发送信号SIGIO,进程收到信号再读取数据。 几乎很少用。

  1. 异步 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

相关推荐
2601_966377131 小时前
云上系统零改造过密评|数达安全发布通关四件套
网络·安全
bksczm1 小时前
Linux 五种 I/O 模型与多路复用详解
运维·服务器·网络
蒸蒸yyyyzwd2 小时前
cpp选手秋招学习笔记day24-cs144项目总结
运维·服务器·网络
数据知道3 小时前
静态分析入门——PE 结构、字符串、导入表快速定性
网络·安全·web安全·网络安全
CCYe、3 小时前
新模型上线、旧模型下线:企业AI网关如何管住模型版本
java·网络·数据库·人工智能
葡萄城技术团队3 小时前
从设备协议数据到完整OEE:机加工车间设备效率分析的技术实现路径
网络
码农小麦4 小时前
LangChain 1.3.18 + DeepSeek-v4-flash 工具调用踩坑实录
网络·数据库·langchain
吴声子夜歌4 小时前
Guava——事件总线
java·网络·guava
比兔代理4 小时前
住宅代理IP的出口节点调度:ASN、BGP 与 IP 段信誉机制解析
linux·服务器·网络