其他计算机网络面试题总结:
【计算机网络重要知识点总结一】
【计算机网络重要知识点总结二】
【计算机网络重要知识点总结三】
一、Cookie和Session的区别?
什么是cookie?
首先要清楚http协议是无状态的协议,如果不加以处理,服务器就无法辨别用户的身份。
为了解决这个问题,就出现了cookie。
cookie就是服务端为了辨别用户身份,存储在客户端的一些信息。
当用户第一次访问服务器时,服务器会生成一个cookie,然后将生成的cookie发送给客户端,客户端收到后就会把该cookie保存在浏览器中(set-cookie字段)。这样第二次访问服务器时,只要带上cookie,服务端就能知道你是谁了。
什么是session?
现在服务器知道了用户是谁,也得知道用户要干什么吧?即要知道用户的信息吧?
session就是存储在服务器端的用户会话信息,以便更好的跟踪用户进行后续操作。
用户点开浏览器,访问网站,再关闭浏览器的过程,就是一次会话。
用户访问服务器时,如果该用户还没有session,服务器就会给该用户生成一个sessionId存储到用户的cookie中,然后把sissionId对应的该用户的信息存储在服务器上,这些信息就是session。当用户再次访问时,服务器会从cookie中找到用户的sessionId,从而就能找到该用户对应的session信息。
(注:sessionId只是依赖cookie,没有cookie,用户访问的时候只要带上sessionId,服务器也能根据sessionId找到该用户对应的session信息)
总结
-
cookie是存储在客户端的,服务器用来标识用户的。
-
session是存储在服务器的,用来保存用户信息的。
二、数字证书和数字签名?
什么是数字证书?
服务端向证书颁发机构CA
申请数字证书来保证自己证书的真实性,以此避免中间人攻击(篡改证书)。证书包括:证书内容(服务器的公钥等)、证书签名算法和数字签名。
什么是数字签名?
通过数字签名,客户端可以判断出自己收到的证书内容有没有被修改过。
数字签名的生成过程:
1.CA使用证书签名算法对证书的内容进行hash运算。
2.对hash运算后的值用CA的私钥
进行加密,得到数字签名。
客户端验证过程?
1.获取证书
2.用CA的公钥对数字签名进行解密(浏览器信任CA,所以CA的公钥已经内置于浏览器中)。
3.用证书签名算法对证书中的内容进行hash运算。
4.对比运算后的hash值和解密获得的hash值是否一致,一致则内容未被修改。
三、HTTPS工作流程?
HTTPS通过非对称加密和对称加密两者共同完成。非对称加密用来交换会话密钥
,然后通过会话密钥
对内容进行对称加密的传输。
首先完成TCP的三次握手建立连接,然后再通过四次握手建立SSL/TLS连接,最后采用对称加密通信。
基本流程
- 客户端向服务器索要并验证服务器的公钥。
- 双方协商生产「会话秘钥」。
- 双方采用「会话秘钥」进行加密通信。
其中,前两步为SSL/TLS连接建立的过程。
SSL/TLS连接建立过程
事实上不同的密钥交换算法,TLS 的握手过程可能会有一些区别,这里以RSA
密钥交换算法为例。
- 第一次握手
客户端首先会发一个「Client Hello」消息,消息中有客户端使用的 TLS 版本号、支持的密码套件列表,以及生成的随机数1(用于生成对称加密的密钥)。
- 第二次握手
- 服务端收到消息后,会确认 TLS 版本号是否支持,然后从密码套件列表中选择一个密码套件,以及生成随机数2。接着,返回包含上述信息的「Server Hello」消息。
2.服务器为了验证自身身份,会发送「Server Certificate」消息,其中包含服务器的数字证书。
3.最后发送「Server Hello Done」消息,表示本次握手结束。
- 第三次握手
1.客户端验证过证书后,会生成一个新的随机数3,将该随机数用服务器的公钥加密后,通过「Change Cipher Key Exchange」消息传给服务端。
2.服务端收到后,通过私钥解密得到随机数3。至此,客户端和服务端便通过三个随机数生成会话密钥
。
3.客户端发一个「Change Cipher Spec」消息,告诉服务端开始使用加密方式发送消息。
4.客户端再发一个「Encrypted Handshake Message(Finishd)」消息,把之前所有发送的数据做个摘要,再用会话密钥加密一下,让服务器做个验证。(验证加密通信是否可用以及之前握手信息是否有被篡改过)
- 第四次握手
服务器发送「Change Cipher Spec」和「Encrypted Handshake Message」消息给客户端,让客户端也做一个验证。
四、HTTP报文都包括什么?
请求报文
HTTP请求报文由3部分组成(请求行+请求头+请求体)
1.请求行
- 请求方法
- 请求URL(和请求头中的Host属性组成完整的请求URL)
- 协议名称及版本号
2.请求头
包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。
- Accept:客户端告诉服务端自己接收什么类型的响应。
- Cache-Control:表示该请求希望响应返回的内容在客户端是否缓存/缓存多久。
- Connection:表示是否需要持久连接。keep-alive/close
- Host:接收请求的服务器的域名和端口号。
- Referer:表示这个请求是从哪个URL过来的。
- User-Agent:产生请求的浏览器类型。
3.请求体
它将一个页面表单中的组件值通过键值对形式
编码成一个格式化串,承载多个请求参数的数据。请求URL也可以传递请求参数。
响应报文
1.响应行
包含响应的所使用的协议及版本、响应状态码、响应描述
2.响应头
- Date:当前的GMT时间。
- Content-Type:表示后面的文档属于什么类型。
- Content-Length:表示内容的长度。
- Last-Modifeid:文档的最后改动时间。
3.响应体
服务器响应返回的内容。
五、DNS解析过程?
- 浏览器搜索自己浏览器的DNS缓存
- 若没有,则搜索本地操作系统中的DNS缓存和hosts文件
- 若没有,则操作系统将域名发送至本地域名服务器,本地域名服务器查询自己的DNS缓存,查找成功则返回结果,否则依次向根域名服务器、顶级域名服务器、权限域名服务器(从上到下)发起查询请求,最终返回IP地址给本地域名服务器
- 本地域名服务器将得到的IP地址返回给操作系统,同时自己也将IP地址缓存起来
- 操作系统将 IP 地址返回给浏览器,同时自己也将IP地址缓存起来
- 浏览器得到域名对应的IP地址
域名的层级关系
- 根 DNS 服务器(.)
- 顶级域 DNS 服务器(.com)
- 权威 DNS 服务器(server.com)
六、域名缓存的了解?
为了提高 DNS 查询效率,并减轻服务器和网络的负荷,在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
域名服务器应为每项内容设置计时器并处理超过合理时间的项。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器绑定信息。当权限服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名解析的正确性。
主机在启动时从本地服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机应当定期地检查域名服务器以获取新的映射信息,并且从缓存中删除无效的项。
名字到地址的绑定并不经常改变,所以缓存和数据库的一致性很好维护。
七、DNS劫持?
什么是DNS劫持?
DNS 劫持即域名劫持,是通过将原域名对应的 IP 地址进行替换从而使得用户访问到错误的网站或者使得用户无法正常访问网站的一种攻击方式
。域名劫持往往只能在特定的网络范围内进行,范围外的 DNS 服务器能够返回正常的 IP 地址。
如何实现DNS劫持?
攻击者可以冒充原域名所属机构,通过电子邮件的方式修改组织机构的域名注册信息,或者将域名转让给其它组织,并将新的域名信息保存在所指定的 DNS 服务器中,从而使得用户无法通过对原域名进行解析来访问目的网址。
用户端预防手段?
- 直接通过ip地址访问。
- 通过网络设置让DNS指向正常的域名服务器。
八、浏览器输入URL到页面返回详细过程?
- 输入网址URL
- 缓存解析:浏览器会先去缓存中查找资源,浏览器缓存-系统缓存-路由器缓存。如果缓存中没有,则发送http请求。
- 域名解析:发送http请求之前,需要将域名转换为对应的ip地址。
- tcp连接:建立tcp连接后,发送http请求。
- 收到请求:服务器收到请求后,返回响应。
- 页面渲染:浏览器收到响应,显示页面内容。
九、HTTP的keepalive和TCP的keep-alive
- HTTP 的 Keep-Alive,是由应用层(用户态) 实现的,称为
HTTP 长连接
;通过使用一个TCP连接来提高效率,减少TCP连接建立的开销。 - TCP 的 Keepalive,是由 TCP 层(内核态) 实现的,称为
TCP 保活机制
;当客户端和服务端长达一定时间没有进行数据交互时,内核为了确保该连接是否还有效,就会发送探测报文,来检测对方是否还在线,然后来决定是否要关闭该连接。