【面经

【面经,第1张

【面经

1、OSI 的七层模型分别是?各自的功能是什么?2、说一下一次完整的HTTP请求过程包括哪些内容?3、你知道DNS是什么?4、DNS的工作原理?5、为什么域名解析用UDP协议?6、为什么区域传送用TCP协议?7、HTTP长连接和短连接的区别8、什么是TCP粘包/拆包?发生的原因?9、为什么服务器缓存这一项功能?如何实现的?10、HTTP请求方法你知道多少?11、GET 和 POST 的区别,你知道哪些?12、一个TCP连接可以对应几个HTTP请求?13、一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)?14、浏览器对同一 Host 建立 TCP 连接到的数量有没有限制?15、在浏览器中输入url地址后显示主页的过程?16、在浏览器地址栏输入一个URL后回车,背后会进行哪些技术步骤?17、谈谈DNS解析过程,具体一点18、DNS负载均衡是什么策略?19、HTTPS和HTTP的区别20、什么是SSL/TLS ?21、HTTPS是如何保证数据传输的安全,整体的流程是什么?(SSL是怎么工作保证安全的)22、如何保证公钥不被篡改?23、HTTP请求和响应报文有哪些主要字段?24、cookie是什么?25、cookie有什么用途?用途26、Session知识大总结27、Session 的工作原理是什么?28、cookie与Session的对比29、SQL注入攻击了解吗?30、网络的七层模型与各自的功能(图片版)31、什么是RARP?工作原理33、为何需要把 TCP/IP 协议栈分成 5 层(或7层)?开放式回答。34、DNS查询方式有哪些?35、HTTP中缓存的私有和共有字段?知道吗?36、GET 方法参数写法是固定的吗?37、GET 方法的长度限制是怎么回事?38、POST 方法比 GET 方法安全?39、POST 方法会产生两个 TCP 数据包?你了解吗?40、Session是什么?41、使用 Session 的过程是怎样的?42、Session和cookie应该如何去选择(适用场景)?43、cookies和Session区别是什么?44、DDos 攻击了解吗?45、MTU和MSS分别是什么?46、HTTP中有个缓存机制,但如何保证缓存是最新的呢?(缓存过期机制)47、TCP头部中有哪些信息?48、常见TCP的连接状态有哪些?49、网络的七层/五层模型主要的协议有哪些?50、TCP是什么?

1、OSI 的七层模型分别是?各自的功能是什么?

简要概括

物理层:底层数据传输,如网线;网卡标准。数据链路层:定义数据的基本格式,如何传输,如何标识;如网卡MAC地址。网络层:定义IP编址,定义路由功能;如不同设备的数据转发。传输层:端到端传输数据的基本功能;如 TCP、UDP。会话层:控制应用程序之间会话能力;如不同软件数据分发给不同软件。表示层:数据格式标识,基本压缩加密功能。应用层:各种应用软件,包括 Web 应用。

说明:

在四层,既传输层数据被称作段(Segments);三层网络层数据被称做包(Packages);二层数据链路层时数据被称为帧(frames);一层物理层时数据被称为比特流(Bits)。

总结

网络七层模型是一个标准,而非实现。网络四层模型是一个实现的应用模型。网络四层模型由七层模型简化合并而来。 2、说一下一次完整的HTTP请求过程包括哪些内容?

第一种回答

建立起客户机和服务器连接。建立连接后,客户机发送一个请求给服务器。服务器收到请求给予响应信息。客户端浏览器将返回的内容解析并呈现,断开连接。

第二种回答

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

3、你知道DNS是什么?

官方解释: DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。

通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。

通俗的讲, 我们更习惯于记住一个网站的名字,比如www.baidu.com,而不是记住它的ip地址,比如:167.23.10.2。

4、DNS的工作原理?

将主机域名转换为ip地址,属于应用层协议,使用UDP传输。(DNS应用层协议,以前有个考官问过)

过程:

