一、关于网络协议的整体梳理
1.1 客户端和服务端的通信
常见的架构,B/S和C/s架构。而在浏览器中运行王爷的属于B/S架构。网页浏览器通过地址栏的url获取服务器对应的资源文件。通过浏览器的处理后,显示在页面上。如上图,发送请求的是客户端,服务器则为服务端。web使用HTTP协议作为规范,从而完成从客户端到服务端的运作流程。从这个角度来看,web协议是在http协议上通信的。
参考自-《图解HTTP》一书
1.2 HTTP的版本迭代大致情况
1990年是HTTP/0.9,HTTP/1.0正式作为标准是在1996年。1.1年公布了Http1.1版本是现在使用范围较高的版本。HTTP/2.0版本正在修订,覆盖率不高
1.3 TCP/IP和http协议之间的关系
《图解HTTP》一书
发送端由上往下走,接收端由下往上走。为了传输方便,在传输层把从应用层手到的数据进行分割,并打上标记需要和端口号发给网络层。在网络层,增加MAC地址转发给链路层,相当于获取到了对应的物理地址。这样链路层就可以进行转发。
对应的头部信息,经过的层增加,后再消去。
1.4 信息传递相关概念和逻辑的梳理
1.4.1 信息传递的地址
这些协议和层的目的最终都是为了信息的传递,那么这样设计结构的目的也是为了携带更少的信息更快的到达目的地。目的地相当于地址,ip地址是节点分配的地址,mac地址是网卡所属的固定地址。
1.4.2 路由转发
使用RIP协议获取对应的mac地址,实现信息的传递。因为对应的设备无法在同一个局域网,因此需要经过多次路由转发,才能到达目标设备。
可以根据ip地址反查对应的mac地址。
二、相关问题整理的答案
上一次思考关于网络协议想到了这些问题。在网上查找和整理相关问题的大致答案。
(1)TCP/IP网络协议族的构成,每层协议在应用程序中发挥的作用。TCP和udp的区别
Tcp/ip协议是规定了网络的基础运行方式,计算机和网络设备如何进行通信的规则。而TCP/IP重要的一点就是分层,如果某一层的协议不好。那就可以直接进行置换,只需要把对应层的接口设计好。那么每一层的内部逻辑设计就可以自由的设计。
TCP协议是位于传输层的协议,特点是无状态
(2)常常听到过的浏览器发送请求到服务器,其中进行的三次握手和四次挥手的详细原理是什么,为什么要使用这种机制?
三次握手简单来说:是确认客户端可以发送,确认服务端可以接收和发送,确认客户端可以接受的过程。而这个过程的实现是通过SYN/ACK的方式实现的。目的就是为了建立连接。目的是为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误-《计算机网络》.
四次挥手:是双方发起请求断开连接和确认断开连接的过程。
1.由客户端发起断开客户端到服务端的请求(发送FIN)
2.由服务端确认收到客户端断开客户端的请求(发送ack)
3.由服务端发送断开服务端到客户端的请求(发送FIN)
4.由客户端确认收到服务端发送的断开服务端到客户端的请求(发送ack)
(3)DNS的作用、DNS解析的过程,DNS的过程是否可控,DNS的快慢会影响到什么的速度.与之相关的cdn是什么?
单纯的ip地址访问不符合我们的记忆习惯,因此需要更形象的方式映射对应的ip地址.DNS服务同样位于应用层。提供域名到ip地址的解析功能。发送到对应的服务器获取对应的ip返回,会影响对应页面打开的快慢。
CDN(中文:内容分发网络,全称:Content Delivery Network)是构建在网络之上的内容分发网络--来自于搜索百科。核心作用是缓存,通过距离用户更近的网络节点,存储用于访问的资源。达到更快的返回对应资源的效果。
(4)http的请求和相应由哪些部分具体组成。常见的请求头有哪些,有哪些请求方式,区别是什么?
路径,请求头,请求体。常见的请求头中规定了请求的附加信息,客户端信息,对响应内容相关的优先级内容。
1.判断服务器数据是否为最新:
If-Modified-Since:把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中.
If-None-Match:If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 当用户再次请求该资源时,将在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag. 使用这样的机制将提高网站的性能。例如: If-None-Match: "03f2b33c0bfcc1:0"。
(2)用于控制服务器缓存
ache-Control:指定请求和响应遵循的缓存机制。缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程)。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage。
Cache-Control:Public 可以被任何缓存所缓存
Cache-Control:Private 内容只缓存到私有缓存中
Cache-Control:no-cache 所有内容都不会被缓存
Cache-Control:no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
Cache-Control:max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
Cache-Control:min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
Cache-Control:max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
(5)http常见状态码的含义,如何通过大致的状态码定位到相关问题?
1. 1开头。表示信息已经接收,正在继续处理
100:初始的请求已接受,客户应当继续发送请求的其余部分。
101:服务器将遵从客户的请求转换到另外一种协议。
2. 2XX:成功-表示请求已被成功接收、理解、接受;
200:成功,服务器已成功处理了请求,通常,这表示服务器提供了请求的网页。
201:已创建,请求成功并且服务器创建了新的资源。
202:已接受,服务器已接受请求,但尚未处理。
203:非授权信息,服务器已成功处理了请求,但返回的信息可能来自另一来源。
204:无内容,服务器成功处理了请求,但没有返回任何内容。
205:重置内容,服务器成功处理了请求,但没有返回任何内容。
206:部分内容,服务器成功处理了部分GET请求。
3.3XX:重定向-要完成请求必须进行更进一步的操作;
301:永久移动,请求的网页已永久移动到新位置,服务器返回此响应(对GET或HEAD请求的响应)时 ,会自动将请求者转到新位置。
302:临时移动,服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置进行以后的请求。
303:查看其它位置,请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码。
304:未修改,自从上次请求后,请求的网页未修改过,服务器返回次响应时,不会返回网页内容。
305:使用代理,请求者只能使用代理访问请求的页面,如果服务器返回此响应,还表示请求者应使用代理。
307:临时重定向,服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
4. 4XX:客户端错误-请求有语法错误或请求无法实现;
400:错误请求,服务器不理解请求的语法。
401:未授权,请求要求验证身份。对于需要登陆的网页,服务器可能返回次响应。
402:保留有效ChargeTo头响应
403:禁止,服务器拒绝请求。
404:未找到,服务器找不到请求的网页。
5. 表示服务端错误信息
500 Internal Server Error 内部服务器错误
502 Bad Gateway 网关错误问题
(6)HTTP分别经过了哪几个大版本的变化,带来了什么改变
HTTP V0.9 | 仅支持GET请求,返回HTML。过时 |
1.0 | 有HTTP报文的基本结构,包含头部字段、内容字段。仅支持GET、HEAD、POST。默认关闭 keep-alive |
1.1 | 更多方法、状态码 更丰富的协商(报文对应字段更加丰富) 缓存(控制缓存的机制) 分块传输 默认开启keep-alive管线化传输 HTTP pipelining |
2.0 | 改变结构,大幅优化性能(对具体的传输模式,加了一个逻辑层) |
(7)HTTPs的加密原理,如何开启https,如何劫持https请求?
HTTPs的主要加密原理是非对称加密。
简单步骤描述
1.生成并提交CSR(证书签署请求)文件。
2.CA机构进行验证。
3.CA发放证书,将证书部署到服务器上面。
(8)webSocket、socket和HTTP的区别和关系?
在搜狗百科中的描述:WebSocket协议是基于TCP的一种新的网络协议,目的是为了实现服务器的向客户端的主动推送,又称为全双工通信。
Socket是传输控制层协议,,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。
http是应用层的协议,是基于tcp的可靠性传输协议。
(9)网络协议和请求之间的关系。现存的js原生请求有哪几种,和协议有什么关系?
post请求和get请求都是基于tcp协议的请求,get请求限制内容的大小的原因并非是tcp协议的限制,而是对应的发送载体中浏览器的相关限制.
(10)跨域事件和浏览器以及网络协议之间的关系吗,以及解决跨域事件的常见方法?
跨域事件的原因核心是因为浏览器的同源策略,来避免对应的危险界面嵌套安全界面,伪装请求的发送的情况。跨域事件并非是针对服务器,而是浏览器造成的。
因此针对这种情况
1.jsonp中的img和get请求不受到对应的同源策略的限制
2.前端和后端实现对应的允许跨域,以及允许跨域的域名
3. 使用代理的方式,使用代理服务器,发送到对应服务器以及接收对应的返回信息。
(11)网络协议的哪个环节,可以被用来利用发起攻击?
主要可以被利用发起攻击的,一部分是利用用户对界面的信任,也就是xss攻击。
另一部分则是利用发送请求的信任,也就是csrf攻击。对应的浏览器无法判断是否是该用户发起的请求。则在一个界面进入到另一个界面的请求的时候,会自动携带对应的cookies信息.