1.网络分层结构及其必要性
五层体系结构:
七层结构:
- 应用层:网络服务与最终用户的一个接口,常见的协议有:HTTP FTP SMTP SNMP DNS.
- 表示层:数据的表示、安全、压缩。,确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。
- 会话层:建立、管理、终止会话,对应主机进程,指本地主机与远程主机正在进行的会话.
- 传输层:定义传输数据的协议端口号,以及流控和差错校验,协议有TCP UDP.
- 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择,协议有ICMP IGMP IP等.
- 数据链路层:在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路。
- 物理层:建立、维护、断开物理连接。
TCP/IP 四层模型
上面三层与五层相同,最后一层对应五层的物理层和数据链路层
2. 三次握手(运输层的实现 建立应用进程间的TCP连接)
三次握手过程:
- 一开始,TCP服务器进程首先创建传输控制块,用来存储TCP连接中的重要信息。之后,TCP服务器进入监听状态。
- TCP客户进程首先创建传输控制块,然后主动向TCP服务器发送连接请求报文段,并进入同步已发送状态。(SYN=1表示该报文段为请求建立连接的的报文段;seq=x表示TCP客户进程所选择的初始序号)
- TC服务器进程发送TCP连接请求确认报文段,并进入同步已接收状态(SYN=1表示该报文段为同意建立连接的报文段;ACK=1表示确认接受客户端发送的报文段;seq=y表示TCP服务器进程所选择的初始序号,ack=x+1表示对TCP客户进程所选择的初始序号的确认)。
- TCP客户端向TCP服务器进程发送一个普通的TCP确认报文段,并进入连接已建立的状态。(ACK=1表示确认接受TCP服务端发送的报文段;seq=x+1表示TCP客户进程已经消耗一个序号,这是下一个要消耗的序号;ack=y+1表示对TCP服务器进程所选择的初始序号的确认)(注意:该条报文段没有SYN字段,若该报文段不携带数据,则下一次,客户端发送报文段时候,序号仍然为seq=x+1)
- TCP服务器进程收到报文段后,进入连接已建立状态。现在,两个进程之间可以基于已建立好的TCP连接进行可靠传输。
注意:TCP规定SYN=1的报文段,不能携带数据,但要携带一个序号
各个字段的意思:
3. 两次握手可以吗?
第三次握手主要为了防止在网络中因某些原因滞留过久的连接请求报文段突然传输到了服务端,TCP服务器进程会误认为这是TCP客户进程发起了一个新的TCP连接请求,于是,TCP服务器发送tcp连接请求确认报文段,并进入连接已建立状态,因为TCP客户端处于关闭状态,这就导致TCP服务器进程一直等待TCP客户进程发来数据,这就白白浪费TCP服务器进程所在主机的很多资源。
4. 四次挥手(运输层的实现 释放应用进程间的TCP连接)
步骤如下:
- TCP客户进程的应用进程通知其主动关闭TCP连接。TCP客户进程会发送TCP连接释放报文段,并进入终止等待1状态(FIN=1表示该报文段为请求释放连接报文段;ACK=1表示确认TCP服务端发送的报文段;seq=u表示TCP客户进程之前已传送过的最后一个报文段的序号加一;ack=v表示TCP客户进程之前已收到的最后一个TCP服务器报文段的序号加一)
- TCP服务器进程收到后,发送一个TCP确认报文段,并进入关闭等待状态。(ACK=1表示确认TCP服务端发送的报文段;seq=v表示TCP服务器进程之前发送的数据的最后一个字节加一;ack=u+1表示对之前TCP客户进程发送的报文段的确认)
- TCP服务器进程通知TCP客户进程,此时,从TCP客户进程到TCP服务器进程方向的连接就释放了。
- TCP客户进程收到TCP确认报文段后,进入终止等待2状态。
- 若使用TCP服务器进程的TCP客户进程没有数据要发送了,应用进程就通知TCP服务器进程释放连接,为被动关闭连接。TCP服务器进程发送TCP连接释放报文段并进入最后确认状态。
- TCP客户进程收到后,发送TCP确认报文段,进入时间等待状态。
- TCP服务器进程收到后,进入关闭状态。
- 等待2MSL后(可根据实际情况改变),TCP客户进程进入关闭状态。
注意:(1)FIN=1的报文段即使不携带数据,也要消耗掉一个序号;
(2)最后一个报文段的序号加一 可以这样说 —— 已发送的或者已收到的数据的最后一个字节加一,这也是最新的序号,这个最新序号(ack、seq)用于确认或者发送报文段。
5. 第四次挥手为什么要等待2MSL?
-
保证TCP客户发送的最后一个ACK报文段能够到达TCP服务器。这个ACK报文段有可能丢失,TCP服务器 收不到这个确认报文,就会超时重传连接释放报文段,然后 TCP客户 可以在2MSL时间内收到这个重传的连接释放报文段,接着 TCP客户 重传一次确认,重新启动2MSL计时器,最后 二者 都进入到CLOSED状态。 若TCP客户在TIME-WAIT状态不等待一段时间,而是发送完ACK报文段后立即释放连接,则无法收到 TCP服务器 重传的连接释放报文段,所以不会再发送一次确认报文段,TCP服务器就无法正常进入到CLOSED状态。就造成了网络资源的浪费。
-
防止已失效的连接请求报文段出现在本连接中。A在发送完最后一个ACK报文段后,再经过2MSL,就可以使这个连接所产生的所有报文段都从网络中消失,使下一个新的TCP连接中不会出现旧的连接请求报文段。
6. 为什么是四次挥手?
7. TCP有哪些特点?
- TCP是面向连接的运输层协议。
- 点对点,每一条TCP连接只能有两个端点。
- TCP向上层提供可靠传输的服务。
- TCP通信方式是全双工通信。
- 面向字节流(TCP将应用进程交付下来的数据块看成一串比特流)。
8. 说说TCP报文首部有哪些字段,其作用又分别是什么?
- 16位端口号:源端口号,主机该报文段是来自哪里;目标端口号,要传给哪个上层协议或应用程序
- 32位序号:一次TCP通信(从TCP连接建立到断开)过程中某一个传输方向上的字节流的每个字节的编号。
- 32位确认号:用作对另一方发送的tcp报文段的响应。其值是收到的TCP报文段的序号值加1。
- 4位头部长度:表示tcp头部有多少个32bit字(4字节)。因为4位最大能标识15,所以TCP头部最长是60字节。
- 6位标志位:URG(紧急指针是否有效),ACk(表示确认号是否有效),PSH(缓冲区尚未填满),RST(表示要求对方重新建立连接),SYN(建立连接消息标志接),FIN(表示告知对方本端要关闭连接了)
- 16位窗口大小:是TCP流量控制的一个手段。这里说的窗口,指的是接收通告窗口。它告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。
- 16位校验和:由发送端填充,接收端对TCP报文段执行CRC算法以检验TCP报文段在传输过程中是否损坏。注意,这个校验不仅包括TCP头部,也包括数据部分。这也是TCP可靠传输的一个重要保障。
- 16位紧急指针:一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一字节的序号。因此,确切地说,这个字段是紧急指针相对当前序号的偏移,不妨称之为紧急偏移。TCP的紧急指针是发送端向接收端发送紧急数据的方法。
9. TCP和UDP的区别?
10. TCP 和 UDP 分别对应的常见应用层协议有哪些?
11. 说下TCP的滑动窗口机制(流量控制)
- 概念:让发送方的发送速率不要太快,要让接收方来得及接受
- 实现方法:利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
- 具体实现:TCP会话的双方都各自维护一个发送窗口和一个接收窗口。接收窗口大小取决于应用、系统、硬件的限制。发送窗口则取决于对端通告的接收窗口。接收方发送的确认报文中的window字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将接收方的确认报文window字段设置为 0,则发送方不能发送数据。
12. 详细讲一下拥塞控制?(拥塞控制)
- 慢开始:把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。每经过一个传输轮次,拥塞窗口 cwnd 就加倍。 为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量。
当 cwnd < ssthresh 时,使用慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。 - 拥塞避免:让拥塞窗口cwnd缓慢地增大,每经过一个传输轮次,就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长。
无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认,引起超时重传),就要把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。 - 快重传:当某个发送方发送的报文丢失,要使发送方尽快进行重传,而不是等超时重传计时器超时再重传。
这样一来,发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,发送方不会发现超时重传,不会误认为拥塞。上图中可以看到,超时重传时间RTO大于立即重传所需时间。 - 快恢复:发送方收到三个重复确认后,知道只是丢失了个别的报文段,于是不启动慢开始算法,而是执行快恢复算法。具体过程为:1. 发送方将开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半;2. 然后开始执行拥塞避免算法。(也有的快恢复算法是在快恢复开始时候,把cwnd值增大一些,cwnd=ssthresh+3)
cwnd:发送方维护的一个变量,取决于网络的拥塞程度动态变化。(没出现网络拥塞就增大,出现了就减少)。
swnd:发送方将拥塞窗口作为发送窗口swnd,即 swnd = cwnd
ssthresh:慢开始门限。
当 cwnd < ssthresh 时,使用慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。
判断网络拥塞:是否引起发送方的超时重传
18. POST和GET的区别?
- GET因为参数会放在url中,所以隐私性,安全性较差,请求的数据长度是有限制的,不同的浏览器和服务器不同,一般限制在 2~8K 之间,更加常见的是 1k 以内;POST请求是没有的长度限制,请求数据是放在body中;。
- GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把请求头和请求体一并发送出去;而对于POST,浏览器先发送请求头,服务器响应100 continue,浏览器再发送请求体。
- GET请求会被浏览器主动缓存(web缓存),而POST不会,除非手动设置。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
19. URI和URL的区别
- URI,全称是Uniform Resource Identifier),中文翻译是统一资源标志符,主要作用是唯一标识一个资源。
- URL,全称是Uniform Resource Location),中文翻译是统一资源定位符,主要作用是提供资源的路径。
13. HTTP协议的特点?
- HTTP允许传输任意类型的数据。传输的类型由Content-Type加以标记。
- 无状态。对于客户端每次发送的请求,服务器都认为是一个新的请求,上一次会话和下一次会话之间没有联系。
- 支持客户端/服务器模式(c/s)。
14. HTTP报文格式
- HTTP请求报文由请求行、请求头部、空行和请求体四个部分组成。
(1)请求行:包括请求方法,访问的资源URL,使用的HTTP版本。
(2)请求头:格式为“属性名:属性值”,服务端根据请求头获取客户端的信息
(3)请求体:用户的请求数据如用户名,密码等。
请求报文示例:
- HTTP响应报文也由四个部分组成,分别是:状态行、响应头、空行和响应体。
(1)状态行:协议版本,状态码及状态描述。
(2)响应头:响应头字段主要有connection、content-type、content-encoding、content-length、set-cookie、Last-Modified,、Cache-Control、Expires。
(3)响应体:服务器返回给客户端的内容。
响应报文示例:
15. HTTP状态码有哪些?
16. HTTP 协议包括哪些请求?
- GET:向特定的资源发出请求。
- POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。(POST请求可能会导致新的资源的创建和/或已有资源的修改)。
- HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
- PUT:向指定资源位置上传其最新内容。
- DELETE:请求服务器删除Request-URI所标识的资源。
- TRACE:回显服务器收到的请求,主要用于测试或诊断。
- CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
- OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。
17. HTTP状态码301和302的区别?
- 301:(永久性转移)请求的网页已被永久移动到新位置。
- 302:(暂时性转移)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。(意思是服务器中的原网页位置改变,但请求者需要使用原网页位置来请求网页)
20. 如何理解HTTP协议是无状态的
当浏览器第一次发送请求给服务器时,服务器响应了;如果同个浏览器发起第二次请求给服务器时,它还是会响应,但是呢,服务器不知道你就是刚才的那个浏览器。简言之,服务器不会去记住你是谁,所以是无状态协议。
21. HTTP长连接和短连接?
- HTTP短连接:浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。HTTP1.0默认使用的是短连接。
- HTTP长连接:指的是复用TCP连接。多个HTTP请求可以复用同一个TCP连接,这就节省了TCP连接建立和断开的消耗。
22. HTTP 如何实现长连接?
通过在头部(请求和响应头)设置Connection字段指定为keep-alive,HTTP/1.0协议支持,但是是默认关闭的,从HTTP/1.1以后,连接默认都是长连接。
23. HTTP长连接在什么时候会超时?
HTTP一般会有httpd守护进程,里面可以设置keep-alive timeout,当tcp连接闲置超过这个时间就会关闭,也可以在HTTP的header里面设置超时时间。
TCP 的keep-alive包含三个参数,支持在系统内核的net.ipv4里面设置;当 TCP 连接之后,闲置了tcp_keepalive_time,则会发生侦测包,如果没有收到对方的ACK,那么会每隔 tcp_keepalive_intvl再发一次,直到发送了tcp_keepalive_probes,就会丢弃该连接。
24. HTTP1.1和 HTTP2.0的区别?
HTTP2.0相比HTTP1.1支持的特性:
- 面向二进制格式:HTTP1.1 基于文本格式传输数据;HTTP2.0采用二进制格式传输数据,解析更高效。
- 多路复用:在一个连接里,允许同时发送多个请求或响应,并且这些请求或响应能够并行的传输而不被阻塞,避免 HTTP1.1 出现的”队头堵塞”问题。
- 头部压缩:HTTP1.1的header带有大量信息,而且每次都要重复发送;HTTP2.0 把header从数据中分离,并封装成头帧和数据帧,使用特定算法压缩头帧,有效减少头信息大小。并且HTTP2.0在客户端和服务器端记录了之前发送的键值对,对于相同的数据,不会重复发送。
- 服务端推送:HTTP2.0允许服务器向客户端推送资源,无需客户端发送请求到服务器获取。
注意:
(1)队头阻塞:指在HTTP/1.1中,由于使用了串行的请求和响应机制(一对请求和响应的串行),当一个请求在传输过程中出现阻塞时,后续的所有请求都必须等待该请求完成后才能继续传输。
25. HTTPS与HTTP的区别?
- HTTP是超文本传输协议,信息是明文传输;HTTPS则是具有安全性的ssl加密传输协议。
- HTTP和HTTPS用的端口不一样,HTTP端口是80,HTTPS是443。
- HTTPS协议需要到CA机构申请证书,一般需要一定的费用。
- HTTP运行在TCP协议之上;HTTPS运行在SSL协议之上,SSL运行在TCP协议之上。
注意:
(1)默认端口为 80(443)意思:是指发送方的应用进程在发送HTTP报文或者HTTPS报文时候,应用进程选择的默认端口为80或者443。
27. HTTPS原理
-
HTTPS 的工作原理如下(TLS握手过程):
(1) 客户端向服务器端打招呼,发送给服务器端自己支持的TLS版本和加密套件,同时生成第一个随机数发送给服务器端。
(2)服务端回应。服务端确认支持的TLS版本及选择的加密套件(服务器端选择加密套件),同时生成第二个随机数,发送给客户端。接着服务端还把证书和公钥发送给客户端。
(3)客户端都收到后,客户端生成第三个随机数(预主密钥),并且用刚刚收到的公钥对预主密钥加密后再发送给服务器端。
(4)服务端收到加密后的预主密钥后,用自己的私钥进行解密。(此时只有客户端和服务器端知道预主密钥)
(5)客户端和服务器端都能通过 第一随机数、第二随机数、预主密钥 三者生成会话密钥。(客户端和服务器端的预主密钥相同) -
注意:
(1)前面的步骤都是非对称加密,为了得到会话密钥。后面的话,客户端和服务器端只使用会话密钥进行对称加密。
32. 什么是对称加密和非对称加密?
- 对称加密:发送方使用密钥对数据进行加密,接收方使用同样的密钥对数据进行解密。由于加密和解密使用同样的密钥,因此对称加密的加密和解密速度都很快,但是密钥的安全性需要保证,如果密钥被泄露,加密的数据也会被破解。常见的对称加密有AES和DES等。
- 非对称加密:是指加密和解密使用不同的密钥。在非对称加密中,发送方使用接收方的公钥对数据进行加密,接收方使用自己的私钥对数据进行解密。由于加密和解密使用不同的密钥,因此非对称加密的安全性更高,但是加密和解密的速度比对称加密要慢。(也可以通过私钥加密,公钥解密。只是不常用,公钥是共有的,也就是所有人都能解密数据)常见的非对称加密算法有RSA、DSA等。
26. 什么是数字证书?
- 概念:数字证书是一种用于验证网络通信方身份的电子证书,也称为公钥证书或SSL证书。数字证书由数字证书颁发机构(CA)颁发,用于证明一个实体的身份,例如网站、服务器等。
- 用处:当客户端与服务器建立安全连接时,服务器会将自己的数字证书发送给客户端,客户端通过验证数字证书的真实性和完整性,来确认服务器的身份和公钥。如果数字证书验证通过,客户端就可以使用服务器的公钥来加密数据,保证数据的机密性和完整性。
43. HTTP2/HTTP3的特性?
- HTTP2的新特性
(1)二进制格式:HTTP1的解析是基于文本格式的,HTTP2的解析是基于二进制格式的,效率更高。
(2)帧与双向数据流:同时HTTP2引入帧和流的概念;帧就是HTTP2通信的最小消息单位,报文被分割为多个帧;”流概念“是存在于连接中的双向的虚拟通道,帧可以在拥有整数标识的流上进行双向传输,一个连接可以承载任意数量的流,所以多个帧之间可以乱序发送,根据帧首部的流标识重新组装。
(3) 多路复用:HTTP1想要并发多个请求只能起多个TCP连接,而且浏览器对单个域名还有TCP连接数量的限制,HTTP2拥有流和帧后单个连接上就可以并发进行多个请求和响应,避免了HTTP1中的队头阻塞问题,极大地提升了性能。
(4)头部压缩:HTTP1的头字段太长了,而且每次都重复发送,非常浪费带宽,HTTP2使用特别的算法在客户端和服务端建立字典记录之前发送的键值对,这样就能用索引号代替重复字符串,压缩效率极高。
(5)服务端推送:HTTP1中服务端需要等待客户端请求才能被动响应,而HTTP2.0是允许服务端向客户端主动推送的。
注意:HTTP/2 必须使用 HTTPS,而 HTTPS 使用的 TLS 协议存在队头阻塞问题。并且TCP本身也存在队头阻塞问题。 - HTTP3的新特性
(1)相比HTTP2的优化:HTTP2使用流和帧的概念实现了多路复用,但并未完全解决队头阻塞问题,因为TCP本身也存在队头阻塞问题,并且HTTP/2 必须使用 HTTPS,而 HTTPS 使用的 TLS 协议存在队头阻塞问题。1. HTTP3运行在QUIC协议,QUIC协议基于UDP协议,并且实现了类似TCP的可靠传输,而且如果某个流丢包只会阻塞这个流而不会阻塞其他流。2. 实现了快速握手功能(避免了三次握手建立TCP连接和TLS握手)。
(2)QUIC 内含了 TLS1.3,只能加密通信,支持 0-RTT 快速建连;
28. DNS 的解析过程?
- 一共有两种查询方式:递归查询 和 迭代查询
(1)递归查询
(2)迭代查询
注意:由于递归查询对于被查询的域名服务器负担太大,通常采用以下模式:从请求主机到本地域名服务器的查询是递归查询,而其余的查询是迭代查询。
29. 浏览器中输入URL返回页面过程?
- 解析域名,找到主机 IP。
- 浏览器利用 IP 直接与网站主机通信,三次握手,建立 TCP 连接。浏览器会以ip地址和端口向服务器发起TCP 的连接。
- 建立 TCP 连接后,浏览器向主机发起一个HTTP请求。
- 服务器响应请求,返回响应数据。
- 浏览器解析响应内容,进行渲染,呈现给用户。
30. 什么是cookie和session?
- cookie: 当浏览器进程初次向服务器进程发送请求报文时,服务器进程会为其产生一个唯一Cookie识别码,发送响应报文时候,会带有 Set-Cookie:xxx(cookieId) 首部行,浏览器就把Cookie信息在本地特定文件中加一行,记录该服务器的域名和识别码。此后,浏览器进程再次发送请求时,都会从Cookie文件中取出该网站的Cookie识别码,放到请求报文的首部行中。服务器可根据Cookie识别码识别该用户,并返回该用户的个性化网页。
- session: session实现 通常是基于 Cookie 技术的。当用户第一次访问网站时,服务器会为该用户创建一个唯一的 Session ID,并将该 ID 存储在服务器端的内存或数据库中。同时,服务器会在响应报文中设置一个 Set-Cookie 头部字段,该字段包含了 Session ID 和一些其他的信息,如过期时间、域名、路径等。浏览器会将该 Cookie 信息保存在本地,以后每次向该服务器发送请求时,都会携带该 Cookie 信息,服务器就可以根据该信息识别该用户,并将用户的状态信息保存在 Session 中。
31. cookie和session的区别?
- cookie保存在客户端,session保存在服务端
- cookie作用于他所表示的path中(url中要包含path),范围较小。session代表客户端和服务器的一次会话过程,web页面跳转时也可以共享数据,范围是本次会话,客户端关闭也不会消失。会持续到我们设置的session生命周期结束(默认30min)
- 我们使用session需要cookie的配合。cookie用来携带JSESSIONID
- cookie存放的数据量较小,session可以存储更多的信息。
- cookie由于存放在客服端,相对于session更不安全
- 由于session是存放于服务器的,当有很多客户端访问时,肯定会产生大量的session,这些session会对服务端的性能造成影响。
33. 说说 WebSocket与socket的区别
- WebSocket从满足基于Web的日益增长的实时通信需求应运而生,WebSocket 同 HTTP 一样也是应用层的协议,但是它是一种双向通信协议,是建立在 TCP 之上的。而Socket不是一个协议,而是为了方便使用 TCP 或 UDP 而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。
34. ARP协议的工作过程?
- 第一步,主机B知道C的IP地址,想要给C发送数据包,但是在封装MAC帧时(数据链路层),不知道C的MAC地址(目的MAC地址),故无法填写目的MAC地址。
- 第二步,实际上,每个主机都有ARP高速缓存表,所以主机B会在自己的ARP高速表中查找C对应的MAC地址。
- 第三步,主机B没有找到,就以广播形式发送ARP请求报文的广播帧(封装在MAC帧中,目的地址为FF-FF-FF-FF-FF-FF).
- 第四步,主机A收到后,发现询问的IP地址不是自己,就不予理会。主机C收到后,发现询问的IP地址是自己,首先把主机B的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后给B发送ARP响应单播帧(封装在MAC帧中,目的地址为B第MAC地址)告诉主机B,主机C的MAC地址是什么。
- 第五步,主机A收到后,单播帧的目的地址与自己MAC地址不对应,则不予理会。主机C收到该单播帧后,发现目的地址与自己的MAC地址对应,则接受该单播帧,将C的主机IP地址和MAC地址记录到自己的ARP高速缓存表中。现在,主机B可以给主机C发送想要发送的数据包了。
35. ICMP协议的功能?
- 功能:ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。它属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。 比如我们日常使用得比较多的ping,就是基于ICMP的。
36. 什么是DoS、DDoS、DRDoS攻击?
- DOS(Denial of Service):翻译过来就是拒绝服务,DOS攻击通常是通过向目标系统发送大量的请求或数据包,占用目标系统的资源,导致系统崩溃或无法正常工作。
- DDoS(Distributed Denial of Service):分布式拒绝服务,处于不同位置的多个攻击者同时向一个或几个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对目标系统同时实施攻击。常见的DDos有SYN Flood、Ping of Death、ACK Flood、UDP Flood等。
- DRDoS(Distributed Reflection Denial of Service):分布式反射拒绝服务,DRDoS攻击通常是由一个或多个攻击者发起的,攻击者通过控制大量的僵尸主机(也称为“肉鸡”),向目标系统发送大量的请求或数据包,占用目标系统的带宽和处理能力。攻击者还会利用一些网络协议的漏洞,将攻击流量反射到目标系统上,从而放大攻击效果。
注意:
(1)DRDos将攻击流量反射到目标系统上 什么意思?
DRDoS攻击利用了一些网络协议的漏洞,攻击者向这些网络协议的服务器发送特定的请求,这些请求会被服务器自动转发到目标系统上,从而将攻击流量反射到目标系统上。由于攻击流量经过了反射,攻击者的真实IP地址被隐藏,目标系统无法识别攻击来源,从而无法阻止攻击。
37. 什么是CSRF攻击,如何避免
- 什么是CSRF攻击?
(1) CSRF攻击(Cross-Site Request Forgery):称为“跨站请求伪造”攻击。攻击者通过某种方式,诱导用户在已登录的网站上执行恶意操作,从而实现攻击目的。CSRF攻击通常是通过伪造用户的请求,向目标网站发送恶意请求,从而实现攻击。
(2)CSRF攻击 举例:例如,攻击者可以构造一个恶意网页,其中包含一个隐藏的表单,当用户访问该网页时,表单会自动提交,向目标网站发送伪造的请求,从而实现攻击。 - 如何避免?
(1)验证HTTP Referer字段:验证HTTP Referer字段,确保请求来自合法的来源。(该字段可伪造,不可靠)
(2)使用CSRF Token:为每个用户生成一个唯一的CSRF Token,目标网站会验证CSRF Token的有效性,确保请求来自合法的用户。
38. 什么是XSS攻击?如何避免?
- 什么是XSS攻击?
(1)XSS 跨站脚本攻击(Cross-Site Scripting):指的是攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到攻击用户的特殊目的。XSS攻击一般分三种类型:存储型 、反射型 、DOM型XSS。 - 如何避免?
(1)对用户输入进行过滤和转义,确保用户输入的内容不包含恶意脚本代码。(可以使用HTML编码对用户输入的内容进行转义,从而防止恶意脚本代码在用户浏览器中执行。)
(2)使用CSP(Content Security Policy),限制网页中可以执行的脚本代码,从而防止XSS攻击
(3)对于链接跳转,如<a href=“xxx” 等,要校验内容,禁止以script开头的非法链接。
(4)使用HTTP Only Cookie:使用HTTP Only Cookie可以禁止JavaScript读取Cookie,从而防止攻击者窃取用户的Cookie。
40. 说下ping的原理
- 什么是ping?
ping,Packet Internet Groper,是一种因特网包探索器,用于测试网络连接是否正常的程序。Ping是工作在TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送ICMP请求报文,测试目的站是否可达及了解其有关状态。 - ping的原理:
一般来说,ping可以用来检测网络通不通。它是基于ICMP协议工作的。假设机器A ping机器B,工作过程如下:
(1)ping 命令执行的时候,源主机首先会构建一个 ICMP 请求数据包。
(2)将该数据包和目标机器B的IP地址打包,一起转交给IP协议层。IP层协议将本机IP地址为源地址,机器B的IP地址为目标地址,加上一些其他的控制信息,构建一个IP数据包
(3)主机A在数据链路层通过ARP协议获取目标主机B的MAC地址,构建一个数据帧,目的地址目的主机的MAC地址,源地址是本机的MAC地址
(4)机器B收到后,对比目的主机地址,和自己本机的MAC地址是否一致,符合就处理返回,不符合就丢弃。
(5)主机A根据目的主机B返回的ICMP回送回答报文中的时间戳,从而计算出往返时间
(6)主机A的最终显示结果有这几项:发送到目的主机的IP地址、发送 & 收到 & 丢失的分组数、往返时间的最小、最大& 平均值
41. 简述DNS劫持
DNS劫持指攻击者篡改结果,使用户对域名的解析IP变成了另一个IP。
42. Put与Delete区别
- Put规定默认为更新某一资源,和Post一样,一般该操作会对服务器资源进行改变
- Delete规定默认为删除某一资源,和Post一样,一般该操作会对服务器资源进行改变
44. TCP的粘包和拆包
- 概念
(1) 粘包:指发送方在发送数据时,由于数据包的大小小于TCP缓冲区的大小,导致多个数据包被合并成一个数据包发送,接收方在接收数据时需要进行拆包操作,才能得到正确的数据。
(2)拆包:指发送方在发送数据时,由于数据包的大小大于TCP缓冲区的大小,导致一个数据包被拆分成多个数据包发送,接收方在接收数据时需要进行粘包操作,才能得到正确的数据。 - 解决方法
(1)发送端将每个数据包封装为固定长度(接受方按照该长度进行接受和处理)
(2)在数据尾部增加特殊字符进行分割(接收方根据分隔符将数据包正确拆分)
(3)将数据分为两部分,一部分是头部,一部分是内容体。其中头部结构大小固定,且有一个字段声明内容体的大小。(接收方在接收数据时,先接收消息头,根据消息头中的长度信息接收消息体)
45. 说说TCP是如何确保可靠性的呢?
- TCP的连接是基于三次握手,而断开则是基于四次挥手。确保连接和断开的可靠性。
- TCP的可靠性,还体现在有状态;TCP会记录哪些数据发送了,哪些数据被接收了,哪些没有被接受,并且保证数据包按序到达,保证数据传输不出差错。
- TCP的可靠性,还体现在可控制。它有数据包校验、ACK应答、超时重传(发送方)、失序数据重传(接收方)、丢弃重复数据、流量控制(滑动窗口)和拥塞控制等机制。