Linux:Linux网络总结(附下载链接)
文章目录
- 下载链接
- 网络问题
- 综合问题
- 访问一个网页的全过程?
- WebSocket
- HTTP
- HTTP基本概念
- GET与POST
- HTTP特性
- HTTP缓存技术
- HTTP的演变
- HTTP1.1 优化
- HTTPS
- HTTP与HTTPS有哪些区别?
- HTTPS解决了HTTP的哪些问题?
- HTTPS如何解决的?
- HTTPS是如何建立连接的?
- HTTPS 的应用数据是如何保证完整性的
- HTTPS 一定安全可靠吗?
- TCP
- TCP基本认识
- TCP连接建立
- TCP连接断开
- socket编程
- 重传机制
- 滑动窗口
- 流量控制
- 拥塞控制
- TCP缺点
- 如何基于UDP实现可靠传输?
- TCP优化
- 快速复用 TIME_WAIT
- QUIC
- 序列号和确认号
- Mac地址表
- 一个是设备的 MAC 地址,
- 另一个是该设备连接在交换机的哪个端口上
下载链接
链接: https://pan.baidu.com/s/1hRTh7rSesikisgRUO2GBpA?pwd=utgp 提取码: utgp
最近总结了Linux网络的内容,总结内容如下:




网络问题
综合问题
访问一个网页的全过程?
-
发过去
-
应用层
-
- 浏览器地址输入URL
- 1.1 浏览器查看缓存,强制和协商缓存
-
- 解析URL获取协议,主机,端口,路径
-
- 生成HTTP请求报文
-
- 获取主机IP
-
4.1 浏览器缓存
-
4.2 主机缓存
-
4.3 DNS域名解析
-
4.4 路由器解析
-
-
传输层
-
- 建立TCP连接,三次握手
-
- 给报文添加TCP报头
-
- 向下传输,发送报文
-
-
网络层
-
- 通过解析出的IP添加IP报头
-
- 向下传输,发送报文
-
-
网卡
- 转换为电信号
-
交换机
-
电信号到达网线接口,交换机里的模块进行接收,接下来交换机里的模块将电信号转换为数字信号
-
将包存入缓冲区后,接下来需要查询一下这个包的接收方 MAC 地址是否已经在 MAC 地址表中有记录
- 如果没有匹配,全部转发
-
-
路由器(网卡)
-
检查MAC地址看看是不是给自己的
- 是,收到缓冲区当中
-
去掉MAC头部,查询路由表确定端口
-
发送包
-
看网关,如果有网关就向这个IP发
-
利用ARP查询MAC地址
-
再做一个有MAC的包
- 通过交换机到达下一个路由器
-
-
-
-
-
-
收回来
-
- 接收HTTP响应
-
- 根据状态码处理情况
-
-
这个问题我基于TCP/IP的网络模型来回答,并且暂时不考虑浏览器缓存的情况。
首先看一下应用层:对于应用层,当用户输入一个网址后,此时会进行URL解析,根据URL构建出想要请求的资源路径,使用的协议,具体方法,请求的IP和端口信息。其中IP需要使用DNS域名解析协议来进行获取,基于这些内容,一个初步的报文就在应用层构建完毕了,此时应用层就完成了自己的任务。
现在数据包来到传输层了,Http协议基本都是遵循TCP协议的,因此我们只考虑TCP协议的情况,到达传输层后,建立TCP的三次握手,如果是HTTPS再构建四次TLS握手,最终可以进行收发数据,此时就给报文添加一个TCP的报头,然后继续向下传递
现在数据包来到网络层了,网络层根据解析出的IP地址以及自身的属性,最终构建出一个IP的报头,添加到数据包前,然后继续向下传递
此时数据包来到了网络接口层,数据包在网络中的传输依赖于路由器和交换机的协同工作。路由器根据路由表选择最佳路径,将数据包转发到下一个网络。交换机则根据MAC地址表快速转发帧到目标网络接口。如果MAC地址表中没有目标MAC地址,交换机会将帧广播到所有端口,直到找到正确的接收者
数据包在进行传输的过程中,网络中的每一个设备都可以对这个包进行接受,接受到包之后,根据MAC地址来判断是不是给自己的,如果是给自己的就留下来,收到缓冲区中,去掉这个没有用的MAC头部,然后到自己的路由表中进行查询,如果此时网关列中没有信息,那么就说明这个数据包已经传输到了指定的服务器,如果网关列中有数据,那么就根据网关中的这个IP,利用ARP协议来获取IP对应的MAC地址,然后插入到这个包前,然后继续进行发送,通过交换机到达下一个路由器,直到到达指定的服务器
到达指定的服务器后,服务器就会对于包进行层层解析,一直解析到应用层的数据,之后构建一个Http响应,再发回去即可
WebSocket
-
借助HTTP协议进行升级
-
101状态码 -> 协议切换
-
完美继承全双工
-
用报头+有效载荷解决粘包问题
HTTP
HTTP基本概念
-
HTTP是什么?
-
HTTP常见的状态码有哪些?
-
HTTP常见字段有哪些?
GET与POST
-
有什么区别?
-
是安全和幂等的吗?
HTTP特性
-
HTTP/1.1 优点有哪些?
-
简单
-
跨平台
-
扩展
-
报头随意补充
-
下层随意变化
-
-
-
HTTP/1.1 缺点有哪些?
-
无状态
-
明文传输
-
不安全
-
-
HTTP/1.1 性能如何?
-
长连接
- 对比1.0和1.1
-
管道
- 请求和响应的队头阻塞
-
HTTP缓存技术
-
HTTP缓存有哪些实现方式?
- 强制和协商
-
什么是强制缓存?
-
什么是协商缓存?
HTTP的演变
-
HTTP1.1 相比 HTTP/1.0 提高了什么性能?
-
问题
-
报头不压缩
-
冗余头部
-
响应对头阻塞
-
无请求优先级
-
无全双工
-
-
-
HTTP/2 做了什么优化?
-
头部压缩
-
二进制格式
-
并发传输
-
服务器主动推送资源
-
-
HTTP/3 做了什么优化?
-
解决TCP队头阻塞
-
无队头阻塞
- 只阻塞当前流,其他流不影响
-
更快的连接建立
- 1 个 RTT 就可以完成建立连接与密钥协商
-
连接迁移
- TCP换连接成本很高
-
HTTP1.1 优化
-
如何避免发送HTTP请求?
- 缓存
-
如何减少HTTP请求次数?
-
减少重定向次数
-
合并请求
-
延迟发送
- 一个网页里面的内容慢慢加载
-
-
如何减少HTTP响应数据大小?
-
无损压缩
-
有损压缩
-
HTTPS
HTTP与HTTPS有哪些区别?
- HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程
HTTPS解决了HTTP的哪些问题?
-
窃听风险
-
篡改风险
- 冒充风险
-
-
信息加密
-
校验机制
- 身份证书
-
HTTPS如何解决的?
-
混合加密(不窃听)
-
非对称加密用于密钥交换
- 客户端发给服务端一个会话密钥(CA),服务端用私钥解开,双方就获得了一个通信的密钥对
-
对称加密用于数据传输
- HTTPS使用对称加密的会话密钥来加密和解密数据
-
-
摘要算法+数字签名
-
通过哈希算法可以确保内容不会被篡改
- 通过数字签名(私钥解密)确保哈希值不被替换
-
-
数字证书
-
防止又换私钥又换公钥
- 进行一个注册(个人信息 + 公钥 + 数字签名)
-
-
公钥加密,私钥解密
- 保证内容传输的安全
-
私钥加密,公钥解密
- 保证消息不会被冒充
HTTPS是如何建立连接的?
-
SSL/TLS 协议基本流程
-
客户端向服务器索要并验证服务器的公钥
-
双方协商生产「会话秘钥」
-
双方采用「会话秘钥」进行加密通信
-
-
TLS 握手
-
ClientHello
-
SeverHello
-
客户端回应
- 确认数字证书,取出公钥
-
服务器的最后回应
- 计算出本次通信的「会话秘钥」
-
HTTPS 的应用数据是如何保证完整性的
-
握手协议
- TLS 四次握手的过程负责协商加密算法和生成对称密钥
-
记录协议
- 保护应用程序数据并验证其完整性和来源,对 HTTP 数据加密
-
数据加密过程
-
消息被分割和压缩
-
加上消息认证码MAC 值
-
压缩的片段和消息认证码一起进行加密
-
带上报头,组成报文
-
HTTPS 一定安全可靠吗?
-
https本身一定是没问题的,一定是客户端本身有问题
-
电脑中病毒,证书被换了
- 提醒证书可能被劫持,执意访问
-
-
HTTPS双向认证,如果服务端觉得客户端不值得信任,就不通信
TCP
TCP基本认识
-
TCP报头?
-
为什么需要TCP?工作在哪?
-
什么是TCP?
- 面向连接可靠字节流
-
什么是TCP连接?
-
需要客户端与服务端达成上述三个信息的共识
-
socket
- ip+端口
-
序列号
-
窗口大小
-
-
-
如何确定TCP连接?
-
四元组
- 这个很重要,当判断TCP连接建立,就要看这个四元组
-
-
TCP和UDP的区别和应用场景?
-
连接
-
可靠性
-
传输方式
-
服务对象
- 一对一…
-
拥塞和流量控制
-
首部开销
-
分片不同
-
-
为什么TCP有首部长度而UDP没有?
-
为什么UDP有包长度而TCP没有?
- 历史问题
TCP连接建立
-
TCP三次握手过程和状态变迁?
- 第三次握手是可以携带数据的,前两次握手是不可以携带数据的
-
如何查看TCP状态?
-
为什么是三次,不是两次四次?
-
验证收发能力
-
历史连接
-
同步序列号
- 资源浪费
-
-
-
「两次握手」:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号;
-
「四次握手」:三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。
-
-
为什么初始化序列号都不一样?
-
为了防止历史报文被下一个相同四元组的连接接收
-
为了安全性,防止黑客伪造的相同序列号的 TCP 报文被对方接收
-
-
序列号是如何随机产生的?
- 随机数是会基于时钟计时器递增的,基本不可能会随机成一样的初始化序列号
-
TCP层为什么需要MSS?
- 如果一个 IP 分片丢失,整个 IP 报文的所有分片都得重传
-
第一次握手丢失会怎么样?
-
第二次握手丢失会怎么样?
- 都发
-
第三次握手丢失会怎么样?
-
什么是SYN攻击?如何避免?
-
占满服务端的半连接队列
-
调大 netdev_max_backlog
-
增大 TCP 半连接队列
-
开启 tcp_syncookies
- 减少 SYN+ACK 重传次数
-
-
-
TCP连接断开
-
TCP四次挥手过程和状态变迁?
-
为什么需要四次挥手?
- close和shutdown的区别
-
第一次挥手丢失了会怎么样?
-
第二次挥手丢失了会怎么样?
-
第三次挥手丢失了会怎么样?
-
第四次挥手丢失了会怎么样?
-
为什么TIME_WAIT时间是2MSL?
- 2个报文最大生存时间
-
为什么需要TIME_WAIT?
-
防止历史数据
-
优雅的关闭
-
-
TIME_WAIT太多会怎么样?
- 系统+端口
-
如何优化TIME_WAIT?
-
如果建立连接后,客户端故障怎么办?
-
TCPkeepalive
- 失活报文看看活不活
-
-
如果建立连接后,服务端进程崩溃怎么办?
socket编程
-
TCP的socket编程?
-
listen参数的意义?
- accept队列大小
-
accept是在哪一步?
-
客户端close后的流程?
-
没有accept还能连接吗?
- accept只是从队列取元素
-
没有listen还能连接吗?
- 自连接,哈希表
重传机制
-
超时重传?
-
数据包丢失
- 确认应答丢失
-
-
快速重传?
- 优化,但不保底
-
SACK是什么?
- 标识已收到的报文
-
D-SACK是什么?
- 标识重复收到的报文
滑动窗口
-
发送窗口?
-
接收窗口?
流量控制
-
缓冲区和滑动窗口的关系?
- 不能又收缩又少缓存
-
窗口关闭?
-
打满了,不再收数据
-
问题?解决?
-
-
什么是糊涂窗口综合征?
- 每次发送数据很小,效率低
拥塞控制
-
慢启动
-
拥塞避免
-
拥塞发生
-
快速恢复
TCP缺点
-
升级困难 改内核
-
队头阻塞
-
建立连接延迟
-
网络迁移
如何基于UDP实现可靠传输?
-
序列号
-
确认应答
-
超时重传
-
流量控制
-
拥塞控制
-
优化TCP连接建立
-
网络迁移
TCP优化
-
绕过三次握手
- cookie
快速复用 TIME_WAIT
-
历史 RST 报文可能会终止后面相同四元组的连接,因为 PAWS 检查到即使 RST 是过期的,也不会丢弃
-
处于新连接建立可能收到旧的FIN+ACK,回RST
如果第四次挥手的 ACK 报文丢失了,有可能被动关闭连接的一方不能被正常的关闭
QUIC
-
可靠传输
-
Packet Number 单调递增
配合 Stream ID 与 Offset-
可以更加精确计算 RTT,没有 TCP 重传的歧义性问题;
-
可以支持乱序确认,因为丢包重传将当前窗口阻塞在原地,而 TCP 必须是顺序确认的,丢包时会导致窗口不滑动
-
-
-
队头阻塞
- 每一个stream分配一个独立的滑动窗口
-
流量控制
-
window_update 帧告诉对端自己可以接收的字节数
-
BlockFrame 告诉对端由于流量控制被阻塞了
-
基于Stream和Connection的控制
-
-
拥塞控制
- 在应用层可以随便改算法,主流使用TCP的
-
连接建立
- 321RTT -> 210RTT
-
网络迁移
- 基于客户端服务端连接 ID,无需重新建立
序列号和确认号
-
序列号 = 上一次发送的序列号 + len
-
确认号 = 上一次收到的报文中的序列号 + len
Mac地址表
一个是设备的 MAC 地址,
另一个是该设备连接在交换机的哪个端口上
相关文章:
Linux:Linux网络总结(附下载链接)
文章目录 下载链接网络问题综合问题访问一个网页的全过程?WebSocket HTTPHTTP基本概念GET与POSTHTTP特性HTTP缓存技术HTTP的演变HTTP1.1 优化 HTTPSHTTP与HTTPS有哪些区别?HTTPS解决了HTTP的哪些问题?HTTPS如何解决的?HTTPS是如何…...
Cxx Primer-CP-2
开篇第一句话足见作者的高屋建瓴:类型决定程序中数据和操作的意义。随后列举了简单语句i i j;的意义取决于i和j的类型。若它们都是整形,则为通常的算术意义。若它们都为字符串型,则为进行拼接操作。若为用户自定义的class类型,则…...
OpenCV距离变换函数distanceTransform的使用
操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:Visual Studio Code编程语言:C11 功能描述 distanceTransform是OpenCV库中的一个非常有用的函数,主要用于计算图像中每个像素到最近的背景(通常是非零像素到零像素&…...
Service Mesh 是一种用于处理服务间通信的基础设施层
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。Service Mesh 的一个流行实现是 Istio,它基于 Envoy 代理和 Kubernetes。 然而࿰…...
QML界面控件加载与显示顺序
一、QML界面控件加载顺序 QML在界面加载时的顺序和我们认知的有很大的不同,有时候会对我们获取参数以及界面实现造成很大的困扰 1、加载顺序 import QtQuick 2.12 import QtQml 2.12 import QtQuick.Window 2.12 import QtQuick.VirtualKeyboard 2.4Window {id: …...
C++从入门到起飞之——缺省参数/函数重载/引用全方位剖析!
目录 1.缺省参数 2. 函数重载 3.引⽤ 3.1 引⽤的概念和定义 3.2 引⽤的特性 3.3 引⽤的使⽤ 3.4 const引⽤ 3.5 指针和引⽤的关系 4.完结散花 个人主页:秋风起,再归来~ C从入门到起飞 个人格言:悟已往之不谏…...
tkinter-TinUI-xml实战(12)pip可视化管理器
引言 pip命令行工具在平常使用方面确实足够简单,本项目只是作为TinUI多界面开发的示例。 当然,总有人想用GUI版pip,实际上也有。不过现在,我们就来手搓一个基于python和TinUI(tkinter)的pip可视化管理器。…...
Java中标识符和关键字
1.标识符 public class HelloWorld{public static void main(String[] args){System.out.println("Hello,world");} }上述代码中在public class 后面的HelloWorld称为类名,main称为方法名,也可以将其称为标识符,即:在程…...
电子版pdf格式标书怎么加盖公章?
电子版PDF格式标书加盖公章的方法有多种,以下是一些常用的步骤和技巧: 一、手动插入图片法 打开PDF文档:首先,确保你已经安装了支持PDF编辑的软件,如Adobe Acrobat Reader DC、Foxit PDF Editor等。选择插入图片&…...
【开放集目标检测】Grounding DINO
一、引言 论文: Grounding DINO: Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection 作者: IDEA 代码: Grounding DINO 注意: 该算法是在Swin Transformer、Deformable DETR、DINO基础上…...
东莞酷得 PMS134应广8位OTP单片机
1、特性 通用 OTP 系列 不建议使用于 AC 阻容降压供电或有高 EFT 要求的应用。应广不对使用于此类应用而不达安规要求负责 工作温度范围:-20C~70C 1.2.系统特性 一个硬件 16位计数器 两个8位硬件 PWM生成器 三个11 位硬件 PWM生成器(PWMG0,PWMG1…...
[终端安全]-7 后量子密码算法
本文参考资料来源:NSA Releases Future Quantum-Resistant (QR) Algorithm Requirements for National Security Systems > National Security Agency/Central Security Service > Article Commercial National Security Algorithm Suite 2.0” (CNSA 2.0) C…...
uniapp 支付宝小程序 芝麻免押 免押金
orderStr参数如下: my.tradePay({orderStr:res, // 完整的支付参数拼接成的字符串,从 alipay.fund.auth.order.app.freeze 接口获取success: (res) > {console.log(免押成功);console.log(JSON.stringify(res),不是JOSN);console.log(JSON.stringify…...
Python爬虫教程第一篇
一、爬虫基础概念 1. 什么是爬虫 爬虫(Spider,又称网络爬虫),是指向网站/网络发起请求,获取资源后分析并提取有用数据的程序。从技术层面来说,爬虫通过程序模拟浏览器请求站点的行为,把站点返…...
AI时代:探索个人潜能的新视角
文章目录 Al时代的个人发展1 AI的高速发展意味着什么1.1 生产力大幅提升1.2 生产关系的改变1.3 产品范式1.4 产业革命1.5 Al的局限性1.5.1局限一:大模型的幻觉 1.5.2 局限二:Token 2 个体如何应对这种改变?2.1 职场人2.2 K12家长2.3 大学生2.4 创业者 3 人工智能发…...
【Python学习笔记】Optuna + Transformer B站视频实践
【Python学习笔记】Optuna Transformer 实践 背景前摇(省流可不看): 之前以泰坦尼克号数据集为案例,学习了Optuna的基本操作,为了进一步巩固知识和便于包装简历,决定找个唬人一点的项目练练手。 ————…...
【自动驾驶/机器人面试C++八股精选】专栏介绍
目录 一、自动驾驶和机器人技术发展前景二、C在自动驾驶和机器人领域的地位三、专栏介绍四、订阅需知 一、自动驾驶和机器人技术发展前景 随着人工智能、机器学习、传感器技术和计算能力的进步,自动驾驶和机器人的技术水平不断提升,使得它们更加智能、可…...
Unity中一键生成具有身体感知的虚拟人物动作
在虚拟现实(VR)和增强现实(AR)的浪潮中,如何让虚拟人物的动作更加自然、真实,已经成为一个重要课题。AI4Animation项目,一个由 Sebastian Starke 主导的开源框架,为Unity开发者提供了强大的工具集,以实现这一目标。本文…...
谷粒商城实战-25-分布式组件-SpringCloud Alibaba-Nacos配置中心-加载多配置集
文章目录 一,拆分配置集二,配置文件中配置多配置集1,引用多配置集2,验证 三,多配置集总结1,使用场景2,优先级 这一节介绍如何加载多个配置集。 大多数情况下,我们把配置全部放在一个…...
UART编程
Q:为什么使用串口前要先在电脑上安装CH340驱动? 中断的作用? 环形buffer的作用? static和valitate的作用 三种编程方式简介 也可以通过DMA方式减小CPU资源的消耗 直接把数据在SRAM内存和UART模块进行传输 ,流程: …...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...
VSCode 使用CMake 构建 Qt 5 窗口程序
首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...
【题解-洛谷】P10480 可达性统计
题目:P10480 可达性统计 题目描述 给定一张 N N N 个点 M M M 条边的有向无环图,分别统计从每个点出发能够到达的点的数量。 输入格式 第一行两个整数 N , M N,M N,M,接下来 M M M 行每行两个整数 x , y x,y x,y,表示从 …...
