大厂面试问答题汇总分析---网络安全类问题

本文详细分析了大厂面试中常见的网络安全类问题,包括HTTP和HTTPS的区别,TCP与UDP的特性,以及SSL/TLS的工作原理。此外,还探讨了HTTP的请求过程、长连接与短连接、长轮询与短轮询的差异,以及HTTP状态码。同时,介绍了TCP的三次握手、四次挥手和可靠传输机制。内容深入浅出,对理解网络协议和安全有极大帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大厂面试---Redis面试题(含答案,相关知识点,面试考察次数统计)

大厂面试问答题汇总分析---数据库(索引-聚集/非聚集,事务,mySql, 锁)

大厂面试问答题汇总分析---网络安全类问题

大厂面试问答题汇总分析--- 秒杀 / 限流 / 高并发

【锁】的相关概念汇总

大厂面试问答题汇总分析--多线程问题

目录

一、HTTP

1-1、一次完整的HTTP请求过程。(浏览器输入URL点击回车发生了啥?)

1-2、HTTP和HTTPS的区别是什么?

1-3、http长连接和短连接的区别

引申---长轮询和短轮询

1-4、长短轮询和长短连接的区别

1-5、什么是SSL ?https是如何保证数据传输的安全(SSL是怎么工作保证安全的)

1-6、常见的状态码有哪些?

二、传输协议分组,TCP,UDP

2-1、TCP与UDP区别总结?

2-2、TCP三次握手

 2-3、TCP四次挥手

 2-4、TCP如何保证可靠传输?

2-5、TCP对应的应用层协议

三、其他网络内容相关比较

3-1、GET 和 POST 的区别

3-2、Cookies和session区别


一、HTTP

1-1、一次完整的HTTP请求过程。(浏览器输入URL点击回车发生了啥?)

域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户。

1-2、HTTP和HTTPS的区别是什么?

HTTPS 是 SSL/TLS之上的HTTP协议,HTTPS除了TCP的三个包,还要加上ssl握手需要的9个包,所以一共是12个包。与http的区别如下:

1、端口: https的端口是443,而http的端口是80

2、传输数据: http传输是明文的,而https是用ssl进行加密的,https的安全性更高

3、申请证书: https是需要申请证书的,而http不需要

4、连接: http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全

1-3、http长连接和短连接的区别

可参考:http的长连接和短连接(史上最通俗!) - abcdefghijklmnop - 博客园

在HTTP/1.0中默认使用短连接, 也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接.

HTTP/1.1起,默认使用长连接,用以保持连接特性。

HTTP协议是基于请求/响应模式的,因此只要服务端给了响应,本次HTTP连接就结束了,或者更准确的说,是本次HTTP请求就结束了,根本没有长连接这一说。那么自然也就没有短连接这一说了。之所以网络上说HTTP分为长连接和短连接,其实本质上是说的TCP连接。TCP连接是一个双向的通道,它是可以保持一段时间不关闭的,因此TCP连接才有真正的长连接和短连接这一说。

说HTTP请求和HTTP响应会更准确一些,而HTTP请求和HTTP响应,都是通过TCP连接这个通道来回传输的。

 HTTP1.1协议,基本上Connection都是keep-alive。HTTP1.1默认是长连接,也就是默认Connection的值就是keep-alive。

长连接是为了复用,也就是说复用的是TCP连接,长连接情况下,多个HTTP请求可以复用同一个TCP连接,这就节省了很多TCP连接建立和断开的消耗

举例,比如你请求了博客园的一个网页,这个网页里肯定还包含了CSS、JS等等一系列资源,如果你是短连接(也就是每次都要重新建立TCP连接)的话,那你每打开一个网页,基本要建立几个甚至几十个TCP连接,这浪费了很多资源。

但如果是长连接的话,那么这么多次HTTP请求(这些请求包括请求网页内容,CSS文件,JS文件,图片等等),其实使用的都是一个TCP连接,很显然是可以节省很多消耗的。

长连接并不是永久连接的。如果一段时间内(具体的时间长短,是可以在header当中进行设置的,也就是所谓的超时时间),这个连接没有HTTP请求发出的话,那么这个长连接就会被断掉。

引申---长轮询和短轮询

