计算机网络八股整理(一)
计算机网络八股文整理
一:网络模型
1:网络osi模型和tcp/ip模型分别介绍一下
osi模型是国际标准的网络模型,它由七层组成,从上到下分别是:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层,而因为osi网络模型制定前,因特网已经出现,因特网使用的是tcp/ip模型,它由四层组成,分别是应用层,传输层,网络层,网络接口层,各层职责分明,下层负责给上提供服务;
拓展1:为什么要分层:
就像是我们编写后端程序一样,我们会进行分层,可以使每一层的职责分明,比如mapper层专门进行数据库操作一样。
分层有2点好处:
1:各层相互独立
2:提高灵活性和可替代性:比如修改每一层,对其他层的影响非常小,与我们平时开发程序的高内聚低耦合的原则可以对应上;

2:tcp,ip分别属于哪个层
tcp-> 传输层
ip -> 网络层
拓展:每个层都有哪些协议
应用层:http,https,dns,ftp,smtp (用于发送电子邮件)
传输层:tcp,udp;
网络层:ip,icmp(互联网控制消息协议:用于网络诊断),Arp协议(根据ip地址寻找mac地址),rarp(根据)
网络接口层:mac:
二:http
1:从输入url到页面显示发送了什么(* * * )
1:首先在搜索栏输入一串网址
2:浏览器根据dns协议,去本地的dns服务器查询域名对应的ip,如果本地dns服务器没有换存,就去访问根dns服务器,由根dns服务器之路去访问顶级域dns服务器,再由顶级域dns服务器指路去访问对应的权威dns服务器,最后查询到返回域名对应的ip,并将映射关系存入本地dns服务器;
4:然后根据IP地址和端口号,向目标服务器发起tcp连接请求,也就是tcp三次握手建立连接;
5:然后在连接上发送http报文请求,请求获取网页内容
6:服务器处理请求,返回网页数据
7:浏览器解析响应数据,将响应体中的html页面渲染成网页的样式,然后再根据html中的url(如图片)继续发送请求,获取资源,直到网页完全加载完毕;
8:不通信时关闭tcp连接;
2:http报文有哪些部分
http请求报文有请求行,请求头,请求体;
http响应报文有状态行,响应头,响应体;
拓展1:请求头中常见的字段:
1:accept:可以接收的报文类型;
2:connection:连接类型:keep-alive(长连接);
3:accept-encoding:能够接受的编码格式;
拓展2:http中常见的状态码:
以1开头的:表示一种中间状态
以2开头的:表示请求成功;
以3开头的:表示请求重定向;301永久重定向;302临时重定向;
以4开头的:表示客户端出现问题;如404是客户端请求的资源不存在
以5开头的:表示服务端出现问题;
联想:304状态码:缓存重定向
对于多次请求会返回同样的资源,会采用http缓存,这样能加快访问速度;
http缓存有两种实现方式:强制缓存和协商缓存;
强制缓存:强制的含义是,由浏览器来控制是否使用本地缓存,通过两个字段一个是exprie,一个是cache-control,都是用来设置过期时间,exprie是绝对时间,cache-control是相对时间,cache-control的优先级会更高,这样发送请求时会先判断缓存有没有过期,如果没有就直接使用缓存;
协商缓存:是服务端告诉客户端是否使用缓存,有两种方式,一种是最后修改时间,一种是唯一标识;
最后修改时间的逻辑是:当本地缓存过期时,会向服务端发送请求,携带上一次最后的修改时间,服务端会比对,如果服务端资源最后修改时间较新,会返回200同时返回服务端资源,如果旧那么就返回304,标识让客户端查看浏览器的缓存;
唯一标识的逻辑时:比对上一次的唯一标识,如果改变就返回新资源,没有返回304’
拓展3:502和504状态码的区别
502:网关请求收到无效的响应 bad-gateway
504:网关请求超时;
3:http请求有哪些类型;
get:获取资源
put:更新资源
post:提交数据
delete:删除资源
head:类似于get请求,获取资源的头部信息;
拓展1:get和post的使用场景?他们的区别?
根据rfc规范,get通常原来获取指定的资源,post用来提交数据;
区别:get的参数一般都写在url中,url有长度的限制,post的参数一般是实体写在请求体中;
get是安全和幂等的,post不是安全和幂等的;
注意:在具体的开发中,get也可以来提交数据,post也可以获取数据,因为rfc只是规范,不是强制的,只是我们一般按照规范来;
4:http长连接:
http是基于tcp传输协议实现的,进行数据传输前需要建立连接;
在http1中,每一次请求响应都要建立一个连接,浪费资源且影响性能。
在http1.1中使用了长连接:可以在请求字段connection设置为keep-alive,这就是设置长连接,一个连接可以接受多个请求响应;
5:http默认的端口是什么
http默认的端口的80,https默认的端口是443;
6:http1.1怎么对请求拆包的,具体说说怎么拆的:
服务端收到http请求后主要是根据请求中的content-length来进行拆包,content-length是内容的长度,服务器会根据内容的长度来读取对应长度的内容,这样避免了内容的丢失;
7:http为什么不安全
1:http是明文传输,通信过程中会被窃听;
2:http不进行身份验证,有冒充风险;
3:http没有校验机制,内容容易被篡改;
8:http和https的区别:
https在http和tcp层之间加入了ssl/tls协议,解决了http不安全的问题;
https在tcp三次握手建立连接之后,还会进行ssl/tls四次握手才能进行通讯;
http默认的端口是80,https默认的端口是443;
拓展1:https怎么解决了http的不安全的问题:
http不安全的问题有三点:
1:窃听风险;
2:篡改风险;
3:冒充风险;
基于三个风险提供解决方案:
1:加密通信:混合加密:非对称加密,和对称加密
2:摘要算法加上数字签名;
3:身份验证:ca数字证书
联想1:讲一下非对称加密算法和对称加密算法:
对称加密算法:只有一把密钥,密文提供这把密钥加密和解密;
非对称加密:两把密钥一把公钥一把私钥,可以公钥加密私钥解密,也可以公钥加密私钥解密,私钥是绝对不会被泄露的;
对于两种算法,对称加密的传输性能更好,所以我们使用对称加密进行会话中的数据传递,但是密钥如何分发给客户端和服务端,使不被窃取,所以我们使用非对称加密算法传递会话密钥,客户端持有公钥,将会话密钥加密,只有服务端的私钥才能解密,获得会话密钥后,客户端和服务端使用会话密钥进行通信;
联想2:讲一下摘要算法和数字签名
因为我们发送的报文有可能会被篡改所以我们要进行验证,可以使用摘要算法,摘要算法:将要发送的内容和内容对应的经过hash算法加密hash值一起发送,接收方接收后将内容转成hash值与发送过来的hash值进行对比,如果一致说明内容没有被串改,这就是摘要算法,但是如果hash值和内容都被串改了怎么办呢,所以我们使用数字签名算法,是使用非对称加密算法,通过私钥加密公钥解密来保证内容不会被冒充;
联想3:讲一下数字证书:
之前的加密通信是基于公私钥来传递会话密钥的,如果中间人伪造一对公私钥,也会造成安全风险,所以要进行身份验证,也就是利用数字证书,利用数字证书来确定服务端的身份,数字证书是由ca(数字证书认证机构)发放的,具体的流程是:服务端申请数字证书,将公钥放入数字证书中,ca通过ca的密钥对服务端公钥进行加密,然后发送给客户端,客户端确定数字证书的合法性然后通过ca的公钥进行解密获取服务端提供的公钥;
9:https的握手过程说一下:
https的握手即tls的握手,传统的tls的握手是基于ras算法来进行密钥交换的,进行四次握手,具体流程如下:
1:客户端发送client-hello
tls的协议版本
携带客户端支持的密钥套件
客户端产生的随机数
2:服务端发送server-hello
确认密钥套件
确认tls协议版本
携带服务端产生的随机数
发送含有公钥的数字证书
3:第三次握手:
客户端取出数字证书,验证合法性,然后解密出公钥;
发送一个使用公钥加密的随机数;
加密算法变更通知,以后均用会话密钥进行通信;
客户端握手结束通知,并将之前通信产生的数据做一个摘要,提供给服务端校验
4:第四次握手:
服务端收到公钥加密的随机数后,使用私钥解密,此时有了三个随机数,将三个随机数用协商好的密钥加密算法进行加密,
作为之后的会话密钥使用;
然后发送加密算法变更通知
携带服务端握手结束通知,并且将之前通信产生的数据做一个摘要,提供给客户端校验
10:https如何防范中间人攻击
中间人估计是伪造成服务器与客户端建立联系,同时与服务端建立联系
主要通过两个手段:
1:非对称加密协商会话密钥
2:身份校验:客户端会校验服务器证书的合法性;
11:http1.1和http2的区别
http2对于http1.1有了部分改进:
1:头部压缩:当多次请求使用相同的头部信息时,会将头部信息存入头信息表,之后发送请求,头部只会使用头信息中保存的索引号;
2:二进制报文:http1.1采用的是纯文本的报文,http2使用二进制存储,包括头信息和数据体,变成头信息帧和数据帧,这样对计算机来说是有利的,增加的传输的效率;
3:并发传输:采用stream流,多个stream可以公用一个tcp连接,解决了http1.1的队头阻塞问题;
4:服务端可以主动推送消息:这样减少了发送http请求的次数,提高了性能;
12:建立tcp连接后什么情况下会中断:
1:正常情况下客户端发送fin报文后,调用close函数,四次挥手后就会中断连接;
2:发送方发送数据,超时没收到ack回复,重发到最大次数后断开连接;
3:长时间没有发送请求和响应也会中断tcp连接;
13:http,socket,和tcp的区别:
http是应用层的超文本传输协议,定义了客户端和服务端交换的数据格式和规则;
socket:提供了网络传输的接口
tcp:是传输层的协议,负责在通信的两端建立可靠的数据传输连接;
相关文章:
计算机网络八股整理(一)
计算机网络八股文整理 一:网络模型 1:网络osi模型和tcp/ip模型分别介绍一下 osi模型是国际标准的网络模型,它由七层组成,从上到下分别是:应用层,表示层,会话层,传输层,…...
了解 CSS position 属性
CSS position 属性 在前端开发中,布局是一个至关重要的部分,而 CSS 的 position 属性是控制元素在页面中位置的核心工具。 本文将解释 CSS 中的 position 属性,包括其不同的值、效果及典型使用场景,以帮助你更好地理解和应用这一…...
数据结构 【二叉树(上)】
谈到二叉树,先来谈谈树的概念。 1、树的概念及结构 树是一种非线性的数据结构,它的逻辑关系看起来像是一棵倒着的树,也就是说它是根在上,而叶子在下的, 在树这种数据结构中,最顶端的结点称为根结点。在树的…...
C++11(中)
C11(中) 1.可变参数模板1.1.使用场景 2.lambda表达式(重要)2.1.使用说明2.2.函数对象与lambda表达式 3.线程库3.1.thread3.2.atomic原子库操作3.3.mutex3.3.1.mutex的种类3.3.2.lock_guard3.3.3.unique_lock 🌟&#x…...
下拉选择器,选择框,支持单选、多选、筛选和清空功能,支持vue2和vue3
下拉选择器,选择框,支持单选、多选、筛选和清空功能,支持vue2和vue3https://ext.dcloud.net.cn/plugin?id8159 点击即可。 注意数据来源: 选择的:valueName:选择下拉选择显示的显示屏...
HTTP中GET和POST的区别是什么?
HTTP定义: GET:用于获取资源,通常用于请求数据而不改变服务器的状态 POST:用于提交数据到服务器,通常会改变服务器的状态或产生副作用(如创建或更新资源) 参数传递方式: GET&…...
day04 企业级Linux安装及远程连接知识实践
1. 使用传统的网卡命名方式 在启动虚拟机时,按tab键进入编辑模式 添加命令: net.ifnames0 biosdevname0 这样linux系统会使用传统的网卡命名,例如eth0、eth1…… 2. 快照 做系统关键操作时,一定要使用快照(先将系统关机) 3.…...
jvm核心组件介绍
1. 类加载器(ClassLoader): • 想象它是一个快递员,负责把Java类(.class文件)这个“包裹”从磁盘这个“发货地”送到JVM内部这个“目的地”。类加载器确保每个类只被加载一次,并维护一个类的层级…...
uname -m(machine) 命令用于显示当前系统的机器硬件架构(Unix Name)
文章目录 关于 arm64 架构检查是否安装了 Rosetta 2其他相关信息解释:命令功能:示例: dgqdgqdeMac-mini / % uname -m arm64您运行的 uname -m 命令显示您的系统架构是 arm64。这意味着您的 Mac Mini 使用的是 Apple 的 M1 或更新的芯片&…...
Pgsql:json字段查询与更新
1.查询json字段的值 SELECT attribute_data->>设施类别 mycol, * FROM gis_coord_data WHERE attribute_data->>设施类别阀门井 查询结果如下: 2.更新json字段中的某个属性值 UPDATE gis_coord_data SET attribute_data(attribute_data::jsonb ||{&quo…...
类的加载机制
类加载的概念 类加载是 Java 虚拟机(JVM)把字节码文件(.class 文件)转变为 Java 类型的复杂且关键的过程。这就如同把一份详细的设计图纸(字节码文件)加工成一个可以实际运行和使用的软件模块(J…...
基于vite创建的react18项目的单元测试
题外话 最近一个小伙伴进了字节外包,第一个活就是让他写一个单元测试。 嗯,说实话,在今天之前我只知道一些理论,但是并没有实操过,于是我就试验了一下。 通过查询资料,大拿们基本都说基于vite的项目&…...
fiddler抓包工具与requests库构建自动化报告
一. Fiddler 抓包工具 1.1 Fiddler 工具介绍和安装 Fiddler 是一款功能强大的 HTTP 调试代理工具,能够全面记录并深入检查您的计算机与互联网之间的 HTTP 和 HTTPS 通信数据。其主界面布局清晰,主要包含菜单栏、工具栏、树形标签栏和内容栏。 1.2 Fid…...
Docker login 报证书存储错误的解决办法
文章目录 docker login 出现错误,提示:Error saving credentials: error storing credentials - err: exit status 1, out: Cannot autolaunch D-Bus without X11 $DISPLAY 环境 使用的是 Mint Linux ,容器为 docker-ce 最新版 1 2 3 4 $…...
【自动化Selenium】Python 网页自动化测试脚本(上)
目录 1、Selenium介绍 2、Selenium环境安装 3、创建浏览器、设置、打开 4、打开网页、关闭网页、浏览器 5、浏览器最大化、最小化 6、浏览器的打开位置、尺寸 7、浏览器截图、网页刷新 8、元素定位 9、元素交互操作 10、元素定位 (1)ID定位 &…...
什么是MyBatis?
MyBatis简介 MyBatis是一款优秀的持久层框架,用于简化Java应用程序对数据库的操作。它曾是Apache的一个开源项目,名为iBatis,2010年迁移到Google Code并改名为MyBatis,2013年11月又迁移到了GitHub。 一、MyBatis的作用 在JavaE…...
TortoiseGit 将本地已有仓库推送到远程
TortoiseGit 将本地已有仓库推送到远程 一、创建线上仓库二、创建本地仓库三、提交内容到本地仓库四、添加远程仓库地址补充 一、创建线上仓库 在gitlab管理面页面按这前讲过的步骤创建一个空仓库。(通常我们把服务器上这个仓库叫远程仓库,把我们自己电…...
腾讯云OCR车牌识别实践:从图片上传到车牌识别
在当今智能化和自动化的浪潮中,车牌识别(LPR)技术已经广泛应用于交通管理、智能停车、自动收费等多个场景。腾讯云OCR车牌识别服务凭借其高效、精准的识别能力,为开发者提供了强大的技术支持。本文将介绍如何利用腾讯云OCR车牌识别…...
TailwindCss 总结
目录 一、简介 二、盒子模型相关 三、将样式类写到一个类里面apply 四、一款TailWind CSS的UI库 一、简介 官方文档:Width - TailwindCSS中文文档 | TailwindCSS中文网 Tailwind CSS 的工作原理是扫描所有 HTML 文件、JavaScript 组件以及任何 模板中的 CSS 类…...
Java与C#
Java和C#(C Sharp)是两种流行的面向对象编程语言,它们在很多方面非常相似,因为它们都受到了类似的编程范式和语言设计理念的影响。然而,它们之间也存在一些重要的区别。 平台依赖性: Java:Java是…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
C++中vector类型的介绍和使用
文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...
