面试前,花20min去复习一些网络知识,我拿到了3家大厂offer
Posted 沉默着忍受
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试前,花20min去复习一些网络知识,我拿到了3家大厂offer相关的知识,希望对你有一定的参考价值。
校招面试前,花20min去复习一些网络知识,我拿到了3家大厂offer
22届春招已经开始,回首自己在22届秋招的战果,拿到了一些大厂的offer,但是自我总结一下发现其实在找工作的时候除了算法需要长时间练习,其他知识都能够在碎片化的时间中去学习,比如我就喜欢在面试前拿出总结的网络知识去理解记忆。效果非常不错!我现在分享给正在找工作的学生,希望大家都有理想的offer!
一、OSI(开放式通信系统互联网参考模型)的七层模型
应用层:主要是终端的应用,比如说QQ、浏览器、FTP(文件下载)等。
表示层:数据的表示,和数据的解压缩
会话层:通过传输层建立起数据传输通路。在系统之间发起会话或者接收会话请求。
传输层:定义传输数据的端口和协议,比如TCP、UDP协议。将下层到达的数据进行分段和传输,
到达目的后再进行重组。(传输的是段)
网络层:选择合适的网间路由和交换节点,主要设备是路由器。(传输的是报)
数据链路层:将物理层到达的数据进行MAC地址的封装与解封装。主要设备是交换机和网卡。(传
输的是帧)
物理层:定义物理设备的标准。比如网卡的接口类型,传输介质的传输速率等等。传输的是比特
流。
二、TCP/IP四层参考模型
数据链路层、网络层、传输层、应用层
三. 三次握手
什么是三次握手?
- 第一次握手:客户端发送SYN包到服务端(SYN=1表示请求连接,序列号seq随机生成)
- 第二次握手:服务端同意连接,回复SYN+ACK包到客户端(ACK=1表示确认序号有效,
ack=seq+1) - 第三次握手:客户端收到后回复一个ACK包,连接建立
两次握手就可以建立连接,为什么还要三次?
在服务端回复完SYN+ACK包之后,就建立了连接。但客户端收到后又回复了ACK包,这是为了防止已经
失效的请求报文又传送到了服务端引起错误。
例如客户端发送第一个SYN包请求连接,但因为网络阻塞,SYN包丢失。为了建立连接,客户端又重新
发送了第二个SYN包请求连接,这一次服务端成功收到请求并回复SYN+ACK包。但此时,之前已经丢失
的第一个SYN包发送到了服务端,服务端会以为这是一次新的连接请求。此时客户端正在请求建立的是
一次请求连接,而服务端会以为是两次请求连接,就会产生客户端和服务端状态不一致的错误。
三次握手实际上是为了解决网络信道不可靠的问题,在不可靠的网络信道建立可靠的连接。
TCP SYN-flood攻击:SYN-flood攻击就是客户端一直发送SYN包,服务器端回复了ACK+SYN,但是客
户端由于某种原因无法收到,客户端就一直发送SYN请求包,就这样一直持续,导致最终存在许多半连
接,浪费浏览器资源。
四.四次挥手
什么是四次挥手?
处在连接状态的客户端和服务端都可以发起释放连接的请求。
- 第一次挥手:客户端发送FIN包到服务端请求释放连接。进入等待1状态,不能再发送数据,但可以
接受数据。 - 第二次挥手:服务端收到后回复确认报文ACK,服务端开始处于关闭等待状态,这个状态会持续一
段时间,因为服务端可能还有数据没有发完。 - 第三次挥手:服务端将数据全部发送完后向客户端发出连接释放FIN+ACK报文
- 第四次挥手:客户端收到FIN报文号 ,向服务端发送确认报文ACK。客户端发送报文后并不是立马
释放TCP连接,要经过2MSL(MSL为报文最大存活时间)后才释放TCP连接。而服务端收到客户端
的确认报文后会立马释放,所以服务端TCP连接结束的时间更早一些。 - 为什么建立连接需要三次,释放连接需要4次?
在释放连接时,不需要确保客户端和服务端都没有要发送的数据时候才能断开TCP。
客户端发出FIN时,只能保证客户端没有数据发送了,不能保证服务端也发完数据了。
服务端收到FIN时也只能先回复客户端ACK确认收到,等到发完所有数据后,才会给客户端发送
FIN。不能一次性把确认报文和FIN报文发送给客户端,所以多了一次挥手。
五.为什么客户端发出第四次挥手的确认报文后要等2MSL的时
间才能释放TCP连接?
答:这是为了解决网络信道不可靠的问题。如果第四次挥手中客户端发送的ACK报文因为网络丢失,服
务端会重新发起第三次挥手FIN报文,客户端可以重新确认。这一来一回的时间最长就是2MSL,所以需
要等待这么久确认服务端收到确认报文。
如果已经建立了连接,但是客户端突然出现故障了怎么 办?
TCP设有一个保活计时器,服务器每一次收到客户端的请求后都会重新复位这个计时器,如果超过2小时
没有收到客户端的任何数据,服务器就会每隔75秒发送一个探测报文段,若发送了10次探测报文后还没
有反应,服务器就认为客户端故障,关闭连接。
六.TCP协议如何保证传输的可靠性
主要是通过数据包校验、应答机制、超时重发、数据包的失序重排、丢失重复的数据、流量控制等实
现。
-
数据包校验: 检测数据在传输过程中是否发生变化,如果校验包出错,那么接收方丢弃报文段并且
不给出应答(响应),那么发送方就会超时重传。 -
超时重传:当TCP发出一个段时,会启动一个定时器,如果在一定的时间内没有收到应答,那么就
会重新发送这个报文段。 -
确认应答:TCp的一端发出报文段,另一端收到后给出应答响应。
-
失序重排:TCp的报文段作为IP 的数据报传输,IP的数据报达到可能是失序的,因此TCP 的报文段
到达也可能是失序的,因此TCP会对失序的报文段进行一个重新的排序 -
丢弃重复数据:当接收方收到重复的报文段的时候对其进行丢弃
-
流量机制:TCP连接的每一端各有一个固定大小的缓冲空间,接收方只允许发送方发送它的缓冲区
所能接纳的数据。这是防止较快的主机使较慢的主机缓冲区溢出。TCP的流量控制是通过可变大小
的滑动窗口协议来实现的。 -
滑动窗口协议:发送方和接收方各有一个缓存数组,
-
发送方存放着:已发送且成功确认包序号、已发送未确认包序号 ,未发送包序号。
-
接收方存放着:已接受包序号、正在接收包序号、未接收包序号。
-
每个数组有个两个扫描指针,开头和结尾,一起向后扫描,两者形成一个窗口,所以被称为
窗口协议
七.流量控制和拥塞控制区别
- 流量控制就是端到端的控制,一端数据发送太快,另一端来不及接收
- 拥塞控制是全局性的,是一端到另一端的网络因为堵塞而导致传输速率过慢或者丢包现象。涉及到
所有的主机、路由器及降低网络性能的所有因素。(网络中对某一资源的需求超过了它提供的可用
部分,造成了网络性能过慢)
八.拥塞控制的解决办法
拥塞控制:就是防止过多的数据注入到网络中,这样使网络中的路由器或者链路不至于过载
四种方式是:慢开始、拥塞避免、快重传和快恢复
- 慢开始:因为一开始不知道网络的拥塞程度,所以一开始不会发送大量的数据,而是从小到大的增
加拥塞窗口的大小 - 拥塞避免:拥塞窗口的大小成线性增长,每经过一个往返RTT时间,拥塞窗口的大小加1
- 快重传:接收方收到一个失序的报文段后,立刻向发送方发送重复确认,不用等待自己发送数据时捎
带确认;发送方一连收到三个这样的确认重传之后,就会向接收方发送一个尚未收到的报文段,不
用等待重传计时器的时间的到期
快恢复:快重传配合使用的还有快恢复算法,当接收方一连收到三个重复确认的时候,将门限值减
半,但是接下来并不执行慢开始算法,因为如果网络拥塞的话就不会连续收到三个重复确认,拥塞
窗口的大小为门限值,然后执行拥塞避免算法。
九.从输入网址URL到获得页面的整个过程
- 浏览器查询DNS服务器,获取域名对应的IP地址;
- 浏览器获得域名对应的IP地址后,浏览器向服务器发起建立连接请求,发起TCP的三次握手
- TCP/IP连接建立起来后,浏览器向服务器发起HTTP请求
- 服务器收到请求后,根据路径参数映射到特定的处理机进行处理,将处理结果和相应的视图返回给
浏览器 - 浏览器解析并且渲染视图,如果遇到js等静态资源的引用,则重复以上的步骤,继续向服务器请求
资源 - 浏览器根据请求到的资源和数据进行渲染页面,最终向用户呈现一个完整的页面
注意:输入URL但是没有到指定的网址,可能是DNS无法解析、网络断开、后台接口出现问题、服务器
负载过大。
上述过程都涉及到了哪些协议? - 应用层:HTTP(www访问协议),DNS(域名解析服务)
- 传输层:TCP(为HTTP提供可靠的数据传输),UDP(DNS使用UDP传输)。
- 网络层:IP(IP数据数据包传输和路由选择),ICMP(提供网络传输过程中的差错检测),ARP(将本机
的默认网关IP地址映射成物理MAC地址)
十.DNS是什么?DNS解析一个网址的工作过程吗?
DNS是用来将主机名和域名转换为IP地址的域名系统。
工作过程:
- 先检查自己本地的hosts文件是否有这个网址映射关系,如果有直接调用,完成解析
- 如果hosts里没有这个域名的映射,则会查找本地DNS解析器缓存,如果有直接调用,完成解析
- 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选
DNS服务器,在此我们叫它本地DNS服务器,完成域名解析,此解析具有权威性; - 如果要查询域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这
个IP地址映射,完成域名解析,此解析不具有权威性; - 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转
发器)进行查询。如果没有设置转发,本地DNS就把请求发至13台根DNS继续处理。 - 如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,依次循环。最后都是把
结果返回给本地DNS服务器,由此DNS服务器再返回给客户机
十一.Http相关知识大总结
HTTP是在客户端和服务端之间传输文字图片等超文本数据的协议。
1.HTTP的请求报文
- 由请求行、请求头、空行和请求数据组成
- 请求行有请求方法、URL和HTT协议版本
请求头是通知服务器关于客户端的信息:以键值对的方式存储
User-Agent: 产生请求的浏览器的类型
Accpet:浏览器(客户端)可识别的内容类型列表
Host:请求的主机名
2.HTTP的响应报文
HTTP响应报文由响应行,响应头,响应体三部分组成。
- 响应行主要包括响应协议,这个与请求协议对应,比如http,
- 状态码200,状态码的描述OK
- 响应头就是一些常见的响应名对应的响应值
- 响应参数就是我们真正需要的从数据库中取出的数据
3.HTTP 与 HTTPS 的区别
4.常用的HTTP状态码
- 200 请求成功
- 301 请求资源永久重定向;302 请求资源临时重定向;303 表示请求资源存在其它URL,应该使用
- get方法获取。对于301、302、303浏览器会主动删除报文体发起get请求
- 400 请求报文存在错误;401 请求需要认证;403 访问请求被拒绝;404 未找到请求的资源
- 500 服务器执行请求出错;501 服务器不支持请求的某个功能;503 服务器正处于停机维护,无法
处理请求。
5.HTTP的短连接和长连接
- 在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立
一次连接,但任务结束就中断连接。 - HTTP1.1规定了默认保持长连接(也为持久连接),数据传输完成了,但是TCP连接不断开,等待
在同域名下继续用这个通道传输数据;HTTP协议的长连接和短连接,实质上是TCP协议的长连接和
短连接。
6.一次完整的HTTP请求包括那些步骤?
- 建立TCP连接(三次握手);
- web浏览器向服务器发送请求行
- web浏览器发送请求头
- web服务器应答;
- web服务器发送应答头;
- Web服务器向浏览器发送数据;
- web服务器关闭连接;
十二.GET和POST区别
HTTP中的基本方法
HTTP的工作方式是客户端与服务器之间 的请求-应答协议。
HTTP协议中定义了浏览器和服务器进行交互的不同方法,基本方法有4种,分别是GET(查),POST
(增),PUT(更新),DELETE(删除)。
GET和POST区别:
- 安全性:GET请求不安全,数据被放在请求的URL中;POST请求较安全,数据放在请求体中;但
GET请求也是可以携带request body,POST请求也可以携带URL参数。 - 长度限制:因为GET请求数据被放在请求的URL中,但这个URL请求是有限制的,最多2048字节,
HTTP协议对于请求长度是没有限制的,浏览器或服务器对其限制防止恶意请求。;POST请求不存
在大小限制。 - 效率:GET的执行效率比POST更好。form的默认提交方式是GET。
GET产生一个TCP数据包;POST产生两个TCP数据包。
GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
POST方式的请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器
响应200ok(返回数据)。
十三.什么是对称加密与非对称加密?
- 对称加密:指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是如何安全地将密钥
发给对方;不安全,但速度快。 - 非对称加密:指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。
发送密文的一方使用公钥进行加密处理,接收到加密信息后使用私钥进行处理。很安全,但速度
慢。
十四.什么是HTTP2?
- HTTP1的主要问题就是慢。
在 HTTP1 中浏览器限制了同一个域名下的请求数量,当在请求很多资源的时候,由于队头阻塞当
浏览器达到最大请求数量时, 剩余的资源需等待当前的六个请求完成后才能发起请求。 - HTTP2 可以提高了网页的性能。
- HTTP2 中引入了多路复用的技术,这个技术可以只通过一个 TCP 连接就可以传输所有的请求
数据。多路复用可以绕过浏览器限制同一个域名下的请求数量的问题,进而提高了网页的性
能。 - HTTP2 使用了压缩头部的方法,在客户端和服务器端会使用并且维护「首部表」来跟踪和存
储之前发送的键值对,对于相同的头部,不必再通过请求发送,只需发送一次。 - HTTP2使用了二进制分帧的技术。在应用层和运输层之间增加了一个二进制分帧层,将所有
传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码。
十五.什么是Socket?
Socket(套接字)在java中其实主要就是一个基于TCP/IP网络编程的一个接口。属于应用层和网络层
之间的一个抽象层。Socket建立的连接是长连接,客户端和服务端需要相互建立连接,一般建立起连接
不会主动断掉。
Socket和HTTP连接的区别和应用场景
Socket连接是长连接,一般连接后不会主动断掉。适用场景:网络游戏、银行持续交互、直播等。
HTTP连接是短连接,即客户端向服务端发送请求,服务端响应后即会断开连接,等待下次连接。适用场
景:电商、互联网服务、网站等
十六.什么是Cookie?
HTTP协议本身是无状态的,即服务器无法判断用户身份。
Cookie是保存在浏览器上的key-value格式的用户相关的信息。
客户端向服务器发起请求,如果服务器需要记录用户状态,会使用response向客户端颁发一个Cookie,
浏览器会把Cookie保存起来,当再次请求该网站时,浏览器会把请求的网址和Cookie一同提交给服务
器,服务器检查Cookie来辨认用户身份。
十七.什么是Session?
Session是保存在服务器上的用户相关信息。
session是依赖Cookie实现的。session是浏览器和服务器会话过程中,服务器分配的一块储存空间。服
务器会为浏览器在Cookie中设置sessionid,在浏览器传输Cookie包含sessionid请求服务器时,服务器
会根据sessionid取出保存在Session中的信息。
- cookie与session的区别?
存储位置和安全性:cookie存储在浏览器,不安全;session存储在服务器中,安全性高。
存储空间:单个cookie保存的数据不能超过4K,浏览器限制一个站点最多保存20个Cookie;
session存储无限制。
占用服务器资源:session存储在服务器端,当访问增多,会占用服务器资源。 - 如果客户端禁止 cookie 能实现 session 还能用吗?
因为Session是用Session ID来确 定当前对话所对应的服务器Session,而Session ID是通过Cookie来传
递的,禁用Cookie相当于失去了Session ID,也就得不到Session了。
假定用户关闭Cookie的情况下使用Session,其实现途径有以下几种:
手动通过URL传值、隐藏表单传递Session ID。
用文件、数据库等形式保存Session ID,在跨页过程中手动调用。 - Token
Token的引入:客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,
判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录
后,服务器生成一个Token便将此Token返回给客户端,以 后客户端只需带上这个Token前来请求数据
即可,无需再次带上用户名和密码。
使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数 据库,使服务器更加健
壮。
session与token区别 - session机制存在服务器压力增大,CSRF跨站伪造请求攻击,扩展性不强等问题;
- session存储在服务器端,token存储在客户端
- token提供认证和授权功能,作为身份认证,token安全性比session好;
- session这种会话存储方式方式只适用于客户端代码和服务端代码运行在同一台 服务器上,token
适用于项目级的前后端分离
以上是关于面试前,花20min去复习一些网络知识,我拿到了3家大厂offer的主要内容,如果未能解决你的问题,请参考以下文章
面试前,花20min去复习一些网络知识,我拿到了3家大厂offer
朋友去华为面试,轻松拿到26K的Offer,羡慕了......