1232|0

1145

帖子

15

TA的资源

纯净的硅(高级)

楼主
 

计算机网络面试八股文总结:归纳核心知识点(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的后续版本。

 

 

 

  1. 客户端发起HTTPS请求,连接到服务器的443端口。

  2. 服务器必须要有一套数字证书(证书内容有公钥、证书颁发机构、失效日期等)。

  3. 服务器将自己的数字证书发送给客户端(公钥在证书里面,私钥由服务器持有)。

  4. 客户端收到数字证书之后,会验证证书的合法性。如果证书验证通过,就会生成一个随机的对称密钥,用证书的公钥加密。

  5. 客户端将公钥加密后的密钥发送到服务器。

  6. 服务器接收到客户端发来的密文密钥之后,用自己之前保留的私钥对其进行非对称解密,解密之后就得到客户端的密钥,然后用客户端密钥对返回数据进行对称加密,这样子传输的数据都是密文啦。

  7. 服务器将加密后的密文返回到客户端。

  8. 客户端收到后,用自己的密钥对其进行对称解密,就能得到服务器返回的数据。

 

10.说说HTTP的状态码,301和302的区别?

  • 301:永久重定向,表示所请求的资源已经永久地转移到新的位置,这包含域名的改变或者是资源路径的改变。

  • 302:临时重定向,表示所请求的资源临时地转移到新的位置,一般是24到48小时以内的转移会用到302。

 

11.说说什么是数字签名?什么是数字证书?

 

 

 

数字证书构成:

  • 公钥和个人等信息,经过Hash算法加密,形成消息摘要;将消息摘要拿到拥有公信力的认证中心(CA),用它的私钥对消息摘要加密,形成数字签名。

  • 公钥和个人信息、数字签名共同构成数字证书。

 

12.对称加密和非对称加密有什么区别

对称加密:指加密和解密使用同一密钥,优点是运算速度较快,缺点是不能安全地将密钥传输给另一方。常见的对称加密算法有:DES、AES等。

 

 

 

非对称加密:指的是加密和解密使用不同的密钥(即公钥和私钥)。公钥与私钥是成对存在的,如果用公钥对数据进行加密,只有对应的私钥才能解密。常见的非对称加密算法有 RSA。

 

 

 

13.说说 DNS 的解析过程?

DNS的解析过程如下图:

 

 

 

假设你要查询www.baidu.com的IP地址:浏览器 -> 本地DNS服务器 -> 根域名服务器 -> 顶级域名服务器 -> 权威域名服务器

  1. 首先会查找浏览器的缓存,看看是否能找到www.baidu.com对应的IP地址,找到就直接返回;否则进行下一步。

  2. 将请求发往本地DNS服务器,如果查找到也直接返回,否则继续进行下一步;

  3. 本地DNS服务器向根域名服务器发送请求,根域名服务器返回负责.com的顶级域名服务器的列表。

  4. 本地DNS服务器再向其中一个顶级域名服务器发送一个请求,返回负责.baidu的权威域名服务器的列表。

  5. 本地DNS服务器再向其中一个权威域名服务器发送一个请求,返回www.baidu.com所对应的IP地址。

 

14.说说 WebSocket与socket的区别

Socket是一套标准,它完成了对TCP/IP的高度封装,屏蔽网络细节,以便开发者更好地进行网络编程。

Socket等于IP地址 + 端口 + 协议。

WebSocket是一个持久化的协议,它是伴随H5而出的协议,用来解决HTTP不支持持久化连接的问题。

Socket是一个网络编程的标准接口,而WebSocket则是应用层通信协议。

 

15.HTTP请求的过程与原理

HTTP是一个基于TCP/IP协议来传递数据的超文本传输协议,传输的数据类型有HTML、图片等。

 

 

 

  1. 客户端进行DNS域名解析,得到对应的IP地址

  2. 根据这个IP地址,找到对应的服务器建立TCP连接(三次握手)

  3. 建立TCP连接后发起HTTP请求(一个完整的http请求报文)

  4. 服务器响应HTTP请求,客户端得到html代码

  5. 客户端解析html代码,用html代码中的资源(如 js、css、图片等等)渲染页面。

  6. 服务器关闭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。

接下来要怎么传呢?

  1. 拼接到 URL:直接把 SessionID 作为 URL 的请求参数。

  2. 放到请求头:把 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(连接已建立) 状态。

此帖出自无线连接论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表