总结: 浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存。
一、主机向本地域名服务器的查询一般都是采用递归查询。
二、本地域名服务器向根域名服务器的查询的迭代查询。
1)当用户输入域名时,浏览器先检查自己的缓存中是否 这个域名映射的ip地址,有解析结束。
2)若没命中,则检查 *** 作系统缓存(如Windows的hosts)中有没有解析过的结果,有解析结束。
3)若无命中,则请求本地域名服务器解析( LDNS)。
4)若LDNS没有命中就直接跳到根域名服务器请求解析。根域名服务器返回给LDNS一个 主域名服务器地址。
5) 此时LDNS再发送请求给上一步返回的gTLD( 通用顶级域), 接受请求的gTLD查找并返回这个域名对应的Name Server的地址
6) Name Server根据映射关系表找到目标ip,返回给LDNS
7) LDNS缓存这个域名和对应的ip, 把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束

5、为什么域名解析用UDP协议?

因为UDP快啊!UDP的DNS协议只要一个请求、一个应答就好了。

而使用基于TCP的DNS协议要三次握手、发送数据以及应答、四次挥手,但是UDP协议传输内容不能超过512字节。

不过客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。

6、为什么区域传送用TCP协议?

因为TCP协议可靠性好啊!

你要从主DNS上复制内容啊,你用不可靠的UDP? 因为TCP协议传输的内容大啊,你用最大只能传512字节的UDP协议?万一同步的数据大于512字节,你怎么办?所以用TCP协议比较好!

7、HTTP长连接和短连接的区别

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

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

8、什么是TCP粘包/拆包?发生的原因?

一个完整的业务可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这个就是TCP的拆包和粘包问题。

原因

1、应用程序写入数据的字节大小大于套接字发送缓冲区的大小.

2、进行MSS大小的TCP分段。( MSS=TCP报文段长度-TCP首部长度)

3、以太网的payload大于MTU进行IP分片。( MTU指:一种通信协议的某一层上面所能通过的最大数据包大小。)

解决方案

1、消息定长。

2、在包尾部增加回车或者空格符等特殊字符进行分割3. 将消息分为消息头和消息尾。4. 使用其它复杂的协议,如RTMP协议等。

9、为什么服务器会缓存这一项功能?如何实现的?

原因

缓解服务器压力;降低客户端获取资源的延迟:缓存通常位于内存中,读取缓存的速度更快。并且缓存服务器在地理位置上也有可能比源服务器来得近,例如浏览器缓存。

实现方法

让代理服务器进行缓存;让客户端浏览器进行缓存。 10、HTTP请求方法你知道多少?

客户端发送的 请求报文 第一行为请求行,包含了方法字段。

根据 HTTP 标准,HTTP 请求可以使用多种请求方法。

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETe、TRACE 和 ConNECT 方法。

序号方法描述1GET请求指定的页面信息,并返回实体主体。2HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头3POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。4PUT从客户端向服务器传送的数据取代指定的文档的内容。5DELETE请求服务器删除指定的页面。6CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。7OPTIONS允许客户端查看服务器的性能。8TRACE回显服务器收到的请求,主要用于测试或诊断。9PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新 。 11、GET 和 POST 的区别,你知道哪些?
    get是获取数据,post是修改数据get把请求的数据放在url上, 以?分割URL和传输数据,参数之间以&相连,所以get不太安全。而post把数据放在HTTP的包体内(requrest body)get提交的数据最大是2k( 限制实际上取决于浏览器), post理论上没有限制。GET产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。GET请求会被浏览器主动缓存,而POST不会,除非手动设置。本质区别:GET是幂等的,而POST不是幂等的

这里的幂等性:幂等性是指一次和多次请求某一个资源应该具有同样的副作用。简单来说意味着对同一URL的多个请求应该返回同样的结果。

正因为它们有这样的区别,所以不应该且不能用get请求做数据的增删改这些有副作用的 *** 作。 因为get请求是幂等的,在网络不好的隧道中会尝试重试。 如果用get请求增数据,会有重复 *** 作的风险,而这种重复 *** 作可能会导致副作用(浏览器和 *** 作系统并不知道你会用get请求去做增 *** 作)。