以查看库存为例子

而对于客户端来说,不管是长轮询还是短轮询,客户端的动作都是一样的,就是不停的去请求。

长轮询和短轮询最大的区别是,短轮询去服务端查询的时候,不管库存量有没有变化,服务器就立即返回结果了。而长轮询则不是,在长轮询中,服务器如果检测到库存量没有变化的话,将会把当前请求挂起一段时间(这个时间也叫作超时时间,一般是几十秒)。在这个时间里,服务器会去检测库存量有没有变化,检测到变化就立即返回,否则就一直等到超时为止。

这样一来,客户端的请求次数将会大量减少(这也就意味着节省了网络流量,毕竟每次发请求,都会占用客户端的上传流量和服务端的下载流量),而且也解决了服务端一直疲于接受请求的窘境。

1-4、长短轮询和长短连接的区别

第一个区别是,决定的方式,一个TCP连接是否为长连接,是通过设置HTTP的Connection Header来决定的,而且是需要两边都设置才有效。而一种轮询方式是否为长轮询,是根据服务端的处理方式来决定的,与客户端没有关系。

第二个区别就是,实现的方式,连接的长短是通过协议来规定和实现的。而轮询的长短,是服务器通过编程的方式手动挂起请求来实现的。

1-5、什么是SSL ?https是如何保证数据传输的安全(SSL是怎么工作保证安全的)

SSL代表安全套接字层。它是一种用于加密和验证应用程序(如浏览器)和Web服务器之间发送的数据的协议. 身份验证 , 加密Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。

(1)客户端向服务器端发起SSL连接请求;
(2) 服务器把公钥发送给客户端,并且服务器端保存着唯一的私钥
(3)客户端用公钥对双方通信的对称秘钥进行加密,并发送给服务器端
(4)服务器利用自己唯一的私钥对客户端发来的对称秘钥进行解密,
(5)进行数据传输,服务器和客户端双方用公有的相同的对称秘钥对数据进行加密解密,可以保证在数据收发过程中的安全,即是第三方获得数据包,也无法对其进行加密,解密和篡改。

SSL工作过程,A:客户端,B:服务器端
1.协商加密算法:A向B发送SSL版本号和可选加密算法,B选择自己支持的算法并告知A
2.服务器鉴别:B向A发送包含公钥的数字证书,A使用CA公开发布的公钥对证书进行验证
3.会话密钥计算:A产生一个随机秘密数,用B的公钥进行加密后发送给B,B根据协商的算法产生共享的对称会话密钥并发送给A.
4.安全数据传输:双方用会话密钥加密和解密它们之间传送的数据并验证其完整性

1-6、常见的状态码有哪些?

200 OK //客户端请求成功

403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误URI和URL的区别URI,统一资源标识符,用来唯一的标识一个资源。URL可以用来标识一个资源,而且还指明了如何定位这个资源。

二、传输协议分组,TCP,UDP

2-1、TCP与UDP区别总结?

1.TCP面向连接(如打电话要先拨号建立连接)提供可靠的服务;UDP是无连接的,即发送数据之前不需要建立连接,;UDP尽最大努力交付,即不保证可靠交付。(由于UDP无需建立连接,因此UDP不会引入建立连接的时延,TCP需要在端系统中维护连接状态,比如接受和发送缓存,拥塞控制,序号与确认号的参数等,故TCP会比UDP慢)
2.UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
3. 每一条TCP连接只能是一对一的;UDP支持一对一,一对多,多对一和多对多的交互通信
4 UDP分组首部开销小,TCP首部开销20字节;UDP的首部开销小,只有8个字节。
5. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的(一次交付一个完整的报文,报文不可分割,报文是UDP数据报处理的最小单位)。
6.UDP适合一次性传输较小数据的网络应用,如DNS,SNMP等

2-2、TCP三次握手

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误

TCP三次握手建立连接,客户端和服务器需要交换3个包

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据

 2-3、TCP四次挥手

客户端先发送FIN,进入FIN_WAIT1状态,用来关闭Client到Server的数据传送
服务端收到FIN,发送ACK,进入CLOSE_WAIT状态,客户端收到这个ACK,进入FIN_WAIT2状态
服务端发送FIN,进入LAST_ACK状态,用来关闭Server到Client的数据传送
客户端收到FIN,发送ACK,进入TIME_WAIT状态,服务端收到ACK,进入CLOSE状态(等待2MSL时间,约4分钟。主要是防止最后一个ACK丢失。)
 

