计算机网络八股整理(一)
计算机网络八股文整理
一:网络模型
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是…...
leetcode:222完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最…...
[STM32]从零开始的STM32 FreeRTOS移植教程
一、前言 如果能看到这个教程的话,说明大家已经学习嵌入式有一段时间了。还记得嵌入式在大多数时候指的是什么吗?是的,我们所说的学习嵌入式大部分时候都是在学习嵌入式操作系统。从简单的一些任务状态机再到复杂一些的RTOS,再到最…...
java——Tomcat连接池配置NIO、BIO、APR
Tomcat连接池的配置涉及不同的IO模型,包括NIO(Non-blocking IO,非阻塞IO)、APR(Apache Portable Runtime,Apache可移植运行库)和BIO(Blocking IO,阻塞IO)。以…...
跨域相关的一些问题 ✅
当网页从一个源(https://baidu.com)请求另一个源(如 https://taobao/api)的资源时,就发生了跨域。由于安全原因(防止恶意网站通过脚本访问用户在其他网站上的数据),浏览器对跨域请求…...
RPC学习
一、什么是 RPC RPC(Remote Procedure Call),即远程过程调用,是一种计算机通信协议,它允许运行在一台计算机上的程序调用另一台计算机上的子程序或函数,就好像调用本地程序中的函数一样,无需程序…...
coe文件转mif(c语言)
1 mif文件格式 DEPTH=1024; --The size of data in bits WIDTH=16; --The size of memory in words ADDRESS_RADIX = DEC; --The radix for address values DATA_RADIX = UNS...
【leetcode】动态规划
31. 873. 最长的斐波那契子序列的长度 题目: 如果序列 X_1, X_2, ..., X_n 满足下列条件,就说它是 斐波那契式 的: n > 3对于所有 i 2 < n,都有 X_i X_{i1} X_{i2} 给定一个严格递增的正整数数组形成序列 arr ࿰…...
介绍一下atoi(arr);(c基础)
hi , I am 36 适合对象c语言初学者 atoi(arr);是返回整数(int型),整数是arr数组中字符中数字 格式 #include<stdio.h> atoi(arr); 返回值arr数组中的数字 未改变arr数组 #include<stdlib.h>//atoi(arr); 返 <stdlib> int main(…...
docker入门学习笔记
docker的定义 docker是一个用于构建、运行、传送 应用程序的平台。 为什么要使用docker ? 在开发测试库环境中测试成功后,打包成集装箱,到生产环境也是能够成功的。而传统的安装方式不仅繁琐,并且在测试环境安装后,到…...
使用Python和Pybind11调用C++程序(CMake编译)
目录 一、前言二、安装 pybind11三、编写C示例代码四、结合Pybind11和CMake编译C工程五、Python调用动态库六、参考 一、前言 跨语言调用能对不同计算机语言进行互补,本博客主要介绍如何实现Python调用C语言编写的函数。 实验环境: Linux gnuPython3.10…...
做网站需要什么软件/点击器 百度网盘
参考文章:java 中 “” 和 equals 的区别equals和的区别 - 趙小赵 - 博客园如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存&…...
陕西交通建设集团西镇分公司网站/注册域名后如何建立网站
题意: 洛克人要打败n个robots, 并且每个robot都需要一些特定的武器才可以消灭, 现在给出洛克人的初始化武器和每个机器可以被消灭的特定武器. 问你有多少中消灭全部robots的顺序方式. 解题思路: 1. 看了题目的数据量, n不大, 可以确定用二进制的状态表示. 算法的复杂度O(n*2^…...
在什么网站做调查问卷/百度做个人简介多少钱
package com.Summer_0421.cn;import java.util.Arrays; import java.util.Scanner;/*** author Summer* 使用java面向对象之前的知识 完成规定的功能;* 附加要求 :* 1. 可以注册多个用户* 2. 每个注册的用户都可以登录* 3. 注册的用户名是唯一的* 4. 已经登录的用户 必须注销登…...
做网站怎么租个空间/2023年11月新冠高峰
先看看啥叫深拷贝?啥叫浅拷贝?假设B复制了A,修改A的时候,看B是否发生变化:如果B跟着也变了,说明是浅拷贝,拿人手短!(修改堆内存中的同一个值)如果B没有改变,说明是深拷贝…...
动态网站建设教程/广州seo关键词优化外包
SET GLOBAL max_allowed_packet10000000000; SET GLOBAL net_buffer_length1000000;...
wordpress中文改英文/个人接app推广单去哪里接
UDF顾名思义,就是User defined Function,用户定义函数。我们知道,MySQL本身支持很多内建的函数,此外还可以通过创建存储方法来定义函数。UDF为用户提供了一种更高效的方式来创建函数。既然MySQL本身提供了大量的函数,并…...