计算机基础
1.TCP三次握手讲解
第一次握手:(客户端:告诉服务端:我要连接你)
客户端发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,服务器由SYN=1知道客户端要求建立联机
第二次握手:(服务器:告诉客户端已收到:好的,你来连吧)
服务器收到请求后要确认联机信息,向A发送ack number=(客户端的seq+1),syn=1,ack=1,随机产生seq=7654321的包
第三次握手:(客户端:验证完毕后向服务端发送数据)
客户端收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,客户端会再发送ack number=(服务器的seq+1),ack=1,服务器收到后确认seq值与ack=1则连接建立成功。
2.为什么http建立连接需要三次握手,不是两次或四次?
答:三次是最少的安全次数,两次不安全,四次浪费资源;
3.TCP关闭连接过程
1.客户端请求关闭:(告诉服务端:我马上要关闭了,你传完没有)
Client向Server发送FIN包,表示Client主动要关闭连接,然后进入FIN_WAIT_1状态,等待Server返回ACK包。此后Client不能再向Server发送数据,但能读取数据。
2.服务端接受关闭提醒:(我知道你马上要关闭了,我还有数据没传完等下关闭)
Server收到FIN包后向Client发送ACK包,然后进入CLOSE_WAIT状态,此后Server不能再读取数据,但可以继续向Client发送数据。
3.客户端收到接受数据的信息:(我知道了,我先不关,你赶紧把数据发完)
Client收到Server返回的ACK包后进入FIN_WAIT_2状态,等待Server发送FIN包。
4.服务端发完数据自己自闭(我把最后的数据发完了,你收到了回复一下)Server完成数据的发送后,将FIN包发送给Client,然后进入LAST_ACK状态,等待Client返回ACK包,此后Server既不能读取数据,也不能发送数据。
5.客户端接收到最后的数据(收到最后的数据后告诉服务端:我已经收到了最后的数据,你赶紧关闭你自己吧,我等你2ms我就自己也关闭了,不用回复我了)
Client收到FIN包后向Server发送ACK包,然后进入TIME_WAIT状态,接着等待足够长的时间(2MSL)以确保Server接收到ACK包,最后回到CLOSED状态,释放网络资源。
6.服务端知道客户端收到了数据,自己进入关闭状态
Server收到Client返回的ACK包后便回到CLOSED状态,释放网络资源。
4.为什么要四次挥手?
TCP是全双工信道,何为全双工就是客户端与服务端建立两条通道
通道1:客户端的输出连接服务端的输入;
通道2:客户端的输入连接服务端的输出。
两个通道可以同时工作:客户端向服务端发送信号的同时服务端也可以向客户端发送信号。
所以关闭双通道的时候就是这样:
客户端:我要关闭输入通道了。
服务端:好的,你关闭吧,我这边也关闭这个通道。
服务端:我也要关闭输入通道了。
客户端:好的你关闭吧,我也把这个通道关闭。
5.四次挥手
四次挥手
(1)第一次挥手:Client向Server发送FIN标志,用于关闭Client到Server的数据传送,并发送序列号a,进入FIN_WAIT_1状态。这表示Client告诉Server我已经没有数据要发给你了。
(2)第二次挥手:Server接收到FIN标志后,发送一个ack=a+1,告知Client它已经接收到了关闭请求,进入CLOSE_WAIT状态。Clinet接收到回应后进入FIN_WAIT_2状态。
(3)第三次挥手:Server发送FIN标志,用于关闭Server到Client的数据传送,并发出序列号b,进入LAST_ACK状态。这表示Server告诉Client我也没有数据要发送给你了。
(4)第四次挥手:Client接收到FIN标志后,发送一个ack=b+1,告知Server它已经接收到请求关闭,进入TIME_WAIT状态。Server接收到回应进入CLOSED状态。等待2MSL后,Client依然没有收到其他回复,则也进入CLOSED。
6.CDN?引入方式?
CDN是什么?为什么需要CDN引入方式?和传统的npm安装对比的优点是什么?
7. 进程、线程(Chrome多线程浏览器)
单线程:任务一个一个按照顺序执行
多线程:多任务一起执行(人多办事快,但是需要稳定妥善的管理系统,不然就容易混乱)
进程与线程的关系
线程是不能单独存在的,它是由进程来启动和管理的,一个进程就是一个程序的运行实例,拥有多个线程来运行这个程序。
线程是依附于进程的,而进程中使用多线程并行处理能提升运算效率。
线程之间共享进程中的数据。
当一个进程关闭后,操作系统会回收进程所占用的内存。
8.计算机网络的五层模型
物理层:光纤连接两台电脑,实现通信(电信号01方式传输数据)
数据链路层:规范数据传输形式(‘帧’传输)
以太网协议:
//规定数据发送的类型:head+data
表头head:用于储存发送者信息进行识别
表体data:被传输的数据
//规定两台计算机的识别标识:MAC 地址(每台计算机都具有的唯一标识:身份证)(计算机的物理地址)
(当在同子网进行广播时,A为什么能发送到B上去:是因为你知道它的MAC地址,所以才能发送过去)
网络层:用IP地址判断是否属于一个子网、精确找到对应计算机(建立主机到主机的通信)
//数据的精确传输路径
计算机A--计算机B:光纤
应用程序A--应用程序B:IP地址和端口
//数据传播方式:广播
同子网:计算机A在一个子网里向这个子网所有计算机都广播发送数据包A,其他计算机BCD都接受到这个数据包A,并解析是不是发送给自己的,如果不是就丢弃。
异子网:不在一个子网的情况下计算机A就会先将数据包A发送给网关,然后由网关转发给其他人
传输层:建立端口到端口的通信(数据使用者的确定)
9.同源策略与跨域
同源、跨域是什么//两个页面的协议、域名、端口都一样,这两个页面就具有相同的源,称为同源,反之有一样不一样就是跨域
同源策略是什么是浏览器提供的一个安全功能
作用:限制两个非同源网站的资源交互(无法跨域读取DOM、无法发送Ajax请求等)
拦截跨域的流程A网页发送跨域请求到B网页,B网页能接收到请求,将数据返回到A网站的路上要经过浏览器设置的同源策略,浏览器进行检测出你是跨域行为,就不会允许你将数据返回给A网站=拦截
跨域实现:JSONP
- 实现原理:
<script>标签不受同源策略的影响,通过scr属性请求跨域的数据接口,用函数调用的形式接受响应回来的数据
2.缺点:
只支持get请求
10.IP地址?子网掩码?
//IP地址的组成:网络部分+主机部分`192.168.43.1`
(但是在判断是否为一个子网时你不知道网络部分是前几位代表网络部分,后几位是主机部分)
//IP地址的作用:判断两台计算机MAC地址是否在一个子网
//如何判断是否在一个子网:网络部分IP地址相同即在一个子网
//子网掩码的作用:解析出网络部分和主机部分(判断出前几位是网络部分,后几位是主机部分)
11.端口?
作用:确定数据使用者(应用程序)
在传输层中,数据已经到了我们的计算机当中,但是数据给哪个程序并没有指定。于是乎就有了端口,计算机上的每一个程序占用一个端口,数据传输层协议中会标明这个端口号,以此将数据准确的传递给对应的客户端。
12.接口API?
接口使用方:对外界『依赖』的抽象,表明其依赖哪些能力;(我要使用扳手工具进行拧螺丝(调用特定功能的接口实现自己的需求)
接口实现方:对自我『能力』的抽象,宣称其具备哪些能力。(将自己的能力(功能)封装为一个名字:扳手,调用扳手就是在使用我的能力)
1.数据接口:
获取图书列表页面的数据:
使用url数据接口,调用url:http://www.book.com/api/getbookslist接口获取数据
(数据包裹为包,将包留一个口,这个口就是接口,调用/输送数据都从这个口出去,不调用接口你就不能获取里面的数据)
2.组件接口:
解耦思想,将组件结构和内容分离,父组件调用子组件(接口),即可使用子组件进行展示。
(接口的优点:父组件只需关心调用子组件实现功能,不关心子组件是如何实现这种功能的)
13.HTTP协议
什么是http协议?
是什么?
//基于TCP/IP的关于数据如何在万维网中如何通信的协议
(基于TCP/IP的意思:实质上数据的传输的TCP/IP来传输,http只是个格式)
作用:
//相当于写信通信,http协议就是写信的格式,大家都遵循这个格式就能互相识别
实现客户端和服务器之间实现网页内容的传输,双方都必须遵守网页内容的传输协议
格式:(请求报文)
HTTP请求报文分为三个部分:请求行,请求头,请求体(get无,post有请求体)
请求头:
http的响应报文
响应:Response Header
请求:Request Header
状态码
状态码大全
用来标识响应状态
常见状态码
2XX 成功
200 OK,表示从客户端发来的请求在服务器端被正确处理
204 No content,表示请求成功,但响应报文不含实体的主体部分
206 Partial Content,进行范围请求
3XX 重定向
301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
302 found,临时性重定向,表示资源临时被分配了新的 URL
303 see other,表示资源存在着另一个 URL,应使用 GET 方法丁香获取资源
304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况
307 temporary redirect,临时重定向,和302含义相同
4XX 客户端错误
400 bad request,请求报文存在语法错误
401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息
403 forbidden,表示对请求资源的访问被服务器拒绝
404 not found,表示在服务器上没有找到请求的资源
5XX 服务器错误
500 internal sever error,表示服务器端在执行请求时发生了错误
503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求
14.资源的请求方式:get和post的区别
是什么?
get和post是什么?
HTTP协议中的两种发送请求的方法
行为:
get请求:向服务器要资源
post请求:向服务器发送(提交)资源
使用场景:
get使用场景:
1.根据url地址,向服务器请求资源:文字数据、img数据等
post使用场景:
1.登录时向服务器发送密码账户信息资源
2.添加用户信息(用户评论时),向服务器提交用户信息
表面区别:
GET
GET请求的数据会附加在URL之后,用?分割,多个参数用&进行连接。(并不是一定的,写法只要服务端能解析就能任意写法)
GET请求的数据会暴露在地址栏中。(网址)
GET请求URL的编码格式采用的是ASCII编码,而不是Unicode编码。
GET请求传输大小有限制,大小在2KB。(网址随意理论上能一直加数据请求,但是你加太多了,对于性能差的服务端/浏览器会造成解析困难,所以一般浏览器限制你的数据大小在2kb,大多数服务器能解析的大小限制在64kb)(服务器是因为处理长 URL 要消耗比较多的资源,为了性能和安全(防止恶意构造长 URL 来攻击)考虑,会给 URL 长度加限制。)
GET相对安全性较差,会被浏览器主动缓存。(表面的安全性体现在:如果你密码账号储存到网址中都能被人直接看到,你不担心?)
(本质的安全性:安全性都是一样的,因为他俩本质是tcp协议,传输层相同,而HTTP协议是明文传输,未加密的,所以get和post都能被看到的,post只不过是将数据放在文件夹里了,你只要打开文件夹依然能看到数据。所以需要使用Https加密协议)
GET产生一个TCP数据包,head和data一起发送。(识别头head和数据体data)
GET浏览器回退无害
POST
POST请求会把数据放置在HTTP请求包的包体中,不会直接暴露给用户。(新建文件-数据放里面--发送文件给服务端)
POST请求,理论上大小是不会限制的,但是实际上各个服务器会规定POST提交数据大小。
POST相对Get更安全,因为参数不会保存浏览器立式或者是web服务器日志中。(用户通过浏览器F12看不到数据的)
POST产生两个TCP数据包,header先发送,服务器响应100然后继续,发送data,服务器响应200然后返回数据。
(HTTP 协议中也并没有明确说明 POST 会产生两个 TCP 数据包,而且实际测试(Chrome)发现,Header 和 Body 不会分开发送。所以,Header 和 Body 分开发送是部分浏览器或框架的请求方法,不属于 Post的必然行为。)
POST浏览器回退重新请求。
本质区别:无区别
GET和POST只是HTTP协议中的两种请求方式,而HTTP协议是基于TCP/IP的应用层协议,无论GET还是POST,用的都是同一个传输层协议,所以在传输上,没有区别。
15.客户端与服务器
就是两台不同用途的电脑
1.上网的目的:为了获取资源、浏览、消费资源
2.服务器:对外负责存放/提供资源的电脑,称为服务器(服务器本质就是一台电脑,只不过性能很高,用于储存发送大量数据)(资源储存的地方)
3.客户端:负责获取/消费资源的电脑,称为客户端(获取资源的地方)(通常使用浏览器来浏览资源和获取资源)
16.url组成部分
客户端与服务端通信的过程
服务器发送资源=服务器进行了响应