【计算机网络】 ------ 前端面试必备 --- 复习专用

1. HTTP协议

HTTP超文本传输协议,是一种实现客户端和服务器之间通信的响应协议,是互联网应用最广泛的一种网络传输协议。

客户端(浏览器)会向服务器提交HTTP请求,然后服务器向客户端返回响应,其中响应包含有关请求的状态信息,还可能包含请求的内容。

1.1 常见的HTTP请求方法

  • GET: 从服务器上获取数据
  • POST:向服务器传送数据
  • PUT:上传文件,更新数据
  • DELETE:删除服务器上的对象
  • HEAD:与GET方法相同,但没有响应体,仅传输状态行和标题部分
  • OPTIONS:询问支持的请求方法,用来跨域请求
  • TRACE: 回显服务器收到的请求,主要⽤于测试或诊断
  • CONNECT:要求在与代理服务器通信时建立隧道,使用隧道进行TCP通信

在这里插入图片描述

1.2 常见的HTTP状态码

在这里插入图片描述

  • 2XX 成功
    200 OK 请求被正常处理
    204 No Content 请求已成功处理,但无资源返回
    206 Partial Content 进行范围请求,服务器只对请求的部分资源执行GET方法
  • 3××重定向
    301 Moved Parmanently 永久重定向 请求的资源已被分配了新的URL
    302 Found 临时重定向 请求的资源被临时定位到新的URL
    303 See Other 资源存在着另一个 URL,应使用 GET 方法获取资源
    304 Not Modified 浏览器缓存相关,发送附带条件请求时,条件不满足时返回,与重定向无关
  • 4××客户端错误
    400 Bad Request 请求报文语法有误
    401 Unauthorized 用户认证失败
    403 Forbidden 服务器拒绝请求
    404 Not Found 服务器没有找到请求的资源
  • 5××服务器错误
    500 服务器内部错误
    502 错误网关
    503 服务器正忙

1.3 GET 和 POST请求的区别

Post 和 Get 是 HTTP 请求的两种方法

  • get 是从服务器上获取数据(比如说请求一个网页的资源)
    post 是向服务器传送数据(比如注册用户这一类的操作)
  • get请求的数据会暴露在地址栏中,而post请求则不会
    get请求的数据会附在URL后面,post的数据放在HTTP包体
  • 安全性问题:post的安全性比get的高
  • get请求传输数据量小,post请求传输数据量大

1.4 HTTP请求 / 响应报文是什么样的

请求报⽂由4部分组成

  • 请求⾏:请求⽅法字段、URL字段、HTTP协议版本字段, ⽤空格分隔
  • 请求头部: 关键字/值对组成,每⾏⼀对, ⽤英⽂冒号:分隔
  • 空⾏
  • 请求体: post put等请求携带的数据

响应报文由4部分组成

  • 响应⾏:由网络协议版本,状态码和状态码的原因短语组成
  • 响应头:响应部⾸组成
  • 空⾏
  • 响应体:服务器响应的数据

1.5 HTTP1.0 和 HTTP1.1 区别 HTTP1.1 和 HTTP2.0 区别

HTTP 1.0和 HTTP 1.1 有以下区别

  • 连接方面:http1.0 默认使用非持久连接,每次请求都需要重新建立TCP连接;需要使用keep-alive参数来告知服务器端要建立一个长连接;http1.1 默认使用持久连接,多个http请求复用同一个TCP连接,相较于1.0减少了连接和关闭的延迟,提高了效率。
  • 节约带宽:http1.0存在一些浪费带宽的现象,http1.1在请求头引入了range头域,允许只请求资源的某个部分
  • HOST域:http 1.1新增了host字段,用来指定服务器的域名
  • 缓存处理:HTTP1.1加入了缓存处理(强缓存/协商缓存)新的字段如Cache-Control,支持断点传输
  • http1.1相对于http1.0新增了很多请求方法,如 PUT、HEAD、OPTIONS 等

HTTP 1.1 和 HTTP 2.0 的区别

  • 二进制协议: HTTP2 采用二进制数据帧传输,取代了 HTTP1.x 的文本格式,二进制格式解析更高效,帧的概念是它实现多路复用的基础
  • 多路复用:HTTP2 实现多路复用代替了HTTP1.x的序列和阻塞机制,同一个TCP连接并发处理多个请求,避免了队头阻塞问题。
    实现原理:HTTP2引入了一个二进制分帧层,客户端和服务端进行传输时,数据会先经过二进制分帧层处理,转化为一个个带有请求ID的帧,这些帧可以乱序发送,然后再根据每个帧头部的流标识符重新组装
  • 头部压缩:HTTP1.1不支持header数据的压缩,HTTP2.0可以对header的数据进行压缩,提高网络传输速度
  • 服务器推送:HTTP2.0允许服务器未经请求,主动向客户端发送资源,免得客户端再次发送请求到服务器端获取,降低延迟

