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模块进行传输 ,流程: …...

C++:右值引用
右值与左值 在讲解右值引用之前,我们就需要先辨析一下左值与右值的区别。 左值 左值是一个表示数据的表达式,我们可以获取它的地址并且对其赋值,左值可以出现在赋值操作符的左边,但是右值不能。 int i 0; int* p &i; do…...

(算法)硬币问题
问题:有1元,5元,10元,50元,100元,500元的硬币各有C1,C5,C10.C50,C100,C500个。 现在要用这些硬币来支付A元,最小需要多少枚硬币? 该题使用递归算法,利用局部最优解来推导…...

如何隐藏 Ubuntu 顶部状态栏
如何隐藏 Ubuntu 顶部状态栏 Chapter1 如何隐藏 Ubuntu 顶部状态栏Chapter2 Ubuntu增大屏幕可用面积之——自动隐藏顶部状态栏Chapter3 Ubuntu18.04隐藏顶栏与侧栏 Chapter1 如何隐藏 Ubuntu 顶部状态栏 https://www.sysgeek.cn/hide-top-bar-ubuntu/ 准备工作:安…...

【C++】入门基础(引用、inline、nullptr)
目录 一.引用 1.引用的定义 2.引用的特性 3.引用的使用场景 4.const引用 5.引用和指针的区别 二.inline 三.nullptr 一.引用 1.引用的定义 引用不是新定义一个变量,而是给已经存在的变量取一个别名,编译器不会给引用变量开辟内存空间,…...

24/07/10数据结构(5.1213)链表OJ
继续练习题: 7.判断链表是不是回文结构 对于一个链表,设计一个时间复杂度O(n)空间复杂度O(1)的算法,判断是否为回文结果 给定一个链表的头指针A,返回一个bool值代表其是否为回文结构. 测试样例:1->2->2->1 返回:ture bool chkPalindrome(ListNode* A){ …...

C++ 入门基础:开启编程之旅
引言 C 是一种高效、灵活且功能强大的编程语言,广泛应用于系统软件、游戏开发、嵌入式系统、科学计算等多个领域。作为 C 语言的扩展,C 不仅继承了 C 语言的过程化编程特性,还增加了面向对象编程(OOP)的支持ÿ…...

据传 OpenAI秘密研发“Strawberry”项目
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

简单的SQL字符型注入
目录 注入类型 判断字段数 确定回显点 查找数据库名 查找数据库表名 查询字段名 获取想要的数据 以sqli-labs靶场上的简单SQL注入为例 注入类型 判断是数字类型还是字符类型 常见的闭合方式 ?id1、?id1"、?id1)、?id1")等,大多都是单引号…...

HttpClient调用SpringBoot项目的文件上传接口实现文件上传
1.导入httpclient的jar包 这里导入了httpclient、httpmime11 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sch…...

[leetcode]kth-smallest-element-in-a-sorted-matrix 有序矩阵中第k小元素
. - 力扣(LeetCode) class Solution { public:bool check(vector<vector<int>>& matrix, int mid, int k, int n) {int i n - 1;int j 0;int num 0;while (i > 0 && j < n) {if (matrix[i][j] < mid) {num i 1;j;…...