【计算机网络】前端应该知道的计算机网络知识点

895 阅读17分钟

前言

计算机网络知识本身是庞大而高深,近期整理了一些必备的计算机网络知识,也算是自己的计算机知识体系,分享给大家一起来学习。如有问题,欢迎指正。

1. HTTP协议的理解

HTTP超文本传输协议: 是一种基于TCP/IP应用层的通信协议,规定了浏览器和服务器之间互相通信的规则。客户端浏览器发出请求,发送数据,请求报文,服务器返回数据,响应报文。

特点:

  • 简单快速:客户端只传送请求方式和路径,然后通过浏览器或其他方式将该请求进行发送即可。
  • 灵活:允许客户端和浏览器传输任意类型数据对象。
  • 无连接:每次只处理一个请求,收到客户应答后,断开连接。
  • 无状态:任意请求之间没有依赖关系。

HTTP历史:

image.png

2. HTTP1.0和HTTP1.1区别

(1)长连接

TCP连接不可复用,每进行一次HTTP通信,都需要三步走——TCP连接、HTTP通信、断开TCP连接,这就是短连接。

image.png

当多次请求就要多次消耗TCP连接资源,当通信频率比较高时,CPU和内存的使用就会比较高。

HTTP1.1实现的优化就是一个TCP连接可以进行多次HTTP通信机制,实现长连接。

image.png

(2)管线化