1.6 HTTP缓存(强缓存协商缓存)

哪些资源可以被缓存——静态资源(js、css、img)

HTTP缓存策略分为两种:强缓存和协商缓存,根据响应的 header 内容来决定

强缓存:直接从浏览器缓存过的本地读取资源,不会去请求服务器;
Expires 控制缓存过期,已被Cache-Control代替

协商缓存:在使用本地的缓存之前,先向服务器发一个请求,看当前浏览器缓存是否过期,如果没过期:返回304,使用本地资源,如果过期就去请求最新资源

1.7 当在浏览器中输入网址并按下回车发生什么

  1. 解析URL: 使用的传输协议和请求资源的路径
  2. DNS域名解析:DNS将域名解析为IP地址
  3. 浏览器通过IP地址找到服务器,建立TCP连接(三次握手)
  4. TCP三次握手结束后,开始发送HTTP请求
  5. 服务器处理请求,并返回HTTP响应报文
  6. 浏览器拿到响应文本HTML后,解析渲染页面
  7. 当数据传送完毕后,断开TCP连接(四次挥手)

1.8 HTTP 协议和 HTTPS 区别(必考)

HTTP(超文本传输协议)
HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,被用于在 Web 浏览器和网站服务器之间传递信息。因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

HTTPS(超文本传输安全协议)
HTTPS 经由 HTTP 进行通信,利用 SSL/TLS 来加密数据包。HTTPS 提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

区别

  • HTTP 明文传输,数据都是未加密的,安全性较差; HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好
  • HTTP和HTTPS连接方式完全不同,端口也不同,HTTP协议端口是80,HTTPS协议端口是443
  • HTTP 页面响应速度比 HTTPS 快,因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包
  • HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以, HTTPS 比 HTTP 要更耗费服务器资源
  • HTTPS协议需要CA申请证书,费用较高,而HTTP协议不需要

2. HTTPS协议

2.1 什么是HTTPS协议

HTTP超文本传输协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险;

HTTPS超文本传输安全协议:经由HTTP进行通信,利用SSL/TLS来加密数据包,协议TLS/SSL具有身份验证、信息加密和完整性校验的功能;
HTTPS的主要目的是提供对网站服务器的身份认证,保护交换数据的隐私与完整性;

加密:明文+密钥 -> 密文
解密:密文+密钥 -> 明文
加密方式在整体上分为两大类:对称加密和非对称加密
对称加密:指的是明文在加密和暗文在解密过程中都使用同一个密钥
非对称加密:一般使用两个密钥,一个是称为公钥,另一个叫做私钥。私钥就可以对密文解密也可以对明文进行加密,公钥也一样。一般情况来说客户端可以获得公钥,而服务器一般使用私钥。

2.2 对称加密 / 非对称加密(SSL/TLS)

TLS/SSL的工作原理
TLS/SSL的功能实现主要依赖三类基本算法:散列函数hash、对称加密、非对称加密

TLS/SSL(安全传输层协议) = 散列函数hash + 对称加密 + 非对称加密

  • 基于散列函数验证信息的完整性
    常见的散列函数有MD5、SHA1、SHA256
  • 对称加密算法采用协商的秘钥对数据加密
    对称加密的优势就是信息传输使用一对一,需要共享相同的密码
  • 非对称加密实现身份认证和秘钥协商
    秘钥成对出现,一般称为公钥(公开)和私钥(保密),公钥加密的信息只有私钥可以解开,私钥加密的信息只能公钥解开
    非对称加密的特点就是信息一对多,服务器只需要维持一个私钥就可以和多个客户端进行通信,但服务器发出的信息能够被所有的客户端解密,且该算法的计算复杂,加密的速度慢。
    常见的非对称加密算法有RSA、ECC、DH等

2.3 数字证书CA

因为对称加密的效率比非对称加密高很多, 因此只是在开始阶段协商密钥的时候使用非对称加密, 后续的传输仍然使用对称加密。https采用 非对称加密+对称加密 结合的方式 来进行加密