第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

 2-4、TCP如何保证可靠传输?

1. 三次握手。
2. 将数据截断为合理的长度。应用数据被分割成 TCP 认为最适合发送的数据块(按字节编号,合理分片)
3. 超时重发。当 TCP 发出一个段后,它启动一个定时器,如果不能及时收到一个确认就重发
4. 确认应答:对于收到的请求,给出确认响应
5. 校验和:校验出包有错,丢弃报文段,不给出响应
6. 序列号:对失序数据进行重新排序,然后才交给应用层
7. 丢弃重复数据:对于重复数据 , 能够丢弃重复数据
8. 流量控制。TCP 连接的每一方都有固定大小的缓冲空间。TCP 的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。
9. 拥塞控制。当网络拥塞时,减少数据的发送。

提示关键字:  校验和    序列号     确认应答    超时重传    连接管理    流量控制    拥塞控制

2-5、TCP对应的应用层协议

FTP:定义了文件传输协议,使用21端口.
Telnet:它是一种用于远程登陆的端口,23端口
SMTP:定义了简单邮件传送协议,服务器开放的是25号端口。
POP3:它是和SMTP对应,POP3用于接收邮件。
HTTP
UDP对应的应用层协议
DNS:用于域名解析服务,用的是53号端口
SNMP:简单网络管理协议,使用161号端口
TFTP(Trival File Transfer Protocal):简单文件传输协议,69

三、其他网络内容相关比较

3-1、GET 和 POST 的区别

  1. get是获取数据,post是修改数据
  2. get把请求的数据放在url上, 以?分割URL和传输数据,参数之间以&相连,所以get不太安全。而post把数据放在HTTP的包体内(requrest body)
  3. get提交的数据最大是2k( 限制实际上取决于浏览器), post理论上没有限制。
  4. GET产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
  5. GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
  6. GET是幂等的,而POST不是幂等的

3-2、Cookies和session区别

Cookie和Session都是客户端与服务器之间保持状态的解决方案
1,存储的位置不同,cookie:存放在客户端,session:存放在服务端。Session存储的数据比较安全
2,存储的数据类型不同
两者都是key-value的结构,但针对value的类型是有差异的
cookie:value只能是字符串类型,session:value是Object类型
3,存储的数据大小限制不同
cookie:大小受浏览器的限制,很多是是4K的大小, session:理论上受当前内存的限制,
4,生命周期的控制
cookie的生命周期当浏览器关闭的时候,就消亡了
(1) cookie的生命周期是累计的,从创建时,就开始计时,20分钟后,cookie生命周期结束,
(2) session的生命周期是间隔的,从创建时,开始计时如在20分钟,没有访问session,那么session生命周期被销毁

session 的工作原理?
session 的工作原理是客户端登录完成之后,服务器会创建对应的 session,session 创建完之后,会把 session 的 id 发送给客户端,客户端再存储到浏览器中。这样客户端每次访问服务器时,都会带着 sessionid,服务器拿到 sessionid 之后,在内存找到与之对应的 session 这样就可以正常工作了。

三、hashMap,Hashtable,LinkedHashMap,TreeMap的一些具体应用及相关区别?

hashCode():返回对象的内存地址.

java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap.

3-1、HashMap

HashMap实际上是一个“数组+链表+红黑树”的数据结构

1) Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。

2) HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;

3) HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。(如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap)

3-2 Hashtable

Hashtable与 HashMap类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。

3-3、HashSet

由哈希表(实际上是一个HashMap实例).HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。因为HashMap的key是不能有重复的.

3-4、LinkedHashMap

LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关

3-5、TreeMap

TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

因此,综上:一般情况下,我们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。如果需要输出的顺序和输入的相同,那么用LinkedHashMap 可以实现,它还可以按读取顺序来排列.

四、IO,NIO,AIO底层原理

参考:几率大的网络安全面试题(含答案)__睶_的博客-优快云博客_网络安全面试题及答案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值