网络相关面试问题

1.0 HTTP

        超文本传输协议

                请求/响应报文

                链接建立流程

                HTTP的特点

问题1:什么是http?

        请求报文和响应报文组成结构

问题2:HTTP的请求方式有哪些?

        GET POST HEAD PUT DELETE OPTIONS

问题3:GET和POST方式有什么区别?

        GET请求参数以分割拼接到URL后面,POST请求参数在Body里面。

        GET参数长度限制2048字符,POST一般没有该限制。

        GEt请求不安全,POST请求比较安全。

        标准答案:GET:获取资源 —— 安全的 幂等的 可缓存的

                           POST:处理资源 —— 非安全的 非幂等的 不可缓存的

        安全性的解释:不应该引起Server端的任何状态变化(GET,HEAD,OPTIONS)安全请求方式

        幂等性的解释:同一个请求方法执行多次和执行一次的效果完全相等相同(PUT,DELETE)

        可缓存性的解释:请求是否可以被缓存(GET,HEAD)

问题4:HTTP链接建立流程?

        首先通过TCP的三次握手来建立连接,之后在这条http连接上进行http请求和http的请求相应的传递,之后要经过四次挥手来进行连接的释放。

 问题5:HTTP的特点?

        无连接        HTTP的持久连接

        无状态        Cookie/Session

问题6:HTTP的持久连接

        

持久连接涉及到HTTP的那些头部字段?

        Connection : keep-alive

        time : 20

        max : 10

问题7:怎样判断一个请求是否结束的?

        Content-length : 1024

        chunked,最后会有一个空的chunked        

问题8:Charles抓包原理是怎样的?

        中间人攻击        可以串改数据

                 


 2.0 HTTPS与网络安全

问题1:HTTPS和HTTP有怎样的区别?

        HTTPS = HTTP + SSL/TLS安全协议

问题2:HTTPS连接建立流程是怎样的?

        

         会话秘钥 = random S +random C + 预主秘钥

问题3:HTTPS都是用了哪些加密手段?为什么?

        连接建立过程使用非对称性加密保证安全,非对称性加密很耗时

        后续通信过程使用对称加密来减少耗时带来的损耗

问题4:什么是非对称加密?

        发送方通过公钥对数据进行加密,经过TCP的连接将加密后的数据传到接收方,接收方在拿到加密的数据后,会通过私钥来对加密数据进行解密,然后拿到最后明文数据。

问题5:什么是对称加密?

        发送方在发送数据的过程中,通过对称秘钥对数据进行加密操作,然后将加密结果通过TCP连接传输到接收方,在通过同一个秘钥对加密数据进行解密,然后拿到最后明文数据。

        


3.0 TCP和UDP

        传输层协议-TCP(传输控制协议)-UDP(用户数据报协议)

问题1:你是否了解UDP协议呢?

        无连接        尽最大努力交付        面向报文(既不合并,也不拆分)

        

UDP的功能

        复用        分用        差错检查

TCP的特点        

        面向连接 —— 数据开始之前,需要建立连接(三次握手) 数据传输结束后,需要释放连接(四次挥手)

        可靠传输 —— 无差错(无差错情况),不丢失(超时重传),不重复(确认丢失,确认迟到),按序到达(滑动窗口协议)

        面向字节流 

        流量控制 —— 滑动窗口协议

        拥塞控制 —— 

问题2:TCP的三次握手为什么不是两次呢?为什么要进行三次握手?

        如果客户端发送的SYN同步报文在网络传输中发生超时或者丢失的情况下,当我们的SYN同步报文发生超时之后,客户端会启用超时重传策略,重新发送一个SYN同步报文,当Server收到同步报文后会回复客服端一个确认报文,如果只有两次握手,此时TCP连接就已经建立,那假设刚才超时的同步报文此时在Server端发送给客户端的SYN,ACK确认之后又收到了超时的SYN同步报文,Server可能认为客户端又要建立一个TCP连接,相当于客户端发生了两次TCP连接。所以通过三次握手就可以解决这个问题,当客户端重传的SYN同步报文,收到Server的响应之后,会回传给Server一个ACK确认报文,此时如果说客户端之前发生的SYN同步超时报文又达到了Server,会发送同步确认报文,经过一段时间后,发现Server端并没有给我们发送ACK确认报文,那么Server端认为后来发送的同步报文是一个超时报文。

        三次握手实际上就是解决同步请求,连接建立超时的一种场景,来规避这种连接建立,所以才会进行三次握手。

 

 

                                ​​​​​​​        

                                                                        滑动窗口协议