但是如果客户端获取的公钥是黑客伪造的,那么其后续的加密就没有用了。
为了解决这一问题:通常在客户端和服务器建立的时候,服务器给客户端返回一个数字证书,该证书里面就包含公钥,也包含了网站的信息。

这个方法主要是认证中心的可靠性,一般浏览器里会内置一些顶层的认证中心的证书,相当于我们自动信任了他们,只有这样才能保证数据的安全。

总结HTTPS传输过程

  • 客户端先从服务器获取到证书,证书中包含公钥,然后将证书进行校验
  • 客户端生成一个对称密钥,用证书中的公钥进行加密,发送给服务器
  • 服务器得到这个请求后用私钥进行解密,得到该密钥
  • 客户端以后发出后续的请求,都使用这个对称密钥进行加密
  • 服务器收到这个密文也用这个密钥进行解密

2.4 HTTPS的缺点

(1)除了和TCP连接,发送HTTP请求外,还必须和SSL通信,因此通信慢;
(2)SSL必须进行加密处理,在服务器和客户端都需要进行加密和解密的运算处理,因此耗费更多硬件资源,过程复杂;
(3)申请SSL证书需要费用

3. DNS域名解析的过程

DNS (域名系统)提供的是一种主机名到 IP 地址的转换服务
作用: 将域名解析为IP地址,客户端向DNS服务器发送域名查询请求,DNS服务器告知客户端Web服务器的 IP 地址

  • 首先会在浏览器的缓存中查找对应的IP地址,如果查找到直接返回,若找不到继续下一步
  • 将请求发送给本地DNS服务器,在本地域名服务器缓存中查询,如果查找到,就直接将查找结果返回,若找不到继续下一步
  • 本地DNS服务器向根域名服务器发送请求,根域名服务器会返回一个所查询域的顶级域名服务器地址
  • 本地DNS服务器向顶级域名服务器发送请求,接受请求的服务器查询自己的缓存,如果有记录,就返回查询结果,如果没有就返回相关的下一级的权威域名服务器的地址
  • 本地DNS服务器向权威域名服务器发送请求,域名服务器返回对应的结果
  • 本地DNS服务器将返回结果保存在缓存中,便于下次使用
  • 本地DNS服务器将返回结果返回给浏览器

4. 网络模型

4.1 OSI七层模型

在这里插入图片描述

  • 应用层:HTTP(超文本传输协议),HTTPS,FTP(文件传输协议)、SMTP(简单邮件传输协议)
  • 传输层:TCP UDP
  • 网络层:IP协议层

4.2 TCP/IP参考模型

在这里插入图片描述

  • 物理层通过物理手段把电脑连接起来
  • 数据链路层则对比特流的数据进行分组
  • 网络层来建立主机到主机的通信
  • 传输层建立端口到端口的通信
  • 应用层最终负责建立连接,数据格式转换,最终呈现给用户

5. TCP与UDP

TCP和UDP是OSI模型中的传输层中的协议

  • TCP

TCP是一种面向连接的传输层协议,在传输数据之间必须先建立连接,数据传输结束后要释放链接。TCP提供可靠传输,它的可靠性体现在传输数据之前会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传输完断开连接。
TCP采用大小可变的滑动窗口进行流量控制,窗口大小的单位是字节,这里说的窗口大小其实就是每次传输的数据大小。

  • UDP(用户数据报协议)

UDP是面向无连接的,不需要在发送数据前进行三次握手建立连接,远程主机在收到UDP报文之后,不需要给出任何确认,虽然不可靠,但是高效,可用于即时通信

5.1 TCP与UDP区别

  • TCP 面向连接,UDP是 面向无连接(发送数据前不需要建立链接)
  • TCP可靠传输(数据顺序和正确性),使用流量控制和拥塞控制;UDP仅提供最基本的数据传输能力,无法保证可靠
  • TCP只能是一对一通信,UDP支持一对一、一对多、多对一和多对多的交互通信
  • TCP面向字节流,UDP面向报文
  • TCP数据传输慢,UDP数据传输快
  • TCP适用于要求可靠传输的应用(文件传输、远程登录);UDP适用于实时应用(视频会议、语音直播)

5.2 三次握手

TCP三次握手是客户端和服务器建立连接的方式,目的是为了使二者能够建立连接,便于后续的数据交互传输。