12、一个TCP连接可以对应几个HTTP请求?

如果维持连接,一个 TCP 连接是可以发送多个 HTTP 请求的。

13、一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)?

HTTP/1.1 存在一个问题,单个 TCP 连接在同一时刻只能处理一个请求,意思是说:两个请求的生命周期不能重叠,任意两个 HTTP 请求从开始到结束的时间在同一个 TCP 连接里不能重叠。

在 HTTP/1.1 存在 Pipelining 技术可以完成这个多个请求同时发送,但是由于浏览器默认关闭,所以可以认为这是不可行的。在 HTTP2 中由于 Multiplexing 特点的存在,多个 HTTP 请求可以在同一个 TCP 连接中并行进行。

那么在 HTTP/1.1 时代,浏览器是如何提高页面加载效率的呢?主要有下面两点:

维持和服务器已经建立的 TCP 连接,在同一连接上顺序处理多个请求。和服务器建立多个 TCP 连接。 14、浏览器对同一 Host 建立 TCP 连接到的数量有没有限制?

假设我们还处在 HTTP/1.1 时代,那个时候没有多路传输,当浏览器拿到一个有几十张图片的网页该怎么办呢?肯定不能只开一个 TCP 连接顺序下载,那样用户肯定等的很难受,但是如果每个图片都开一个 TCP 连接发 HTTP 请求,那电脑或者服务器都可能受不了,要是有 1000 张图片的话总不能开 1000 个TCP 连接吧,你的电脑同意 NAT 也不一定会同意。

有。Chrome 最多允许对同一个 Host 建立六个 TCP 连接。不同的浏览器有一些区别。

如果图片都是 HTTPS 连接并且在同一个域名下,那么浏览器在 SSL 握手之后会和服务器商量能不能用 HTTP2,如果能的话就使用 Multiplexing 功能在这个连接上进行多路传输。不过也未必会所有挂在这个域名的资源都会使用一个 TCP 连接去获取,但是可以确定的是 Multiplexing 很可能会被用到。

如果发现用不了 HTTP2 呢?或者用不了 HTTPS(现实中的 HTTP2 都是在 HTTPS 上实现的,所以也就是只能使用 HTTP/1.1)。那浏览器就会在一个 HOST 上建立多个 TCP 连接,连接数量的最大限制取决于浏览器设置,这些连接会在空闲的时候被浏览器用来发送新的请求,如果所有的连接都正在发送请求呢?那其他的请求就只能等等了。

15、在浏览器中输入url地址后显示主页的过程?

根据域名,进行DNS域名解析;拿到解析的IP地址,建立TCP连接;向IP地址,发送HTTP请求;服务器处理请求;返回响应结果;关闭TCP连接;浏览器解析HTML;浏览器布局渲染; 16、在浏览器地址栏输入一个URL后回车,背后会进行哪些技术步骤?

第一种回答

1、查浏览器缓存,看看有没有已经缓存好的,如果没有

2 、检查本机host文件,

3、调用API,Linux下Scoket函数 gethostbyname

4、向DNS服务器发送DNS请求,查询本地DNS服务器,这其中用的是UDP的协议

5、如果在一个子网内采用ARP地址解析协议进行ARP查询如果不在一个子网那就需要对默认网关进行DNS查询,如果还找不到会一直向上找根DNS服务器,直到最终拿到IP地址(全球400多个根DNS服务器,由13个不同的组织管理)

6、这个时候我们就有了服务器的IP地址 以及默认的端口号了,http默认是80 https是 443 端口号,会,首先尝试http然后调用Socket建立TCP连接,

7、经过三次握手成功建立连接后,开始传送数据,如果正是http协议的话,就返回就完事了,

8、如果不是http协议,服务器会返回一个5开头的的重定向消息,告诉我们用的是https,那就是说IP没变,但是端口号从80变成443了,好了,再四次挥手,完事,