管线化主要是解决队头阻塞问题(请求与请求间是串行的,只有当A请求响应回来,B请求才能发送。

在HTTP1.1中,允许将多个 HTTP 请求批量地提交给服务器。但是仍然没有解决串行相应问题。

3. 对Keep-Alive的理解

长连接使用就是keep-Alive模式,keep-Alive功能是客户端到服务器端连接持续有效,当出现对服务器后继请求时,避免了建立或者重新建立连接。

开启Keep-Alive优点:

  • 较少的CPU和内存使用(由于同时打开的连接减少了)
  • 允许请求和应答HTTP管线化
  • 降低阻塞控制(TCP连接减少了)
  • 减少了后续请求和延迟(无需再进行握手)
  • 报告错误无需关闭TCP连接

开启Keep-Alive缺点:

  • 长时间的TCP连接容易导致系统资源无效占用,浪费系统资源。  

4. HTTP1.1和HTTP2.0的区别

(1)二进制分帧

1版本中,数据是以文本格式进行传输,解析起来效率低。 2版本中,将消息划分为更小的消息和帧,然后在采取二进制格式编码,更加高效解析。

(2)头部压缩

2版本中,客户端和服务器分别会维护一份相同的静态字典,字典存储头部名称和值,同时还会同时维护一份相同的动态字典,动态字典可以实时更新。

这样以来,第一次通信后,后面的请求只需要发送前面请求头部不同的地方,其他的头部信息可以从字典中获取,节省网络开销。

(3)服务端推送

1版本中,当请求A资源发现需要资源B,需要在消耗一个请求去请求B。

2版本中,允许服务器主动向客户端push资源,当服务器发现客户端请求A资源时,却忘了请求A资源依赖的B资源时,会主动将B资源推送给客户端。

(4)多路复用

解决队头阻塞问题,一次连接建立后,只要这个连接还在,那么客户端就可以在一个连接中批量发起多个请求。同时请求与请求间不阻塞。

5. HTTP3.0聊一聊

基于UDP 封装一层QUIC 协议进行实现,集成TLS加密功能,快速握手,多路复用,彻底解决了TCP阻塞问题。 68747470733a2f2f63646e2e6e6c61726b2e636f6d2f79757175652f302f323032302f776562702f313530303630342f313630343036383234363237362d39623066353533642d336336652d343361332d383138352d3835363566396661316662342e77656270.webp

6. HTTP和HTTPS的区别

  1. HTTP信息是明文传输,HTTPS则是具有安全性的SSL/TLS加密传输。
  2. HTTPS协议需要申请CA证书,免费的证书比较少,因此需要一定的费用。
  3. HTTP端口是80,HTTPS端口是443。
  4. HTTPS相比HTTP握手阶段比较费时,会使页面加载时间延长50%。
  5. HTTPS缓存不如HTTP高效,会增加数据开销。

7. SSL/TLS的理解

HTTPS经由HTTP进行通信,利用SSL/TLS来加密数据包,相比于HTTP更加安全。

image.png

TLS/SSL全称安全传输层协议(Transport Layer Security),是介于TCP和HTTP之间的一层安全协议,不影响原有的TCP协议和HTTP协议,所以使用HTTP基本上不需要对HTTP页面进行太多改造。

主要职责:对发起的HTTP请求数据进行加密操作和对接收HTTP内容进行解密操作。

image.png

8. 对称加密和非对称加密

对称加密:一个key负责加密和解密

image.png

非对称加密:一对kye,A加密之后,只能用B来解密

image.png

9. HTTPS 协议解析流程

客户端在使用 HTTPS 方式与 Web 服务器通信时主要包括三个步骤:证书验证、非对称加密、对称加密。

  • 证书验证:

1、客户端请求网址

2、服务端在第三方机构申请证书,证书包含(key/pubKey),传递给客户端

  • 非对称加密:

3、客户端验证证书合法性 ,取出公钥生成随机数并且加密,传递服务端

4、服务端用私钥随机数进项解密

  • 对称加密:

5、客户端,服务器端都有了随机数,以后的对话过程都使用这个秘钥来加密信息,对称加密进行传输。

image.png

10. HTTPS一定安全吗

Https不是绝对的安全,是现在构架下最流行的解决方案,它大幅增加了中间人攻击的成本。 网络安全防御的目的是提高攻击成本,并不能做到滴水不漏。就算你的网站主动防御武装到牙齿,外部因素都会影响到你网站的安全,只是实施攻击需要更高的成本,如果收益不远超成本,攻击者一般不会实施。

可能存在的隐患:

  • 在某些国家可以控制CA 根证书的情况下,中间人攻击一样可行。中间人攻击常发生在公共WIFE或路由上。
  • 证书有问题,但用户继续访问或设置授信,也会发生“中间人”攻击可能性。
  • 在本地随机数( 秘钥) 安全方面,HTTPS也无能为力,只能借助杀毒软件、漏洞升级等来防护。
  • 同时,在黑客攻击、拒绝服务攻击、服务器劫持等方面,HTTPS几乎起不到作用。

11. HTTP常见请求头

Resquest Headers

  • Accept 浏览器可接受的数据格式
  • Accept-Encoding 浏览器可接受的压缩算法 ,如gzip
  • Accept-Language 浏览器可接受的语言,如zh-CN
  • Connection:keep-alive 一次TCP连接重复使用
  • Cookies 每次请求都会带着
  • Host 请求的域名
  • User-Agent (UA) 浏览器信息
  • Content-type 发送数据的格式,如application/json

Response Headers

  • Content-type 返回数据的格式,如:application/json
  • Content-length 返回数据的大小,多少字节
  • Content-Encoding 返回数据的压缩算法,如gzip
  • set-Cookies

12. 缓存相关的请求头

Resquest Headers

  • If-Modified-Since
  • If-None-Match

Response Headers

  • Last-Modified
  • Etag

13. HTTP状态码

由三个数字组成,第一个数字定义了响应类别。

1:临时响应 2:成功响应 3:跳转响应 4:客户端错误 5:服务器错误

  • 200:请求成功,客户端的请求已被服务器处理完毕
  • 301:重定向,永久性跳转,表示请求的资源已被分配新的URL
  • 302:重定向,临时性跳转,表示请求的资源临时被分配新的URL
  • 304:请求的资源未被修改,浏览器将会读取缓存。
  • 403:请求的页面被禁止访问。
  • 404:请求的资源没有找到。
  • 500:请求资源找到了,但服务器内部出现了错误。
  • 500 内部错误、502 网关错误、504 网关超时

14. 产生304状态码的原因及影响

状态码304不认为是一种错误,而是客户端有缓存情况下服务端的一种响应。

原因:页面长时间不更新或者纯静态页面。

影响:主要是对seo的影响,收录减少,权重下降。

15. TCP与UDP的辨析

TCP协议下,连接需要建立三次握手,四次挥手,TCP别成为面向连接的可靠传输。UDP没有这些,相比较比较随意,无连接的不可靠传输,UOD适用于络电话、视频会议、在线直播。而像文件传输这样对可靠性和稳定性要求比较高适用于TCP。

UDPTCP
是否连接无连接面向连接
是否可靠不可靠传输,不使用流量控制和拥塞控制可靠传输(数据顺序和正确性),使用流量控制和拥塞控制
连接对象个数支持一对一,一对多,多对一和多对多交互通信只能是一对一通信
传输方式面向报文面向字节流
首部开销首部开销小,仅8字节首部最小20字节,最大60字节
适用场景适用于实时应用,例如视频会议、直播适用于要求可靠传输的应用,例如文件传输

16. HTTP请求方法

  • GET:获取数据,参数在query 中
  • POST:提交数据,参数在body中
  • PUT:与POST请求类似,指向的具体资源,可以理解为put为更新数据,post为创建数据
  • DELETE:删除指定资源
  • HEAD:只请求页面的头部,不请求页面内容,允许我们单纯获取服务器响应头
  • OPTIONS:询问支持的请求方法,用来跨域请求

17. GET/POST的区别

GET和POST都是http请求方法。

  • GET主要是用户获取数据,POST主要是用户来提交数据
  • 安全性,GET参数是暴露在url中,相对来说不是特别安全,POST参数是放在请求体中,较为安全
  • GET传递的数据大小有限制,一般是4k,而POST没有限制
  • 是否缓存:浏览器一般会对get请求缓存,很少对post缓存
  • 参数类型:post的参数传支持更多的数据类型
  • GET请求报文请求方法为GET,POST请求报文方法为POST

18. Get方法URL限制原因

HTTP协议规范并没有对get方法请求的url长度进行限制,这个限制是特定的浏览器和服务器对它的限制。

不同浏览器,服务器对url长度是不同的,其中ie限制运行的字符最小,ie规定get方法url长度不超过2083字符,也就是说,在2083这个范围下,所有的浏览器和服务都可能正常工作。

19. 输入UTL到页面展示全过程

大概分为三个步骤:网络请求、解析渲染、断开连接。

1、网络请求

  • DNS解析:将域名解析为IP地址

  • 客户端与服务器建立TCP连接:三次握手

  • 客户端发送请求

  • 服务器处理请求,得到HTML源代码。(遇到静态资源css/js/视频/图片会继续请求)

2、解析页面

  • 浏览器解析并渲染页面,浏览器根据 HTML 文件构建 DOM

  • 根据CSS文件构建CSSDOM树(style tree)

  • 两者结合,形成 Render Tree

  • Render Tree 渲染到界面

3、断开连接,四次挥手

20. TCP的三次握手和四次挥手

三次握手

浏览器发出请求,请求报文为:SYN=1,ACK=0,seq=x(记录序号)
服务器进行确认,报文内容为:SYN=1,ACK=1,seq=y(自己的初始化序号),确认号ack=x+1
浏览器再一次进行确认,ACK=1,seq=x+1,ack=y+1

TCP为什么一定要握手三次?

因为这样更加保险,安全,稳定,通过三次握手,浏览器和服务器端都经历请求和响应,确保双方都具有发送和响应的能力。

四次挥手

浏览器数据发送完毕,请求释放链接。发送FIN =1,seq=x。
服务器确认,回复ACK=1,确认码ack=x+1,自己的序列号seq=y。
浏览器觉得是时候该结束了,抛出FIN=1,确认标识 ACK=1、确认码 ack=x+1,以及自己的新序列号 seq=z。
服务器抛出ACK=1 的报文。当然啦,一起过去的还有确认码 ack=z+1,确认标识 ACK=1,以及自己的新序列号 seq=x+1。

TCP为什么一定要握手三次?

因为这样更加保险,安全,稳定,通过三次握手,浏览器和服务器端都经历请求和响应,确保双方都具有发送和响应的能力。

21. OSI七层网络模型详解

计算机网络为什么要分层?

不同层实现不同的功能,识别目标计算机、确定目标计算机的状态、数据错误勘测等,保证计算机与计算机之间数据通路顺畅

谐音记忆:答应表哥会传输网络数路物流人员。

应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

image.png (1)应用层:

最靠近用户的一层,为计算机提供应用接口,为用户提供各种服务。我们常见的网络服务协议有:HTTP、HTTPS、FTP、POP3、SMTP等

  • HTTP:超文本传输协议,常用于客户端与服务器的数据请求

  • FTP:文件传输协议,常见的就是一些资源网站,,例如:百度网盘、迅雷

  • SMTP:简单邮件传输协议 用户邮箱验证码登录的功能时,会用到这个协议

  (2)表示层

为应用层提供数据编码和转化功能

在项目开发中,为了方便数据传输,可以使用base64对数据进行编解码,

按功能来划分,base64应该是工作在表示层。

(1)会话层

负责建立、管理、终止表示层之间的通信会话,该层的通信由不同设备中应用程序之间服务请求和响应组成。

(2)传输层

为上层协议提供端到端的可靠透明的数据传输,包括处理差错控制和流量控制等问题。该TCP,UDP就在这一层。

(3)网络层

通过IP寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。

网络层规定了数据包的传输路线,而传输层则规定了数据包的传输方式。这一层就是我们经常说的IP协议层。IP协议是Internet的基础。

(4)数据链路层

将比特组成字节,再将字节组合成帧,使用链路层地址来访问介质,并进行差错检测。

网络层是规划了数据包的传输路线,而数据链路层就是传输路线。不过,在数据链路层上还增加了差错控制的功能。

(5)物理层

实际最终信号传输是通过物理层实现的,通过物理介质传输比特流。规定了电平、速度和电缆针脚。常用设备有(各种物理设备)集线器、中继器、调制解调器、网线、双绞线、同轴电缆。这些都是物理层的传输介质。

通信特点:对等通信

源端OSI模型的每一层与目的端的对等层进行通信,在每一层通信过程中,使用本层自己协议进行通信。

22. TCP/IP四层网络模型

相比OSI模型,TCP/IP模型更加简单,它把应用层、表示层、会话层,整合在了应用层。我们在日常开发也是使用TCP/IP来进行网络理解的。

每一层服务不同,对应的协议也不同:

image.png

23. 域名与域名解析系统

域名:

  • 域名是由.字母和数字组成
  • 点分割不同的域
  • 域名可以分为顶级域、二级域、三级域

顶级域名:

  • 国家:cn、us、uk、ca
  • 通用:com、net、gov、org

二级域名:

  • aliyun
  • baidu
  • google

image.png   域名解析系统:

将域名解析为ip地址,比如在URL中输入www.baidu.com 的 IP 地址,对应查找出对应的域名。

  • 根域名服务器:最高层次服务器,每个国家自行维护,知道所有顶级服务器ip地址和域名
  • 顶级域名服务器:不同国家地区维护,解决顶级域名解析
  • 本地域名服务器:一些机构公司去维护

24. DNS 服务器解析域名的过程

image.png

  1. 检查浏览器的缓存中否有这个域名对应的ip地址
  2. 如果没有,检查本地DNS本地服务器是否缓存过ip地址
  3. 本地域名服务器向根域名解析服务器发起域名解析,根域名服务器返回顶级域名解析服务器地址
  4. 本地服务器向顶级域名服务器查询,顶级域名查询服务器返回本地域名服务器
  5. 本地服务器向本地域名服务器发送请求,域名服务器返回对应的结果
  6. 本地服务器将返回结果保存在缓存中,并将返回结果返回给浏览器

首先访问根域名服务器—>顶级域名服务器——>本地域名服务器,从而拿到域名,一个迭代的过程。

25. 什么是WebSocket

WebSocket是H5新增网络通信协议,他和HTTP属于交集。它最大的特点是:允许服务器主动推送数据给客户端。

服务器端,借助ws创建服务:


Const { WebSocketServer } = require ('ws');
Const wsServer = new WebSocket({port:3000})

wsServer.on('connection',ws=>{
  console.log('connected')
  ws.on('message',msg=>{
  console.log('收到了信息',msg.toString())
  // 服务器向客户端发送消息
  setTimeout(()=>{
    ws.send('服务器已经收到了信息:'+msg.toString())
    },2000 
  })
})

客户端:

// 首先new一个websocket对象,通过ws协议连接上服务端
Const ws =new WebSocket('ws://127.0.0.1:3000')

// 客户端与服务端建立连接后触发
Ws.onopen=()=>{
   console.log('Connection open');
   ws.send('hello');
}

// 服务端给客户端发来消息时候触发
ws.onmessage = function(res) {
    console.log(res);       // 打印的是MessageEvent对象
    console.log(res.data);  // 打印的是收到的消息
};

// 在客户端与服务端关闭连接后触发
ws.onclose = function(evt) {
  console.log('Connection closed');
};

WebSocket 连接过程:

  • 先发起一个http请求

  • 成功之后再升级到WebSocket协议,在通信, 与 HTTP 协议有着良好的兼容性。

image.png

26. WebSocket和HTTP的区别

  • WebSocket是双向的,HTTP是单向的
  • WebSocket协议名是ws:// ,(如果加密,则为wss)
  • WebSocket 默认端口也是80和443
  • WebSocket没有跨域限制

27. Websocker、短轮询、长轮询区别

1、WebSocktet

连接一旦建立,不存在请求和响应的区别,可以相互发送数据。

请求—连接—互相交互

2 、短轮询

在特定的时间间隔内, 由浏览器对服务器发出HTTP请求。

请求—响应 —请求—响应 —请求—响应

var xhr = new XMLHttpRequest();
    setInterval(function(){
        xhr.open('GET','/user');
        xhr.onreadystatechange = function(){
        };
        xhr.send();
    },1000)

3、长轮询

客户端向服务器发送请求,服务器接到请求后hold连接,直到有新消息才返回响应信息并关闭连接。

function ajax(){
    var xhr = new XMLHttpRequest();
    xhr.open('GET','/user');
    xhr.onreadystatechange = function(){
          ajax();
    };
    xhr.send();
}

请求—保持挂起—有内容或超过时间才响应

三者比较:

  • 从性能方面考虑,WebSocket >长轮询>短轮询。
  • 从兼容性角度考虑,短轮询>长轮询>WebSocket