​​​​​​​​​​​​​​

                 

 问题3:四次挥手面试问题?

        连接涉及到双方面,释放也是双方面,客户端主动发起连接释放,由客户端发送一个终止报文,Server回复给客户端一个ACK确认报文,此时由客户端到Server端的连接就关闭了(半关闭状态),之后如果Server有数据仍然可以向客户端发送数据,但是客户端不能向Server数据传递了,之后在一定时机内,Server会发送一个终止确认报文来断开由Server到客户端的一个连接,客户端在回给Server一个ACK确认报文。客户端和Server之间所建立TCP连接通道是全双工的,一条通道双方都可以进行发送和接收。所以由于全双工才需要双方面的连接释放,也就是四次挥手。


4.0 DNS解析

        域名到IP地址的映射,DNS解析请求采用UDP数据报,且明文

        递归查询 —— 我去给你问一下,客户端询问本地DNS,如果能直接解析就会返回IP地址,如果本地NDS不知道对应域名IP的时候,就会询问根域DNS——顶级DNS——权限DNS,查找到后一层层返回。

        迭代查询 —— 我告诉你谁可能知道,客户端询问本地DNS,如果本地DNS不知道,就会去询问根域DNS,顶级DNS,权限DNS,查找到后返回给本地NDS,在由本地DNS返回客户端最终的IP地址

问题1:DNS的劫持问题?

        ​​​​​​​客户端去询问本地DNS服务器来查询某一域名对应的IP地址,由于DNS是采用UDP数据报,明文传输,假如有一个钓鱼的DNS服务器就可能劫持到我们DNS的请求,钓鱼DNS服务器返回给我们一个错误的IP地址,去错误的IP地址去访问可能就是一个错误的网站。

问题2:怎样解决DNS劫持?

        httpDNS  使用DNS协议向DNS服务器的53端口进行请求 改成 使用HTTP协议向DNS服务器的80端口进行请求

        长连接

​​​​​​​ 

问题3:DNS劫持和HTTP的关系是怎样的?

        没有关系 

        DNS解析发生在HTTP建立连接之前

        DNS解析请求使用UDP数据报,端口号53

问题4:DNS的解析转发问题  

        客户端在询问本地DNS服务器来获取某一域名的IP地址的时候,比如我们用的移动,移动就会去解析域名,但是有一些小的运营商会不遵守协议规范的,它可能会把我们要求的解析请求,为了节省资源,会转发给其他的比如电信DNS服务器,让它去帮助移动的域名到IP的请求转换,电信的服务器会向权威的DNS去解析IP地址,而权威DNS服务器当中可能会根据不同的运营商请求情况,针对不同网络情况的调度分发,比如移动DNS服务器返回IP地址2.2.2.2 电信DNS服务器返回3.3.3.3,最终返回给移动DNS服务器,交给我们客户端,那此时我们用的是移动网络,由于网络转发的场景存在,最终我们访问的服务器可能是访问网站为我们设立的电信网络分支节点来处理我们的请求,在进行请求后续的数据之后,就涉及到跨网访问,会造成请求缓慢,效率的问题。

 


5.0 Session/ Cookie

        HTTP协议无状态特点的补偿

        

Cookie主要是用来记录用户状态,区分用户:状态保存在客户端

        客户端发送的cookie在http请求报文的cookie首部字段中

         服务器端设置http响应报文的Set-Cookie首部字段中

​​​​​​​

问题1:怎样修改Cookie?

        新cookie覆盖旧cookie

        覆盖规则:name,path,domain等需要与原cookie一致。

问题2:怎样删除Cookie?

        新cookie覆盖旧cookie

        覆盖规则:name,path,domain等需要与原cookie一致。

        设置cookie的expires=过去的一个时间点,或者maxAge=0 

问题3:怎样保证cookie的安全?

        对cookie进行加密处理

        只在https上携带cookie

        设置cookie为httpOnly,防止跨站脚本攻击

问题4:Session和cookie的关系是怎样的?

Session也是用来记录用户状态,区分用户的:状态存放在服务器端

        Session需要依赖Cookie机制


面试总结:

1: HTTP中的GET和POST方式有什么区别?

        GET:幂等的,可缓存的,不安全的。

        POST:不幂等的,不可缓存,安全的。

2:HTTPS连接建立流程是怎样的?

        客户端发送给服务端支持的加密算法列表,包括TRS版本号以及随机数c,然后服务端在返给客户端一个服务端的证书包括商定的加密算法,后续首先通过非对称加密进行秘钥的传输,之后http网络请求就通过对非对称加密所保护的秘钥进行后续的网络访问。

3:TCP和UDP有什么区别?

        TCP是面向连接的并且支持可靠传输,面向字节流,TCP提供了流量的控制和拥塞的控制

        UDP简单的提供了复用,分用,以及差错检测一个传输层的功能。UDP是无连接的。

4:请简述TCP的慢开始过程?

        可以通过慢开始拥塞避免算法来解决

5:客户端怎样避免DNS劫持?

        httpDNs和长连接来避免DNS的劫持。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值