计算机网络基础篇
TCP/IP网络模型
TCP/IP网络模型的作用就是给数据包进行层层封装,帮助数据包能够正确的找到对应的设备接受数据。
一个URL所经历的全部过程
URL所经历的全部过程:
HTTP -> DNS ->协议栈-TCP->IP->MAC->网卡->交换机->路由器->服务器
HTTP(数据包)
HTTP就是包含请求行(方法名如GET POST、URL、HTTP版本),请求头,请求体(具体数据)的数据包。请求发送到服务器后,服务器要响应请求,也是使用HTTP返回响应信息。响应HTTP包含响应行(HTTP版本、响应状态码200 400)、响应头、响应体。
DNS服务器(域名解析为IP)
DNS服务器分为(每一个服务器都保存有根DNS服务器地址):
客户端发送请求前需要IP地址,而DNS服务器记录了域名与IP之间的关系,所以请求发送时需要先通过域名将域名转为IP。
如何通过域名找寻IP:
- 客户端先在本地DNS服务器查找对应IP。
- 本地DNS服务器没有,通过本地寻找根服务器,根服务器告诉你那个顶级服务器保存有对应IP地址。
- 顶级服务器也不记录DNS与IP之间的关系,他告诉你那个权威服务器保存有对应关系,这就通过域名找到IP地址。
协议栈(规定请求需要经过的路径)
协议栈定义了请求需要经过那些过程,即Socket将请求按照下图的顺序执行,对数据包进行层层包装。
TCP(封装端口号,控制数据包发送速度与安全)
TCP建立连接的三次握手
TCP三次握手的原因是为了保证连接的稳定与可靠性。
三次握手的过程:
TCP分割数据包的大小
因为、以太网最大传输单元MTU(IP+TCP+数据包)不能超过1500字节(为了保证传输效率),所以超过1500字节TCP会将数据包拆分为多份发送。
IP(寻找数据包发送到的位置)
IP:包含源IP地址,目标IP地址,协议号(TCP/UDP,06表示使用TCP协议)
假设客户端有多个网卡,就会有多个 IP 地址,那 IP 头部的源地址应该选择哪个 IP 呢?
计算机中的路由表记录了:网卡,目标IP,子网掩码的关系。
我们通过 目标IP & 子网掩码 得到目标子网IP在目标子网IP在路由表中匹配,如果匹配到就知道在那个网卡发送消息
MAC(在子网中确定是那个设备)
MAC头包含:目标MAC、源MAC、协议(IP\ARP)
源MAC:直接将本设备的MAC地址写入源MAC中
目标MAC:通过IP地址获取子网,然后在子网中通过ARP广播的方式,询问子网下所有设备该IP是谁接收的,然后设备将自己的MAC返回。(为了避免每次都要广播,获取到MAC之后会在ARP缓存中记录IP与该设备MAC之间的关系)
网卡(将数字信号转为电信号)
网卡的作用是将数字信号转为电信号,将数据发送给交换机。
网卡被网卡驱动程序控制,会在请求开头加上开头加上报头和起始帧分界符(检测数据包的起始位置),在末尾加上用于检测错误的帧校验序列。
交换机(将电信号转为数字信号)
交换机的作用将电信号转换为数字信号,然后将数据包发送出源IP所在的子网(数据在不同子网之间的转发)。
交换机接收包
交换机接收包之后会首先校验错误帧,保证包的完整性,然后将获取数据包的MAC地址与目标MAC做对比,如果有就根据目标MAC对应的端口转发。(交换机没有MAC地址,会将所有包保存到缓冲区,对MAC进行校验)
如果没有找到目标MAC
如果没有找到目标MAC,会将包发送给所有端口,但因为以太网中如果不是目标地址就不会接收该数据包。(如果是广播MAC地址,也会发给所有端口)
路由器(请求分发)
路由器有MAC地址,路由器可以作为数据包的请求方和接收方,他更像是以太网上的节点一样,数据可以在路由器中进行转发,会在路由器这里改变MAC地址找寻接下来需要到达的设备。
服务器(拆解请求获取数据包)
将数据包层层拆解,然后获取数据
Liunx如何接收发送数据包
liunx发送数据包
Liunx接收数据包
接收数据包跟发送数据包是相反的过程
1.网卡通过DMA将数据包写入ringbuffer
2.进行硬件中断,让CPU首先处理数据包
3.进行硬件中断屏蔽(防止CPU已经在做处理数据包的操作还要被硬件中断),启动软中断处理数据包
4.处理MAC、IP、TCP协议
5.将数据包发送给Socket对应的缓冲区里面,循环读取到ringbuffer中的数据,一直读到ringbuffer没有数据,开启硬件中断
6.应用层通过系统API获取Socket对应的缓冲数据
相关文章:
计算机网络基础篇
TCP/IP网络模型 TCP/IP网络模型的作用就是给数据包进行层层封装,帮助数据包能够正确的找到对应的设备接受数据。 一个URL所经历的全部过程 URL所经历的全部过程: HTTP -> DNS ->协议栈-TCP->IP->MAC->网卡->交换机->路由器->服…...
32 从前序与中序遍历序列构造二叉树
32 从前序与中序遍历序列构造二叉树 32.1 从前序与中序遍历序列构造二叉树解决方案 class Solution { public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {return buildTreeHelper(preorder, inorder, 0, 0, inorder.size() - 1)…...
D82【python 接口自动化学习】- pytest基础用法
day82 pytest初体验 学习日期:20241128 学习目标:pytest基础用法 -- pytest初体验 学习笔记: 文件命名规范 py测试文件必须以test_开头(或_test结尾)测试方法必须以test开头测试类必须以Test开头,并且…...
在开发环境中,前端(手机端),后端(电脑端),那么应该如何设置iisExpress
首先,要想手机端应用能成功请求后端,两个设备至少需在同一个局域网内,且IP地址互通; 因为ajax是http(s)://IP地址端口号的方式请求,但是iisExpress默认是localhost如何解决,并没有IP地址,所以手…...
磁盘/系统空间占满导致黑屏死机无法开机的解决办法
文章目录 起因具体操作1.重启虚拟机,一直按CtrlShitf进入GRUP界面2.选“Ubuntu高级选项”并回车选择第二个,recovery mode![请添加图片描述](https://i-blog.csdnimg.cn/direct/201f9784c203406d802d24b39dc2d4a3.png)3.4.命令查看磁盘情况5.查找和删除文…...
使用zabbix监控k8s
一、 参考文献 小阿轩yx-案例:Zabbix监控kubernetes云原生环境 手把手教你实现zabbix对Kubernetes的监控 二、部署经验 关于zabbix监控k8s,总体来说是分为两块内容,一是在k8s集群部署zabbix-agent和zabbix- proxy。二是在zabbix进行配置。…...
MacOS安装MySQL数据库和Java环境以及Navicat
安装MySQL 去官网下载:MySQL 下载好后安装,在设置里往下滑,出现了这样,就代表安装成功了 接下来配置环境: 首先在我们的设备上找到终端并打开,输入 vim ~/.bash_profile(注意vim后面的空格),输入完成后点击…...
算法的复杂度
1.数据结构前言 下面的概念有的比较难理解,做个了结就行。 1.1数据结构的起源 在现实生活中我们更多地并不是解决数值计算的问题,而是 需要一些更科学的手段如(表,数,图等数据结构),才能更好…...
Linux命令进阶·如何切换root以及回退、sudo命令、用户/用户组管理,以及解决创建用户不显示问题和Ubuntu不显示用户名只显示“$“符号问题
目录 1. root用户(超级管理员) 1.1 用于账户切换的系统命令——su 1.2 退回上一个用户命令——exit 1.3 普通命令临时授权root身份执行——sudo 1.3.1 为普通用户配置sudo认证 2. 用户/用户组管理 2.1 用户组管理 2.2 用户管理 2.2.1 …...
若依项目源码阅读
源码阅读 前端代码分析 代码生成器生成的前端代码有两个,分别是course.js用于向后端发送ajax请求的接口代码,另一个是index.vue,用于在浏览器展示课程管理的视图组件。前端的代码是基于vue3elementplus。 template用于展示前端组件别的标签…...
JVM知识点学习-1
学习视频:狂神说Java 类加载器和双亲委派机制 类加载器 作用:加载Class文件 流程:这里的名字car1。。在栈里面,但是数据在堆里面 类加载器的几个类型: 虚拟机自带的类加载器;启动类(根Boot…...
TypeScript和JavaScript区别详解
文章目录 TypeScript和JavaScript区别详解一、引言二、类型系统1、静态类型检查TypeScript 示例JavaScript 示例 2、类型推断TypeScript 示例JavaScript 示例 三、面向对象编程TypeScript 示例JavaScript 示例 四、使用示例1. 环境搭建2. 创建TypeScript项目3. 安装TypeScript插…...
RVO动态避障技术方案介绍
原文:RVO动态避障技术方案介绍 - 哔哩哔哩 我们在开发游戏的时候经常会遇到这样的问题,当我们寻路的时候,其它人也在寻路,如何避免不从其它人的位置穿过。这个叫做动态避障,目前主流的解决方案就是RVO。本节我们来介绍…...
Vue进阶之单组件开发与组件通信
书接上篇,我们了解了如何快速创建一个脚手架,现在我们来学习如何基于vite创建属于自己的脚手架。在创建一个新的组件时,要在新建文件夹中打开终端创建一个基本的脚手架,可在脚手架中原有的文件中修改或在相应路径重新创建…...
OGRE 3D----5. OGRE和QML事件交互
在现代图形应用程序开发中,OGRE(Object-Oriented Graphics Rendering Engine)作为一个高性能的3D渲染引擎,广泛应用于游戏开发、虚拟现实和仿真等领域。而QML(Qt Modeling Language)则是Qt框架中的一种声明式语言,专注于设计用户界面。将OGRE与QML结合,可以充分利用OGR…...
ARIMA-神经网络混合模型在时间序列预测中的应用
ARIMA-神经网络混合模型在时间序列预测中的应用 1. 引言 1.1 研究背景与意义 时间序列预测在现代数据科学中扮演着越来越重要的角色。从金融市场的价格走势到工业生产的需求预测,从气象数据的天气预报到用电量的负荷预测,时间序列分析无处不在。传统的统计方法和现代深度学习…...
常见靶场的搭建
漏洞靶场 渗透测试(漏洞挖掘)切忌纸上谈兵,学习渗透测试(漏洞挖掘)知识的过程中,我们通常需要一个包含漏洞的测试环境来进行训练。而在非授权情况下,对于网站进行渗透测试攻击,是触及…...
[MacOS] [kubernetes] MacOS玩转虚拟化最佳实践
❓ 为什么不在MacOS本机安装呢?因为M系列芯片是Arm架构,与生产环境或者在本地调试时候,安装虚拟镜像和X86不同,造成不必要的切换环境的额外成本,所以在虚拟化的x86调试 步骤 & 详情 一: 安装OrbStack & 并配置…...
HarmonyOS:@Provide装饰器和@Consume装饰器:与后代组件双向同步
一、前言 Provide和Consume,应用于与后代组件的双向数据同步,应用于状态数据在多个层级之间传递的场景。不同于上文提到的父子组件之间通过命名参数机制传递,Provide和Consume摆脱参数传递机制的束缚,实现跨层级传递。 其中Provi…...
git 上传代码时报错
在上传代码时,显示无法上传 PS E:\JavaWeb\vue3-project> git push To https://gitee.com/evening-breeze-2003/vue3.git! [rejected] master -> master (non-fast-forward) error: failed to push some refs to https://gitee.com/evening-breeze-20…...
判断1456789876541是否为素数,是输出“是素数“,不是则输出“不是素数“
题目描述 判断1456789876541是否为素数,是输出"是素数",不是则输出"不是素数" 代码实现 int main() { long long n 1456789876541; //for (long long i 2; i < n; i)//数据量太大 for(long long i2;i<sqrt(n);i)//素数的优化 { if (n % i 0) …...
Flutter:封装发送验证码组件,注册页使用获取验证码并传递控制器和验证码类型
验证码:view import package:flutter/material.dart; import package:get/get.dart; import index.dart;class SendcodePage extends GetView<SendcodeController> {// 接收注册页面,传进来的手机号控制器,和发送验证码的类型final Tex…...
亚马逊IP关联是什么?
亚马逊不仅提供了广泛的商品和服务,也是许多企业和个人选择的电子商务平台。然而,与亚马逊相关的IP关联问题,特别是在网络安全和运营管理方面,经常成为使用亚马逊服务的用户和商家关注的焦点。通过了解亚马逊IP关联的含义、可能的…...
Electron + vue3 打包之后不能跳转路由
路由不跳转问题原因: 是因为electron需要将vue-router的mode调整为hash模式(两种写法) export default new Router({mode: hash, //这里history修改为hashscrollBehavior: () > ({y: 0}),routes: constantRouterMap, }) export default new createRouter({his…...
docker安装clickhouse副本集群
docker安装clickhouse副本集群 1、clickhouse副本集群搭建1.1、docker安装zookeeper集群1.1.1、zookeeper第一个节点安装1.1.2、zookeeper第二个节点安装1.1.3、zookeeper第三个节点安装1.1.4、zookeeper客户端命令 2、Clickhouse副本集群搭建2.1、clickhouse搭建2.2、验证集群…...
vue超过三行显示省略号和查看更多按钮
1、超过3行显示省略号和更多按钮,不超过3行正常显示; html: <div class"container"><div style"display: flex;"><div class"content"><div class"text-content" ref"textContentR…...
【软考速通笔记】系统架构设计师⑤——软件工程基础知识
文章目录 一、前言二、基础知识点2.1 软件危机2.2 软件生命周期 三、软件过程模型(论文)3.1 瀑布模型3.2 原型模型3.3 螺旋模型3.4 敏捷模型3.5 软件统一过程模型3.6 软件成熟度模型3.7 软件成熟度模型集成 四、需求工程五、软件测试5.1 根据程序执行状态…...
Qt 详解QRubberBand
文章目录 QRubberBand 简介前言 QRubberBand 的作用QRubberBand 的主要功能QRubberBand 的常用方法QRubberBand 的典型应用场景示例代码总结 QRubberBand 简介 前言 在 Qt 中,QRubberBand 是一个非常实用的控件,它通常用于图形界面中的“选择区域”功能…...
HTB:Love[WriteUP]
目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机开放端口进行脚本、服务扫描 使用浏览器访问靶机443端口 尝试利用该功能访问靶机自身80端口 使用ffuf对靶机80端口进行路径FUZZ 漏洞利用 使用searchsploit搜索靶机80端…...
【RabbitMQ 消息列队测试之:调试技巧】
RabbitMQ 消息列队测试之:调试技巧 1. 使用 RabbitMQ 管理界面2. 启用日志记录3. 使用 `rabbitmqctl` 命令行工具4. 检查和分析死信队列(DLQ)5. 监控系统资源6. 性能测试工具:`rabbitmq-perf-test`7. 使用工具调试消息内容8. 检查和调整消费者处理速率9. 启用长时间运行的测…...
惠州做网站公司/seo排名优化培训
点击上面微信号关注我关注我哟每天中午12:00-2:00定期推送文章,喜欢的可以设置星标,并分享点赞我们的文章,非常感谢大家的支持,您的点击的在看就是我们的动力!上期我们分享选择题的解析…...
北京通州做网站/黄页引流推广链接
MYSQL 应该是最流行了 WEB 后端数据库。WEB 开发语言最近发展很快,PHP, Ruby, Python, Java 各有特点,虽然 NOSQL 最近越來越多的被提到,但是相信大部分架构师还是会选择 MYSQL 来做数据存储。MYSQL 如此方便和稳定,以…...
网站建设的维护工作/百度在线使用网页版
convert(varchar(10),字段名,转换格式) CONVERT(nvarchar(10),count_time,121)CONVERT为日期转换函数,一般就是在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)相互转换的时候才用到的函数的3个参数,第1个参数为ÿ…...
济南网站建站/北京网站托管
es文件浏览器新建ftp服务器 内容精选换一换本文以裸金属服务器的操作系统为“Windows Server 2012 R2 Standard 64bit”、云硬盘容量为3 TB举例,提供容量大于2 TB的Windows数据盘的初始化操作指导。MBR格式分区支持的磁盘最大容量为2 TB,GPT分区表最大支…...
网站制作过程合理的步骤是/高端营销型网站
不要求完全能背,选项给你之后,能分辨出来就行。 4大价值观: 个体和互动 高于流程和工具 工作的软件 高于详尽的文档 客户合作 高于合同谈判 响应变化 高于遵循计划 12大原则: 我们的最高目标是,通过尽早持续交付有…...
闲鱼上做网站/seo教学培训
laravel实战化项目之三板斧 spring mvc 实战化项目之三板斧 asp.net mvc 实战化项目之三板斧 接上文希望从一张表(tb_role_info 用户角色表)的CRUD展开spring mvc的项目实战化魅力。 开发技术选型:spring mvcfreemarkerbootstrapmybatismysql…...