计算机网络知识面试汇总(超详细)
1、http和https的区别
-
http协议运行在TCP之上,明文传输,客户端和服务端都无法验证对方的身份。
-
https是在http基础上和ssl/tls证书结合起来的一种协议,保证了传输过程中的安全性,减少了被恶意劫持的可能性,很好的解决了http的三个缺点,(被监听,被篡改,被伪装)。
Https是身披SSL(Secure SocketLayer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。区别
-
端口不同:Http与Https使用不同的连接方式,用的端口也不一样,前者是80,后者是443;
-
资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
-
开销:Https通信需要证书,而证书一般需要向认证机构购买;
2、对称加密和非对称加密
对称加密
- 加密的**和解密的**相同
非对称加密
- 非对称加密将**分为公钥和私钥,公钥可以公开,私钥需要保密,客户端公钥加密的数据,服务端可以通过私钥来解密
3、建立连接
- http和https都需要建立在连接的基础上进行数据传输。
- 当客户在浏览器中输入网址,按下回车键的时候,浏览器会在浏览器的dns缓存,本地的dns缓存,和hosts中查找相应的记录,如果没有获取到则会请求dns服务获取相应的ip
- 当获取到ip后,tcp连接会进行三次捂手建立连接。
4、三次握手和四次分手
- 握手(我要和你建立连接,你确定要和我建立连接么?,确定)
- 分手(我要和你断开连接,好吧,断。我也要和你断开连接,好,断)
三次握手的必要性,为什么两次不行?
为了保证服务器能接收到客户端的请求并作出正确的响应而进行前两次,(第一次和第二次)
为了保证客户端能接受到服务端的信息并做出正确的响应而进行后两次,(第二次和第三次)
为了防止已失效的链接请求报文突然又传回服务端。而产生错误。
5、一次完整的HTTP事务流程
-
域名解析
-
发起TCP三次捂手
-
建立TCP连接后发起http请求
-
服务器返回http请求,浏览器得到HTML代码
-
浏览器解析HTML代码,并请求HTML代码中的资源
-
浏览器对页面进行渲染呈现个用户
-
连接结束
6、DNS域名解析
dns服务器中保存着域名和ip的对应关系,为人们提供域名解析服务
解析过程:
本地DNS缓存 > 根DNS服务器 > *DNS服务器 > 权威DNS服务器 > 二级域名的DNS服务器j
解析后将域名和ip的对应关系保存在本地缓存,供下次使用
7、TCP协议如何来保证传输的可靠性
TCP提供一种面向连接的、可靠的字节流服务。其中,面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信;而字节流服务意味着两个应用程序通过TCP链接交换8bit字节构成的字节流,TCP不在字节流中插入记录标识符。
对于可靠性,TCP通过以下方式进行保证:
-
数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时TCP发送数据端超时后会重发数据;
-
对失序数据包重排序:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层;
-
丢弃重复数据:对于重复数据,能够丢弃重复数据;
-
应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;
-
超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;
-
流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。
8、Get与POST的区别
GET与POST是我们常用的两种HTTP Method,二者之间的区别主要包括如下五个方面:
(1). 从功能上讲,GET一般用来从服务器上获取资源,POST一般用来更新服务器上的资源;
(2). 从REST服务角度上说,GET是幂等的,即读取同一个资源,总是得到相同的数据,而POST不是幂等的,因为每次请求对资源的改变并不是相同的;进一步地,GET不会改变服务器上的资源,而POST会对服务器资源进行改变;
(3). 从请求参数形式上看,GET请求的数据会附在URL之后,即将请求数据放置在HTTP报文的 请求头 中,以?分割URL和传输数据,参数之间以&相连。特别地,如果数据是英文字母/数字,原样发送;否则,会将其编码为 application/x-www-form-urlencoded MIME 字符串(如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII);而POST请求会把提交的数据则放置在是HTTP请求报文的 请求体 中。
(4). 就安全性而言,POST的安全性要比GET的安全性高,因为GET请求提交的数据将明文出现在URL上,而且POST请求参数则被包装到请求体中,相对更安全。
(5). 从请求的大小看,GET请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小,而POST请求则是没有大小限制的。
9、浏览器缓存机制
10、客户端使用HTTPS方式与web服务器通信的步骤:
(1)客户使用HTTPS的URL访问web服务器,要求与web服务器建立SSL连接
(2)web服务器收到客户端请求后,将网站的证书信息(证书中包含公钥)传送一份给客户端
(3)客户端的浏览器与web服务器开始协商SSL连接的安全等级,也就是信息的加密等级
(4)客户端的浏览器根据双方同意的安全等级,建立会话秘钥,然后利用网站的公钥将会话秘钥加密,并传送给网站
(5)web服务器利用自己的私钥解密出会话秘钥
(6)web服务器利用会话秘钥加密与客户端之间的通信
11、如何从http切换到https?
- 需要将页面中的所有链接(js,css,图片地址等)都由http改为https
- 去掉页面连接头中的http头部,这样自动匹配http头和https头
12、OSI与TCP/IP各层的结构与功能,都有哪些协议?
12、前端优化方案
- 减少请求数量:合并脚本和样式表,css,划分区域
- 减低请求带宽:使用GZip,精简js,移除重复脚本,图像优化,尽可能减少DOM节点数。
- 缓存利用:使用CDN,使用外部的js和css,减少DNS查找,添加Expires头,配置ETag,使Ajax可缓存
- 页面结构:将样式表放在头部,将脚本放在底部,尽早刷新文档的输出
- 代码校验:避免css表达式,避免重定向
- 移动端优化方案
在上述的前端优化方案的基础上,可以做以下优化:保持单个内容小于25KB,打包组件成符合文档