计算机网络面试八股文总结:归纳核心知识点(2)
[复制链接]
8.HTTP 与 HTTPS 的区别
HTTP 即超文本传输协议,是一个基于TCP/IP通信协议来传递明文数据的协议。HTTP会存在这几个问题:
-
请求信息是明文传输,容易被窃听截取。
-
没有验证对方身份,存在被冒充的风险。
-
数据的完整性未校验,容易被中间人篡改。
为了解决HTTP存在的问题,HTTPS出现啦。
HTTPS是什么?
HTTPS= HTTP+SSL/TLS,可以理解为 HTTPS 是身披 SSL(Secure Socket Layer,安全套接层)的HTTP。
它们的主要区别如下:
9.HTTPS的工作流程是怎样的?
-
HTTPS = HTTP + SSL/TLS,也就是用SSL/TLS对数据进行加密和解密,用HTTP进行传输。
-
SSL,即Secure Sockets Layer(安全套接层协议),是网络通信提供安全及数据完整性的一种安全协议。
-
TLS,即Transport Layer Security(安全传输层协议),它是SSL3.0的后续版本。
-
客户端发起HTTPS请求,连接到服务器的443端口。
-
服务器必须要有一套数字证书(证书内容有公钥、证书颁发机构、失效日期等)。
-
服务器将自己的数字证书发送给客户端(公钥在证书里面,私钥由服务器持有)。
-
客户端收到数字证书之后,会验证证书的合法性。如果证书验证通过,就会生成一个随机的对称密钥,用证书的公钥加密。
-
客户端将公钥加密后的密钥发送到服务器。
-
服务器接收到客户端发来的密文密钥之后,用自己之前保留的私钥对其进行非对称解密,解密之后就得到客户端的密钥,然后用客户端密钥对返回数据进行对称加密,这样子传输的数据都是密文啦。
-
服务器将加密后的密文返回到客户端。
-
客户端收到后,用自己的密钥对其进行对称解密,就能得到服务器返回的数据。
10.说说HTTP的状态码,301和302的区别?
11.说说什么是数字签名?什么是数字证书?
数字证书构成:
12.对称加密和非对称加密有什么区别
对称加密:指加密和解密使用同一密钥,优点是运算速度较快,缺点是不能安全地将密钥传输给另一方。常见的对称加密算法有:DES、AES等。
非对称加密:指的是加密和解密使用不同的密钥(即公钥和私钥)。公钥与私钥是成对存在的,如果用公钥对数据进行加密,只有对应的私钥才能解密。常见的非对称加密算法有 RSA。
13.说说 DNS 的解析过程?
DNS的解析过程如下图:
假设你要查询www.baidu.com的IP地址:浏览器 -> 本地DNS服务器 -> 根域名服务器 -> 顶级域名服务器 -> 权威域名服务器
-
首先会查找浏览器的缓存,看看是否能找到www.baidu.com对应的IP地址,找到就直接返回;否则进行下一步。
-
将请求发往本地DNS服务器,如果查找到也直接返回,否则继续进行下一步;
-
本地DNS服务器向根域名服务器发送请求,根域名服务器返回负责.com的顶级域名服务器的列表。
-
本地DNS服务器再向其中一个顶级域名服务器发送一个请求,返回负责.baidu的权威域名服务器的列表。
-
本地DNS服务器再向其中一个权威域名服务器发送一个请求,返回www.baidu.com所对应的IP地址。
14.说说 WebSocket与socket的区别
Socket是一套标准,它完成了对TCP/IP的高度封装,屏蔽网络细节,以便开发者更好地进行网络编程。
Socket等于IP地址 + 端口 + 协议。
WebSocket是一个持久化的协议,它是伴随H5而出的协议,用来解决HTTP不支持持久化连接的问题。
Socket是一个网络编程的标准接口,而WebSocket则是应用层通信协议。
15.HTTP请求的过程与原理
HTTP是一个基于TCP/IP协议来传递数据的超文本传输协议,传输的数据类型有HTML、图片等。
-
客户端进行DNS域名解析,得到对应的IP地址
-
根据这个IP地址,找到对应的服务器建立TCP连接(三次握手)
-
建立TCP连接后发起HTTP请求(一个完整的http请求报文)
-
服务器响应HTTP请求,客户端得到html代码
-
客户端解析html代码,用html代码中的资源(如 js、css、图片等等)渲染页面。
-
服务器关闭TCP连接(四次挥手)
16.forward和redirect的区别?
是servlet中的两种主要跳转方式。forward:转发,redirect:重定向
从地址栏显示来说
forward是服务器内部的重定向,服务器直接访问目标地址,把里面的东西取出来,但是客户端并不知道,因此用forward的话,客户端浏览器的网址是不会发生变化的。
redirect是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新地址。
从数据共享来说
由于在整个转发的过程中使用的是同一个request,因此forward会将request信息带到被重定向的jsp或servlet中使用,即可以共享数据。
redirect不能共享数据。
从运用的地方来说
forward一般用于用户登录时,根据角色转发到相应的模块
redirect一般用于用户注销登录时返回主页面
从本质上来说
forward转发是服务器上的行为,redirect重定向是客户端的行为。
从效率上来说
forword效率高,而redirect效率低。
从请求的次数来说
forword只有一次请求,而redirect有两次请求。
17.Session和Cookie的区别
Cookie 是保存在客户端的一小块文本串的数据。客户端向服务器发起请求时,服务器会向客户端发送一个 Cookie,客户端就把 Cookie 保存起来。下次向同一服务器再发起请求时,Cookie 就被携带发送到服务器。服务器可以根据这个 Cookie 判断用户的身份和状态。
Session 指的是服务器和客户端一次会话的过程。它是另一种记录客户端状态的机制。不同的是 Cookie 是保存在客户端浏览器中的,而 Session 是保存在服务器上的。客户端浏览器在访问服务器时,服务器会把客户端信息以某种形式记录在服务器上,这就是 Session。客户端浏览器再次访问时只需要从该 Session 中查找用户的状态。
Session 和 Cookie 到底有什么不同呢?
Session 和 Cookie 有什么关联呢?
可以使用 Cookie 记录 Session 的唯一标识
用户第一次请求服务器时,服务器根据用户提交的信息,创建对应的Session,请求返回时将此Session的唯一标识信息SessionID返回给浏览器,浏览器会将此SessionID信息存入Cookie中,同时Cookie记录此SessionID是属于哪个域名的。
当用户第二次访问服务器时,请求会自动判断此域名下是否存在Cookie信息,如果存在,则自动将Cookie信息也发送给服务器,服务器会从Cookie中获取SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到则说明用户没有登录或者登录失效,如果找到则证明用户已经登录可执行后面的操作。
分布式环境下 Session 该怎么处理呢?
分布式环境下,客户端请求经过负载均衡,可能会分配到不同的服务器上,假如一个用户的请求两次没有落到同一台服务器上,那么在新的服务器上就没有记录该用户状态对应的 Session。
可以使用 Redis 等分布式缓存来存储 Session,保证在多台服务器间共享。
客户端如果无法使用 Cookie 怎么办呢?
有可能客户端无法使用 Cookie,比如浏览器禁用 Cookie,或者客户端是 安卓、IOS 设备等。
这时候怎么办呢?SessionID 怎么存呢?怎么传给服务器呢?
首先是 SessionID 的存储,可以使用客户端的本地存储,比如浏览器的 sessionStorage。
接下来要怎么传呢?
-
拼接到 URL:直接把 SessionID 作为 URL 的请求参数。
-
放到请求头:把 SessionID 放到请求头里面,比较常用。
18.详细说一下 TCP 的三次握手机制
TCP 三次握手过程:
最开始,客户端和服务端都处于 CLOSE(关闭)状态,服务端监听客户端的请求,进入 LISTEN(监听) 状态。
客户端发送连接请求,进行第一次握手(同步位 SYN=1,序号字段 seq=x),发送完毕后,客户端就进入 SYN_SENT(同步已发送) 状态。
服务端确认连接,进行第二次握手(同步位 SYN=1,确认位 ACK=1,序号字段 seq=y,确认号字段 ack=x+1), 发送完毕后,服务端就进入 SYN_RCV(同步已接收) 状态。
客户端收到服务端的确认后,再次向服务端确认,进行第三次握手(确认位 ACK=1,确认号字段 ack=y+1),发送完毕后,客户端就进入 ESTABLISHED(连接已建立) 状态,当服务端接收到这个包时,也进入 ESTABLISHED(连接已建立) 状态。
|