刚开始客户端处于 Closed 的状态,服务端处于 Listen 状态

  • 第一次握手:客户端发送带有 SYN 标志的连接请求数据包给服务端,请求发送后,客户端便进入 SYN-SEND 状态等待服务器确认

  • 第二次握手:服务端收到客户端syn包并确认,同时服务端发送带有 SYN+ACK 标志的连接请求和应答数据包给客户端,发送完成后服务器进入 SYN-RECEIVED 状态

  • 第三次握手:客户端收到服务器的SYN+ACK包,并发送带有 ACK 标志的应答数据包给服务端,发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手,建立链接成功。

  • 第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。

  • 第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。

  • 第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。
    因此,需要三次握手才能确认双方的接收与发送能力是否正常

为什么要三次握手,而不是两次握手/四次握手(重点)

  • 阻止历史重复连接(主要原因)
  • 同步双方的初始序列号
  • 才可以避免重复建立连接

5.3 四次挥手

刚开始双方都处于 establised 状态,假如是客户端先发起关闭请求:

  • 第一次挥手: 若客户端认为数据发送完成,则它需要向服务端发送连接释放请求
  • 第二次挥手:服务端收到连接释放请求后,会告诉应用层要释放 TCP 链接。然后会发送 ACK 包,并进入 CLOSE_WAIT状态,此时表明客户端到服务端的连接已经释放,不再接收客户端发的数据了。但是因为 TCP 连接是双向的,所以服务端仍旧可以发送数据给客户端
  • 第三次挥手:服务端如果此时还有没发完的数据会继续发送,完毕后会向客户端发送连接释放请求,然后服务端便进入 LAST-ACK 状态
  • 第四次挥手: 客户端收到释放请求后,向服务端发送确认应答,此时客户端进入 TIME-WAIT 状态。该状态会持续2MSL时间,若该时间段内没有服务端的重发请求的话,就进入 CLOSED状态。当服务端收到确认应答后,也便进入 CLOSED 状态

为什么握手要3次,挥手要4次?

  • 因为TCP是双工传输模式,不区分客户端和服务端,连接的建立是双向的过程。三次握手确认双方的接收能力和发送能力都正常,如果只有两次,无法做到双向连接的建立
  • 因为TCP的连接是全双工的,所以需要双方分别释放到对方的连接,单独一方的连接释放,只代表不能再向对方发送数据,连接处于的是半释放的状态。

6. 进程和线程

当我们启动某个程序时,操作系统会给该程序创建一块内存(当程序关闭时,该内存空间就会被回收),用来存放代码、运行中的数据和一个执行任务的主线程,这样的一个运行环境就叫进程。
而线程是依附于进程的,在进程中使用多线程并行处理能提升运算效率,进程将任务分成很多细小的任务,再创建多个线程,在里面并行分别执行

6.1 进程和线程的区别

进程可以看做独立应用,线程不能

  • 根本区别:进程是CPU资源分配的最小单位,线程是CPU调度的最小单位。一个程序至少有一个进程,一个进程至少有一个线程。同一进程中的多个线程之间可以并发执行
  • 进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源
  • 资源开销:进程切换比线程切换的开销要大。线程可以看做轻量级的进程,线程切换开销较小
  • 包含关系:线程不能独立于进程而存在,通常一个进程都有若干个线程
  • 不同进程间数据很难共享,同一进程下不同线程间数据很易共享

进程之前的通信方式

  • 管道通信
  • 消息队列通信
  • 信号量通信
  • 共享内存通信
  • 套接字通信

6.2 死锁

死锁:多个进程在执行过程中,由于竞争资源而造成阻塞的现象,若无外力作用,它们都将无法继续执行

产生死锁的原因:竞争不可剥夺资源 、竞争临时资源、进程推进顺序不当
产生死锁的条件:互斥条件、请求和保持条件、不剥夺条件、环路等待条件

预防死锁方法:

  • 资源一次性分配:一次性分配所有资源,这样就不会再有请求了(破坏请求条件)
  • 只要有一个资源得不到分配,其他资源也不给了(破坏请保持条件)
  • 可剥夺资源:即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源(破坏不可剥夺条件)
  • 资源有序分配法:系统给每类资源赋予一个编号,进程则按照这些号码去请求获取资源(破坏环路等待条件)

7. WebSocket

WebSocket的出现,使得浏览器具备了实时双向通信的能力。
它最大的特点是:服务器可以向客户端主动推送消息,客户端也可以主动向服务器推送消息。

WebSocket是HTML5提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。基于TCP传输协议,并复用HTTP的握手通道。
浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接, 并进行双向数据传输。

优点
支持双向通信,更灵活,更高效,可扩展性更好。
更好的二进制支持

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值