9、再来一遍,这次除了上述的端口号从80变成443之外,还会采用SSL的加密技术来保证传输数据的安全性,保证数据传输过程中不被修改或者替换之类的,

10、这次依然是三次握手,沟通好双方使用的认证算法,加密和检验算法,在此过程中也会检验对方的CA安全证书。

11、确认无误后,开始通信,然后服务器就会返回你所要访问的网址的一些数据,在此过程中会将界面进行渲染,牵涉到ajax技术之类的,直到最后我们看到色彩斑斓的网页

第二种回答

浏览器检查域名是否在缓存当中(要查看 Chrome 当中的缓存, 打开 chrome://net-internals/#dns)。

如果缓存中没有,就去调用 gethostbyname 库函数( *** 作系统不同函数也不同)进行查询。

如果gethostbyname 没有这个域名的缓存记录,也没有在 hosts` 里找到,它将会向 DNS 服务器发送一条 DNS 查询请求。DNS 服务器是由网络通信栈提供的,通常是本地路由器或者 ISP 的缓存 DNS 服务器。

查询本地 DNS 服务器

如果 DNS 服务器和我们的主机在同一个子网内,系统会按照下面的 ARP 过程对 DNS 服务器进行 ARP查询

如果 DNS 服务器和我们的主机在不同的子网,系统会按照下面的 ARP 过程对默认网关进行查询

17、谈谈DNS解析过程,具体一点

请求一旦发起,若是chrome浏览器,先在浏览器找之前有没有缓存过的域名所对应的ip地址,有的话,直接跳过dns解析了,若是没有,就会找硬盘的hosts文件,看看有没有,有的话,直接找到hosts文件里面的ip如果本地的hosts文件没有能得到对应的ip地址,浏览器会发出一个dns请求到本地dns服务器,本地dns服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动等。查询你输入的网址的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果,此过程是递归的方式进行查询。如果没有,本地DNS服务器还要向DNS根服务器进行查询。本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。 18、DNS负载均衡是什么策略?

当一个网站有足够多的用户的时候,假如每次请求的资源都位于同一台机器上面,那么这台机器随时可能会崩掉。处理办法就是用DNS负载均衡技术,它的原理是在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器, 从而达到负载均衡的目的。例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等。

19、HTTPS和HTTP的区别

1、HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全, HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

2、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。 3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

20、什么是SSL/TLS ?

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

SSL/TLS协议作用:认证用户和服务,加密数据,维护数据的完整性的应用层协议加密和解密需要两个不同的密钥,故被称为非对称加密;加密和解密都使用同一个密钥的

对称加密:优点在于加密、解密效率通常比较高 ,HTTPS 是基于非对称加密的, 公钥是公开的,

21、HTTPS是如何保证数据传输的安全,整体的流程是什么?(SSL是怎么工作保证安全的)

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

因为数字签名、摘要是证书防伪非常关键的武器。 “摘要”就是对传输的内容,通过hash算法计算出一段固定长度的串。然后,通过发送方的私钥对这段摘要进行加密,加密后得到的结果就是“数字签名”

SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

补充: SSL/TLS的四次握手,目前网上的主流答案都在重复阮一峰老师的博客,属于TLS 1.0版本的答案,使用RSA密钥交换算法。但是现在TLS 1.2已经成为主流,使用ECDHE算法,如果面试可以说出这个版本的答案,应该会更好。

22、如何保证公钥不被篡改?

将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。 公钥加密计算量太大,如何减少耗用的时间? 每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。
(1) 客户端向服务器端索要并验证公钥。
(2) 双方协商生成"对话密钥"。
(3) 双方采用"对话密钥"进行加密通信。上面过程的前两步,又称为"握手阶段"(handshake)。

23、HTTP请求和响应报文有哪些主要字段?

请求报文

简单来说:

请求行:Request Line请求头:Request Headers请求体:Request Body

响应报文

简单来说:

状态行:Status Line响应头:Response Headers响应体:Response Body 24、cookie是什么?

HTTP 协议是无状态的,主要是为了让 HTTP 协议尽可能简单,使得它能够处理大量事务,HTTP/1.1 引入 cookie 来保存状态信息。

cookie 是服务器发送到用户浏览器并保存在本地的一小块数据, 它会在浏览器之后向同一服务器再次发起请求时被携带上,用于告知服务端两个请求是否来自同一浏览器。由于之后每次请求都会需要携带 cookie 数据,因此会带来额外的性能开销(尤其是在移动环境下)。

cookie 曾一度用于客户端数据的存储,因为当时并没有其它合适的存储办法而作为唯一的存储手段,但现在随着现代浏览器开始支持各种各样的存储方式,cookie 渐渐被淘汰。

新的浏览器 API 已经允许开发者直接将数据存储到本地,如使用 Web storage API(本地存储和会话存储)或 IndexedDB。

cookie 的出现是因为 HTTP 是无状态的一种协议,换句话说,服务器记不住你,可能你每刷新一次网页,就要重新输入一次账号密码进行登录。这显然是让人无法接受的,cookie 的作用就好比服务器给你贴个标签,然后你每次向服务器再发请求时,服务器就能够 cookie 认出你。

抽象地概括一下:一个 cookie 可以认为是一个「变量」,形如 name=value,存储在浏览器;一个 session 可以理解为一种数据结构,多数情况是「映射」(键值对),存储在服务器上。

25、cookie有什么用途?用途

会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)个性化设置(如用户自定义设置、主题等)浏览器行为跟踪(如跟踪分析用户行为等) 26、Session知识大总结

除了可以将用户信息通过 cookie 存储在用户浏览器中,也可以利用 Session 存储在服务器端,存储在服务器端的信息更加安全。

Session 可以存储在服务器上的文件、数据库或者内存中。也可以将 Session 存储在 Redis 这种内存型数据库中,效率会更高。

使用 Session 维护用户登录状态的过程如下:

    用户进行登录时,用户提交包含用户名和密码的表单,放入 HTTP 请求报文中;服务器验证该用户名和密码,如果正确则把用户信息存储到 Redis 中,它在 Redis 中的 Key 称为 Session ID;服务器返回的响应报文的 Set-cookie 首部字段包含了这个 Session ID,客户端收到响应报文之后将该 cookie 值存入浏览器中;客户端之后对同一个服务器进行请求时会包含该 cookie 值,服务器收到之后提取出 Session ID,从 Redis 中取出用户信息,继续之前的业务 *** 作。

注意:Session ID 的安全性问题,不能让它被恶意攻击者轻易获取,那么就不能产生一个容易被猜到的 Session ID 值。此外,还需要经常重新生成 Session ID。在对安全性要求极高的场景下,例如转账等 *** 作,除了使用 Session 管理用户状态之外,还需要对用户进行重新验证,比如重新输入密码,或者使用短信验证码等方式。

27、Session 的工作原理是什么?

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

28、cookie与Session的对比

HTTP作为无状态协议,必然需要在某种方式保持连接状态。这里简要介绍一下cookie和Session。

cookie

cookie是客户端保持状态的方法。

cookie简单的理解就是存储由服务器发至客户端并由客户端保存的一段字符串。为了保持会话,服务器可以在响应客户端请求时将cookie字符串放在Set-cookie下,客户机收到cookie之后保存这段字符串,之后再请求时候带上cookie就可以被识别。

除了上面提到的这些,cookie在客户端的保存形式可以有两种,一种是会话cookie一种是持久cookie,会话cookie就是将服务器返回的cookie字符串保持在内存中,关闭浏览器之后自动销毁,持久cookie则是存储在客户端磁盘上,其有效时间在服务器响应头中被指定,在有效期内,客户端再次请求服务器时都可以直接从本地取出。需要说明的是,存储在磁盘中的cookie是可以被多个浏览器代理所共享的。

Session

Session是服务器保持状态的方法。

首先需要明确的是,Session保存在服务器上,可以保存在数据库、文件或内存中,每个用户有独立的Session用户在客户端上记录用户的 *** 作。我们可以理解为每个用户有一个独一无二的Session ID作为Session文件的Hash键,通过这个值可以锁定具体的Session结构的数据,这个Session结构中存储了用户 *** 作行为。

当服务器需要识别客户端时就需要结合cookie了。每次HTTP请求的时候,客户端都会发送相应的cookie信息到服务端。实际上大多数的应用都是用cookie来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在cookie里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。如果客户端的浏览器禁用了cookie,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如sid=xxxxx这样的参数,服务端据此来识别用户,这样就可以帮用户完成诸如用户名等信息自动填入的 *** 作了。

29、SQL注入攻击了解吗?

攻击者在HTTP请求中注入恶意的SQL代码,服务器使用参数构建数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行。 用户登录,输入用户名 lianggzone,密码 ‘ or ‘1’=’1 ,如果此时使用参数构造的方式,就会出现 select * from user where name = ‘lianggzone’ and password = ‘’ or ‘1’=‘1’ 不管用户名和密码是什么内容,使查询出来的用户列表不为空。如何防范SQL注入攻击使用预编译的PrepareStatement是必须的,但是一般我们会从两个方面同时入手。 Web端 1)有效性检验。 2)限制字符串输入的长度。 服务端 1)不用拼接SQL字符串。 2)使用预编译的PrepareStatement。 3)有效性检验。(为什么服务端还要做有效性检验?第一准则,外部都是不可信的,防止攻击者绕过Web端请求) 4)过滤SQL需要的参数中的特殊字符。比如单引号、双引号。

30、网络的七层模型与各自的功能(图片版)

31、什么是RARP?工作原理

概括:
反向地址转换协议,网络层协议,RARP与ARP工作方式相反。 RARP使只知道自己硬件地址的主机能够知道其IP地址。RARP发出要反向解释的物理地址并希望返回其IP地址,应答包括能够提供所需信息的RARP服务器发出的IP地址。
原理:
(1)网络上的每台设备都会有一个独一无二的硬件地址,通常是由设备厂商分配的MAC地址。主机从网卡上读取MAC地址,然后在网络上发送一个RARP请求的广播数据包,请求RARP服务器回复该主机的IP地址。

(2)RARP服务器收到了RARP请求数据包,为其分配IP地址,并将RARP回应发送给主机。

(3)PC1收到RARP回应后,就使用得到的IP地址进行通讯。

32、端口有效范围是多少到多少?
0-1023为知名端口号,比如其中HTTP是80,FTP是20(数据端口)、21(控制端口)

UDP和TCP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。动态端口的范围是从1024到65535

33、为何需要把 TCP/IP 协议栈分成 5 层(或7层)?开放式回答。

答:ARPANET 的研制经验表明,对于复杂的计算机网络协议,其结构应该是层次式的。

分层的好处:

①隔层之间是独立的

②灵活性好

③结构上可以分隔开

④易于实现和维护

⑤能促进标准化工作。

34、DNS查询方式有哪些?

递归解析

当局部DNS服务器自己不能回答客户机的DNS查询时,它就需要向其他DNS服务器进行查询。此时有两种方式。局部DNS服务器自己负责向其他DNS服务器进行查询,一般是先向该域名的根域服务器查询,再由根域名服务器一级级向下查询。最后得到的查询结果返回给局部DNS服务器,再由局部DNS服务器返回给客户端。

迭代解析

当局部DNS服务器自己不能回答客户机的DNS查询时,也可以通过迭代查询的方式进行解析。局部DNS服务器不是自己向其他DNS服务器进行查询,而是把能解析该域名的其他DNS服务器的IP地址返回给客户端DNS程序,客户端DNS程序再继续向这些DNS服务器进行查询,直到得到查询结果为止。也就是说,迭代解析只是帮你找到相关的服务器而已,而不会帮你去查。比如说:baidu.com的服务器ip地址在192.168.4.5这里。

35、HTTP中缓存的私有和共有字段?知道吗?

private 指令规定了将资源作为私有缓存,只能被单独用户使用,一般存储在用户浏览器中。

 Cache-Control: private

public 指令规定了将资源作为公共缓存,可以被多个用户使用,一般存储在代理服务器中。

 Cache-Control: public
36、GET 方法参数写法是固定的吗?

在约定中,我们的参数是写在 ? 后面,用 & 分割。

我们知道,解析报文的过程是通过获取 TCP 数据,用正则等工具从数据中获取 Header 和 Body,从而提取参数。

比如header请求头中添加token,来验证用户是否登录等权限问题。

也就是说,我们可以自己约定参数的写法,只要服务端能够解释出来就行,万变不离其宗。

37、GET 方法的长度限制是怎么回事?

网络上都会提到浏览器地址栏输入的参数是有限的。

首先说明一点,HTTP 协议没有 Body 和 URL 的长度限制,对 URL 限制的大多是浏览器和服务器的原因。

浏览器原因就不说了,服务器是因为处理长 URL 要消耗比较多的资源,为了性能和安全(防止恶意构造长 URL 来攻击)考虑,会给 URL 长度加限制。

38、POST 方法比 GET 方法安全?

有人说POST 比 GET 安全,因为数据在地址栏上不可见。

然而,从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报文。

要想安全传输,就只有加密,也就是 HTTPS。

39、POST 方法会产生两个 TCP 数据包?你了解吗?

有些文章中提到,POST 会将 header 和 body 分开发送,先发送 header,服务端返回 100 状态码再发送 body。

HTTP 协议中没有明确说明 POST 会产生两个 TCP 数据包,而且实际测试(Chrome)发现,header 和 body 不会分开发送。

所以,header 和 body 分开发送是部分浏览器或框架的请求方法,不属于 post 必然行为。

40、Session是什么?

除了可以将用户信息通过 cookie 存储在用户浏览器中,也可以利用 Session 存储在服务器端,存储在服务器端的信息更加安全。

Session 可以存储在服务器上的文件、数据库或者内存中。也可以将 Session 存储在 Redis 这种内存型数据库中,效率会更高。

41、使用 Session 的过程是怎样的?

过程如下:

用户进行登录时,用户提交包含用户名和密码的表单,放入 HTTP 请求报文中;服务器验证该用户名和密码,如果正确则把用户信息存储到 Redis 中,它在 Redis 中的 Key 称为 Session ID;服务器返回的响应报文的 Set-cookie 首部字段包含了这个 Session ID,客户端收到响应报文之后将该 cookie 值存入浏览器中;客户端之后对同一个服务器进行请求时会包含该 cookie 值,服务器收到之后提取出 Session ID,从 Redis 中取出用户信息,继续之前的业务 *** 作。

注意: Session ID 的安全性问题,不能让它被恶意攻击者轻易获取,那么就不能产生一个容易被猜到的 Session ID 值。此外,还需要经常重新生成 Session ID。在对安全性要求极高的场景下,例如转账等 *** 作,除了使用 Session 管理用户状态之外,还需要对用户进行重新验证,比如重新输入密码,或者使用短信验证码等方式。

42、Session和cookie应该如何去选择(适用场景)?

cookie 只能存储 ASCII 码字符串,而 Session 则可以存储任何类型的数据,因此在考虑数据复杂性时首选 Session;cookie 存储在浏览器中,容易被恶意查看。如果非要将一些隐私数据存在 cookie 中,可以将 cookie 值进行加密,然后在服务器进行解密;对于大型网站,如果用户所有的信息都存储在 Session 中,那么开销是非常大的,因此不建议将所有的用户信息都存储到 Session 中。 43、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生命周期被销毁

44、DDos 攻击了解吗?

客户端向服务端发送请求链接数据包,服务端向客户端发送确认数据包,客户端不向服务端发送确认数据包,服务器一直等待来自客户端的确认 没有彻底根治的办法,除非不使用TCP
DDos 预防:
1)限制同时打开SYN半链接的数目
2)缩短SYN半链接的Time out 时间
3)关闭不必要的服务

45、MTU和MSS分别是什么?

MTU: maximum transmission unit,最大传输单元,由硬件规定,如以太网的MTU为1500字节。

MSS: maximum segment size,最大分节大小,为TCP数据包每次传输的最大数据分段大小,一般由发送端向对端TCP通知对端在每个分节中能发送的最大TCP数据。MSS值为MTU值减去IPv4 Header(20 Byte)和TCP header(20 Byte)得到。

46、HTTP中有个缓存机制,但如何保证缓存是最新的呢?(缓存过期机制)

max-age 指令出现在请求报文,并且缓存资源的缓存时间小于该指令指定的时间,那么就能接受该缓存。

max-age 指令出现在响应报文,表示缓存资源在缓存服务器中保存的时间。

 Cache-Control: max-age=31536000

Expires 首部字段也可以用于告知缓存服务器该资源什么时候会过期。

 Expires: Wed, 04 Jul 2012 08:26:05 GMT

在 HTTP/1.1 中,会优先处理 max-age 指令;在 HTTP/1.0 中,max-age 指令会被忽略掉。 47、TCP头部中有哪些信息?

序号(32bit): 传输方向上字节流的字节编号。初始时序号会被设置一个随机的初始值(ISN),之后每次发送数据时,序号值 = ISN + 数据在整个字节流中的偏移。假设A -> B且ISN = 1024,第一段数据512字节已经到B,则第二段数据发送时序号为1024 + 512。用于解决网络包乱序问题。确认号(32bit): 接收方对发送方TCP报文段的响应,其值是收到的序号值 + 1。首部长(4bit): 标识首部有多少个4字节 * 首部长,最大为15,即60字节。标志位(6bit):

URG:标志紧急指针是否有效。ACK:标志确认号是否有效(确认报文段)。用于解决丢包问题。PSH:提示接收端立即从缓冲读走数据。RST:表示要求对方重新建立连接(复位报文段)。SYN:表示请求建立一个连接(连接报文段)。FIN:表示关闭连接(断开报文段)。 窗口(16bit): 接收窗口。用于告知对方(发送方)本方的缓冲还能接收多少字节数据。用于解决流控。校验和(16bit): 接收端用CRC检验整个报文段有无损坏。 48、常见TCP的连接状态有哪些?

CLOSED: 初始状态。LISTEN: 服务器处于监听状态。SYN_SEND: 客户端socket执行CONNECT连接,发送SYN包,进入此状态。SYN_RECV: 服务端收到SYN包并发送服务端SYN包,进入此状态。ESTABLISH: 表示连接建立。客户端发送了最后一个ACK包后进入此状态,服务端接收到ACK包后进入此状态。FIN_WAIT_1: 终止连接的一方(通常是客户机)发送了FIN报文后进入。等待对方FIN。CLOSE_WAIT: (假设服务器)接收到客户机FIN包之后等待关闭的阶段。在接收到对方的FIN包之后,自然是需要立即回复ACK包的,表示已经知道断开请求。但是本方是否立即断开连接(发送FIN包)取决于是否还有数据需要发送给客户端,若有,则在发送FIN包之前均为此状态。FIN_WAIT_2: 此时是半连接状态,即有一方要求关闭连接,等待另一方关闭。客户端接收到服务器的ACK包,但并没有立即接收到服务端的FIN包,进入FIN_WAIT_2状态。LAST_ACK: 服务端发动最后的FIN包,等待最后的客户端ACK响应,进入此状态。TIME_WAIT: 客户端收到服务端的FIN包,并立即发出ACK包做最后的确认,在此之后的2MSL时间称为TIME_WAIT状态。 49、网络的七层/五层模型主要的协议有哪些?

50、TCP是什么?

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

本文主要是个人总结,为防止文章冗长,分为多篇博客发布(如有问题欢迎大家指出~)

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5704230.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存