注意:本文主讲网络相关面试问题,包括HTTP协议、HTTPS协议与网络安全、TCP/UDP区别、DNS解析。
一、HTTP协议(超文本传输协议)
HTTP协议主要包含内容:
请求/响应报文、连接建立流程、HTTP特点。
1、请求/响应报文
请求报文格式:
请求方法 +请求URL +协议版本+请求首子段键值对 +报文主体(一般在请求中是没有报文主体的)
响应报文格式:
协议版本 +状态吗 +响应首字段 +响应报文主体
1)、http的请求方式都有哪些?
GET、POST、HEAD、PUT、DELETE、OPTIONS
(2)、GET和POST方式的区别?
初级工程师回答
1>、GET请求参数以?分割拼接到URL后面,POST请求参数在Body里面。
2>、GET参数长度限制2048个字符,POST一般没有该限制。
3>、GET请求不安全,POST请求比较安全。
高级工程师回答,从语义的角度回答(标准答案)
(语义:指的协议的定义规范. 语法:具体实现手段或者路径)
GET:获取资源。安全的、幂等的、可缓存的。
POST:处理资源。非安全的、非幂等的、不可缓存的。
安全性:不应该引起Server端的任何状态变化。常见安全性的请求方式 :get、head、options
幂等性:同一个请求方法执行多次和执行一次的效果完全相同。常见幂等性的请求方式 :get、put、delete
可缓存性:请求是否可以被缓存。(代理服务器可以做缓存,多次请求时可能是获取的缓存)。常见可缓存性的请求方式:get、head
(3)、你都了解哪些状态码,他们的含义是什么?
1xx:
2xx:响应成功(200)
3xx:网络重定向(301、302)
4xx:客户端发起请求出错,服务器没有相应(401、404)
5xx:服务器出错(502 503)
2、连接建立流程
-
三次握手、四次挥手
3、HTTP的特点:无连接、无状态。
(1)、无连接: 指的是http的连接有建立和释放连接的过程。
解决方案:HTTP的持久连接。
1>、持久连接头部字段:
Connection:keep-alive (允许持久连接)
time:20 (持久连接连接时长)
max:10 (该http连接最多可以发生多少次请求)
2>、怎样判断一个请求是否结束?
Content-length :1024 (响应头)
chunked,最后会有一个空的chunked,server会给客户端返回多次响应,根据判断响应报文的头部字段chunked是否为空,为空则表示没有后续了。
(2)、无状态: 多次发送http请求,如果是同一个用户对于server端是不知道是同一个用户的。
解决方案:cookie、session。
问题: Charles抓包原理是咋样的?
利用HTTP中间人攻击漏洞实现的。
二、HTTPS协议与网络安全
1、HTTPS和HTTP有怎样的区别?
HTTPS = HTTP+SSL/TLS。HTTPS是安全版的HTTP, 是由一个SSL/TLS,插在传输层之上,应用层之下的协议来保证的。
2、HTTPS连接建立流程:
HTTPS连接过程大致可分为八步:
- 1、客户端访问HTTPS连接。
客户端会把安全协议版本号、客户端支持的加密算法列表、随机数C发给服务端。
- 2、服务端发送证书给客户端
服务端接收密钥算法配件后,会和自己支持的加密算法列表进行比对,如果不符合,则断开连接。否则,服务端会在该算法列表中,选择一种对称算法(如AES)、一种公钥算法(如具有特定秘钥长度的RSA)和一种MAC算法发给客户端。
服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。
在发送加密算法的同时还会把数字证书和随机数S发送给客户端
- 3、客户端验证server证书
会对server公钥进行检查,验证其合法性,如果发现发现公钥有问题,那么HTTPS传输就无法继续。
- 4、客户端组装会话秘钥
如果公钥合格,那么客户端会用服务器公钥来生成一个前主秘钥(Pre-Master Secret,PMS),并通过该前主秘钥和随机数C、S来组装成会话秘钥
- 5、客户端将前主秘钥加密发送给服务端
是通过服务端的公钥来对前主秘钥进行非对称加密,发送给服务端
- 6、服务端通过私钥解密得到前主秘钥
服务端接收到加密信息后,用私钥解密得到主秘钥。
- 7、服务端组装会话秘钥
服务端通过前主秘钥和随机数C、S来组装会话秘钥。
至此,服务端和客户端都已经知道了用于此次会话的主秘钥。
- 8、数据传输
客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。
同理,服务端收到客户端发送来的密文,用服务端密钥对其进行对称解密,得到客户端发送的数据。
(1)、会话秘钥:
会话秘钥 = random S + random C + 预主秘钥
(2)、https都使用了哪些加密手段?为什么?
1>、连接建立过程使用非对称加密
,非对称加密很耗时
的。
2>、后续通讯过程使用对称加密
。
(3)、对称加密(AES):
(4)、非对称加密(RSA):
三、TCP/UDP区别
1、UDP(用户数据报协议)
特点:无连接;尽最大努力交付(不保证可靠传输);面向报文(既不合并,也不拆分)。
功能:复用、分用;差错检测。
2、TCP(传输控制协议)
特点:面向连接;可靠传输;面向字节流;流量控制;拥塞控制。
(1)、面向连接
数据传输开始之前, 需要建立连接。
三次握手
数据传输结束之后, 需要释放连接。
四次挥手
问题:TCP三次握手为什么不是两次?为什么要进行三次握手
答:
三次握手原因(不是两次握手原因):当客户端发送连接报文时,当出现网络超时时,会启动超时重发策略,服务端同时也会返回超时重发的报文,当客户端收到的报文是超时重发的,会取消和服务端创建连接,只保证会创建一个TCP连接。
(2)、可靠传输
如何保证可靠传输:保证我们的报文 ->无差错、不丢失、不重复、按序到达
如何实现可靠传输:通过停止等待协议实现。
停止等待协议四方面: 无差错情况、超时重发、确认丢失、确认迟到。
(3)、面向字节流
- 每次发送多少个字节是由TCP控制的
- 不管发送方一次性提交给TCP的缓冲是多大的数据, 对于TCP本身来说它会根据实际情况来划分, 并不是发送方发送了10个字节,就把10个字节一次性发给接收方,可能会把10字节拆分成3个字节和7个字节分两次发送给接收方,这个就是面向字节流概念.
- 可以和UDP面向报文特点比较
(4)、流量控制
- 滑动窗口协议: 发送方定义为客户端, 接收方为server端. 当发送数据, 如果接收方接收缓存没那么大,
接收窗口
很小,此时发送方窗口
很大,会以更快速率往接收方发送数据,需要由接收窗口
通过TCP报文首部字段中更改窗口值,调整发送方发送速率.
(5)、拥塞控制
慢开始、拥塞避免(策略);
快恢复、快重传(策略)。
横轴:交互次数或者轮询次数 纵轴:窗口值大小
问题:请简单描述TCP慢启动特点?
答:考察TCP慢开始、拥塞避免策略
问题:什么是TCP? TCP的理解是怎样?
答:根据TCP五大特点回答.
四、DNS解析
1、了解DNS解析
问题:是否了解DND解析?DNS解析是怎样的过程?
DNS解析: 域名到IP地址的映射,DNS解析请求采用UDP数据报
,且明文解析
。
2、DNS解析查询方式
(1)、递归查询
(2)、迭代查询
3、DNS解析存在哪些常见的问题?
- DNS劫持问题
- DNS解析转发问题
(1)、DNS劫持问题
问题: DNS劫持与HTTP的关系是咋样的?
答: 没有关系。
(1)、DNS解析发生在HTTP建立连接之前;
(2)、DNS解析请求使用UDP数据报,端口号53。
(2)、DNS解析转发问题
问题: 怎样解决DNS劫持?
答: 两种解决方案: httpDNS 和长连接
1>、httpDNS
DNS解析实质上 ,使用DNS协议向DNS服务器53端口
进行请求 -->
使用httpDNS ,实质上使用HTTP协议向DNS服务器80端口
进行请求,
不产生正常的DNS解析了,也就不涉及到DNS劫持问题.
2>、长连接
- 长连server理解为代理服务器.
- 客户端和长连server可以建立TCP的长连通道.(客户端发送http请求,可以通过长连通道把http请求传给长连server.)
- 长连server通过内网专线进行内网的DNS的解析,这样就规避了公网DNS解析问题.
五、Session/Cookie
- Session/Cookie 是对HTTP协议无状态特点的补偿.
1>、Cookie
问题:什么是Cookie?
Cookie主要用来记录用户状态, 区分用户; 状态保存在客户端
.
1、怎样设置Cookie?
(1)、 客户端发送的Cookie在http请求报文的Cookie首部字段中;
(2)、 服务器端设置http响应报文的Set-Cookie首部字段, 向客户端传递Cookie内容。
2、怎样修改Cookie?
(1)、新Cookie覆盖旧Cookie。
(2)、覆盖规则:请求头部字段 name、path、domain等需要与原Cookie一致。
3、怎样删除Cookie?
(1)、新Cookie覆盖旧Cookie。
(2)、覆盖规则:name、path、domain等需要与原Cookie一致。
(3)、设置Cookie的expires=过去的一个时间点
,或者maxAge=0
。
4、怎样保证Cookie的安全?
(1)、对Cookie进行加密处理。(会有脚本攻击获取Cookie)
(2)、只在HTTPS上携带Cookie。
(3)、设置Cookie为httpOnly,防止跨站脚本攻击。
2>、Session
Session也是用来记录用户状态,区分用户的;状态存放在服务器端
。
Session和Cookie的关系是怎样的?Session需要依赖于Cookie机制。
六、网络相关面试问题总结:
1、HTTP中的get和post方式有什么区别?
答: 见上文
2、HTTPS连接建立的流程是咋样的?
答:
3、TCP和UDP有什么区别?
答:(可以从特点和功能回答)
TCP:面向连接;可靠传输;面向字节流;流量控制;拥塞控制。
UDP:复用、分用;差错检测 基本的传输功能。 无连接;尽最大努力交付(不保证可靠传输);面向报文(既不合并,也不拆分)。
4、请简述TCP的慢开始过程?
答: TCP慢开始、拥塞避免策略回答
5、客户端怎样避免DNS劫持?
答: 两种解决方案: httpDNS 和长连接